124 lines
3.1 KiB
C++
124 lines
3.1 KiB
C++
#include "jgame.h"
|
|
#include "jdraw.h"
|
|
#include "jinput.h"
|
|
#include <SDL2/SDL.h>
|
|
#include "actor.h"
|
|
#include "room.h"
|
|
#include "jui.h"
|
|
|
|
draw::surface *surf;
|
|
int room_w = 2;
|
|
int room_h = 2;
|
|
int room_xp = -1;
|
|
int room_xn = -1;
|
|
int room_yp = -1;
|
|
int room_yn = -1;
|
|
int room_color = 9;
|
|
|
|
void restart()
|
|
{
|
|
actor::clear();
|
|
room::load(room_w, room_h, room_xp, room_xn, room_yp, room_yn, room_color);
|
|
|
|
/*
|
|
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);
|
|
*/
|
|
|
|
actor::actor_t *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()
|
|
{
|
|
draw::init("The Pool", 420, 240, 3);
|
|
|
|
room::init();
|
|
surf = draw::loadSurface("test.gif");
|
|
draw::setSource(surf);
|
|
draw::loadPalette("test.gif");
|
|
game::setUpdateTicks(64);
|
|
|
|
actor::actor_t *hero = actor::create("HERO", {16,32,8}, {8,8,12}, {0,32,20,32}, {-6,38});
|
|
hero->flags = FLAG_HERO | FLAG_PUSHABLE | FLAG_GRAVITY | FLAG_ORIENTABLE | FLAG_ANIMATED;
|
|
actor::setDirty(hero, true);
|
|
|
|
restart();
|
|
}
|
|
|
|
int sx=1, sy=0;
|
|
|
|
void print(int x, int y, int num)
|
|
{
|
|
int digits=0;
|
|
bool sign = num < 0;
|
|
num = SDL_abs(num);
|
|
int n = num;
|
|
while (n>0) {n=n/10;digits++;}
|
|
if (sign) digits++;
|
|
x=x+digits*4;
|
|
if (num==0) draw::draw(x+4,y,5,7,0,120);
|
|
while (num>0)
|
|
{
|
|
draw::draw(x,y,5,7,(num%10)*5,120);
|
|
num=num/10;
|
|
x=x-4;
|
|
}
|
|
if (sign) draw::draw(x,y,5,7,50,120);
|
|
}
|
|
|
|
void btn(const char* label, const int x, const int y, int &var, int min, int max)
|
|
{
|
|
char buffer[100];
|
|
int result=0;
|
|
draw::print(label, x, y+3, 15, 0);
|
|
result=ui::button(SDL_itoa(var, buffer, 10), x+50, y, 28, 11);
|
|
if (result)
|
|
{
|
|
var=SDL_max(min, SDL_min(max, var-(result-2)));
|
|
restart();
|
|
}
|
|
}
|
|
|
|
bool game::loop()
|
|
{
|
|
actor::update(actor::getFirst());
|
|
actor::reorder();
|
|
|
|
draw::cls(2);
|
|
room::draw();
|
|
actor::draw(actor::getFirst());
|
|
room::draw2();
|
|
//draw::draw(148+sx*2-sy*2, 67+sx+sy,24,24,24,0);
|
|
|
|
print(0,0,input::mouseX());
|
|
print(0,20,input::mouseY());
|
|
print(0,30,input::mouseBtn(1)?1:0);
|
|
print(0,40,input::mouseBtn(2)?1:0);
|
|
print(0,50,input::mouseBtn(3)?1:0);
|
|
|
|
btn("ROOM WIDTH:", 330, 10, room_w, 0, 3);
|
|
btn("ROOM HEIGHT:", 330, 25, room_h, 0, 3);
|
|
|
|
btn("DOOR XP:", 330, 50, room_xp, -1, 5);
|
|
btn("DOOR XN:", 330, 65, room_xn, -1, 5);
|
|
btn("DOOR YP:", 330, 80, room_yp, -1, 5);
|
|
btn("DOOR YN:", 330, 95, room_yn, -1, 5);
|
|
btn("COLOR:", 330, 110, room_color, 5, 11);
|
|
|
|
draw::render();
|
|
|
|
return true;
|
|
} |