oops
This commit is contained in:
parent
68a202445e
commit
15ff064243
@ -13,6 +13,9 @@ file(GLOB src
|
|||||||
"${PROJECT_SOURCE_DIR}/src/game/*.c"
|
"${PROJECT_SOURCE_DIR}/src/game/*.c"
|
||||||
"${PROJECT_SOURCE_DIR}/src/game/ecs/*.c"
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/*.c"
|
||||||
"${PROJECT_SOURCE_DIR}/src/game/ecs/component/*.c"
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/component/*.c"
|
||||||
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/component/action/*.c"
|
||||||
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/component/control/*.c"
|
||||||
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/component/stat/*.c"
|
||||||
"${PROJECT_SOURCE_DIR}/src/game/ecs/entity/*.c"
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/entity/*.c"
|
||||||
"${PROJECT_SOURCE_DIR}/src/game/ecs/entity/play/*.c"
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/entity/play/*.c"
|
||||||
"${PROJECT_SOURCE_DIR}/src/game/ecs/entity/play/enemy*.c"
|
"${PROJECT_SOURCE_DIR}/src/game/ecs/entity/play/enemy*.c"
|
||||||
|
16
src/COMMON.h
16
src/COMMON.h
@ -57,10 +57,9 @@ typedef enum OriginType
|
|||||||
ORIGIN_CENTER
|
ORIGIN_CENTER
|
||||||
} OriginType;
|
} OriginType;
|
||||||
|
|
||||||
#define DIRECTION_COUNT DIRECITON_NORTH_WEST + 1
|
#define DIRECTION_COUNT DIRECTION_NORTH_WEST + 1
|
||||||
typedef enum Direction
|
typedef enum Direction
|
||||||
{
|
{
|
||||||
DIRECTION_NONE,
|
|
||||||
DIRECTION_NORTH,
|
DIRECTION_NORTH,
|
||||||
DIRECTION_EAST,
|
DIRECTION_EAST,
|
||||||
DIRECTION_SOUTH,
|
DIRECTION_SOUTH,
|
||||||
@ -73,13 +72,12 @@ typedef enum Direction
|
|||||||
|
|
||||||
static const f32 DIRECTION_ANGLES[DIRECTION_COUNT] =
|
static const f32 DIRECTION_ANGLES[DIRECTION_COUNT] =
|
||||||
{
|
{
|
||||||
0.0f,
|
|
||||||
PI + PI_HALF,
|
|
||||||
PI,
|
|
||||||
PI - PI_HALF,
|
PI - PI_HALF,
|
||||||
|
PI,
|
||||||
|
PI + PI_HALF,
|
||||||
0.0f,
|
0.0f,
|
||||||
TAU - PI_FOURTH,
|
|
||||||
PI_FOURTH,
|
|
||||||
PI - PI_FOURTH,
|
PI - PI_FOURTH,
|
||||||
PI + PI_FOURTH
|
PI + PI_FOURTH,
|
||||||
} Direction;
|
TAU - PI_FOURTH,
|
||||||
|
PI_FOURTH
|
||||||
|
};
|
||||||
|
@ -8,7 +8,7 @@ fullscreen_set(Window* self, Renderer* renderer)
|
|||||||
|
|
||||||
renderer_update(renderer);
|
renderer_update(renderer);
|
||||||
|
|
||||||
SDL_SetWindowFullscreen(self->sdl, SDL_WINDOW_FULLSCREEN);
|
SDL_SetWindowFullscreen(self->sdl, SDL_WINDOW_FULLSCREEN_DESKTOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exits fullscreen. */
|
/* Exits fullscreen. */
|
||||||
|
@ -59,3 +59,15 @@ mouse_release(Mouse* self, MouseButtonType type)
|
|||||||
{
|
{
|
||||||
return (!self->current[type] && self->previous[type]);
|
return (!self->current[type] && self->previous[type]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fetches the world position of the cursor. */
|
||||||
|
void
|
||||||
|
mouse_world_position_get(Mouse* mouse, Renderer* renderer, vec2 position)
|
||||||
|
{
|
||||||
|
vec2 mousePosition;
|
||||||
|
|
||||||
|
mousePosition[0] = (f32)mouse->position[0];
|
||||||
|
mousePosition[1] = (f32)mouse->position[1];
|
||||||
|
|
||||||
|
renderer_world_position_from_window_position(renderer, mousePosition, position);
|
||||||
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
#include "../COMMON.h"
|
#include "renderer.h"
|
||||||
|
|
||||||
#define MOUSE_BUTTON_COUNT MOUSE_BUTTON_X2 + 1
|
#define MOUSE_BUTTON_COUNT MOUSE_BUTTON_X2 + 1
|
||||||
typedef enum MouseButtonType
|
typedef enum MouseButtonType
|
||||||
@ -26,3 +26,4 @@ void mouse_update(Mouse* self);
|
|||||||
bool mouse_press(Mouse* self, MouseButtonType type);
|
bool mouse_press(Mouse* self, MouseButtonType type);
|
||||||
bool mouse_held(Mouse* self, MouseButtonType type);
|
bool mouse_held(Mouse* self, MouseButtonType type);
|
||||||
bool mouse_release(Mouse* self, MouseButtonType type);
|
bool mouse_release(Mouse* self, MouseButtonType type);
|
||||||
|
void mouse_world_position_get(Mouse* mouse, Renderer* renderer, vec2 position);
|
||||||
|
@ -100,5 +100,5 @@ renderer_world_position_from_window_position
|
|||||||
window_size_get(self->window, windowSize);
|
window_size_get(self->window, windowSize);
|
||||||
|
|
||||||
rendererPosition[0] = (windowPosition[0] / windowSize[0]) * self->size[0];
|
rendererPosition[0] = (windowPosition[0] / windowSize[0]) * self->size[0];
|
||||||
rendererPosition[1] = (windowPosition[1] / windowPosition[1]) * self->size[1];
|
rendererPosition[1] = (windowPosition[1] / windowSize[1]) * self->size[1];
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,10 @@ typedef enum ECSComponentType
|
|||||||
{
|
{
|
||||||
ECS_COMPONENT_PHYSICS,
|
ECS_COMPONENT_PHYSICS,
|
||||||
ECS_COMPONENT_SHOOT,
|
ECS_COMPONENT_SHOOT,
|
||||||
|
ECS_COMPONENT_RETURN,
|
||||||
ECS_COMPONENT_CONTROL_MOVE,
|
ECS_COMPONENT_CONTROL_MOVE,
|
||||||
ECS_COMPONENT_CONTROL_SHOOT,
|
ECS_COMPONENT_CONTROL_SHOOT,
|
||||||
|
ECS_COMPONENT_CONTROL_AIM,
|
||||||
ECS_COMPONENT_HEALTH,
|
ECS_COMPONENT_HEALTH,
|
||||||
ECS_COMPONENT_AMMO,
|
ECS_COMPONENT_AMMO,
|
||||||
ECS_COMPONENT_SPRITE,
|
ECS_COMPONENT_SPRITE,
|
||||||
|
36
src/game/ecs/component/action/component_rectangle_collide.c
Normal file
36
src/game/ecs/component/action/component_rectangle_collide.c
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include "component_collider.h"
|
||||||
|
|
||||||
|
/* DEPENDENCIES: Physics */
|
||||||
|
|
||||||
|
/* Sets collider component info. */
|
||||||
|
void
|
||||||
|
component_collider_init(ComponentCollider* self, vec2 offset, vec2 size)
|
||||||
|
{
|
||||||
|
glm_vec2_copy(size, self->size);
|
||||||
|
glm_vec2_copy(offset, self->offset);
|
||||||
|
vector_init(&self->collisions, sizeof(u32);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ticks collider component. */
|
||||||
|
void
|
||||||
|
component_collider_tick(ComponentCollider* self, ECS* ecs)
|
||||||
|
{
|
||||||
|
ComponentPhysics* physics;
|
||||||
|
vec4 rectangle;
|
||||||
|
|
||||||
|
vector_clear(&self->collisions);
|
||||||
|
|
||||||
|
ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
|
|
||||||
|
rectangle[0] = physics->position[0] + self->offset[0];
|
||||||
|
rectangle[1] = physics->position[1] + self->offset[1];
|
||||||
|
rectangle[2] = rectangle[0] + self->size[0];
|
||||||
|
rectangle[3] = rectangle[1] + self->size[1];
|
||||||
|
|
||||||
|
for (s32 i = 0; i < ecs->lists[ECS_COMPONENT_COLLIDER]; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
38
src/game/ecs/component/action/component_rectangle_collide.h
Normal file
38
src/game/ecs/component/action/component_rectangle_collide.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../../GAME_COMMON.h"
|
||||||
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
|
#include "../component_game_object.h"
|
||||||
|
|
||||||
|
typedef void (*ProjectileInit)(ECS*, u32, vec3, u32);
|
||||||
|
|
||||||
|
typedef struct ComponentShoot
|
||||||
|
{
|
||||||
|
u32 id;
|
||||||
|
ProjectileInit projectileInit;
|
||||||
|
f32 offset;
|
||||||
|
f32 speed;
|
||||||
|
bool isFire;
|
||||||
|
} ComponentShoot;
|
||||||
|
|
||||||
|
void component_shoot_init(ComponentShoot* self, ProjectileInit projectileInit, f32 speed, f32 offset);
|
||||||
|
void component_shoot_tick(ComponentShoot* self, ECS* ecs);
|
||||||
|
|
||||||
|
static const ECSComponentInfo COMPONENT_SHOOT_INFO =
|
||||||
|
{
|
||||||
|
.system =
|
||||||
|
{
|
||||||
|
.functions =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
(ECSFunction)component_shoot_tick,
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.type = ECS_COMPONENT_SHOOT,
|
||||||
|
.size = sizeof(ComponentShoot)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
45
src/game/ecs/component/action/component_return.c
Normal file
45
src/game/ecs/component/action/component_return.c
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#include "component_return.h"
|
||||||
|
|
||||||
|
/* DEPENDENCIES: Physics */
|
||||||
|
|
||||||
|
/* Initializes return component. */
|
||||||
|
void
|
||||||
|
component_return_init(ComponentReturn* self, f32 speed, f32 velocityMax, u32 lifetime, u32 senderID)
|
||||||
|
{
|
||||||
|
self->speed = speed;
|
||||||
|
self->velocityMax = velocityMax;
|
||||||
|
self->lifetime = lifetime;
|
||||||
|
self->senderID = senderID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ticks return component. */
|
||||||
|
/* Rapidly accelerates entity towards sender. */
|
||||||
|
void
|
||||||
|
component_return_tick(ComponentReturn* self, ECS* ecs)
|
||||||
|
{
|
||||||
|
f32 angle;
|
||||||
|
ComponentPhysics* senderPhysics;
|
||||||
|
ComponentPhysics* physics;
|
||||||
|
|
||||||
|
if (self->lifetime > 0)
|
||||||
|
{
|
||||||
|
self->lifetime--;
|
||||||
|
|
||||||
|
if (self->lifetime <= 0)
|
||||||
|
{
|
||||||
|
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
|
|
||||||
|
physics->velocityMax = self->velocityMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
senderPhysics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->senderID);
|
||||||
|
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
|
|
||||||
|
angle = ATAN(physics->position[0], senderPhysics->position[0], physics->position[1], senderPhysics->position[1]);
|
||||||
|
|
||||||
|
physics->velocity[0] += cos(angle) * self->speed;
|
||||||
|
physics->velocity[1] += sin(angle) * self->speed;
|
||||||
|
}
|
36
src/game/ecs/component/action/component_return.h
Normal file
36
src/game/ecs/component/action/component_return.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../../GAME_COMMON.h"
|
||||||
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
|
#include "../component_physics.h"
|
||||||
|
|
||||||
|
typedef struct ComponentReturn
|
||||||
|
{
|
||||||
|
u32 id;
|
||||||
|
f32 speed;
|
||||||
|
f32 velocityMax;
|
||||||
|
u32 lifetime;
|
||||||
|
u32 senderID;
|
||||||
|
} ComponentReturn;
|
||||||
|
|
||||||
|
void component_return_init(ComponentReturn* self, f32 speed, f32 velocityMax, u32 lifetime, u32 senderID);
|
||||||
|
void component_return_tick(ComponentReturn* self, ECS* ecs);
|
||||||
|
|
||||||
|
static const ECSComponentInfo COMPONENT_RETURN_INFO =
|
||||||
|
{
|
||||||
|
.system =
|
||||||
|
{
|
||||||
|
.functions =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
(ECSFunction)component_return_tick,
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.type = ECS_COMPONENT_RETURN,
|
||||||
|
.size = sizeof(ComponentReturn)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -7,7 +7,7 @@ void
|
|||||||
component_shoot_init
|
component_shoot_init
|
||||||
(
|
(
|
||||||
ComponentShoot* self,
|
ComponentShoot* self,
|
||||||
EntityGameObjectInit projectileInit,
|
ProjectileInit projectileInit,
|
||||||
f32 speed,
|
f32 speed,
|
||||||
f32 offset
|
f32 offset
|
||||||
)
|
)
|
||||||
@ -23,20 +23,28 @@ component_shoot_tick(ComponentShoot* self, ECS* ecs)
|
|||||||
{
|
{
|
||||||
if (self->isFire)
|
if (self->isFire)
|
||||||
{
|
{
|
||||||
//ComponentGameObject* gameObject;
|
|
||||||
ComponentPhysics* physics;
|
ComponentPhysics* physics;
|
||||||
|
ComponentPhysics* projectilePhysics;
|
||||||
u32 projectile;
|
u32 projectile;
|
||||||
vec3 position;
|
vec3 position;
|
||||||
//vec3 velocity;
|
|
||||||
|
|
||||||
//gameObject = ecs_component_get(ecs, ECS_COMPONENT_GAME_OBJECT, self->id);
|
|
||||||
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
|
||||||
|
|
||||||
glm_vec3_copy(physics->position, position);
|
|
||||||
|
|
||||||
projectile = ecs_entity_add(ecs);
|
projectile = ecs_entity_add(ecs);
|
||||||
|
|
||||||
self->projectileInit(ecs, projectile, position);
|
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
|
|
||||||
|
position[0] += -cos(physics->angle) * self->offset;
|
||||||
|
position[1] += -sin(physics->angle) * self->offset;
|
||||||
|
|
||||||
|
glm_vec3_copy(physics->position, position);
|
||||||
|
|
||||||
|
self->projectileInit(ecs, projectile, position, self->id);
|
||||||
|
|
||||||
|
projectilePhysics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, projectile);
|
||||||
|
|
||||||
|
projectilePhysics->angle = physics->angle;
|
||||||
|
|
||||||
|
projectilePhysics->velocity[0] = -cos(projectilePhysics->angle) * self->speed;
|
||||||
|
projectilePhysics->velocity[1] = -sin(projectilePhysics->angle) * self->speed;
|
||||||
|
|
||||||
self->isFire = false;
|
self->isFire = false;
|
||||||
}
|
}
|
@ -1,20 +1,22 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../GAME_COMMON.h"
|
#include "../../../GAME_COMMON.h"
|
||||||
#include "../ecs_entity.h"
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
#include "component_game_object.h"
|
#include "../component_game_object.h"
|
||||||
|
|
||||||
|
typedef void (*ProjectileInit)(ECS*, u32, vec3, u32);
|
||||||
|
|
||||||
typedef struct ComponentShoot
|
typedef struct ComponentShoot
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 id;
|
||||||
EntityGameObjectInit projectileInit;
|
ProjectileInit projectileInit;
|
||||||
f32 offset;
|
f32 offset;
|
||||||
f32 speed;
|
f32 speed;
|
||||||
bool isFire;
|
bool isFire;
|
||||||
} ComponentShoot;
|
} ComponentShoot;
|
||||||
|
|
||||||
void component_shoot_init(ComponentShoot* self, EntityGameObjectInit projectileInit, f32 speed, f32 offset);
|
void component_shoot_init(ComponentShoot* self, ProjectileInit projectileInit, f32 speed, f32 offset);
|
||||||
void component_shoot_tick(ComponentShoot* self, ECS* ecs);
|
void component_shoot_tick(ComponentShoot* self, ECS* ecs);
|
||||||
|
|
||||||
static const ECSComponentInfo COMPONENT_SHOOT_INFO =
|
static const ECSComponentInfo COMPONENT_SHOOT_INFO =
|
@ -1,130 +0,0 @@
|
|||||||
#include "component_control_move.h"
|
|
||||||
|
|
||||||
/* DEPENDENCIES: Physics */
|
|
||||||
|
|
||||||
/* Ticks control_move component. */
|
|
||||||
void
|
|
||||||
component_control_move_init(ComponentControlMove* self, f32 speed)
|
|
||||||
{
|
|
||||||
self->speed = speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ticks control_move component. */
|
|
||||||
void
|
|
||||||
component_control_move_tick(ComponentControlMove* self, ECS* ecs)
|
|
||||||
{
|
|
||||||
if
|
|
||||||
(
|
|
||||||
input_held(&ecs->game->input, INPUT_LEFT) ||
|
|
||||||
input_held(&ecs->game->input, INPUT_RIGHT) ||
|
|
||||||
input_held(&ecs->game->input, INPUT_UP) ||
|
|
||||||
input_held(&ecs->game->input, INPUT_DOWN)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ComponentPhysics* physics;
|
|
||||||
f32 angle;
|
|
||||||
vec2 velocity;
|
|
||||||
|
|
||||||
angle = 0.0f;
|
|
||||||
|
|
||||||
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
|
||||||
|
|
||||||
glm_vec2_zero(velocity);
|
|
||||||
|
|
||||||
self->previousDirection = self->direction;
|
|
||||||
self->direction = DIRECTION_NONE;
|
|
||||||
|
|
||||||
velocity[0] = 1.0f;
|
|
||||||
velocity[1] = 0.0f;
|
|
||||||
|
|
||||||
glm_vec2_norm(velocity);
|
|
||||||
|
|
||||||
glm_vec2_scale(velocity, self->speed, velocity);
|
|
||||||
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
input_held(&ecs->game->input, INPUT_LEFT) &&
|
|
||||||
input_held(&ecs->game->input, INPUT_UP)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
angle = PI + PI_FOURTH;
|
|
||||||
self->direction = DIRECTION_NORTH_WEST;
|
|
||||||
}
|
|
||||||
else if
|
|
||||||
(
|
|
||||||
input_held(&ecs->game->input, INPUT_RIGHT) &&
|
|
||||||
input_held(&ecs->game->input, INPUT_UP)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
angle = TAU - PI_FOURTH;
|
|
||||||
self->direction = DIRECTION_NORTH_EAST;
|
|
||||||
}
|
|
||||||
else if
|
|
||||||
(
|
|
||||||
input_held(&ecs->game->input, INPUT_DOWN) &&
|
|
||||||
input_held(&ecs->game->input, INPUT_LEFT)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
angle = PI - PI_FOURTH;
|
|
||||||
self->direction = DIRECTION_SOUTH_WEST;
|
|
||||||
}
|
|
||||||
else if
|
|
||||||
(
|
|
||||||
input_held(&ecs->game->input, INPUT_DOWN) &&
|
|
||||||
input_held(&ecs->game->input, INPUT_RIGHT)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
angle = PI_FOURTH;
|
|
||||||
self->direction = DIRECTION_SOUTH_EAST;
|
|
||||||
}
|
|
||||||
else if
|
|
||||||
(
|
|
||||||
input_held(&ecs->game->input, INPUT_LEFT) &&
|
|
||||||
input_held(&ecs->game->input, INPUT_RIGHT)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if
|
|
||||||
(
|
|
||||||
self->direction =
|
|
||||||
self->previousDirection == INPUT_LEFT
|
|
||||||
)
|
|
||||||
{
|
|
||||||
self->direction = DIRECTION_
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (input_held(&ecs->game->input, INPUT_LEFT))
|
|
||||||
{
|
|
||||||
angle = PI;
|
|
||||||
self->direction = DIRECTION_WEST;
|
|
||||||
}
|
|
||||||
else if (input_held(&ecs->game->input, INPUT_RIGHT))
|
|
||||||
{
|
|
||||||
angle = 0.0f;
|
|
||||||
self->direction = DIRECTION_EAST;
|
|
||||||
}
|
|
||||||
else if (input_held(&ecs->game->input, INPUT_UP))
|
|
||||||
{
|
|
||||||
angle = PI + PI_HALF;
|
|
||||||
self->direction = DIRECTION_NORTH;
|
|
||||||
}
|
|
||||||
else if (input_held(&ecs->game->input, INPUT_DOWN))
|
|
||||||
{
|
|
||||||
angle = PI - PI_HALF;
|
|
||||||
self->direction = DIRECTION_SOUTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self->direction == DIRECITON_NORTH)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (self->direction == DIRECTION
|
|
||||||
|
|
||||||
glm_vec2_rotate(velocity, angle, velocity);
|
|
||||||
|
|
||||||
physics->velocity[0] += velocity[0];
|
|
||||||
physics->velocity[1] += velocity[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
#include "component_control_shoot.h"
|
|
||||||
|
|
||||||
/* DEPENDENCIES: Shoot */
|
|
||||||
|
|
||||||
/* Ticks control_shoot component. */
|
|
||||||
void
|
|
||||||
component_control_shoot_tick(ComponentControlShoot* self, ECS* ecs)
|
|
||||||
{
|
|
||||||
if (input_press(&ecs->game->input, INPUT_SHOOT))
|
|
||||||
{
|
|
||||||
ComponentShoot* shoot;
|
|
||||||
|
|
||||||
shoot = ecs_component_get(ecs, ECS_COMPONENT_SHOOT, self->id);
|
|
||||||
|
|
||||||
shoot->isFire = true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -25,8 +25,6 @@ component_game_object_init
|
|||||||
frameSize[0] = (s32)texture.size[0];
|
frameSize[0] = (s32)texture.size[0];
|
||||||
frameSize[1] = (s32)texture.size[1];
|
frameSize[1] = (s32)texture.size[1];
|
||||||
|
|
||||||
self->angle = 0.0f;
|
|
||||||
|
|
||||||
glm_ivec2_one(atlasSize);
|
glm_ivec2_one(atlasSize);
|
||||||
|
|
||||||
component_game_object_atlas_init
|
component_game_object_atlas_init
|
||||||
@ -78,12 +76,8 @@ component_game_object_atlas_init
|
|||||||
void
|
void
|
||||||
component_game_object_add(ComponentGameObject* self, ECS* ecs)
|
component_game_object_add(ComponentGameObject* self, ECS* ecs)
|
||||||
{
|
{
|
||||||
ComponentSprite* sprite;
|
|
||||||
|
|
||||||
ecs_component_add(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
ecs_component_add(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
sprite = ecs_component_add(ecs, ECS_COMPONENT_SPRITE, self->id);
|
ecs_component_add(ecs, ECS_COMPONENT_SPRITE, self->id);
|
||||||
|
|
||||||
sprite = ecs_component_get(ecs, ECS_COMPONENT_SPRITE, self->id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Runs on game object add. */
|
/* Runs on game object add. */
|
||||||
|
@ -7,12 +7,10 @@
|
|||||||
#include "component_sprite.h"
|
#include "component_sprite.h"
|
||||||
#include "component_physics.h"
|
#include "component_physics.h"
|
||||||
|
|
||||||
typedef void (*EntityGameObjectInit)(ECS*, u32 id, vec3);
|
|
||||||
|
|
||||||
typedef struct ComponentGameObject
|
typedef struct ComponentGameObject
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 id;
|
||||||
f32 angle;
|
|
||||||
} ComponentGameObject;
|
} ComponentGameObject;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -10,6 +10,7 @@ typedef struct ComponentPhysics
|
|||||||
f32 velocityMax;
|
f32 velocityMax;
|
||||||
vec3 velocity;
|
vec3 velocity;
|
||||||
vec3 position;
|
vec3 position;
|
||||||
|
f32 angle;
|
||||||
} ComponentPhysics;
|
} ComponentPhysics;
|
||||||
|
|
||||||
void component_physics_init
|
void component_physics_init
|
||||||
|
24
src/game/ecs/component/control/component_control_aim.c
Normal file
24
src/game/ecs/component/control/component_control_aim.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "component_control_aim.h"
|
||||||
|
|
||||||
|
/* DEPENDENCIES: Physics */
|
||||||
|
|
||||||
|
/* Ticks control_aim component. Sets facing angle to that of the mouse. */
|
||||||
|
void
|
||||||
|
component_control_aim_tick(ComponentControlAim* self, ECS* ecs)
|
||||||
|
{
|
||||||
|
ComponentPhysics* physics;
|
||||||
|
f32 angle;
|
||||||
|
vec2 position;
|
||||||
|
|
||||||
|
mouse_world_position_get(&ecs->game->input.mouse, &ecs->game->renderer, position);
|
||||||
|
|
||||||
|
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
|
|
||||||
|
angle = ATAN(position[0], physics->position[0], position[1], physics->position[1]);
|
||||||
|
|
||||||
|
printf("MOUSE POSITION: %f %f\n", position[0], position[1]);
|
||||||
|
printf("PHYSICS POSITION: %f %f\n", physics->position[0], physics->position[1]);
|
||||||
|
printf("ANGLE: %f\n", angle);
|
||||||
|
|
||||||
|
physics->angle = angle;
|
||||||
|
}
|
31
src/game/ecs/component/control/component_control_aim.h
Normal file
31
src/game/ecs/component/control/component_control_aim.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../../GAME_COMMON.h"
|
||||||
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
|
#include "../../../input/input.h"
|
||||||
|
|
||||||
|
#include "../component_physics.h"
|
||||||
|
|
||||||
|
typedef struct ComponentControlAim
|
||||||
|
{
|
||||||
|
u32 id;
|
||||||
|
} ComponentControlAim;
|
||||||
|
|
||||||
|
void component_control_aim_tick(ComponentControlAim* self, ECS* ecs);
|
||||||
|
|
||||||
|
static const ECSComponentInfo COMPONENT_CONTROL_AIM_INFO =
|
||||||
|
{
|
||||||
|
.system =
|
||||||
|
{
|
||||||
|
.functions =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
(ECSFunction)component_control_aim_tick,
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.type = ECS_COMPONENT_CONTROL_AIM,
|
||||||
|
.size = sizeof(ComponentControlAim)
|
||||||
|
};
|
77
src/game/ecs/component/control/component_control_move.c
Normal file
77
src/game/ecs/component/control/component_control_move.c
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#include "component_control_move.h"
|
||||||
|
|
||||||
|
/* DEPENDENCIES: Physics */
|
||||||
|
|
||||||
|
static void _direction_update(ComponentControlMove* self, ECS* ecs);
|
||||||
|
|
||||||
|
/* Updates current direction. */
|
||||||
|
static void
|
||||||
|
_direction_update(ComponentControlMove* self, ECS* ecs)
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
input_held(&ecs->game->input, INPUT_LEFT) &&
|
||||||
|
input_held(&ecs->game->input, INPUT_UP)
|
||||||
|
)
|
||||||
|
self->direction = DIRECTION_NORTH_WEST;
|
||||||
|
else if
|
||||||
|
(
|
||||||
|
input_held(&ecs->game->input, INPUT_RIGHT) &&
|
||||||
|
input_held(&ecs->game->input, INPUT_UP)
|
||||||
|
)
|
||||||
|
self->direction = DIRECTION_NORTH_EAST;
|
||||||
|
else if
|
||||||
|
(
|
||||||
|
input_held(&ecs->game->input, INPUT_DOWN) &&
|
||||||
|
input_held(&ecs->game->input, INPUT_LEFT)
|
||||||
|
)
|
||||||
|
self->direction = DIRECTION_SOUTH_WEST;
|
||||||
|
else if
|
||||||
|
(
|
||||||
|
input_held(&ecs->game->input, INPUT_DOWN) &&
|
||||||
|
input_held(&ecs->game->input, INPUT_RIGHT)
|
||||||
|
)
|
||||||
|
self->direction = DIRECTION_SOUTH_EAST;
|
||||||
|
else if (input_held(&ecs->game->input, INPUT_UP))
|
||||||
|
self->direction = DIRECTION_NORTH;
|
||||||
|
else if (input_held(&ecs->game->input, INPUT_DOWN))
|
||||||
|
self->direction = DIRECTION_SOUTH;
|
||||||
|
else if (input_held(&ecs->game->input, INPUT_LEFT))
|
||||||
|
self->direction = DIRECTION_WEST;
|
||||||
|
else if (input_held(&ecs->game->input, INPUT_RIGHT))
|
||||||
|
self->direction = DIRECTION_EAST;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ticks control_move component. */
|
||||||
|
void
|
||||||
|
component_control_move_init(ComponentControlMove* self, f32 speed)
|
||||||
|
{
|
||||||
|
self->speed = speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ticks control_move component. */
|
||||||
|
void
|
||||||
|
component_control_move_tick(ComponentControlMove* self, ECS* ecs)
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
input_held(&ecs->game->input, INPUT_LEFT) ||
|
||||||
|
input_held(&ecs->game->input, INPUT_RIGHT) ||
|
||||||
|
input_held(&ecs->game->input, INPUT_UP) ||
|
||||||
|
input_held(&ecs->game->input, INPUT_DOWN)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ComponentPhysics* physics;
|
||||||
|
vec2 delta;
|
||||||
|
|
||||||
|
physics = ecs_component_get(ecs, ECS_COMPONENT_PHYSICS, self->id);
|
||||||
|
|
||||||
|
_direction_update(self, ecs);
|
||||||
|
|
||||||
|
delta[0] = -cos(DIRECTION_ANGLES[self->direction]) * self->speed;
|
||||||
|
delta[1] = -sin(DIRECTION_ANGLES[self->direction]) * self->speed;
|
||||||
|
|
||||||
|
physics->velocity[0] += delta[0];
|
||||||
|
physics->velocity[1] += delta[1];
|
||||||
|
}
|
||||||
|
}
|
@ -1,18 +1,18 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../GAME_COMMON.h"
|
#include "../../../GAME_COMMON.h"
|
||||||
#include "../ecs_entity.h"
|
#include "../../ecs_entity.h"
|
||||||
|
#include "../../../input/input.h"
|
||||||
|
|
||||||
#include "../../input/input.h"
|
#include "../component_physics.h"
|
||||||
|
|
||||||
#include "component_physics.h"
|
|
||||||
|
|
||||||
typedef struct ComponentControlMove
|
typedef struct ComponentControlMove
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 id;
|
||||||
f32 speed;
|
f32 speed;
|
||||||
Direction direction;
|
Direction direction;
|
||||||
Direction oldDirection;
|
bool directionInput[DIRECTION_COUNT];
|
||||||
|
bool previousDirectionInput[DIRECTION_COUNT];
|
||||||
} ComponentControlMove;
|
} ComponentControlMove;
|
||||||
|
|
||||||
void component_control_move_init(ComponentControlMove* self, f32 speed);
|
void component_control_move_init(ComponentControlMove* self, f32 speed);
|
39
src/game/ecs/component/control/component_control_shoot.c
Normal file
39
src/game/ecs/component/control/component_control_shoot.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "component_control_shoot.h"
|
||||||
|
|
||||||
|
/* DEPENDENCIES: Shoot, Ammo */
|
||||||
|
|
||||||
|
/* Initializes control shoot component. */
|
||||||
|
void
|
||||||
|
component_control_shoot_init(ComponentControlShoot* self, u32 delay)
|
||||||
|
{
|
||||||
|
self->delayMax = delay;
|
||||||
|
self->delay = self->delayMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ticks control_shoot component. */
|
||||||
|
void
|
||||||
|
component_control_shoot_tick(ComponentControlShoot* self, ECS* ecs)
|
||||||
|
{
|
||||||
|
ComponentAmmo* ammo;
|
||||||
|
|
||||||
|
if (self->delay > 0)
|
||||||
|
{
|
||||||
|
self->delay--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ammo = ecs_component_get(ecs, ECS_COMPONENT_AMMO, self->id);
|
||||||
|
|
||||||
|
if (input_held(&ecs->game->input, INPUT_SHOOT) && !ammo->isOut)
|
||||||
|
{
|
||||||
|
ComponentShoot* shoot;
|
||||||
|
|
||||||
|
shoot = ecs_component_get(ecs, ECS_COMPONENT_SHOOT, self->id);
|
||||||
|
|
||||||
|
shoot->isFire = true;
|
||||||
|
|
||||||
|
self->delay = self->delayMax;
|
||||||
|
|
||||||
|
ammo->value--;
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +1,19 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../GAME_COMMON.h"
|
#include "../../../GAME_COMMON.h"
|
||||||
#include "../ecs_entity.h"
|
#include "../../ecs_entity.h"
|
||||||
|
#include "../../../input/input.h"
|
||||||
#include "../../input/input.h"
|
#include "../action/component_shoot.h"
|
||||||
|
#include "../stat/component_ammo.h"
|
||||||
#include "component_shoot.h"
|
|
||||||
|
|
||||||
typedef struct ComponentControlShoot
|
typedef struct ComponentControlShoot
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 id;
|
||||||
|
u32 delayMax;
|
||||||
|
u32 delay;
|
||||||
} ComponentControlShoot;
|
} ComponentControlShoot;
|
||||||
|
|
||||||
|
void component_control_shoot_init(ComponentControlShoot* self, u32 delay);
|
||||||
void component_control_shoot_tick(ComponentControlShoot* self, ECS* ecs);
|
void component_control_shoot_tick(ComponentControlShoot* self, ECS* ecs);
|
||||||
|
|
||||||
static const ECSComponentInfo COMPONENT_CONTROL_SHOOT_INFO =
|
static const ECSComponentInfo COMPONENT_CONTROL_SHOOT_INFO =
|
@ -2,16 +2,18 @@
|
|||||||
|
|
||||||
/* Sets ammo component info. */
|
/* Sets ammo component info. */
|
||||||
void
|
void
|
||||||
component_ammo_init(ComponentAmmo* self, u32 ammo)
|
component_ammo_init(ComponentAmmo* self, u32 max)
|
||||||
{
|
{
|
||||||
self->ammoMax = ammo;
|
self->max = max;
|
||||||
self->ammo = self->ammoMax;
|
self->value = self->max;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ticks ammo component. If ammo is depleted, marks as out. */
|
/* Ticks ammo component. If ammo is depleted, marks as out. */
|
||||||
void
|
void
|
||||||
component_ammo_tick(ComponentAmmo* self, ECS* ecs)
|
component_ammo_tick(ComponentAmmo* self, ECS* ecs)
|
||||||
{
|
{
|
||||||
if (self->ammo <= 0)
|
if (self->value <= 0)
|
||||||
self->isOut = true;
|
self->isOut = true;
|
||||||
|
else
|
||||||
|
self->isOut = false;
|
||||||
}
|
}
|
@ -1,17 +1,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../GAME_COMMON.h"
|
#include "../../../GAME_COMMON.h"
|
||||||
#include "../ecs_entity.h"
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
typedef struct ComponentAmmo
|
typedef struct ComponentAmmo
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 id;
|
||||||
u32 ammoMax;
|
u32 max;
|
||||||
u32 ammo;
|
u32 value;
|
||||||
bool isOut;
|
bool isOut;
|
||||||
} ComponentAmmo;
|
} ComponentAmmo;
|
||||||
|
|
||||||
void component_ammo_init(ComponentAmmo* self, u32 ammo);
|
void component_ammo_init(ComponentAmmo* self, u32 max);
|
||||||
void component_ammo_tick(ComponentAmmo* self, ECS* ecs);
|
void component_ammo_tick(ComponentAmmo* self, ECS* ecs);
|
||||||
|
|
||||||
static const ECSComponentInfo COMPONENT_AMMO_INFO =
|
static const ECSComponentInfo COMPONENT_AMMO_INFO =
|
@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
/* Sets health component info. */
|
/* Sets health component info. */
|
||||||
void
|
void
|
||||||
component_health_init(ComponentHealth* self, u32 health)
|
component_health_init(ComponentHealth* self, u32 max)
|
||||||
{
|
{
|
||||||
self->healthMax = health;
|
self->max = max;
|
||||||
self->health = self->healthMax;
|
self->value = self->max;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ticks health component. If health is depleted, marked dead. */
|
/* Ticks health component. If health is depleted, marked dead. */
|
||||||
void
|
void
|
||||||
component_health_tick(ComponentHealth* self, ECS* ecs)
|
component_health_tick(ComponentHealth* self, ECS* ecs)
|
||||||
{
|
{
|
||||||
if (self->health <= 0)
|
if (self->value <= 0)
|
||||||
self->isDead = true;
|
self->isDead = true;
|
||||||
}
|
}
|
@ -1,17 +1,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../GAME_COMMON.h"
|
#include "../../../GAME_COMMON.h"
|
||||||
#include "../ecs_entity.h"
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
typedef struct ComponentHealth
|
typedef struct ComponentHealth
|
||||||
{
|
{
|
||||||
u32 id;
|
u32 id;
|
||||||
u32 healthMax;
|
u32 max;
|
||||||
u32 health;
|
u32 value;
|
||||||
bool isDead;
|
bool isDead;
|
||||||
} ComponentHealth;
|
} ComponentHealth;
|
||||||
|
|
||||||
void component_health_init(ComponentHealth* self, u32 health);
|
void component_health_init(ComponentHealth* self, u32 max);
|
||||||
void component_health_tick(ComponentHealth* self, ECS* ecs);
|
void component_health_tick(ComponentHealth* self, ECS* ecs);
|
||||||
|
|
||||||
static const ECSComponentInfo COMPONENT_HEALTH_INFO =
|
static const ECSComponentInfo COMPONENT_HEALTH_INFO =
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../GAME_COMMON.h"
|
#include "../../../GAME_COMMON.h"
|
||||||
#include "../ecs_entity.h"
|
#include "../../ecs_entity.h"
|
||||||
|
|
||||||
typedef struct ComponentLifetime
|
typedef struct ComponentLifetime
|
||||||
{
|
{
|
@ -1,14 +1,16 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "component/component_ammo.h"
|
#include "component/action/component_shoot.h"
|
||||||
#include "component/component_shoot.h"
|
#include "component/action/component_return.h"
|
||||||
#include "component/component_control_shoot.h"
|
|
||||||
#include "component/component_control_move.h"
|
|
||||||
#include "component/component_game_object.h"
|
#include "component/component_game_object.h"
|
||||||
#include "component/component_health.h"
|
|
||||||
#include "component/component_lifetime.h"
|
|
||||||
#include "component/component_physics.h"
|
#include "component/component_physics.h"
|
||||||
#include "component/component_sprite.h"
|
#include "component/component_sprite.h"
|
||||||
|
#include "component/control/component_control_aim.h"
|
||||||
|
#include "component/control/component_control_move.h"
|
||||||
|
#include "component/control/component_control_shoot.h"
|
||||||
|
#include "component/stat/component_ammo.h"
|
||||||
|
#include "component/stat/component_health.h"
|
||||||
|
#include "component/stat/component_lifetime.h"
|
||||||
|
|
||||||
#include "ecs_component.h"
|
#include "ecs_component.h"
|
||||||
|
|
||||||
@ -16,8 +18,10 @@ static const ECSComponentInfo ECS_COMPONENT_INFO[ECS_COMPONENT_COUNT] =
|
|||||||
{
|
{
|
||||||
COMPONENT_PHYSICS_INFO,
|
COMPONENT_PHYSICS_INFO,
|
||||||
COMPONENT_SHOOT_INFO,
|
COMPONENT_SHOOT_INFO,
|
||||||
|
COMPONENT_RETURN_INFO,
|
||||||
COMPONENT_CONTROL_MOVE_INFO,
|
COMPONENT_CONTROL_MOVE_INFO,
|
||||||
COMPONENT_CONTROL_SHOOT_INFO,
|
COMPONENT_CONTROL_SHOOT_INFO,
|
||||||
|
COMPONENT_CONTROL_AIM_INFO,
|
||||||
COMPONENT_HEALTH_INFO,
|
COMPONENT_HEALTH_INFO,
|
||||||
COMPONENT_AMMO_INFO,
|
COMPONENT_AMMO_INFO,
|
||||||
COMPONENT_SPRITE_INFO,
|
COMPONENT_SPRITE_INFO,
|
||||||
|
@ -4,15 +4,21 @@
|
|||||||
void
|
void
|
||||||
entity_player_init(ECS* ecs, u32 id, vec3 position)
|
entity_player_init(ECS* ecs, u32 id, vec3 position)
|
||||||
{
|
{
|
||||||
ComponentGameObject* gameObject;
|
ComponentAmmo* ammo;
|
||||||
ComponentControlMove* controlMove;
|
ComponentControlMove* controlMove;
|
||||||
|
ComponentControlShoot* controlShoot;
|
||||||
|
ComponentGameObject* gameObject;
|
||||||
|
ComponentHealth* health;
|
||||||
ComponentShoot* shoot;
|
ComponentShoot* shoot;
|
||||||
|
|
||||||
gameObject = ecs_component_add(ecs, ECS_COMPONENT_GAME_OBJECT, id);
|
ammo = ecs_component_add(ecs, ECS_COMPONENT_AMMO, id);
|
||||||
controlMove = ecs_component_add(ecs, ECS_COMPONENT_CONTROL_MOVE, id);
|
controlMove = ecs_component_add(ecs, ECS_COMPONENT_CONTROL_MOVE, id);
|
||||||
|
controlShoot = ecs_component_add(ecs, ECS_COMPONENT_CONTROL_SHOOT, id);
|
||||||
|
gameObject = ecs_component_add(ecs, ECS_COMPONENT_GAME_OBJECT, id);
|
||||||
|
health = ecs_component_add(ecs, ECS_COMPONENT_HEALTH, id);
|
||||||
shoot = ecs_component_add(ecs, ECS_COMPONENT_SHOOT, id);
|
shoot = ecs_component_add(ecs, ECS_COMPONENT_SHOOT, id);
|
||||||
|
|
||||||
ecs_component_add(ecs, ECS_COMPONENT_CONTROL_SHOOT, id);
|
ecs_component_add(ecs, ECS_COMPONENT_CONTROL_AIM, id);
|
||||||
|
|
||||||
component_game_object_init
|
component_game_object_init
|
||||||
(
|
(
|
||||||
@ -33,8 +39,13 @@ entity_player_init(ECS* ecs, u32 id, vec3 position)
|
|||||||
component_shoot_init
|
component_shoot_init
|
||||||
(
|
(
|
||||||
shoot,
|
shoot,
|
||||||
(EntityGameObjectInit)entity_snake_init,
|
(ProjectileInit)entity_snake_init,
|
||||||
PLAYER_SHOOT_SPEED,
|
PLAYER_SHOOT_SPEED,
|
||||||
PLAYER_SHOOT_OFFSET
|
PLAYER_SHOOT_OFFSET
|
||||||
);
|
);
|
||||||
|
|
||||||
|
component_control_shoot_init(controlShoot, PLAYER_CONTROL_SHOOT_DELAY);
|
||||||
|
|
||||||
|
component_health_init(health, PLAYER_HEALTH_MAX);
|
||||||
|
component_ammo_init(ammo, PLAYER_AMMO_MAX);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../ecs_component.h"
|
#include "../../component/action/component_shoot.h"
|
||||||
#include "../../component/component_game_object.h"
|
#include "../../component/component_game_object.h"
|
||||||
#include "../../component/component_control_move.h"
|
#include "../../component/control/component_control_aim.h"
|
||||||
#include "../../component/component_control_shoot.h"
|
#include "../../component/control/component_control_move.h"
|
||||||
#include "../../component/component_shoot.h"
|
#include "../../component/control/component_control_shoot.h"
|
||||||
#include "../../component/component_lifetime.h"
|
#include "../../component/stat/component_ammo.h"
|
||||||
|
#include "../../component/stat/component_health.h"
|
||||||
|
#include "../../component/stat/component_lifetime.h"
|
||||||
|
#include "../../ecs_component.h"
|
||||||
|
|
||||||
#include "entity_snake.h"
|
#include "entity_snake.h"
|
||||||
|
|
||||||
@ -14,6 +17,9 @@
|
|||||||
#define PLAYER_VELOCITY_MAX 6
|
#define PLAYER_VELOCITY_MAX 6
|
||||||
#define PLAYER_SHOOT_SPEED 5
|
#define PLAYER_SHOOT_SPEED 5
|
||||||
#define PLAYER_SHOOT_OFFSET 32
|
#define PLAYER_SHOOT_OFFSET 32
|
||||||
|
#define PLAYER_CONTROL_SHOOT_DELAY 15
|
||||||
|
#define PLAYER_AMMO_MAX 1
|
||||||
|
#define PLAYER_HEALTH_MAX 3
|
||||||
static const vec2 PLAYER_SIZE = {50.0f, 100.0f};
|
static const vec2 PLAYER_SIZE = {50.0f, 100.0f};
|
||||||
|
|
||||||
void entity_player_init(ECS* ecs, u32 id, vec3 position);
|
void entity_player_init(ECS* ecs, u32 id, vec3 position);
|
||||||
|
@ -2,11 +2,13 @@
|
|||||||
|
|
||||||
/* Initializes a snake entity. */
|
/* Initializes a snake entity. */
|
||||||
void
|
void
|
||||||
entity_snake_init(ECS* ecs, u32 id, vec3 position)
|
entity_snake_init(ECS* ecs, u32 id, vec3 position, u32 sender)
|
||||||
{
|
{
|
||||||
ComponentGameObject* gameObject;
|
ComponentGameObject* gameObject;
|
||||||
|
ComponentReturn* returnComponent;
|
||||||
|
|
||||||
gameObject = ecs_component_add(ecs, ECS_COMPONENT_GAME_OBJECT, id);
|
gameObject = ecs_component_add(ecs, ECS_COMPONENT_GAME_OBJECT, id);
|
||||||
|
returnComponent = ecs_component_add(ecs, ECS_COMPONENT_RETURN, id);
|
||||||
|
|
||||||
component_game_object_init
|
component_game_object_init
|
||||||
(
|
(
|
||||||
@ -21,4 +23,13 @@ entity_snake_init(ECS* ecs, u32 id, vec3 position)
|
|||||||
SNAKE_FRICTION,
|
SNAKE_FRICTION,
|
||||||
SNAKE_VELOCITY_MAX
|
SNAKE_VELOCITY_MAX
|
||||||
);
|
);
|
||||||
|
|
||||||
|
component_return_init
|
||||||
|
(
|
||||||
|
returnComponent,
|
||||||
|
SNAKE_RETURN_SPEED,
|
||||||
|
SNAKE_RETURN_VELOCITY_MAX,
|
||||||
|
SNAKE_RETURN_LIFETIME,
|
||||||
|
sender
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,14 @@
|
|||||||
|
|
||||||
#include "../../ecs_component.h"
|
#include "../../ecs_component.h"
|
||||||
#include "../../component/component_game_object.h"
|
#include "../../component/component_game_object.h"
|
||||||
|
#include "../../component/action/component_return.h"
|
||||||
|
|
||||||
#define SNAKE_SPEED 1
|
#define SNAKE_SPEED 1
|
||||||
#define SNAKE_FRICTION 1
|
#define SNAKE_FRICTION 1
|
||||||
#define SNAKE_VELOCITY_MAX 50
|
#define SNAKE_VELOCITY_MAX 50
|
||||||
|
#define SNAKE_RETURN_SPEED 1
|
||||||
|
#define SNAKE_RETURN_VELOCITY_MAX 100
|
||||||
|
#define SNAKE_RETURN_LIFETIME 20
|
||||||
static const vec2 SNAKE_SIZE = {25.0f, 25.0f};
|
static const vec2 SNAKE_SIZE = {25.0f, 25.0f};
|
||||||
|
|
||||||
void entity_snake_init(ECS* ecs, u32 id, vec3 position);
|
void entity_snake_init(ECS* ecs, u32 id, vec3 position, u32 sender);
|
||||||
|
@ -34,18 +34,6 @@ _game_tick(Game* self)
|
|||||||
if (event_press(&self->input.event, EVENT_QUIT))
|
if (event_press(&self->input.event, EVENT_QUIT))
|
||||||
_game_quit(self);
|
_game_quit(self);
|
||||||
|
|
||||||
if (self->isFullscreen)
|
|
||||||
{
|
|
||||||
if (keyboard_press(&self->input.keyboard, KEYBOARD_KEY_F))
|
|
||||||
fullscreen_exit(&self->window, &self->renderer);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (keyboard_press(&self->input.keyboard, KEYBOARD_KEY_F))
|
|
||||||
fullscreen_set(&self->window, &self->renderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
vec2 position;
|
vec2 position;
|
||||||
vec2 mousePosition;
|
vec2 mousePosition;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user