Added a mousepointer for later use.
This commit is contained in:
parent
c19fb67279
commit
f3269436e0
2
.vimrc
2
.vimrc
|
@ -1,4 +1,6 @@
|
|||
nnoremap <F1> :Make<cr>
|
||||
nnoremap <F2> :Make clean<cr>
|
||||
nnoremap <F3> :Make test<cr>
|
||||
nnoremap <F4> :!./build/breakhack<cr>
|
||||
|
||||
let g:syntastic_c_include_dirs = [ 'build' ]
|
||||
|
|
|
@ -61,6 +61,7 @@ add_executable(breakhack
|
|||
src/gui
|
||||
src/item
|
||||
src/item_builder
|
||||
src/pointer
|
||||
)
|
||||
|
||||
target_link_libraries(breakhack
|
||||
|
|
4
Makefile
4
Makefile
|
@ -9,3 +9,7 @@ clean:
|
|||
test:
|
||||
@make test -sC build
|
||||
.PHONY: test
|
||||
|
||||
run: $(all)
|
||||
@./build/breakhack
|
||||
.PHONY: run
|
||||
|
|
|
@ -43,7 +43,8 @@ eat_flesh(Item *item, Player *player)
|
|||
if (player->stats.hp > player->stats.maxhp)
|
||||
player->stats.hp = player->stats.maxhp;
|
||||
|
||||
gui_log("You eat some foul meat and gain %d health", player->stats.hp - original_hp);
|
||||
gui_log("You eat some foul meat and gain %d health",
|
||||
player->stats.hp - original_hp);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -54,7 +55,8 @@ drink_health(Item *item, Player *player)
|
|||
if (player->stats.hp > player->stats.maxhp)
|
||||
player->stats.hp = player->stats.maxhp;
|
||||
|
||||
gui_log("You drink a health potion and gain %d health", player->stats.hp - original_hp);
|
||||
gui_log("You drink a health potion and gain %d health",
|
||||
player->stats.hp - original_hp);
|
||||
}
|
||||
|
||||
static Item *
|
||||
|
@ -82,11 +84,22 @@ pickup_gold(Item *item, Player *player)
|
|||
}
|
||||
|
||||
static Item *
|
||||
create_treasure(void)
|
||||
create_treasure(int current_level)
|
||||
{
|
||||
unsigned int value = rand() % TREASURE_COUNT;
|
||||
double amt = (unsigned int) rand() % 40;
|
||||
char label[50];
|
||||
unsigned int highest_treasure;
|
||||
unsigned int value;
|
||||
|
||||
if (current_level > 15) {
|
||||
highest_treasure = TREASURE_COUNT;
|
||||
} else if (current_level > 5) {
|
||||
highest_treasure = PLATINUM;
|
||||
} else {
|
||||
highest_treasure = GOLD;
|
||||
}
|
||||
|
||||
value = rand() % highest_treasure;
|
||||
|
||||
SDL_Rect clip = { 0, 0, 16, 16 };
|
||||
switch (value) {
|
||||
|
@ -125,7 +138,7 @@ create_treasure(void)
|
|||
}
|
||||
|
||||
Item *
|
||||
item_builder_build_item(ItemKey key)
|
||||
item_builder_build_item(ItemKey key, int level)
|
||||
{
|
||||
static const char *path_flesh = "assets/Items/Flesh.png";
|
||||
static const char *path_potion = "assets/Items/Potion.png";
|
||||
|
@ -135,7 +148,7 @@ item_builder_build_item(ItemKey key)
|
|||
Item *item = NULL;
|
||||
switch (key) {
|
||||
case TREASURE:
|
||||
item = create_treasure();
|
||||
item = create_treasure(level);
|
||||
break;
|
||||
case FLESH:
|
||||
item = create_item(path_flesh,
|
||||
|
|
|
@ -28,7 +28,7 @@ void
|
|||
item_builder_init(SDL_Renderer *);
|
||||
|
||||
Item *
|
||||
item_builder_build_item(ItemKey key);
|
||||
item_builder_build_item(ItemKey key, int level);
|
||||
|
||||
Item *
|
||||
item_builder_build_sack(void);
|
||||
|
|
15
src/main.c
15
src/main.c
|
@ -16,14 +16,15 @@
|
|||
#include "gui.h"
|
||||
#include "util.h"
|
||||
#include "item_builder.h"
|
||||
#include "pointer.h"
|
||||
|
||||
static SDL_Window *gWindow = NULL;
|
||||
static SDL_Renderer *gRenderer = NULL;
|
||||
static Player *gPlayer = NULL;
|
||||
static LinkedList *gSpriteList = NULL;
|
||||
static Map *gMap = NULL;
|
||||
static RoomMatrix *gRoomMatrix = NULL;
|
||||
static Gui *gGui = NULL;
|
||||
static Pointer *gPointer = NULL;
|
||||
static unsigned int cLevel = 1;
|
||||
static double renderScale = 1.0;
|
||||
static GameState gGameState;
|
||||
|
@ -114,10 +115,11 @@ initViewports(void)
|
|||
static
|
||||
bool initGame(void)
|
||||
{
|
||||
gSpriteList = linkedlist_create();
|
||||
initViewports();
|
||||
gMap = map_lua_generator_run(cLevel, gRenderer);
|
||||
return gSpriteList == NULL;
|
||||
gPointer = pointer_create(gRenderer);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static
|
||||
|
@ -161,6 +163,7 @@ bool handle_events(void)
|
|||
camera_follow_position(&gCamera, &gPlayer->sprite->pos);
|
||||
map_set_current_room(gMap, &gPlayer->sprite->pos);
|
||||
}
|
||||
pointer_handle_event(gPointer, &event);
|
||||
}
|
||||
return quit;
|
||||
}
|
||||
|
@ -198,11 +201,13 @@ check_next_level(void)
|
|||
static void
|
||||
run_game(void)
|
||||
{
|
||||
SDL_RenderSetViewport(gRenderer, NULL);
|
||||
map_clear_dead_monsters(gMap);
|
||||
map_clear_collected_items(gMap);
|
||||
roommatrix_populate_from_map(gRoomMatrix, gMap);
|
||||
roommatrix_add_lightsource(gRoomMatrix,
|
||||
&gPlayer->sprite->pos);
|
||||
|
||||
roommatrix_build_lightmap(gRoomMatrix);
|
||||
|
||||
gui_set_max_health(gGui, gPlayer->stats.maxhp, gRenderer);
|
||||
|
@ -228,6 +233,9 @@ run_game(void)
|
|||
gui_render_log(gGui, BOTTOM_GUI_WIDTH,
|
||||
BOTTOM_GUI_HEIGHT, &gCamera);
|
||||
|
||||
SDL_RenderSetViewport(gRenderer, NULL);
|
||||
pointer_render(gPointer, &gCamera);
|
||||
|
||||
SDL_RenderPresent(gRenderer);
|
||||
|
||||
if (check_if_dead())
|
||||
|
@ -283,6 +291,7 @@ void close(void)
|
|||
map_destroy(gMap);
|
||||
roommatrix_destroy(gRoomMatrix);
|
||||
gui_destroy(gGui);
|
||||
pointer_destroy(gPointer);
|
||||
item_builder_close();
|
||||
SDL_DestroyRenderer(gRenderer);
|
||||
SDL_DestroyWindow(gWindow);
|
||||
|
|
|
@ -260,12 +260,12 @@ monster_drop_loot(Monster *monster, Map *map)
|
|||
unsigned int item_count = 0;
|
||||
|
||||
if ((rand() % treasure_drop_chance) == 0) {
|
||||
item = item_builder_build_item(TREASURE);
|
||||
item = item_builder_build_item(TREASURE, map->level);
|
||||
item->sprite->pos = monster->sprite->pos;
|
||||
items[item_count++] = item;
|
||||
}
|
||||
if ((rand() % item_drop_chance) == 0) {
|
||||
item = item_builder_build_item(rand() % TREASURE);
|
||||
item = item_builder_build_item(rand() % TREASURE, map->level);
|
||||
item->sprite->pos = monster->sprite->pos;
|
||||
items[item_count++] = item;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
#include "pointer.h"
|
||||
#include "util.h"
|
||||
|
||||
Pointer *
|
||||
pointer_create(SDL_Renderer *renderer)
|
||||
{
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
|
||||
Pointer *p = ec_malloc(sizeof(Pointer));
|
||||
p->sprite = sprite_create();
|
||||
sprite_load_texture(p->sprite, "assets/Items/MedWep.png", 0, renderer);
|
||||
p->sprite->fixed = true;
|
||||
p->sprite->clip = (SDL_Rect) { 0, 0, 16, 16 };
|
||||
p->sprite->textures[0]->dim = (Dimension) {
|
||||
TILE_DIMENSION, TILE_DIMENSION };
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void
|
||||
pointer_handle_event(Pointer *p, SDL_Event *event)
|
||||
{
|
||||
if (event->type == SDL_MOUSEMOTION) {
|
||||
p->sprite->pos.x = event->motion.x;
|
||||
p->sprite->pos.y = event->motion.y;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
pointer_render(Pointer *p, Camera *cam)
|
||||
{
|
||||
sprite_render(p->sprite, cam);
|
||||
}
|
||||
|
||||
void
|
||||
pointer_destroy(Pointer *p)
|
||||
{
|
||||
SDL_ShowCursor(SDL_ENABLE);
|
||||
|
||||
sprite_destroy(p->sprite);
|
||||
free(p);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
#ifndef POINTER_H_
|
||||
#define POINTER_H_
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
#include "sprite.h"
|
||||
#include "camera.h"
|
||||
|
||||
typedef struct Pointer_t {
|
||||
Sprite *sprite;
|
||||
} Pointer;
|
||||
|
||||
Pointer *
|
||||
pointer_create(SDL_Renderer *renderer);
|
||||
|
||||
void
|
||||
pointer_handle_event(Pointer*, SDL_Event *event);
|
||||
|
||||
void
|
||||
pointer_render(Pointer*, Camera*);
|
||||
|
||||
void
|
||||
pointer_destroy(Pointer*);
|
||||
|
||||
#endif // POINTER_H_
|
Loading…
Reference in New Issue