|
@@ -1,34 +1,18 @@
|
|
|
-#include <tice.h>
|
|
|
#include <graphx.h>
|
|
|
#include <keypadc.h>
|
|
|
-#include <debug.h>
|
|
|
#include <compression.h>
|
|
|
|
|
|
#include "gfx/main_gfx.h"
|
|
|
-#include "lib/vector.h"
|
|
|
-#include "lib/sprite.h"
|
|
|
-#include "lib/object.h"
|
|
|
-
|
|
|
-int walk_speed = 1;
|
|
|
-int run_speed = 3;
|
|
|
-float scale = 3.0;
|
|
|
-int frameskip = 10;
|
|
|
-
|
|
|
-
|
|
|
-#define log(msg) dbg_sprintf(dbgout, "[TBP] %s\n", msg)
|
|
|
+#include "main.h"
|
|
|
+#include "objects/player.h"
|
|
|
|
|
|
int main(void){
|
|
|
- kb_key_t arrows;
|
|
|
- int max_width = LCD_WIDTH;
|
|
|
- int max_height = LCD_HEIGHT;
|
|
|
- int frame = 0;
|
|
|
size_t i;
|
|
|
- int speed;
|
|
|
- Object* object;
|
|
|
+ Scene* scene = new_Scene("Main");
|
|
|
Sprite* sprite;
|
|
|
- Object* player = new_Object(0, 0);
|
|
|
- Vector* objects = new_Vector(1, sizeof(Object), &free_Object);
|
|
|
- Vector* sprites = new_Vector(22, sizeof(Sprite), &free_Sprite);
|
|
|
+ Object* player = new_Player();
|
|
|
+ Vector* objects = scene->objects;
|
|
|
+ Vector* sprites = scene->sprites;
|
|
|
if(!sprites->consume(sprites, new_Sprite(bm1_width, bm1_height, bm1_compressed)) ||
|
|
|
!sprites->consume(sprites, new_Sprite(bm2_width, bm2_height, bm2_compressed)) ||
|
|
|
!sprites->consume(sprites, new_Sprite(bm3_width, bm3_height, bm3_compressed)) ||
|
|
@@ -53,19 +37,15 @@ int main(void){
|
|
|
!sprites->consume(sprites, new_Sprite(bm22_width, bm22_height, bm22_compressed))
|
|
|
){
|
|
|
log("Failed to load sprites");
|
|
|
- free_Object(player);
|
|
|
- free_Vector(objects);
|
|
|
- free_Vector(sprites);
|
|
|
+ free_Scene(scene);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
- if(!objects->push(objects, player)){
|
|
|
+ if(!objects->consume(objects, player)){
|
|
|
log("Unable to add player to stack");
|
|
|
- free_Vector(objects);
|
|
|
- free_Object(player);
|
|
|
+ free_Scene(scene);
|
|
|
return 1;
|
|
|
}
|
|
|
- free_Object(player);
|
|
|
player = objects->get(objects, 0);
|
|
|
player->sprite = sprites->get(sprites, 0);
|
|
|
log("Get max sizes");
|
|
@@ -75,14 +55,14 @@ int main(void){
|
|
|
dbg_sprintf(dbgout, "[Player] %d x %d\n", player->sprite->data->width, player->sprite->data->height);
|
|
|
for(i = 0; i < sprites->count(sprites); i++){
|
|
|
sprite = sprites->get(sprites, i);
|
|
|
- sprite->resize(sprite, sprite->data->width * scale, sprite->data->height * scale);
|
|
|
+ sprite->resize(sprite, sprite->data->width * SCALE, sprite->data->height * SCALE);
|
|
|
}
|
|
|
dbg_sprintf(dbgout, "[Player] %d x %d\n", player->sprite->data->width, player->sprite->data->height);
|
|
|
#else
|
|
|
- player->scale.x = scale;
|
|
|
- player->scale.y = scale;
|
|
|
- max_width -= player->width(player);
|
|
|
- max_height -= player->height(player);
|
|
|
+ player->scale.x = SCALE;
|
|
|
+ player->scale.y = SCALE;
|
|
|
+ MAX_WIDTH -= player->width(player);
|
|
|
+ MAX_HEIGHT -= player->height(player);
|
|
|
#endif
|
|
|
|
|
|
log("Start graphics");
|
|
@@ -92,78 +72,12 @@ int main(void){
|
|
|
|
|
|
log("Main loop");
|
|
|
do{
|
|
|
- player->sprite = sprites->get(sprites, 0);
|
|
|
+ scene->update(scene);
|
|
|
kb_Scan();
|
|
|
- if(kb_Data[2] & kb_Alpha){
|
|
|
- speed = run_speed;
|
|
|
- }else{
|
|
|
- speed = walk_speed;
|
|
|
- }
|
|
|
- arrows = kb_Data[7];
|
|
|
- if(arrows & kb_Down){
|
|
|
- if(player->y < max_height){
|
|
|
- player->y += speed;
|
|
|
- if(frame > 2){
|
|
|
- player->sprite = sprites->get(sprites, 2);
|
|
|
- }else{
|
|
|
- player->sprite = sprites->get(sprites, 4);
|
|
|
- }
|
|
|
- }
|
|
|
- }else if(arrows & kb_Up){
|
|
|
- if(player->y > 0){
|
|
|
- player->y -= speed;
|
|
|
- if(frame > 2){
|
|
|
- player->sprite = sprites->get(sprites, 18);
|
|
|
- }else{
|
|
|
- player->sprite = sprites->get(sprites, 20);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(arrows & kb_Right){
|
|
|
- if(player->x < max_width){
|
|
|
- player->x += speed;
|
|
|
- if(frame > 2){
|
|
|
- player->sprite = sprites->get(sprites, 10);
|
|
|
- }else{
|
|
|
- player->sprite = sprites->get(sprites, 12);
|
|
|
- }
|
|
|
- }
|
|
|
- }else if(arrows & kb_Left){
|
|
|
- if(player->x > 0){
|
|
|
- player->x -= speed;
|
|
|
- if(frame > 2){
|
|
|
- player->sprite = sprites->get(sprites, 6);
|
|
|
- }else{
|
|
|
- player->sprite = sprites->get(sprites, 8);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(player->x < 0){
|
|
|
- player->x = 0;
|
|
|
- }else if(player->x >= max_width){
|
|
|
- player->x = max_width;
|
|
|
- }
|
|
|
- if(player->y < 0){
|
|
|
- player->y = 0;
|
|
|
- }else if(player->y >= max_height){
|
|
|
- player->y = max_height;
|
|
|
- }
|
|
|
- gfx_FillScreen(0);
|
|
|
- for(i = 0; i < objects->count(objects); i++){
|
|
|
- object = objects->get(objects, i);
|
|
|
- object->draw(object);
|
|
|
- }
|
|
|
- gfx_BlitBuffer();
|
|
|
- frame++;
|
|
|
- if(frame > frameskip){
|
|
|
- frame = 0;
|
|
|
- }
|
|
|
+ scene->draw(scene);
|
|
|
}while (! (kb_Data[6] & kb_Clear));
|
|
|
- log("Freeing sprites stack");
|
|
|
- free_Vector(sprites);
|
|
|
- player->sprite = NULL;
|
|
|
- log("Freeing objects stack");
|
|
|
- free_Vector(objects);
|
|
|
+ log("Freeing memory");
|
|
|
+ free_Scene(scene);
|
|
|
log("End graphics");
|
|
|
gfx_End();
|
|
|
log("Done");
|