diff --git a/assets/entities/turret.symtres b/assets/entities/turret.symtres index 1d8f5a1..8e6bdd3 100644 --- a/assets/entities/turret.symtres +++ b/assets/entities/turret.symtres @@ -13,7 +13,7 @@ Entity name : Turret bouding_box_max : 0.500 0.500 0.500 damage : 10 - turn_speed : 500.0000 + turn_speed : 50.0000 } Entity diff --git a/assets/models/suzanne.symbres b/assets/models/suzanne.symbres index 7e226cf..0e4e267 100644 Binary files a/assets/models/suzanne.symbres and b/assets/models/suzanne.symbres differ diff --git a/blender_addon/io_symmetry_exp/__init__.py b/blender_addon/io_symmetry_exp/__init__.py index b68c64e..cd6b7c6 100755 --- a/blender_addon/io_symmetry_exp/__init__.py +++ b/blender_addon/io_symmetry_exp/__init__.py @@ -2,7 +2,7 @@ bl_info = { "name": "Export to Symmetry", "description": "Export to a format that can be read by Symmetry", "author": "Shariq Shah", - "version": (0, 1), + "version": (0, 2), "blender": (2, 80, 0), "location": "File > Export > Export to Symmetry", "category": "Import-Export" @@ -31,8 +31,9 @@ class ExportSymmetry(bpy.types.Operator, ExportHelper): print("Exporting : " + activeObject.name) - # Rotate -90 deg on x axis to compensate for blender's different orientation + # Rotate -90 deg on x axis and 180 on y axis to compensate for blender's different orientation activeObject.rotation_euler[0] = radians(-90) + activeObject.rotation_euler[1] = radians(180) bpy.ops.object.transform_apply(location = True, scale = True, rotation = True) mesh = activeObject.to_mesh(preserve_all_data_layers=True) @@ -66,6 +67,7 @@ class ExportSymmetry(bpy.types.Operator, ExportHelper): # Reset object's previous rotation activeObject.rotation_euler[0] = radians(90) + activeObject.rotation_euler[1] = radians(-180) bpy.ops.object.transform_apply(location = True, scale = True, rotation = True) file = open(self.filepath, 'bw') diff --git a/src/common/version.h b/src/common/version.h index 1db6d7f..3dcfc8a 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 1 -#define SYMMETRY_VERSION_REVISION 319 +#define SYMMETRY_VERSION_REVISION 320 #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 2a50449..43d8dd9 100755 --- a/src/game/editor.c +++ b/src/game/editor.c @@ -226,7 +226,7 @@ void editor_render(struct Editor* editor, struct Camera * active_camera) { quat rotation = editor->selected_entity->transform.rotation; vec3 axis = { 1.f, 0.f, 0.f }; - quat_axis_angle(&rotation, &axis, -90.f); + quat_axis_angle(&rotation, &axis, 90.f); im_circle(light->radius, 30, false, abs_pos, rotation, editor->cursor_entity_color, 3); if(light->type == LT_SPOT) diff --git a/src/game/enemy.c b/src/game/enemy.c index dedbf00..24ecb56 100644 --- a/src/game/enemy.c +++ b/src/game/enemy.c @@ -10,6 +10,7 @@ #include "event.h" #include "../system/platform.h" #include "debug_vars.h" +#include "im_render.h" #include #include @@ -201,16 +202,27 @@ void enemy_update_physics_turret(struct Enemy* enemy, struct Game_State* game_st /* Movement */ float ticks = (float)platform_ticks_get(); - float pulsate_speed = 50.f; + float pulsate_speed_scale = 0.1f; + float pulsate_height = 1.5f; vec3 translation = { 0.f }; transform_get_absolute_position(enemy, &translation); - translation.y += sinf(TO_RADIANS(ticks)) * dt * pulsate_speed; - debug_vars_show_float("T", sinf(TO_RADIANS(ticks * dt * pulsate_speed))); + translation.y += sinf(TO_RADIANS(ticks * pulsate_speed_scale)) * dt * pulsate_height; transform_set_position(enemy, &translation); - //transform_translate(enemy, &translation, TS_LOCAL); } void enemy_update_ai_turret(struct Enemy* enemy, struct Game_State* game_state, float dt) { - + struct Scene* scene = game_state->scene; + float turret_vision_range = 5.f; + struct Ray turret_ray; + transform_get_absolute_position(enemy, &turret_ray.origin); + transform_get_forward(enemy, &turret_ray.direction); + im_ray(&turret_ray, turret_vision_range, (vec4) { 0.f, 1.f, 1.f, 1.f }, 4); + struct Entity* player = scene_ray_intersect_closest(scene, &turret_ray, ERM_PLAYER); + if(player) + { + float distance = scene_entity_distance(scene, player, enemy); + if(distance <= turret_vision_range) + log_message("Player Intersected, distance: %.3f", distance); + } } diff --git a/src/game/renderer.c b/src/game/renderer.c index ff6db59..054a202 100755 --- a/src/game/renderer.c +++ b/src/game/renderer.c @@ -78,6 +78,8 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene) { struct Game_State* game_state = game_state_get(); struct Camera* active_camera = &scene->cameras[scene->active_camera_index]; + int num_rendered = 0, num_culled = 0, num_indices = 0; + int width = 0, height = 0; window_get_drawable_size(game_state->window, &width, &height); glViewport(0, 0, width, height); @@ -189,12 +191,12 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene) int intersection = bv_intersect_frustum_box(&active_camera->frustum, &mesh->base.derived_bounding_box); if(intersection == IT_INSIDE || intersection == IT_INTERSECT) { - renderer->num_indices += geometry->indices_length; - renderer->num_rendered++; + num_indices += geometry->indices_length; + num_rendered++; } else { - renderer->num_culled++; + num_culled++; continue; } @@ -239,11 +241,9 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene) shader_unbind(); } - debug_vars_show_int("Rendered", renderer->num_rendered); - debug_vars_show_int("Culled", renderer->num_culled); - debug_vars_show_int("Num Indices", renderer->num_indices); - - renderer->num_culled = renderer->num_rendered = renderer->num_indices = 0; + debug_vars_show_int("Rendered", num_rendered); + debug_vars_show_int("Culled", num_culled); + debug_vars_show_int("Num Indices", num_indices); /* Debug Render */ if(renderer->settings.debug_draw_enabled) diff --git a/src/game/renderer.h b/src/game/renderer.h index 38c21f1..9c1b2a9 100755 --- a/src/game/renderer.h +++ b/src/game/renderer.h @@ -38,12 +38,10 @@ struct Render_Settings struct Renderer { - int debug_shader; - int num_culled , num_rendered , num_indices; - int num_culled_slot, num_rendered_slot, num_indices_slot; - struct Sprite_Batch* sprite_batch; + int debug_shader; + struct Sprite_Batch* sprite_batch; struct Render_Settings settings; - struct Material materials[MAT_MAX]; + struct Material materials[MAT_MAX]; }; void renderer_init(struct Renderer* renderer); diff --git a/src/system/file_io.c b/src/system/file_io.c index 91fd40b..f5b990a 100755 --- a/src/system/file_io.c +++ b/src/system/file_io.c @@ -145,9 +145,9 @@ static char* relative_path_get(const int directory_type) char* relative_path = NULL; switch(directory_type) { - case DIRT_USER: relative_path = str_new(user_directory); break; - case DIRT_INSTALL: relative_path = str_new(install_directory); break; - case DIRT_EXECUTABLE: relative_path = str_new(executable_directory); break; + case DIRT_USER: relative_path = str_new(user_directory); break; + case DIRT_INSTALL: relative_path = str_new(install_directory); break; + case DIRT_EXECUTABLE: relative_path = str_new(executable_directory); break; default: log_error("io:relative_path_get", "Invalid directory type!"); break; }; return relative_path; diff --git a/todo.txt b/todo.txt index 07df487..eb9db03 100644 --- a/todo.txt +++ b/todo.txt @@ -1,7 +1,7 @@ Todo: - - Make movement framerate independent - - Implement displaying bounding boxes as a command which should work in game mode - - Enemy ray casting and shooting + - Implement separate property window for player related variables that can be shown in the editor similar to renderer settings etc + - Implement turret state machine + - Fix rotate gizmo's origin not being set to the selected entity - Player shooting - Player jump cooldown, don't allow jump until a certian time interval has passed, even if we're grounded - Sky Cube maps @@ -106,7 +106,7 @@ Improvements: - Improve grid/immediate mode drawing by switching to glDrawElements instead of glDrawArrays. - Investigate why transparency is not working for materials - Picking for other entity types like lights etc by specifically ray casting for them or in editor switching to pick-mode that specifies if we're picking lights or meshes etc - ? Only show bounding box for hovered entity instead of wireframe mesh + - Implement displaying bounding boxes as a command which should work in game mode Bugs: - Better handling of wav format checking at load time @@ -409,4 +409,5 @@ Done: * Imlemented reading/writing enemy mesh and weapon sound to file and resetting it in code * Implemented on_load and on_update callbacks for enemies. Different enemy types have different callbacks that are assigned when they are created. * Added Scene reload command - * Introduced fixed time step interval which can be configured and be used for movement and other physics related updates \ No newline at end of file + * Introduced fixed time step interval which can be configured and be used for movement and other physics related updates + * Made movement framerate independent \ No newline at end of file