Updated blender exporter to correctly orientate mesh before exporting

dev
Shariq Shah 6 years ago
parent 4ccf09683e
commit 9b73126b8c
  1. 2
      assets/entities/turret.symtres
  2. BIN
      assets/models/suzanne.symbres
  3. 6
      blender_addon/io_symmetry_exp/__init__.py
  4. 2
      src/common/version.h
  5. 2
      src/game/editor.c
  6. 22
      src/game/enemy.c
  7. 16
      src/game/renderer.c
  8. 8
      src/game/renderer.h
  9. 6
      src/system/file_io.c
  10. 11
      todo.txt

@ -13,7 +13,7 @@ Entity
name : Turret name : Turret
bouding_box_max : 0.500 0.500 0.500 bouding_box_max : 0.500 0.500 0.500
damage : 10 damage : 10
turn_speed : 500.0000 turn_speed : 50.0000
} }
Entity Entity

Binary file not shown.

@ -2,7 +2,7 @@ bl_info = {
"name": "Export to Symmetry", "name": "Export to Symmetry",
"description": "Export to a format that can be read by Symmetry", "description": "Export to a format that can be read by Symmetry",
"author": "Shariq Shah", "author": "Shariq Shah",
"version": (0, 1), "version": (0, 2),
"blender": (2, 80, 0), "blender": (2, 80, 0),
"location": "File > Export > Export to Symmetry", "location": "File > Export > Export to Symmetry",
"category": "Import-Export" "category": "Import-Export"
@ -31,8 +31,9 @@ class ExportSymmetry(bpy.types.Operator, ExportHelper):
print("Exporting : " + activeObject.name) 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[0] = radians(-90)
activeObject.rotation_euler[1] = radians(180)
bpy.ops.object.transform_apply(location = True, scale = True, rotation = True) bpy.ops.object.transform_apply(location = True, scale = True, rotation = True)
mesh = activeObject.to_mesh(preserve_all_data_layers=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 # Reset object's previous rotation
activeObject.rotation_euler[0] = radians(90) activeObject.rotation_euler[0] = radians(90)
activeObject.rotation_euler[1] = radians(-180)
bpy.ops.object.transform_apply(location = True, scale = True, rotation = True) bpy.ops.object.transform_apply(location = True, scale = True, rotation = True)
file = open(self.filepath, 'bw') file = open(self.filepath, 'bw')

@ -4,7 +4,7 @@
/* Auto generated version file. DO NOT MODIFY */ /* Auto generated version file. DO NOT MODIFY */
#define SYMMETRY_VERSION_MAJOR 0 #define SYMMETRY_VERSION_MAJOR 0
#define SYMMETRY_VERSION_MINOR 1 #define SYMMETRY_VERSION_MINOR 1
#define SYMMETRY_VERSION_REVISION 319 #define SYMMETRY_VERSION_REVISION 320
#define SYMMETRY_VERSION_BRANCH "dev" #define SYMMETRY_VERSION_BRANCH "dev"
#endif #endif

@ -226,7 +226,7 @@ void editor_render(struct Editor* editor, struct Camera * active_camera)
{ {
quat rotation = editor->selected_entity->transform.rotation; quat rotation = editor->selected_entity->transform.rotation;
vec3 axis = { 1.f, 0.f, 0.f }; 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); im_circle(light->radius, 30, false, abs_pos, rotation, editor->cursor_entity_color, 3);
if(light->type == LT_SPOT) if(light->type == LT_SPOT)

@ -10,6 +10,7 @@
#include "event.h" #include "event.h"
#include "../system/platform.h" #include "../system/platform.h"
#include "debug_vars.h" #include "debug_vars.h"
#include "im_render.h"
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
@ -201,16 +202,27 @@ void enemy_update_physics_turret(struct Enemy* enemy, struct Game_State* game_st
/* Movement */ /* Movement */
float ticks = (float)platform_ticks_get(); 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 }; vec3 translation = { 0.f };
transform_get_absolute_position(enemy, &translation); transform_get_absolute_position(enemy, &translation);
translation.y += sinf(TO_RADIANS(ticks)) * dt * pulsate_speed; translation.y += sinf(TO_RADIANS(ticks * pulsate_speed_scale)) * dt * pulsate_height;
debug_vars_show_float("T", sinf(TO_RADIANS(ticks * dt * pulsate_speed)));
transform_set_position(enemy, &translation); 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) 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);
}
} }

