From e8bac0eeab562eb1c484a6b05f1263f5c2966a35 Mon Sep 17 00:00:00 2001 From: Shariq Shah Date: Mon, 20 Apr 2020 17:34:17 +1000 Subject: [PATCH] Reworked underlying implementation for turret's scanning --- assets/entities/turret.symtres | 1 + assets/scenes/scene_1.symtres | 2 +- assets/scenes/scene_2.symtres | 729 +++++++++++++++++++++++++++++++++ src/common/version.h | 2 +- src/game/editor.c | 5 +- src/game/enemy.c | 20 +- src/game/entity.h | 1 + todo.txt | 3 - 8 files changed, 748 insertions(+), 15 deletions(-) create mode 100644 assets/scenes/scene_2.symtres diff --git a/assets/entities/turret.symtres b/assets/entities/turret.symtres index 3c61a54..357c2cd 100644 --- a/assets/entities/turret.symtres +++ b/assets/entities/turret.symtres @@ -12,6 +12,7 @@ Entity muzzle_light_intensity_min : 1 turn_speed_when_targetting : 50.0000 max_yaw : 60.0000 + default_yaw : 0.000 position : 0.000 3.000 0.000 flags : 1 enemy_type : 0 diff --git a/assets/scenes/scene_1.symtres b/assets/scenes/scene_1.symtres index 840c833..a74a3e2 100755 --- a/assets/scenes/scene_1.symtres +++ b/assets/scenes/scene_1.symtres @@ -13,7 +13,7 @@ Scene_Config background_music_volume : 0.0100 debug_draw_enabled : false debug_draw_mode : 0 - next_scene : test + next_scene : scene_2 ambient_light : 0.100 0.100 0.100 } diff --git a/assets/scenes/scene_2.symtres b/assets/scenes/scene_2.symtres new file mode 100644 index 0000000..56bd30d --- /dev/null +++ b/assets/scenes/scene_2.symtres @@ -0,0 +1,729 @@ +Scene_Config +{ + debug_draw_color : 0.800 0.400 0.100 1.000 + background_music_filename : sounds/scene_background_music_default.ogg + fog_type : 1 + fog_density : 0.1000 + fog_color : 0.310 0.412 0.529 + debug_draw_physics : false + fog_start_distance : 10.0000 + fog_max_distance : 450.0000 + cleanup_func : scene_1_cleanup + init_func : scene_1_init + background_music_volume : 0.0100 + debug_draw_enabled : false + debug_draw_mode : 0 + next_scene : scene_2 + ambient_light : 0.100 0.100 0.100 +} + +Player +{ + type : 2 + scale : 1.000 1.000 1.000 + rotation : 0.000 -0.706 0.000 -0.708 + player_key_mask : 0 + position : 57.000 1.625 8.000 + flags : 1 + player_health : 100 + name : Player + bounding_box_min : -1.500 -1.500 -1.000 + camera_clear_color : 0.310 0.412 0.529 1.000 + bounding_box_max : 1.500 1.500 1.000 +} + +Entity +{ + type : 1 + scale : 1.000 1.000 1.000 + rotation : 0.000 -1.000 0.000 0.000 + position : 57.000 6.000 8.000 + flags : 193 + name : PLAYER_START + archetype : player_start + bounding_box_min : -0.500 -0.500 -0.500 + bounding_box_max : 0.500 0.500 0.500 +} + +Entity +{ + type : 5 + scale : 1.000 1.000 1.000 + inner_angle : 20.0000 + falloff : 1.5000 + light_type : 2 + depth_bias : 0.0005 + rotation : 0.000 0.000 0.000 1.000 + cast_shadow : false + intensity : 1.0000 + color : 0.247 0.533 0.686 + radius : 20.0000 + position : 46.000 5.000 7.000 + flags : 1 + outer_angle : 30.0000 + name : Test_Light + archetype : Spot + bounding_box_min : -0.500 -0.500 -0.500 + pcf_enabled : false + valid : true + bounding_box_max : 0.500 0.500 0.500 +} + +Entity +{ + type : 5 + scale : 1.000 1.000 1.000 + inner_angle : 20.0000 + falloff : 1.5000 + light_type : 1 + depth_bias : 0.0005 + rotation : -0.156 -0.705 -0.150 0.675 + cast_shadow : false + intensity : 0.2500 + color : 0.149 0.314 0.376 + radius : 20.0000 + position : 0.000 11.000 0.000 + flags : 1 + outer_angle : 30.0000 + name : Fill_Light + archetype : fill_light + bounding_box_min : -0.500 -0.500 -0.500 + pcf_enabled : false + valid : true + bounding_box_max : 0.500 0.500 0.500 +} + +Entity +{ + type : 5 + scale : 1.000 1.000 1.000 + inner_angle : 20.0000 + falloff : 0.9500 + light_type : 2 + depth_bias : 0.0005 + rotation : 0.000 0.000 0.000 1.000 + cast_shadow : false + intensity : 1.0000 + color : 1.000 1.000 1.000 + radius : 14.0000 + position : -9.000 6.000 -42.000 + flags : 1 + outer_angle : 30.0000 + name : Test_Light + archetype : spot + bounding_box_min : -0.500 -0.500 -0.500 + pcf_enabled : false + valid : true + bounding_box_max : 0.500 0.500 0.500 +} + +Entity +{ + type : 6 + scale : 32.000 1.000 32.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : floor_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 2.000 0.000 -10.000 + flags : 1 + specular_strength : 62.0000 + name : Floor_Tile + archetype : floor_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 7.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 48.000 6.000 2.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 7.000 3.000 1.000 + material : 0 + rotation : 0.000 0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 17.500 6.000 -20.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 0.000 6.000 -6.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 6.880 2.880 0.880 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 48.000 6.000 14.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 4.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 62.000 6.000 8.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 4.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 34.000 6.000 19.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 34.000 6.000 -1.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 31.000 6.000 -6.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 31.000 6.000 -34.500 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 6.000 6.000 18.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 6.000 6.000 0.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 12.000 6.000 -6.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 11.500 6.000 -34.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 11.500 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : -35.000 6.000 -34.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 6.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 34.000 6.000 35.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 10.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : -32.000 6.000 -6.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 29.000 6.000 24.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 12.000 6.000 24.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 8.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 18.000 6.000 47.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 16.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : -23.000 6.000 16.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 3.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : -23.000 6.000 -28.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 7.500 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : -51.500 6.000 -19.500 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 8.000 3.000 1.000 + material : 0 + rotation : 0.000 0.000 0.000 1.000 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 22.000 6.000 -56.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 6.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 6.000 6.000 -44.500 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 5.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : -23.000 6.000 -43.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 6.000 3.000 1.000 + material : 0 + rotation : 0.000 -0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 6.000 6.000 36.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 6 + scale : 7.000 3.000 1.000 + material : 0 + rotation : 0.000 0.707 0.000 0.707 + diffuse_color : 1.000 1.000 1.000 1.000 + geometry : wall_tile.symbres + specular : 0.4000 + diffuse_texture : white.tga + diffuse : 1.0000 + position : 25.500 6.000 -20.000 + flags : 1 + specular_strength : 62.0000 + name : Wall_Tile + archetype : wall_tile + uv_scale : 0.300 0.200 +} + +Entity +{ + type : 9 + scale : 23.100 8.300 15.400 + rotation : 0.000 0.000 0.000 1.000 + trigger_mask : 1 + position : -38.500 6.000 -61.000 + flags : 1 + trigger_type : 0 + name : Scene_End_Trigger + archetype : trigger + bounding_box_min : -0.500 -0.500 -0.500 + bounding_box_max : 0.500 0.500 0.500 +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 -1.000 0.000 -0.000 + position : 20.500 1.000 24.000 + filename : door_red_green + name : Door +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 0.707 0.000 0.707 + position : 34.000 1.000 8.000 + filename : door + name : Door +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 0.707 0.000 0.707 + position : -46.000 1.000 17.000 + filename : door_red + name : Door +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 0.707 0.000 0.707 + position : 6.000 1.000 9.000 + filename : door_rgb + name : Door +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 0.000 0.000 1.000 + position : 21.000 3.000 34.000 + filename : pickup_key_blue + name : Pickup_Key_Blue +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 0.000 0.000 1.000 + position : -8.000 3.000 39.000 + filename : pickup_key_green + name : Pickup_Key_Green +} + +Scene_Entity_Entry +{ + scale : 1.000 1.000 1.000 + rotation : 0.000 0.000 0.000 1.000 + position : 21.000 3.000 -45.000 + filename : pickup_key_red + name : Pickup_Key_Red +} + diff --git a/src/common/version.h b/src/common/version.h index fce465d..6f98ec0 100755 --- a/src/common/version.h +++ b/src/common/version.h @@ -4,7 +4,7 @@ /* Auto generated version file. DO NOT MODIFY */ #define SYMMETRY_VERSION_MAJOR 0 #define SYMMETRY_VERSION_MINOR 3 -#define SYMMETRY_VERSION_REVISION 374 +#define SYMMETRY_VERSION_REVISION 375 #define SYMMETRY_VERSION_BRANCH "dev" #endif \ No newline at end of file diff --git a/src/game/editor.c b/src/game/editor.c index e7784f7..fc5c462 100755 --- a/src/game/editor.c +++ b/src/game/editor.c @@ -2372,8 +2372,9 @@ void editor_window_property_inspector(struct nk_context* context, struct Editor* nk_property_float(context, "Turn Speed Default", 0.f, &enemy->Turret.turn_speed_default, FLT_MAX, 0.5f, 0.1f); nk_property_float(context, "Turn Speed Targetting", 0.f, &enemy->Turret.turn_speed_when_targetting, FLT_MAX, 0.5f, 0.1f); nk_property_float(context, "Turn Speed Current", 0.f, &enemy->Turret.turn_speed_current, FLT_MAX, 0.5f, 0.1f); - nk_property_float(context, "Max Yaw", 0.f, &enemy->Turret.max_yaw, FLT_MAX, 0.5f, 0.1f); - nk_property_float(context, "Target Yaw", 0.f, &enemy->Turret.target_yaw, FLT_MAX, 0.5f, 0.1f); + nk_property_float(context, "Default Yaw", -FLT_MAX, &enemy->Turret.default_yaw, FLT_MAX, 0.5f, 0.1f); + nk_property_float(context, "Max Yaw", -FLT_MAX, &enemy->Turret.max_yaw, FLT_MAX, 0.5f, 0.1f); + nk_property_float(context, "Target Yaw", -FLT_MAX, &enemy->Turret.target_yaw, FLT_MAX, 0.5f, 0.1f); nk_property_float(context, "Pulsate Speed Scale", 0.f, &enemy->Turret.pulsate_speed_scale, FLT_MAX, 0.5f, 0.1f); nk_property_float(context, "Pulsate Height", 0.f, &enemy->Turret.pulsate_height, FLT_MAX, 0.5f, 0.1f); nk_property_float(context, "Attack Cooldown", 0.f, &enemy->Turret.attack_cooldown, FLT_MAX, 0.5f, 0.1f); diff --git a/src/game/enemy.c b/src/game/enemy.c index 150d0f3..bac0380 100644 --- a/src/game/enemy.c +++ b/src/game/enemy.c @@ -69,6 +69,7 @@ void enemy_init(struct Enemy* enemy, int type) enemy->Turret.turn_speed_current = enemy->Turret.turn_speed_default; enemy->Turret.max_yaw = 60.f; enemy->Turret.target_yaw = 0.f; + enemy->Turret.default_yaw = 0.f; enemy->Turret.pulsate_height = 1.5f; enemy->Turret.pulsate_speed_scale = 0.1f; enemy->Turret.attack_cooldown = 0.05f; @@ -191,6 +192,7 @@ struct Enemy* enemy_read(struct Parser_Object* object, const char* name, struct case ENEMY_TURRET: { if(hashmap_value_exists(object->data, "turn_speed_default")) new_enemy->Turret.turn_speed_default = hashmap_float_get(object->data, "turn_speed_default"); + if(hashmap_value_exists(object->data, "default_yaw")) new_enemy->Turret.default_yaw = hashmap_float_get(object->data, "default_yaw"); if(hashmap_value_exists(object->data, "max_yaw")) new_enemy->Turret.max_yaw = hashmap_float_get(object->data, "max_yaw"); if(hashmap_value_exists(object->data, "pulsate_speed_scale")) new_enemy->Turret.pulsate_speed_scale = hashmap_float_get(object->data, "pulsate_speed_scale"); if(hashmap_value_exists(object->data, "pulsate_height")) new_enemy->Turret.pulsate_height = hashmap_float_get(object->data, "pulsate_height"); @@ -285,7 +287,6 @@ void enemy_on_scene_loaded(struct Event* event, void* enemy_ptr) void enemy_update_physics_turret(struct Enemy* enemy, struct Game_State* game_state, float fixed_dt) { /* Turning/Rotation */ - static vec3 yaw_axis = { 0.f, 1.f, 0.f }; if(enemy->Turret.scan) { float current_yaw = quat_get_yaw(&enemy->base.transform.rotation); @@ -295,21 +296,23 @@ void enemy_update_physics_turret(struct Enemy* enemy, struct Game_State* game_st yaw *= -1.f; current_yaw += yaw; - if(current_yaw >= enemy->Turret.max_yaw) + if(enemy->Turret.yaw_direction_positive && current_yaw >= enemy->Turret.target_yaw) { yaw = 0.f; enemy->Turret.yaw_direction_positive = false; + enemy->Turret.target_yaw = enemy->Turret.default_yaw - enemy->Turret.max_yaw; } - else if(current_yaw <= -enemy->Turret.max_yaw) + else if(!enemy->Turret.yaw_direction_positive && current_yaw <= enemy->Turret.target_yaw) { yaw = 0.f; enemy->Turret.yaw_direction_positive = true; + enemy->Turret.target_yaw = enemy->Turret.default_yaw + enemy->Turret.max_yaw; } if(yaw != 0.f) - transform_rotate(enemy, &yaw_axis, yaw, TS_LOCAL); + transform_rotate(enemy, &UNIT_Y, yaw, TS_LOCAL); } - else if(!enemy->Turret.scan) + else { float epsilon = 0.5f; float current_yaw = quat_get_yaw(&enemy->base.transform.rotation); @@ -320,8 +323,9 @@ void enemy_update_physics_turret(struct Enemy* enemy, struct Game_State* game_st if(current_yaw > enemy->Turret.target_yaw) yaw *= -1.f; - transform_rotate(enemy, &yaw_axis, yaw, TS_LOCAL); + transform_rotate(enemy, &UNIT_Y, yaw, TS_LOCAL); } + debug_vars_show_float("Difference ", difference); } /* Movement */ @@ -482,7 +486,7 @@ void enemy_state_set_turret(struct Enemy* enemy, int state) enemy->Turret.time_elapsed_since_attack = 0.f; enemy->Turret.pulsate = true; enemy->Turret.scan = false; - enemy->Turret.target_yaw = 0.f; + enemy->Turret.target_yaw = enemy->Turret.default_yaw; enemy->Turret.turn_speed_current = enemy->Turret.turn_speed_default; vec3 default_position = { 0.f }; transform_set_position(enemy->mesh, &default_position); @@ -493,7 +497,7 @@ void enemy_state_set_turret(struct Enemy* enemy, int state) enemy->Turret.pulsate = false; enemy->Turret.turn_speed_current = enemy->Turret.turn_speed_default; enemy->Turret.scan = true; - enemy->Turret.target_yaw = enemy->Turret.yaw_direction_positive ? enemy->Turret.max_yaw : -enemy->Turret.max_yaw; + enemy->Turret.target_yaw = enemy->Turret.yaw_direction_positive ? (enemy->Turret.default_yaw + enemy->Turret.max_yaw) : (enemy->Turret.default_yaw - enemy->Turret.max_yaw); vec4_assign(&model->material_params[MMP_DIFFUSE_COL].val_vec4, &enemy->Turret.color_alert); enemy->Turret.time_elapsed_since_alert = 0.f; } diff --git a/src/game/entity.h b/src/game/entity.h index 4aee4c9..54cfcae 100755 --- a/src/game/entity.h +++ b/src/game/entity.h @@ -255,6 +255,7 @@ struct Enemy float turn_speed_default; float turn_speed_when_targetting; float turn_speed_current; + float default_yaw; float max_yaw; float target_yaw; bool yaw_direction_positive; diff --git a/todo.txt b/todo.txt index 46f9918..edf2e35 100644 --- a/todo.txt +++ b/todo.txt @@ -8,10 +8,7 @@ Todo: - Color grading - Shadow mapping - Cube mapping for sky dome etc - - Implement game gui either with a separate nuklear context or as part of existing context - Fix rotate gizmo's origin not being set to the selected entity - - Ambient/Background music - - Player shooting - Sky Cube maps - Scrolling textures - Apply the selected entity's transformation when duplicating an entity that has an entity archetype