- Afegit nom als actors

- [BUG] Els actors es movien magicament (push no definit)
- Clear de actors
- Comencem amb l'editor
This commit is contained in:
2023-06-04 11:37:27 +02:00
parent 5ee23cb000
commit 312bed64da
5 changed files with 57 additions and 28 deletions

2
.gitignore vendored
View File

@@ -1,4 +1,4 @@
*.exe *.exe
*.dll *.dll
vscode/* .vscode/*
thepool thepool

View File

@@ -19,14 +19,16 @@ namespace actor
return first; return first;
} }
actor_t *create(vec3_t p, vec3_t s, SDL_Rect r, SDL_Point o) actor_t *create(const char *name, vec3_t p, vec3_t s, SDL_Rect r, SDL_Point o)
{ {
actor_t *act = (actor_t*)malloc(sizeof(actor_t)); actor_t *act = (actor_t*)malloc(sizeof(actor_t));
strcpy(act->name, name);
act->pos = p; act->pos = p;
act->size = s; act->size = s;
act->bmp_rect = r; act->bmp_rect = r;
act->bmp_offset = o; act->bmp_offset = o;
act->anim_cycle = 0; act->anim_cycle = act->orient = 0;
act->push = act->mov_push = PUSH_NONE;
act->below = act->above = nullptr; act->below = act->above = nullptr;
act->prev = act->next = nullptr; act->prev = act->next = nullptr;
return act; return act;
@@ -582,4 +584,16 @@ namespace actor
(obj1->pos.z < obj2->pos.z + obj2->size.z) && (obj1->pos.z < obj2->pos.z + obj2->size.z) &&
(obj1->pos.z + obj1->size.z > obj2->pos.z ); (obj1->pos.z + obj1->size.z > obj2->pos.z );
} }
void clear()
{
actor_t *act = first;
while (act)
{
actor_t *tmp = act->next;
free(act);
act = tmp;
}
first = dirty = nullptr;
}
} }

View File

@@ -33,6 +33,7 @@ namespace actor
{ {
struct actor_t struct actor_t
{ {
char name[8];
SDL_Rect bmp_rect; SDL_Rect bmp_rect;
SDL_Point bmp_offset; SDL_Point bmp_offset;
@@ -60,7 +61,7 @@ namespace actor
actor_t *getFirst(); actor_t *getFirst();
actor_t *create(vec3_t p, vec3_t s, SDL_Rect r, SDL_Point o); actor_t *create(const char *name, vec3_t p, vec3_t s, SDL_Rect r, SDL_Point o);
void setDirty(actor_t *act, const bool force=false); void setDirty(actor_t *act, const bool force=false);
@@ -75,4 +76,6 @@ namespace actor
actor_t *get_collision(actor_t *act); actor_t *get_collision(actor_t *act);
const bool check_collision(actor_t *obj1, actor_t *obj2); const bool check_collision(actor_t *obj1, actor_t *obj2);
void clear();
} }

View File

@@ -7,6 +7,31 @@
draw::surface *surf; draw::surface *surf;
actor::actor_t *box; actor::actor_t *box;
int ii = 0;
void restart()
{
actor::clear();
room::load(ii,3);
box = actor::create("ASCENSOR",{16,32,0}, {8,8,4}, {64,0,32,24}, {0,24});
box->flags = FLAG_MOVING;
box->movement = MOV_Z;
box->mov_push = PUSH_ZP;
actor::setDirty(box, true);
box = actor::create("BOX", {32,32,16}, {8,8,8}, {32,0,32,32}, {0,32});
box->flags = FLAG_PUSHABLE | FLAG_GRAVITY;
box->movement = MOV_CW;
box->mov_push = PUSH_XN;
actor::setDirty(box, true);
box = actor::create("HERO", {16,32,8}, {8,8,12}, {0,32,20,32}, {-6,38});
box->flags = FLAG_HERO | FLAG_PUSHABLE | FLAG_GRAVITY | FLAG_ORIENTABLE | FLAG_ANIMATED;
actor::setDirty(box, true);
actor::reorder();
}
void game::init() void game::init()
{ {
@@ -16,25 +41,7 @@ void game::init()
draw::loadPalette("test.gif"); draw::loadPalette("test.gif");
game::setUpdateTicks(64); game::setUpdateTicks(64);
room::load(3,3); restart();
box = actor::create({16,32,0}, {8,8,4}, {64,0,32,24}, {0,24});
box->flags = FLAG_MOVING;
box->movement = MOV_Z;
box->mov_push = PUSH_ZP;
actor::setDirty(box, true);
box = actor::create({32,32,16}, {8,8,8}, {32,0,32,32}, {0,32});
box->flags = FLAG_PUSHABLE | FLAG_GRAVITY;
box->movement = MOV_CW;
box->mov_push = PUSH_XN;
actor::setDirty(box, true);
box = actor::create({16,32,8}, {8,8,12}, {0,32,20,32}, {-6,38});
box->flags = FLAG_HERO | FLAG_PUSHABLE | FLAG_GRAVITY | FLAG_ORIENTABLE | FLAG_ANIMATED;
actor::setDirty(box, true);
actor::reorder();
} }
int sx=1, sy=0; int sx=1, sy=0;
@@ -42,6 +49,11 @@ int sx=1, sy=0;
bool game::loop() bool game::loop()
{ {
if ( input::keyDown(SDL_SCANCODE_Q) )
{
ii++;if(ii>3)ii=0;
restart();
}
actor::update(actor::getFirst()); actor::update(actor::getFirst());
actor::reorder(); actor::reorder();

View File

@@ -10,7 +10,7 @@ namespace room
static vec3_t min = {0,0,0}; static vec3_t min = {0,0,0};
static vec3_t max = {56,56,56}; static vec3_t max = {56,56,56};
static uint8_t doors = 15; //OOR_XP /*| DOOR_YP*/ ; static uint8_t doors = DOOR_XP /*| DOOR_YP*/ ;
static uint8_t door_height[4]; static uint8_t door_height[4];
void load(int x, int y) void load(int x, int y)
@@ -27,20 +27,20 @@ namespace room
if (doors & DOOR_YP) if (doors & DOOR_YP)
{ {
actor::actor_t *act = actor::create({24,(tmax.y+1)*8,0}, {8,8,(door_height[2])*4}, {0,1,32,15}, {0,15+door_height[2]*8}); actor::actor_t *act = actor::create("DOOR_YP1", {24,(tmax.y+1)*8,0}, {8,8,(door_height[2])*4}, {0,1,32,15}, {0,15+door_height[2]*8});
act->flags = FLAG_NONE; act->flags = FLAG_NONE;
actor::setDirty(act, true); actor::setDirty(act, true);
act = actor::create({32,(tmax.y+1)*8,0}, {8,8,(door_height[2])*4}, {0,1,32,15}, {0,15+door_height[2]*8}); act = actor::create("DOOR_YP2", {32,(tmax.y+1)*8,0}, {8,8,(door_height[2])*4}, {0,1,32,15}, {0,15+door_height[2]*8});
act->flags = FLAG_NONE; act->flags = FLAG_NONE;
actor::setDirty(act, true); actor::setDirty(act, true);
} }
if (doors & DOOR_XP) if (doors & DOOR_XP)
{ {
actor::actor_t *act = actor::create({(tmax.x+1)*8,24,0}, {8,8,(door_height[0])*4}, {0,1,32,15}, {0,15+door_height[0]*8}); actor::actor_t *act = actor::create("DOOR_XP1", {(tmax.x+1)*8,24,0}, {8,8,(door_height[0])*4}, {0,1,32,15}, {0,15+door_height[0]*8});
act->flags = FLAG_NONE; act->flags = FLAG_NONE;
actor::setDirty(act, true); actor::setDirty(act, true);
act = actor::create({(tmax.x+1)*8,32,0}, {8,8,(door_height[0])*4}, {0,1,32,15}, {0,15+door_height[0]*8}); act = actor::create("DOOR_XP2", {(tmax.x+1)*8,32,0}, {8,8,(door_height[0])*4}, {0,1,32,15}, {0,15+door_height[0]*8});
act->flags = FLAG_NONE; act->flags = FLAG_NONE;
actor::setDirty(act, true); actor::setDirty(act, true);
} }