Added muzzle mesh to player

dev
Shariq Shah 5 years ago
parent 4eb832749e
commit 9b431e5d6c
  1. BIN
      assets/models/muzzle_flash.symbres
  2. 2
      assets/shaders/blinn_phong.frag
  3. 2
      src/common/version.h
  4. 4
      src/game/entity.h
  5. 32
      src/game/player.c
  6. 6
      src/game/renderer.c
  7. 4
      todo.txt

@ -46,7 +46,7 @@ vec3 calc_point_light(in Light light)
{
diffuse_comp = light.color * diffuse * cos_ang_incidence;
vec3 vertex_to_eye = normalize(camera_pos - vertex);
vec3 halfway = normalize(light_direction + vertex_to_eye);
vec3 halfway = normalize(light.direction + vertex_to_eye);
float specular_factor = max(0.0, dot(normalized_normal, halfway));
specular_factor = pow(specular_factor, specular_strength);
specular_comp = light.color * specular * specular_factor;

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

@ -65,7 +65,8 @@ enum Entity_Flags
EF_SKIP_RENDER = 1 << 5,
EF_IGNORE_RAYCAST = 1 << 6,
EF_IGNORE_COLLISION = 1 << 7,
EF_ALWAYS_RENDER = 1 << 8
EF_ALWAYS_RENDER = 1 << 8,
EF_DISABLE_BACKFACE_CULL = 1 << 9
};
enum Pickup_Type
@ -208,6 +209,7 @@ struct Player
struct Entity base;
struct Static_Mesh* body_mesh;
struct Static_Mesh* weapon_mesh;
struct Static_Mesh* muzzle_flash_mesh;
struct Camera* camera;
struct Sound_Source* weapon_sound;
struct Sound_Source* footstep_sound;

@ -18,6 +18,7 @@
#include "sound_source.h"
#include "entity.h"
#include "gui_game.h"
#include "texture.h"
#include <float.h>
#include <string.h>
@ -78,6 +79,13 @@ void player_init(struct Player* player, struct Scene* scene)
transform_translate(player->weapon_mesh, &translation, TS_LOCAL);
transform_rotate(player->weapon_mesh, &UNIT_Y, 90.f, TS_LOCAL);
transform_scale(player->weapon_mesh, &(vec3){0.3f, 0.1f, 0.1f});
player->muzzle_flash_mesh = scene_static_mesh_create(scene, "Player_Muzzle_Flash_Mesh", player_camera, "muzzle_flash.symbres", MAT_BLINN);
transform_translate(player->muzzle_flash_mesh, &(vec3) {0.f, -0.3f, -2.75f}, TS_LOCAL);
transform_rotate(player->muzzle_flash_mesh, &UNIT_X, 90.f, TS_LOCAL);
player->muzzle_flash_mesh->model.material_params[MMP_DIFFUSE_TEX].val_int = texture_create_from_file("white.tga", TU_DIFFUSE);
player->muzzle_flash_mesh->model.material_params[MMP_DIFFUSE].val_float = 6.f;
vec4_fill(&player->muzzle_flash_mesh->model.material_params[MMP_DIFFUSE_COL].val_vec4, 0.9f, 0.4f, 0.f, 1.f);
struct Sound_Source* weapon_sound = scene_sound_source_create(scene, "Player_Weapon_Sound_Source", player, "sounds/bullet_1.wav", ST_WAV, false, false);
if(weapon_sound)
@ -98,13 +106,14 @@ void player_init(struct Player* player, struct Scene* scene)
log_error("player:init", "Could not add grunt entity to player");
// Mark player camera and mesh as transient for now. We don't need to save them to file since we recreate them here anyway
player->camera->base.flags |= EF_TRANSIENT;
player->footstep_sound->base.flags |= EF_TRANSIENT;
player->grunt_sound->base.flags |= EF_TRANSIENT;
player->body_mesh->base.flags |= EF_TRANSIENT | EF_IGNORE_COLLISION | EF_ALWAYS_RENDER;
player->weapon_mesh->base.flags |= EF_TRANSIENT | EF_IGNORE_COLLISION | EF_ALWAYS_RENDER;
player->weapon_light->base.flags |= EF_TRANSIENT;
player->weapon_sound->base.flags |= EF_TRANSIENT;
player->camera->base.flags |= EF_TRANSIENT;
player->footstep_sound->base.flags |= EF_TRANSIENT;
player->grunt_sound->base.flags |= EF_TRANSIENT;
player->body_mesh->base.flags |= EF_TRANSIENT | EF_IGNORE_COLLISION | EF_ALWAYS_RENDER;
player->weapon_mesh->base.flags |= EF_TRANSIENT | EF_IGNORE_COLLISION | EF_ALWAYS_RENDER;
player->muzzle_flash_mesh->base.flags |= EF_TRANSIENT | EF_IGNORE_COLLISION | EF_ALWAYS_RENDER;
player->weapon_light->base.flags |= EF_TRANSIENT;
player->weapon_sound->base.flags |= EF_TRANSIENT;
transform_parent_set(player_camera, player, true);
@ -385,6 +394,7 @@ void player_on_mousebutton_released(const struct Event* event)
int intensity = player->weapon_light_intensity_min + rand() % player->weapon_light_intensity_max;
player->weapon_light->intensity = intensity;
transform_scale(player->muzzle_flash_mesh, &(vec3){1.f, 1.f, 1.f});
sound_source_play(game_state->sound, player->weapon_sound);
}
}
@ -427,4 +437,12 @@ void player_update(struct Player* player, float dt)
if(player->weapon_light->intensity < 0.f)
player->weapon_light->intensity = 0.f;
}
if(player->muzzle_flash_mesh->base.transform.scale.x > 0.f)
{
player->muzzle_flash_mesh->base.transform.scale.x -= player->weapon_light_intensity_decay * dt;
player->muzzle_flash_mesh->base.transform.scale.y -= player->weapon_light_intensity_decay * dt;
player->muzzle_flash_mesh->base.transform.scale.z -= player->weapon_light_intensity_decay * dt;
transform_update_transmat(player->muzzle_flash_mesh);
}
}

@ -93,6 +93,8 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene)
active_camera->clear_color.w);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
static mat4 mvp;
for(int i = 0; i < MAT_MAX; i++)
@ -229,6 +231,10 @@ void renderer_render(struct Renderer* renderer, struct Scene* scene)
}
/* Render the geometry */
if(mesh->base.flags & EF_DISABLE_BACKFACE_CULL)
glDisable(GL_CULL_FACE);
else
glEnable(GL_CULL_FACE);
geom_render(mesh->model.geometry_index, GDM_TRIANGLES);
for(int k = 0; k < MMP_MAX; k++)

@ -3,7 +3,6 @@ Todo:
- Don't save parent entity's transform when saving entity archetype. Only save the transformation values for children
- Enemies getting hit by bullets
- Add weapon flash, muzzle mesh to turrets
- Add muzzle mesh to player
- Save case sensitive file names when scene entity entries
- Disbale all player actions when scene cleared dialog or scene restart dialog are active
- Memory utils that provide allocation tracking
@ -433,4 +432,5 @@ Done:
* Implemented flag for ignoring collisions with certain entities
* Background music track per scene specified in scene properties
* Fixed bug where child entities' absolute position does not change when parent rotates
* Player weapon mesh and lighting
* Player weapon mesh and lighting
* Added muzzle mesh to player
Loading…
Cancel
Save