123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include <keypadc.h>
- #include "../main.h"
- #include "player.h"
- #include <stdlib.h>
- #define Player_log(msg) dbg_sprintf(dbgout, "[Object(Player) %d] %s\n", self->id, msg)
- void Player_update(Object* base){
- Player* self = (Player*)base;
- Scene* scene = base->scene;
- Vector* sprites = scene->sprites;
- Sprite* sprite;
- kb_key_t arrows = kb_Data[7];
- int x = base->x;
- int y = base->y;
- int speed;
- #ifdef LOG_UPDATE
- Player_log("Drawing player");
- #endif
- if(kb_Data[2] & kb_Alpha){
- speed = RUN_SPEED;
- }else{
- speed = WALK_SPEED;
- }
- if(arrows & kb_Down){
- if(base->y < MAX_HEIGHT){
- base->y += speed;
- sprite = sprites->get(sprites, 2);
- if(sprite != base->sprite){
- base->sprite = sprite;
- }else{
- base->sprite = sprites->get(sprites, 4);
- }
- }
- }else if(arrows & kb_Up){
- if(base->y > 0){
- base->y -= speed;
- sprite = sprites->get(sprites, 18);
- if(sprite != base->sprite){
- base->sprite = sprite;
- }else{
- base->sprite = sprites->get(sprites, 20);
- }
- }
- }
- if(arrows & kb_Right){
- if(base->x < MAX_WIDTH){
- base->x += speed;
- sprite = sprites->get(sprites, 10);
- if(sprite != base->sprite){
- base->sprite = sprite;
- }else{
- base->sprite = sprites->get(sprites, 12);
- }
- }
- }else if(arrows & kb_Left){
- if(base->x > 0){
- base->x -= speed;
- sprite = sprites->get(sprites, 6);
- if(sprite != base->sprite){
- base->sprite = sprite;
- }else{
- base->sprite = sprites->get(sprites, 8);
- }
- }
- }
- if(base->x < 0){
- base->x = 0;
- }else if(base->x >= MAX_WIDTH){
- base->x = MAX_WIDTH;
- }
- if(base->y < 0){
- base->y = 0;
- }else if(base->y >= MAX_HEIGHT){
- base->y = MAX_HEIGHT;
- }
- if(x == base->x && y == base->y){
- base->sprite = sprites->get(sprites, 0);
- }
- }
- void Player_load(Object* base){
- Player_log("Loading player");
- Player* self = (Player*)base;
- }
- void Player_free(Object* base){
- Player* self = (Player*)base;
- Player_log("Freeing player");
- free(self->sprites);
- base->free = NULL;
- free_Object((Object*)self);
- free(self);
- }
- Player* new_Player(){
- Player* self = (Player*)malloc(sizeof(Player));
- Object* base = new_Object(0,0);
- self->base = *base;
- self->sprites = new_Vector(0, sizeof(Sprite), (vc_vector_deleter*)&free_Sprite);
- base->update = &Player_update;
- base->free = &Player_free;
- base->load = &Player_load;
- return self;
- }
|