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
bouding_box_max : 0.500 0.500 0.500
damage : 10
turn_speed : 500.0000
turn_speed : 50.0000
}
Entity

Binary file not shown.

@ -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')

@ -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

@ -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)

@ -10,6 +10,7 @@
#include "event.h"
#include "../system/platform.h"
#include "debug_vars.h"
#include "im_render.h"
#include <string.h>
#include <math.h>
@ -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);
}
}

@ -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)

@ -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);

@ -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;

@ -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
* 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