Fights can now ends

This commit is contained in:
Anonymus Raccoon
2020-04-22 11:49:09 +02:00
parent 69c4a77db0
commit 9e04461986
3 changed files with 21 additions and 4 deletions
+1
View File
@@ -14,6 +14,7 @@
struct combat_manager {
gc_system base;
gc_scene *game_scene;
struct enemy *current_enemy;
};
extern const struct combat_manager combat_manager;
+19 -4
View File
@@ -37,7 +37,7 @@ void combat_start(gc_engine *engine, char *enemy_name)
|| (enemy_name && !my_strcmp(enemy_name, enemy->name)))
break;
}
if (enemy)
if ((this->current_enemy = enemy))
prefab_load(engine, enemy->prefab_src);
}
@@ -55,6 +55,17 @@ void entity_moved(gc_engine *engine, va_list args)
combat_start(engine, NULL);
}
void dialog_ended(gc_engine *engine, va_list args)
{
struct combat_manager *this = GETSYS(engine, combat_manager);
if (!this->current_enemy)
return;
engine->trigger_event(engine, "combat_ended", this->current_enemy);
this->current_enemy = NULL;
engine->change_scene(engine, this->game_scene);
this->game_scene = NULL;
}
static void update_entity(gc_engine *engine, void *system, gc_entity *entity, \
float dtime)
@@ -84,13 +95,17 @@ static void ctr(void *system, va_list list)
this->game_scene = NULL;
engine->add_event_listener(engine, "entity_moved", &entity_moved);
engine->add_event_listener(engine, "dialog_ended", &dialog_ended);
}
static void dtr(void *system, gc_engine *engine)
{
struct combat_manager *sys = system;
if (sys->game_scene)
scene_destroy(sys->game_scene);
struct combat_manager *this = system;
engine->remove_event_listener(engine, "entity_moved", &entity_moved);
engine->remove_event_listener(engine, "dialog_ended", &dialog_ended);
if (this->game_scene)
scene_destroy(this->game_scene);
}
const struct combat_manager combat_manager = {
+1
View File
@@ -121,4 +121,5 @@ void dialog_next(gc_engine *engine)
prefab_destroy(scene, this->dialog_id);
this->dialog_id = -1;
controllable_set_can_move(scene, true);
engine->trigger_event(engine, "dialog_ended");
}