@ -78,6 +78,8 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene)
{ {
struct Game_State* game_state = game_state_get(); struct Game_State* game_state = game_state_get();
struct Camera* active_camera = &scene->cameras[scene->active_camera_index]; 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; int width = 0, height = 0;
window_get_drawable_size(game_state->window, &width, &height); window_get_drawable_size(game_state->window, &width, &height);
glViewport(0, 0, 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); int intersection = bv_intersect_frustum_box(&active_camera->frustum, &mesh->base.derived_bounding_box);
if(intersection == IT_INSIDE || intersection == IT_INTERSECT) if(intersection == IT_INSIDE || intersection == IT_INTERSECT)
{ {
renderer->num_indices += geometry->indices_length; num_indices += geometry->indices_length;
renderer->num_rendered++; num_rendered++;
} }
else else
{ {
renderer->num_culled++; num_culled++;
continue; continue;
} }
@ -239,11 +241,9 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene)
shader_unbind(); shader_unbind();
} }
debug_vars_show_int("Rendered", renderer->num_rendered); debug_vars_show_int("Rendered", num_rendered);
debug_vars_show_int("Culled", renderer->num_culled); debug_vars_show_int("Culled", num_culled);
debug_vars_show_int("Num Indices", renderer->num_indices); debug_vars_show_int("Num Indices", num_indices);
renderer->num_culled = renderer->num_rendered = renderer->num_indices = 0;
/* Debug Render */ /* Debug Render */
if(renderer->settings.debug_draw_enabled) if(renderer->settings.debug_draw_enabled)

@ -38,12 +38,10 @@ struct Render_Settings
struct Renderer struct Renderer
{ {
int debug_shader; int debug_shader;
int num_culled , num_rendered , num_indices; struct Sprite_Batch* sprite_batch;
int num_culled_slot, num_rendered_slot, num_indices_slot;
struct Sprite_Batch* sprite_batch;
struct Render_Settings settings; struct Render_Settings settings;
struct Material materials[MAT_MAX]; struct Material materials[MAT_MAX];
}; };
void renderer_init(struct Renderer* renderer); void renderer_init(struct Renderer* renderer);

@ -145,9 +145,9 @@ static char* relative_path_get(const int directory_type)
char* relative_path = NULL; char* relative_path = NULL;
switch(directory_type) switch(directory_type)
{ {
case DIRT_USER: relative_path = str_new(user_directory); break; case DIRT_USER: relative_path = str_new(user_directory); break;
case DIRT_INSTALL: relative_path = str_new(install_directory); break; case DIRT_INSTALL: relative_path = str_new(install_directory); break;
case DIRT_EXECUTABLE: relative_path = str_new(executable_directory); break; case DIRT_EXECUTABLE: relative_path = str_new(executable_directory); break;
default: log_error("io:relative_path_get", "Invalid directory type!"); break; default: log_error("io:relative_path_get", "Invalid directory type!"); break;
}; };
return relative_path; return relative_path;

@ -1,7 +1,7 @@
Todo: Todo:
- Make movement framerate independent - Implement separate property window for player related variables that can be shown in the editor similar to renderer settings etc
- Implement displaying bounding boxes as a command which should work in game mode - Implement turret state machine
- Enemy ray casting and shooting - Fix rotate gizmo's origin not being set to the selected entity
- Player shooting - Player shooting
- Player jump cooldown, don't allow jump until a certian time interval has passed, even if we're grounded - Player jump cooldown, don't allow jump until a certian time interval has passed, even if we're grounded
- Sky Cube maps - Sky Cube maps
@ -106,7 +106,7 @@ Improvements:
- Improve grid/immediate mode drawing by switching to glDrawElements instead of glDrawArrays. - Improve grid/immediate mode drawing by switching to glDrawElements instead of glDrawArrays.
- Investigate why transparency is not working for materials - 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 - 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: Bugs:
- Better handling of wav format checking at load time - 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 * 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. * 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 * Added Scene reload command
* Introduced fixed time step interval which can be configured and be used for movement and other physics related updates * Introduced fixed time step interval which can be configured and be used for movement and other physics related updates
* Made movement framerate independent
Loading…
Cancel
Save