Action texts on player and some refactoring
This commit is contained in:
parent
1c48f1dd9a
commit
64a9105d21
13
src/main.c
13
src/main.c
|
@ -111,7 +111,7 @@ bool init()
|
||||||
static
|
static
|
||||||
void loadMedia()
|
void loadMedia()
|
||||||
{
|
{
|
||||||
gPlayer = player_create(WARRIOR, gRenderer);
|
gPlayer = player_create(ROGUE, gRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -152,20 +152,15 @@ void run()
|
||||||
roommatrix_build_lightmap(gRoomMatrix);
|
roommatrix_build_lightmap(gRoomMatrix);
|
||||||
|
|
||||||
if (gPlayer->steps == gPlayer->stats.speed) {
|
if (gPlayer->steps == gPlayer->stats.speed) {
|
||||||
player_print(gPlayer);
|
player_reset_steps(gPlayer);
|
||||||
gPlayer->steps = 0;
|
roommatrix_update_with_player(gRoomMatrix, gPlayer);
|
||||||
Position rp =
|
|
||||||
position_to_matrix_coords(&gPlayer->sprite->pos);
|
|
||||||
gRoomMatrix->spaces[rp.x][rp.y].occupied = true;
|
|
||||||
gRoomMatrix->spaces[rp.x][rp.y].player = gPlayer;
|
|
||||||
gRoomMatrix->playerRoomPos = rp;
|
|
||||||
map_move_monsters(gMap, gRoomMatrix);
|
map_move_monsters(gMap, gRoomMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_RenderClear(gRenderer);
|
SDL_RenderClear(gRenderer);
|
||||||
|
|
||||||
map_render(gMap, &gCamera);
|
map_render(gMap, &gCamera);
|
||||||
sprite_render(gPlayer->sprite, &gCamera);
|
player_render(gPlayer, &gCamera);
|
||||||
roommatrix_render_lightmap(gRoomMatrix, &gCamera);
|
roommatrix_render_lightmap(gRoomMatrix, &gCamera);
|
||||||
|
|
||||||
SDL_RenderPresent(gRenderer);
|
SDL_RenderPresent(gRenderer);
|
||||||
|
|
|
@ -60,7 +60,9 @@ has_collided(Monster *monster, RoomMatrix *matrix)
|
||||||
RoomSpace *space = &matrix->spaces[roomPos.x][roomPos.y];
|
RoomSpace *space = &matrix->spaces[roomPos.x][roomPos.y];
|
||||||
|
|
||||||
if (space->player) {
|
if (space->player) {
|
||||||
stats_fight(&monster->stats, &space->player->stats);
|
unsigned int dmg = stats_fight(&monster->stats,
|
||||||
|
&space->player->stats);
|
||||||
|
player_hit(space->player, dmg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return space->occupied;
|
return space->occupied;
|
||||||
|
|
51
src/player.c
51
src/player.c
|
@ -43,6 +43,8 @@ player_step(Player *p, RoomMatrix* m)
|
||||||
{
|
{
|
||||||
p->total_steps++;
|
p->total_steps++;
|
||||||
p->steps++;
|
p->steps++;
|
||||||
|
p->missText->pos = p->sprite->pos;
|
||||||
|
p->hitText->pos = p->sprite->pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -121,6 +123,24 @@ void handle_player_input(Player *player, RoomMatrix *matrix, SDL_Event *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
player_load_texts(Player *p, SDL_Renderer *renderer)
|
||||||
|
{
|
||||||
|
ActionText *t = actiontext_create();
|
||||||
|
actiontext_load_font(t, "assets/GUI/SDS_6x6.ttf", 14);
|
||||||
|
t->color = (SDL_Color) { 255, 100, 0 };
|
||||||
|
actiontext_set_text(t, "HIT", renderer);
|
||||||
|
t->pos = p->sprite->pos;
|
||||||
|
p->hitText = t;
|
||||||
|
|
||||||
|
t = actiontext_create();
|
||||||
|
actiontext_load_font(t, "assets/GUI/SDS_6x6.ttf", 14);
|
||||||
|
t->color = (SDL_Color) { 255, 255, 0 };
|
||||||
|
actiontext_set_text(t, "MISS", renderer);
|
||||||
|
t->pos = p->sprite->pos;
|
||||||
|
p->missText = t;
|
||||||
|
}
|
||||||
|
|
||||||
Player*
|
Player*
|
||||||
player_create(class_t class, SDL_Renderer *renderer)
|
player_create(class_t class, SDL_Renderer *renderer)
|
||||||
{
|
{
|
||||||
|
@ -161,10 +181,32 @@ player_create(class_t class, SDL_Renderer *renderer)
|
||||||
TILE_DIMENSION, TILE_DIMENSION };
|
TILE_DIMENSION, TILE_DIMENSION };
|
||||||
player->handle_event = &handle_player_input;
|
player->handle_event = &handle_player_input;
|
||||||
|
|
||||||
|
player_load_texts(player, renderer);
|
||||||
|
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
player_hit(Player *p, unsigned int dmg)
|
||||||
|
{
|
||||||
|
if (dmg > 0) {
|
||||||
|
p->hitText->active = true;
|
||||||
|
p->missText->active = false;
|
||||||
|
} else {
|
||||||
|
p->missText->active = true;
|
||||||
|
p->hitText->active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
player_render(Player *player, Camera *cam)
|
||||||
|
{
|
||||||
|
sprite_render(player->sprite, cam);
|
||||||
|
actiontext_render(player->hitText, cam);
|
||||||
|
actiontext_render(player->missText, cam);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
player_print(Player *p)
|
player_print(Player *p)
|
||||||
{
|
{
|
||||||
Position roomPos = position_to_matrix_coords(&p->sprite->pos);
|
Position roomPos = position_to_matrix_coords(&p->sprite->pos);
|
||||||
|
@ -179,11 +221,20 @@ player_print(Player *p)
|
||||||
printf("------------------------------------------\n");
|
printf("------------------------------------------\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
player_reset_steps(Player *p)
|
||||||
|
{
|
||||||
|
p->steps = 0;
|
||||||
|
player_print(p);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
player_destroy(Player *player)
|
player_destroy(Player *player)
|
||||||
{
|
{
|
||||||
if (player->sprite)
|
if (player->sprite)
|
||||||
sprite_destroy(player->sprite);
|
sprite_destroy(player->sprite);
|
||||||
|
actiontext_destroy(player->hitText);
|
||||||
|
actiontext_destroy(player->missText);
|
||||||
|
|
||||||
free(player);
|
free(player);
|
||||||
}
|
}
|
||||||
|
|
10
src/player.h
10
src/player.h
|
@ -4,12 +4,16 @@
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
|
#include "actiontext.h"
|
||||||
|
#include "camera.h"
|
||||||
|
|
||||||
enum PlayerClass { ENGINEER, MAGE, PALADIN, ROGUE, WARRIOR };
|
enum PlayerClass { ENGINEER, MAGE, PALADIN, ROGUE, WARRIOR };
|
||||||
typedef enum PlayerClass class_t;
|
typedef enum PlayerClass class_t;
|
||||||
|
|
||||||
typedef struct Player_t {
|
typedef struct Player_t {
|
||||||
Sprite *sprite;
|
Sprite *sprite;
|
||||||
|
ActionText *hitText;
|
||||||
|
ActionText *missText;
|
||||||
Stats stats;
|
Stats stats;
|
||||||
unsigned int xp;
|
unsigned int xp;
|
||||||
unsigned int total_steps;
|
unsigned int total_steps;
|
||||||
|
@ -19,7 +23,11 @@ typedef struct Player_t {
|
||||||
|
|
||||||
Player* player_create(class_t, SDL_Renderer*);
|
Player* player_create(class_t, SDL_Renderer*);
|
||||||
|
|
||||||
void player_print(Player*);
|
void player_hit(Player*, unsigned int dmg);
|
||||||
|
|
||||||
|
void player_reset_steps(Player*);
|
||||||
|
|
||||||
|
void player_render(Player*, Camera*);
|
||||||
|
|
||||||
void player_destroy(Player*);
|
void player_destroy(Player*);
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "roommatrix.h"
|
#include "roommatrix.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
#include "player.h"
|
||||||
|
|
||||||
RoomMatrix* roommatrix_create()
|
RoomMatrix* roommatrix_create()
|
||||||
{
|
{
|
||||||
|
@ -72,6 +73,15 @@ max(int a, int b)
|
||||||
return a > b ? a : b;
|
return a > b ? a : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
roommatrix_update_with_player(RoomMatrix *rm, Player *p)
|
||||||
|
{
|
||||||
|
Position rp = position_to_matrix_coords(&p->sprite->pos);
|
||||||
|
rm->spaces[rp.x][rp.y].occupied = true;
|
||||||
|
rm->spaces[rp.x][rp.y].player = p;
|
||||||
|
rm->playerRoomPos = rp;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
roommatrix_add_lightsource(RoomMatrix *matrix, Position *pos)
|
roommatrix_add_lightsource(RoomMatrix *matrix, Position *pos)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,6 +29,8 @@ RoomMatrix* roommatrix_create();
|
||||||
|
|
||||||
void roommatrix_populate_from_map(RoomMatrix*, Map*);
|
void roommatrix_populate_from_map(RoomMatrix*, Map*);
|
||||||
|
|
||||||
|
void roommatrix_update_with_player(RoomMatrix*, Player*);
|
||||||
|
|
||||||
void roommatrix_add_lightsource(RoomMatrix*, Position*);
|
void roommatrix_add_lightsource(RoomMatrix*, Position*);
|
||||||
|
|
||||||
void roommatrix_build_lightmap(RoomMatrix*);
|
void roommatrix_build_lightmap(RoomMatrix*);
|
||||||
|
|
Loading…
Reference in New Issue