kettek2/wiki/games/newsboy/Newsboy_0x00/engine/state_test.c

175 lines
4.6 KiB
C

#include "state_test.h"
#include "report.h"
#include "globals.h"
#include "AnimData.h"
#include "EntityManager.h"
#include "PTime.h"
int openTestState() {
report(DEBUG, "openTestState", "all ur bogomips r belong to us\n");
memset(&keys, 0, KEY_COUNT);
player_animation = loadResource(g_animdata, "gfx/cyb_pl.anim");
struct Entity *player_entity = newEntity();
player_id = addEntity(&g_entity_manager, player_entity);
if (player_id < 0) {
printf("ERRORORORORO\n");
}
setEntityAnimation(&g_entity_manager, player_id, "gfx/cyb_pl.anim");
setEntitySet(&g_entity_manager, player_id, "walk");
setEntityFace(&g_entity_manager, player_id, "s");
printf("player id: %d\n", player_id);
printf("anim: %d\n", getEntity(&g_entity_manager, player_id)->anim.anim_id);
current_anim = getResourceById(g_animdata, player_entity->anim.anim_id);
printf("anim: %d\n", getEntity(&g_entity_manager, player_id)->anim.anim_id);
struct Entity *current_entity = getEntity(&g_entity_manager, player_id);
current_anim = getResourceById(g_animdata, player_animation);
current_set = getResourceById(current_anim, current_entity->anim.set_id);
current_face = getResource(current_set, "se");
current_frame = &current_face->frames[0];
frame = 0;
if (loadResource(g_sprites, current_frame->file) < 0) {
printf("err\n");
}
printf("current frame is %s!\n", current_frame->file);
x = y = 0;
return 0;
}
void closeTestState() {
freeResource(g_sprites, "gfx/cyb_pl/idle/s/0000.png");
report(DEBUG, "closeTestState", "bai\n");
}
void handleTestState(SDL_Event event) {
switch(event.type) {
// TODO: read from keybinds configuration
case SDL_KEYDOWN:
switch(event.key.keysym.sym) {
case SDLK_a:
keys[WEST] = 1;
break;
case SDLK_d:
keys[EAST] = 1;
break;
case SDLK_w:
keys[NORTH] = 1;
break;
case SDLK_s:
keys[SOUTH] = 1;
break;
default:
break;
}
break;
case SDL_KEYUP:
switch(event.key.keysym.sym) {
case SDLK_a:
keys[WEST] = 0;
break;
case SDLK_d:
keys[EAST] = 0;
break;
case SDLK_w:
keys[NORTH] = 0;
break;
case SDLK_s:
keys[SOUTH] = 0;
break;
default:
break;
}
break;
default:
break;
}
}
void processTestState() {
//report(DEBUG, "process", "delta(%ld): %ldns %ldms\n", g_delta.n, g_tickrate.n, g_tickrate.m);
int i = 0;
int moving = 0;
struct Entity *current_entity = getEntity(&g_entity_manager, player_id);
while(i<KEY_COUNT) {
if (keys[i] == 1) {
switch(i) {
case NORTH:
current_entity->dir = 8;
moving = 1;
y--;
break;
case EAST:
current_entity->dir = 6;
moving = 1;
x++;
break;
case WEST:
current_entity->dir = 4;
moving = 1;
x--;
break;
case SOUTH:
current_entity->dir = 2;
moving = 1;
y++;
break;
default:
printf("who knows b\n");
break;
}
}
i++;
}
switch(current_entity->dir) {
case 8: // n
setEntityFace(&g_entity_manager, player_id, "n");
printf("SETTING to north: %d\n", current_entity->anim.face_id);
break;
case 6: // e
setEntityFace(&g_entity_manager, player_id, "n");
break;
case 4: // w
setEntityFace(&g_entity_manager, player_id, "w");
break;
case 2: // s
setEntityFace(&g_entity_manager, player_id, "s");
break;
}
/*test++;
if (test >= 2) {
if (frame < current_face->frame_count) {
current_frame = &current_face->frames[frame++];
} else {
frame = 0;
}
test = 0;
}*/
}
void renderTestState() {
struct Entity *entity;
int i;
for (i = 0; i < g_entity_manager.index.size;i++) {
entity = getEntity(&g_entity_manager, i);
if (entity == NULL) continue;
struct Resource *current_anim = getResourceById(g_animdata, entity->anim.anim_id);
if (current_anim == NULL) continue;
struct Resource *current_set = getResourceById(current_anim, entity->anim.set_id);
if (current_set == NULL) continue;
struct FaceData *current_face = getResourceById(current_set, entity->anim.face_id);
printf("face is %d!\n", entity->anim.face_id);
if (current_face == NULL) continue;
struct FrameData *current_frame = getFrame(current_face, entity->anim.frame);
renderSprite(getResourceById(g_sprites, loadResource(g_sprites, current_frame->file)), 64+x, 64+y);
}
}