Merge branch 'master' of github.com:FacialTurd/The-Powder-Toy
This commit is contained in:
commit
211770e818
@ -8,9 +8,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//VersionInfoStart
|
//VersionInfoStart
|
||||||
#define SAVE_VERSION 76
|
#define SAVE_VERSION 77
|
||||||
#define MINOR_VERSION 0
|
#define MINOR_VERSION 0
|
||||||
#define BUILD_NUM 157
|
#define BUILD_NUM 159
|
||||||
//VersionInfoEnd
|
//VersionInfoEnd
|
||||||
|
|
||||||
#define IDENT_VERSION "G" //Change this if you're not Simon! It should be a single letter
|
#define IDENT_VERSION "G" //Change this if you're not Simon! It should be a single letter
|
||||||
|
@ -340,5 +340,10 @@ void render_ui(pixel *vid_buf, int xcoord, int ycoord, int orientation);
|
|||||||
void simulation_ui(pixel *vid_buf);
|
void simulation_ui(pixel *vid_buf);
|
||||||
|
|
||||||
unsigned int decorations_ui(pixel *vid_buf, int *bsx, int *bsy, unsigned int savedColor);
|
unsigned int decorations_ui(pixel *vid_buf, int *bsx, int *bsy, unsigned int savedColor);
|
||||||
|
|
||||||
|
Uint8 mouse_get_state(int *x, int *y);
|
||||||
|
|
||||||
|
void mouse_coords_window_to_sim(int *sim_x, int *sim_y, int window_x, int window_y);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -330,6 +330,8 @@ int graphics_DCEL(GRAPHICS_FUNC_ARGS);
|
|||||||
int graphics_GEL(GRAPHICS_FUNC_ARGS);
|
int graphics_GEL(GRAPHICS_FUNC_ARGS);
|
||||||
int graphics_TRON(GRAPHICS_FUNC_ARGS);
|
int graphics_TRON(GRAPHICS_FUNC_ARGS);
|
||||||
|
|
||||||
|
void TRON_init_graphics();
|
||||||
|
|
||||||
#define UPDATE_FUNC_ARGS int i, int x, int y, int surround_space, int nt
|
#define UPDATE_FUNC_ARGS int i, int x, int y, int surround_space, int nt
|
||||||
// to call another update function with same arguments:
|
// to call another update function with same arguments:
|
||||||
#define UPDATE_FUNC_SUBCALL_ARGS i, x, y, surround_space, nt
|
#define UPDATE_FUNC_SUBCALL_ARGS i, x, y, surround_space, nt
|
||||||
|
@ -340,7 +340,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "type")==0)
|
else if (strcmp(console3, "type")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -369,7 +369,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "temp")==0)
|
else if (strcmp(console3, "temp")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -398,7 +398,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "tmp")==0)
|
else if (strcmp(console3, "tmp")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -427,7 +427,36 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "x")==0)
|
else if (strcmp(console3, "tmp2")==0)
|
||||||
|
{
|
||||||
|
if (strcmp(console4, "all")==0)
|
||||||
|
{
|
||||||
|
j = atoi(console5);
|
||||||
|
for (i=0; i<NPART; i++)
|
||||||
|
{
|
||||||
|
if (parts[i].type)
|
||||||
|
parts[i].tmp2 = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (console_parse_type(console4, &j, console_error))
|
||||||
|
{
|
||||||
|
k = atoi(console5);
|
||||||
|
for (i=0; i<NPART; i++)
|
||||||
|
{
|
||||||
|
if (parts[i].type == j)
|
||||||
|
parts[i].tmp2 = k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (console_parse_partref(console4, &i, console_error))
|
||||||
|
{
|
||||||
|
j = atoi(console5);
|
||||||
|
parts[i].tmp2 = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(console3, "x")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -456,7 +485,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "y")==0)
|
else if (strcmp(console3, "y")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -485,7 +514,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "ctype")==0)
|
else if (strcmp(console3, "ctype")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -514,7 +543,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "vx")==0)
|
else if (strcmp(console3, "vx")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -543,7 +572,7 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcmp(console3, "vy")==0)
|
else if (strcmp(console3, "vy")==0)
|
||||||
{
|
{
|
||||||
if (strcmp(console4, "all")==0)
|
if (strcmp(console4, "all")==0)
|
||||||
{
|
{
|
||||||
@ -572,6 +601,8 @@ int process_command_old(pixel *vid_buf, char *console, char *console_error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
strcpy(console_error, "Invalid property");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strcpy(console_error, "Invalid Command");
|
strcpy(console_error, "Invalid Command");
|
||||||
|
@ -14,7 +14,7 @@ int update_GEL(UPDATE_FUNC_ARGS) {
|
|||||||
if (((r&0xFF)==PT_WATR || (r&0xFF)==PT_DSTW || (r&0xFF)==PT_SLTW || (r&0xFF)==PT_CBNW)
|
if (((r&0xFF)==PT_WATR || (r&0xFF)==PT_DSTW || (r&0xFF)==PT_SLTW || (r&0xFF)==PT_CBNW)
|
||||||
&& parts[i].tmp<100)
|
&& parts[i].tmp<100)
|
||||||
{
|
{
|
||||||
parts[i].tmp = (100+parts[i].tmp)/2;
|
parts[i].tmp++;
|
||||||
kill_part(r>>8);
|
kill_part(r>>8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,21 +15,21 @@ int update_SING(UPDATE_FUNC_ARGS) {
|
|||||||
if (y+CELL<YRES)
|
if (y+CELL<YRES)
|
||||||
pv[y/CELL+1][x/CELL+1] += 0.1f*(singularity-pv[y/CELL+1][x/CELL+1]);
|
pv[y/CELL+1][x/CELL+1] += 0.1f*(singularity-pv[y/CELL+1][x/CELL+1]);
|
||||||
}
|
}
|
||||||
if (y+CELL>0 && pv[y/CELL-1][x/CELL]<singularity)
|
if (y-CELL>=0 && pv[y/CELL-1][x/CELL]<singularity)
|
||||||
pv[y/CELL-1][x/CELL] += 0.1f*(singularity-pv[y/CELL-1][x/CELL]);
|
pv[y/CELL-1][x/CELL] += 0.1f*(singularity-pv[y/CELL-1][x/CELL]);
|
||||||
if (x+CELL>0)
|
if (x-CELL>=0)
|
||||||
{
|
{
|
||||||
pv[y/CELL][x/CELL-1] += 0.1f*(singularity-pv[y/CELL][x/CELL-1]);
|
pv[y/CELL][x/CELL-1] += 0.1f*(singularity-pv[y/CELL][x/CELL-1]);
|
||||||
if (y+CELL>0)
|
if (y-CELL>=0)
|
||||||
pv[y/CELL-1][x/CELL-1] += 0.1f*(singularity-pv[y/CELL-1][x/CELL-1]);
|
pv[y/CELL-1][x/CELL-1] += 0.1f*(singularity-pv[y/CELL-1][x/CELL-1]);
|
||||||
}
|
}
|
||||||
if (parts[i].life<1) {
|
if (parts[i].life<1) {
|
||||||
//Pop!
|
//Pop!
|
||||||
for (rx=-2; rx<3; rx++) {
|
for (rx=-1; rx<2; rx++) {
|
||||||
crx = (x/CELL)+rx;
|
crx = (x/CELL)+rx;
|
||||||
for (ry=-2; ry<3; ry++) {
|
for (ry=-1; ry<2; ry++) {
|
||||||
cry = (y/CELL)+ry;
|
cry = (y/CELL)+ry;
|
||||||
if (cry > 0 && crx > 0 && crx < (XRES/CELL) && cry < (YRES/CELL)) {
|
if (cry >= 0 && crx >= 0 && crx < (XRES/CELL) && cry < (YRES/CELL)) {
|
||||||
pv[cry][crx] += (float)parts[i].tmp;
|
pv[cry][crx] += (float)parts[i].tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#define TRON_DEATH 16 //Crashed, now dying
|
#define TRON_DEATH 16 //Crashed, now dying
|
||||||
int tron_rx[4] = {-1, 0, 1, 0};
|
int tron_rx[4] = {-1, 0, 1, 0};
|
||||||
int tron_ry[4] = { 0,-1, 0, 1};
|
int tron_ry[4] = { 0,-1, 0, 1};
|
||||||
|
unsigned int tron_colours[32];
|
||||||
int new_tronhead(int x, int y, int i, int direction)
|
int new_tronhead(int x, int y, int i, int direction)
|
||||||
{
|
{
|
||||||
int np = create_part(-1, x , y ,PT_TRON);
|
int np = create_part(-1, x , y ,PT_TRON);
|
||||||
@ -90,14 +91,6 @@ int trymovetron(int x, int y, int dir, int i, int len)
|
|||||||
}
|
}
|
||||||
int update_TRON(UPDATE_FUNC_ARGS) {
|
int update_TRON(UPDATE_FUNC_ARGS) {
|
||||||
int r, rx, ry, np;
|
int r, rx, ry, np;
|
||||||
if(!parts[i].ctype)
|
|
||||||
{
|
|
||||||
int r, g, b;
|
|
||||||
int hue = (parts[i].tmp&0xF800)>>7;
|
|
||||||
HSV_to_RGB(hue,255,255,&r,&g,&b);
|
|
||||||
parts[i].ctype = r<<16 | g<<8 | b;
|
|
||||||
//Use photon-like wavelength?
|
|
||||||
}
|
|
||||||
if (parts[i].tmp&TRON_WAIT)
|
if (parts[i].tmp&TRON_WAIT)
|
||||||
{
|
{
|
||||||
parts[i].tmp &= ~TRON_WAIT;
|
parts[i].tmp &= ~TRON_WAIT;
|
||||||
@ -162,20 +155,12 @@ int update_TRON(UPDATE_FUNC_ARGS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int graphics_TRON(GRAPHICS_FUNC_ARGS) {
|
int graphics_TRON(GRAPHICS_FUNC_ARGS) {
|
||||||
|
unsigned int col = tron_colours[(cpart->tmp&0xF800)>>11];
|
||||||
if(cpart->tmp & TRON_HEAD)
|
if(cpart->tmp & TRON_HEAD)
|
||||||
*pixel_mode |= PMODE_GLOW;
|
*pixel_mode |= PMODE_GLOW;
|
||||||
if(cpart->ctype)
|
*colr = (col & 0xFF0000)>>16;
|
||||||
{
|
*colg = (col & 0x00FF00)>>8;
|
||||||
*colr = (cpart->ctype & 0xFF0000)>>16;
|
*colb = (col & 0x0000FF);
|
||||||
*colg = (cpart->ctype & 0x00FF00)>>8;
|
|
||||||
*colb = (cpart->ctype & 0x0000FF);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*colr = 255;
|
|
||||||
*colg = 255;
|
|
||||||
*colb = 255;
|
|
||||||
}
|
|
||||||
if(cpart->tmp & TRON_DEATH)
|
if(cpart->tmp & TRON_DEATH)
|
||||||
{
|
{
|
||||||
*pixel_mode |= FIRE_ADD | PMODE_FLARE;
|
*pixel_mode |= FIRE_ADD | PMODE_FLARE;
|
||||||
@ -191,4 +176,15 @@ int graphics_TRON(GRAPHICS_FUNC_ARGS) {
|
|||||||
*cola = (int)((((float)cpart->life)/((float)cpart->tmp2))*255.0f);
|
*cola = (int)((((float)cpart->life)/((float)cpart->tmp2))*255.0f);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TRON_init_graphics()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int r, g, b;
|
||||||
|
for (i=0; i<32; i++)
|
||||||
|
{
|
||||||
|
HSV_to_RGB(i<<4,255,255,&r,&g,&b);
|
||||||
|
tron_colours[i] = r<<16 | g<<8 | b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3181,9 +3181,8 @@ void render_signs(pixel *vid_buf)
|
|||||||
if (MSIGN==i)
|
if (MSIGN==i)
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
mouse_coords_window_to_sim(&mx, &my, mx, my);
|
||||||
my /= sdl_scale;
|
|
||||||
signs[i].x = mx;
|
signs[i].x = mx;
|
||||||
signs[i].y = my;
|
signs[i].y = my;
|
||||||
}
|
}
|
||||||
|
227
src/interface.c
227
src/interface.c
@ -150,15 +150,17 @@ void add_sign_ui(pixel *vid_buf, int mx, int my)
|
|||||||
int x0=(XRES-192)/2,y0=(YRES-80)/2,b=1,bq;
|
int x0=(XRES-192)/2,y0=(YRES-80)/2,b=1,bq;
|
||||||
ui_edit ed;
|
ui_edit ed;
|
||||||
|
|
||||||
|
// if currently moving a sign, stop doing so
|
||||||
|
if (MSIGN!=-1)
|
||||||
|
{
|
||||||
|
MSIGN = -1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// check if it is an existing sign
|
// check if it is an existing sign
|
||||||
for (i=0; i<MAXSIGNS; i++)
|
for (i=0; i<MAXSIGNS; i++)
|
||||||
if (signs[i].text[0])
|
if (signs[i].text[0])
|
||||||
{
|
{
|
||||||
if (i == MSIGN)
|
|
||||||
{
|
|
||||||
MSIGN = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
get_sign_pos(i, &x, &y, &w, &h);
|
get_sign_pos(i, &x, &y, &w, &h);
|
||||||
if (mx>=x && mx<=x+w && my>=y && my<=y+h)
|
if (mx>=x && mx<=x+w && my>=y && my<=y+h)
|
||||||
break;
|
break;
|
||||||
@ -182,7 +184,7 @@ void add_sign_ui(pixel *vid_buf, int mx, int my)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -203,9 +205,7 @@ void add_sign_ui(pixel *vid_buf, int mx, int my)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
drawrect(vid_buf, x0, y0, 192, 80, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, 192, 80, 192, 192, 192, 255);
|
||||||
clearrect(vid_buf, x0, y0, 192, 80);
|
clearrect(vid_buf, x0, y0, 192, 80);
|
||||||
@ -488,16 +488,14 @@ void ui_list_process(pixel * vid_buf, int mx, int my, int mb, ui_list *ed)
|
|||||||
ystart = 5;
|
ystart = 5;
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
mb = SDL_GetMouseState(&mx, &my);
|
mb = mouse_get_state(&mx, &my);
|
||||||
if (!mb)
|
if (!mb)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!sdl_poll() && !selected)
|
while (!sdl_poll() && !selected)
|
||||||
{
|
{
|
||||||
mb = SDL_GetMouseState(&mx, &my);
|
mb = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
for(i = 0; i < ed->count; i++)
|
for(i = 0; i < ed->count; i++)
|
||||||
{
|
{
|
||||||
if(mx > ed->x && mx < ed->x+ed->w && my > (ystart + i*16) && my < (ystart + i * 16) + 16)
|
if(mx > ed->x && mx < ed->x+ed->w && my > (ystart + i*16) && my < (ystart + i * 16) + 16)
|
||||||
@ -523,7 +521,7 @@ void ui_list_process(pixel * vid_buf, int mx, int my, int mb, ui_list *ed)
|
|||||||
}
|
}
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
mb = SDL_GetMouseState(&mx, &my);
|
mb = mouse_get_state(&mx, &my);
|
||||||
if (!mb)
|
if (!mb)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -921,7 +919,7 @@ void error_ui(pixel *vid_buf, int err, char *txt)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -929,9 +927,7 @@ void error_ui(pixel *vid_buf, int err, char *txt)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, 244, 52+textheight);
|
clearrect(vid_buf, x0-2, y0-2, 244, 52+textheight);
|
||||||
drawrect(vid_buf, x0, y0, 240, 48+textheight, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, 240, 48+textheight, 192, 192, 192, 255);
|
||||||
@ -957,7 +953,7 @@ void error_ui(pixel *vid_buf, int err, char *txt)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -988,7 +984,7 @@ char *input_ui(pixel *vid_buf, char *title, char *prompt, char *text, char *shad
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -996,9 +992,7 @@ char *input_ui(pixel *vid_buf, char *title, char *prompt, char *text, char *shad
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
||||||
@ -1026,7 +1020,7 @@ char *input_ui(pixel *vid_buf, char *title, char *prompt, char *text, char *shad
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1079,7 +1073,7 @@ void prop_edit_ui(pixel *vid_buf, int x, int y)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1087,9 +1081,7 @@ void prop_edit_ui(pixel *vid_buf, int x, int y)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
||||||
@ -1221,7 +1213,7 @@ void prop_edit_ui(pixel *vid_buf, int x, int y)
|
|||||||
exit:
|
exit:
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1233,7 +1225,7 @@ void info_ui(pixel *vid_buf, char *top, char *txt)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1241,9 +1233,7 @@ void info_ui(pixel *vid_buf, char *top, char *txt)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, 244, 64);
|
clearrect(vid_buf, x0-2, y0-2, 244, 64);
|
||||||
drawrect(vid_buf, x0, y0, 240, 60, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, 240, 60, 192, 192, 192, 255);
|
||||||
@ -1264,7 +1254,7 @@ void info_ui(pixel *vid_buf, char *top, char *txt)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1312,7 +1302,7 @@ void copytext_ui(pixel *vid_buf, char *top, char *txt, char *copytxt)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1320,9 +1310,7 @@ void copytext_ui(pixel *vid_buf, char *top, char *txt, char *copytxt)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
||||||
@ -1348,7 +1336,7 @@ void copytext_ui(pixel *vid_buf, char *top, char *txt, char *copytxt)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1367,7 +1355,7 @@ int confirm_ui(pixel *vid_buf, char *top, char *msg, char *btn)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1375,9 +1363,7 @@ int confirm_ui(pixel *vid_buf, char *top, char *msg, char *btn)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, 244, 52+textheight);
|
clearrect(vid_buf, x0-2, y0-2, 244, 52+textheight);
|
||||||
drawrect(vid_buf, x0, y0, 240, 48+textheight, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, 240, 48+textheight, 192, 192, 192, 255);
|
||||||
@ -1410,7 +1396,7 @@ int confirm_ui(pixel *vid_buf, char *top, char *msg, char *btn)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1426,7 +1412,7 @@ void login_ui(pixel *vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1456,9 +1442,7 @@ void login_ui(pixel *vid_buf)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
drawrect(vid_buf, x0, y0, 192, 80, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, 192, 80, 192, 192, 192, 255);
|
||||||
clearrect(vid_buf, x0, y0, 192, 80);
|
clearrect(vid_buf, x0, y0, 192, 80);
|
||||||
@ -1596,7 +1580,7 @@ int stamp_ui(pixel *vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1604,9 +1588,7 @@ int stamp_ui(pixel *vid_buf)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, -1, -1, XRES+BARSIZE+1, YRES+MENUSIZE+1);
|
clearrect(vid_buf, -1, -1, XRES+BARSIZE+1, YRES+MENUSIZE+1);
|
||||||
k = stamp_page*per_page;//0;
|
k = stamp_page*per_page;//0;
|
||||||
@ -1721,7 +1703,7 @@ int stamp_ui(pixel *vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1752,9 +1734,7 @@ void tag_list_ui(pixel *vid_buf)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
op = tag = NULL;
|
op = tag = NULL;
|
||||||
|
|
||||||
@ -1866,7 +1846,7 @@ void tag_list_ui(pixel *vid_buf)
|
|||||||
}
|
}
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1890,7 +1870,7 @@ int save_name_ui(pixel *vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1940,9 +1920,7 @@ int save_name_ui(pixel *vid_buf)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
drawrect(vid_buf, x0, y0, 420, 90+YRES/4, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, 420, 90+YRES/4, 192, 192, 192, 255);
|
||||||
clearrect(vid_buf, x0, y0, 420, 90+YRES/4);
|
clearrect(vid_buf, x0, y0, 420, 90+YRES/4);
|
||||||
@ -2033,16 +2011,14 @@ void menu_ui(pixel *vid_buf, int i, int *sl, int *sr)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
rows = ceil((float)msections[i].itemcount/16.0f);
|
rows = ceil((float)msections[i].itemcount/16.0f);
|
||||||
height = (ceil((float)msections[i].itemcount/16.0f)*18);
|
height = (ceil((float)msections[i].itemcount/16.0f)*18);
|
||||||
width = restrict_flt(msections[i].itemcount*31, 0, 16*31);
|
width = restrict_flt(msections[i].itemcount*31, 0, 16*31);
|
||||||
@ -2211,7 +2187,7 @@ void menu_ui(pixel *vid_buf, int i, int *sl, int *sr)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2223,8 +2199,6 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int *su, int *dae, int
|
|||||||
{
|
{
|
||||||
int h,x,y,n=0,height,width,sy,rows=0,xoff=0,fwidth;
|
int h,x,y,n=0,height,width,sy,rows=0,xoff=0,fwidth;
|
||||||
SEC = SEC2;
|
SEC = SEC2;
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
rows = ceil((float)msections[i].itemcount/16.0f);
|
rows = ceil((float)msections[i].itemcount/16.0f);
|
||||||
height = (ceil((float)msections[i].itemcount/16.0f)*18);
|
height = (ceil((float)msections[i].itemcount/16.0f)*18);
|
||||||
width = restrict_flt(msections[i].itemcount*31, 0, 16*31);
|
width = restrict_flt(msections[i].itemcount*31, 0, 16*31);
|
||||||
@ -2592,8 +2566,6 @@ int quickoptions_tooltip_y = 0;
|
|||||||
void quickoptions_menu(pixel *vid_buf, int b, int bq, int x, int y)
|
void quickoptions_menu(pixel *vid_buf, int b, int bq, int x, int y)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
x /= sdl_scale;
|
|
||||||
y /= sdl_scale;
|
|
||||||
if(quickoptions_tooltip_fade && quickoptions_tooltip)
|
if(quickoptions_tooltip_fade && quickoptions_tooltip)
|
||||||
{
|
{
|
||||||
drawtext_outline(vid_buf, (XRES - 5) - textwidth(quickoptions_tooltip), quickoptions_tooltip_y, quickoptions_tooltip, 255, 255, 255, quickoptions_tooltip_fade*20, 0, 0, 0, quickoptions_tooltip_fade*15);
|
drawtext_outline(vid_buf, (XRES - 5) - textwidth(quickoptions_tooltip), quickoptions_tooltip_y, quickoptions_tooltip, 255, 255, 255, quickoptions_tooltip_fade*20, 0, 0, 0, quickoptions_tooltip_fade*15);
|
||||||
@ -3086,7 +3058,7 @@ int search_ui(pixel *vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3114,9 +3086,7 @@ int search_ui(pixel *vid_buf)
|
|||||||
bq = b;
|
bq = b;
|
||||||
mxq = mx;
|
mxq = mx;
|
||||||
myq = my;
|
myq = my;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
if (mx!=mxq || my!=myq || sdl_wheel || b)
|
if (mx!=mxq || my!=myq || sdl_wheel || b)
|
||||||
mmt = 0;
|
mmt = 0;
|
||||||
@ -3798,7 +3768,7 @@ int report_ui(pixel* vid_buf, char *save_id)
|
|||||||
fillrect(vid_buf, -1, -1, XRES+BARSIZE, YRES+MENUSIZE, 0, 0, 0, 192);
|
fillrect(vid_buf, -1, -1, XRES+BARSIZE, YRES+MENUSIZE, 0, 0, 0, 192);
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3809,9 +3779,7 @@ int report_ui(pixel* vid_buf, char *save_id)
|
|||||||
drawrect(vid_buf, 205, 155, (XRES+BARSIZE-400)-10, (YRES+MENUSIZE-300)-28, 255, 255, 255, 170);
|
drawrect(vid_buf, 205, 155, (XRES+BARSIZE-400)-10, (YRES+MENUSIZE-300)-28, 255, 255, 255, 170);
|
||||||
|
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
|
|
||||||
drawrect(vid_buf, 200, (YRES+MENUSIZE-150)-18, 50, 18, 255, 255, 255, 255);
|
drawrect(vid_buf, 200, (YRES+MENUSIZE-150)-18, 50, 18, 255, 255, 255, 255);
|
||||||
@ -3897,7 +3865,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3991,9 +3959,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
if (active && http_async_req_status(http))
|
if (active && http_async_req_status(http))
|
||||||
{
|
{
|
||||||
@ -4365,7 +4331,7 @@ int open_ui(pixel *vid_buf, char *save_id, char *save_date)
|
|||||||
//Prevent those mouse clicks being passed down.
|
//Prevent those mouse clicks being passed down.
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -5198,9 +5164,7 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
|
|||||||
}
|
}
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
ed.focus = 1;
|
ed.focus = 1;
|
||||||
|
|
||||||
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
|
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
|
||||||
@ -5338,6 +5302,7 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
|
|||||||
unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int savedColor)
|
unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int savedColor)
|
||||||
{//TODO: have the text boxes be editable and update the color.
|
{//TODO: have the text boxes be editable and update the color.
|
||||||
int i,ss,hh,vv,cr=127,cg=0,cb=0,b = 0,mx,my,bq = 0,j, lb=0,lx=0,ly=0,lm=0,hidden=0;
|
int i,ss,hh,vv,cr=127,cg=0,cb=0,b = 0,mx,my,bq = 0,j, lb=0,lx=0,ly=0,lm=0,hidden=0;
|
||||||
|
int line_x=0, line_y=0;
|
||||||
int window_offset_x_left = 2;
|
int window_offset_x_left = 2;
|
||||||
int window_offset_x_right = XRES - 279;
|
int window_offset_x_right = XRES - 279;
|
||||||
int window_offset_y = 2;
|
int window_offset_y = 2;
|
||||||
@ -5400,9 +5365,7 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*(YRES+MENUSIZE)*PIXELSIZE);
|
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*(YRES+MENUSIZE)*PIXELSIZE);
|
||||||
render_parts(vid_buf);
|
render_parts(vid_buf);
|
||||||
@ -5428,14 +5391,8 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved
|
|||||||
box_G.x = XRES - 254 + 40;
|
box_G.x = XRES - 254 + 40;
|
||||||
box_B.x = XRES - 254 + 75;
|
box_B.x = XRES - 254 + 75;
|
||||||
}
|
}
|
||||||
if (zoom_en && mx>=zoom_wx && my>=zoom_wy //change mouse position while it is in a zoom window
|
mouse_coords_window_to_sim(&mx, &my, mx, my);//change mouse position while it is in a zoom window
|
||||||
&& mx<(zoom_wx+ZFACTOR*ZSIZE)
|
|
||||||
&& my<(zoom_wy+ZFACTOR*ZSIZE))
|
|
||||||
{
|
|
||||||
mx = (((mx-zoom_wx)/ZFACTOR)+zoom_x);
|
|
||||||
my = (((my-zoom_wy)/ZFACTOR)+zoom_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
drawrect(vid_buf, -1, -1, XRES+1, YRES+1, 220, 220, 220, 255);
|
drawrect(vid_buf, -1, -1, XRES+1, YRES+1, 220, 220, 220, 255);
|
||||||
drawrect(vid_buf, -1, -1, XRES+2, YRES+2, 70, 70, 70, 255);
|
drawrect(vid_buf, -1, -1, XRES+2, YRES+2, 70, 70, 70, 255);
|
||||||
drawtext(vid_buf, 2, 388, "Welcome to the decoration editor v.3 (by cracker64) \n\nClicking the current color on the window will move it to the other side. Right click is eraser. ", 255, 255, 255, 255);
|
drawtext(vid_buf, 2, 388, "Welcome to the decoration editor v.3 (by cracker64) \n\nClicking the current color on the window will move it to the other side. Right click is eraser. ", 255, 255, 255, 255);
|
||||||
@ -5637,7 +5594,19 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved
|
|||||||
{
|
{
|
||||||
if (lm == 1)//line tool preview
|
if (lm == 1)//line tool preview
|
||||||
{
|
{
|
||||||
xor_line(lx, ly, mx, my, vid_buf);
|
if (sdl_mod & KMOD_ALT)
|
||||||
|
{
|
||||||
|
float snap_angle = floor(atan2(my-ly, mx-lx)/(M_PI*0.25)+0.5)*M_PI*0.25;
|
||||||
|
float line_mag = sqrtf(pow(mx-lx,2)+pow(my-ly,2));
|
||||||
|
line_x = (int)(line_mag*cos(snap_angle)+lx+0.5f);
|
||||||
|
line_y = (int)(line_mag*sin(snap_angle)+ly+0.5f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
line_x = mx;
|
||||||
|
line_y = my;
|
||||||
|
}
|
||||||
|
xor_line(lx, ly, line_x, line_y, vid_buf);
|
||||||
}
|
}
|
||||||
else if (lm == 2)//box tool preview
|
else if (lm == 2)//box tool preview
|
||||||
{
|
{
|
||||||
@ -5706,7 +5675,7 @@ unsigned int decorations_ui(pixel *vid_buf,int *bsx,int *bsy, unsigned int saved
|
|||||||
if (lb && lm) //lm is box/line tool
|
if (lb && lm) //lm is box/line tool
|
||||||
{
|
{
|
||||||
if (lm == 1)//line
|
if (lm == 1)//line
|
||||||
line_decorations(lx, ly, mx, my, *bsx, *bsy, currR, currG, currB, lb, tool);
|
line_decorations(lx, ly, line_x, line_y, *bsx, *bsy, currR, currG, currB, lb, tool);
|
||||||
else//box
|
else//box
|
||||||
box_decorations(lx, ly, mx, my, currR, currG, currB, lb, tool);
|
box_decorations(lx, ly, mx, my, currR, currG, currB, lb, tool);
|
||||||
lm = 0;
|
lm = 0;
|
||||||
@ -6005,7 +5974,7 @@ int save_filename_ui(pixel *vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6018,9 +5987,7 @@ int save_filename_ui(pixel *vid_buf)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
||||||
@ -6105,7 +6072,7 @@ int save_filename_ui(pixel *vid_buf)
|
|||||||
savefin:
|
savefin:
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6150,7 +6117,7 @@ void catalogue_ui(pixel * vid_buf)
|
|||||||
cssave = csave = saves;
|
cssave = csave = saves;
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6158,9 +6125,7 @@ void catalogue_ui(pixel * vid_buf)
|
|||||||
fillrect(vid_buf, -1, -1, XRES+BARSIZE, YRES+MENUSIZE, 0, 0, 0, 192);
|
fillrect(vid_buf, -1, -1, XRES+BARSIZE, YRES+MENUSIZE, 0, 0, 0, 192);
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
sprintf(savetext, "Found %d save%s", rescount, rescount==1?"":"s");
|
sprintf(savetext, "Found %d save%s", rescount, rescount==1?"":"s");
|
||||||
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
clearrect(vid_buf2, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf2, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
@ -6337,7 +6302,7 @@ void catalogue_ui(pixel * vid_buf)
|
|||||||
openfin:
|
openfin:
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6496,7 +6461,7 @@ void render_ui(pixel * vid_buf, int xcoord, int ycoord, int orientation)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6504,9 +6469,7 @@ void render_ui(pixel * vid_buf, int xcoord, int ycoord, int orientation)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
memcpy(vid_buf, o_vid_buf, ((YRES+MENUSIZE) * (XRES+BARSIZE)) * PIXELSIZE);
|
memcpy(vid_buf, o_vid_buf, ((YRES+MENUSIZE) * (XRES+BARSIZE)) * PIXELSIZE);
|
||||||
render_parts(vid_buf);
|
render_parts(vid_buf);
|
||||||
@ -6661,7 +6624,7 @@ void render_ui(pixel * vid_buf, int xcoord, int ycoord, int orientation)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6738,7 +6701,7 @@ void simulation_ui(pixel * vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6746,9 +6709,7 @@ void simulation_ui(pixel * vid_buf)
|
|||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
bq = b;
|
bq = b;
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
mx /= sdl_scale;
|
|
||||||
my /= sdl_scale;
|
|
||||||
|
|
||||||
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
|
||||||
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
|
||||||
@ -6841,8 +6802,36 @@ void simulation_ui(pixel * vid_buf)
|
|||||||
|
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
{
|
{
|
||||||
b = SDL_GetMouseState(&mx, &my);
|
b = mouse_get_state(&mx, &my);
|
||||||
if (!b)
|
if (!b)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Uint8 mouse_get_state(int *x, int *y)
|
||||||
|
{
|
||||||
|
//Wrapper around SDL_GetMouseState to divide by sdl_scale
|
||||||
|
Uint8 sdl_b;
|
||||||
|
int sdl_x, sdl_y;
|
||||||
|
sdl_b = SDL_GetMouseState(&sdl_x, &sdl_y);
|
||||||
|
*x = sdl_x/sdl_scale;
|
||||||
|
*y = sdl_y/sdl_scale;
|
||||||
|
return sdl_b;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mouse_coords_window_to_sim(int *sim_x, int *sim_y, int window_x, int window_y)
|
||||||
|
{
|
||||||
|
//Change mouse coords to take zoom window into account
|
||||||
|
if (zoom_en && window_x>=zoom_wx && window_y>=zoom_wy
|
||||||
|
&& window_x<(zoom_wx+ZFACTOR*ZSIZE)
|
||||||
|
&& window_y<(zoom_wy+ZFACTOR*ZSIZE))
|
||||||
|
{
|
||||||
|
*sim_x = (((window_x-zoom_wx)/ZFACTOR)+zoom_x);
|
||||||
|
*sim_y = (((window_y-zoom_wy)/ZFACTOR)+zoom_y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*sim_x = window_x;
|
||||||
|
*sim_y = window_y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
104
src/main.c
104
src/main.c
@ -657,6 +657,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
colour_mode = COLOUR_DEFAULT;
|
colour_mode = COLOUR_DEFAULT;
|
||||||
init_display_modes();
|
init_display_modes();
|
||||||
|
TRON_init_graphics();
|
||||||
|
|
||||||
sys_pause = 1;
|
sys_pause = 1;
|
||||||
parts = calloc(sizeof(particle), NPART);
|
parts = calloc(sizeof(particle), NPART);
|
||||||
@ -806,6 +807,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
colour_mode = COLOUR_DEFAULT;
|
colour_mode = COLOUR_DEFAULT;
|
||||||
init_display_modes();
|
init_display_modes();
|
||||||
|
TRON_init_graphics();
|
||||||
|
|
||||||
//fbi_img = render_packed_rgb(fbi, FBI_W, FBI_H, FBI_CMP);
|
//fbi_img = render_packed_rgb(fbi, FBI_W, FBI_H, FBI_CMP);
|
||||||
|
|
||||||
@ -1761,25 +1763,25 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
bq = bc; // bq is previous mouse state
|
bq = bc; // bq is previous mouse state
|
||||||
bc = b = SDL_GetMouseState(&x, &y); // b is current mouse state
|
bc = b = mouse_get_state(&x, &y); // b is current mouse state
|
||||||
|
|
||||||
#ifdef LUACONSOLE
|
#ifdef LUACONSOLE
|
||||||
if(bc && bq){
|
if(bc && bq){
|
||||||
if(!luacon_mouseevent(x/sdl_scale, y/sdl_scale, bc, LUACON_MPRESS)){
|
if(!luacon_mouseevent(x, y, bc, LUACON_MPRESS)){
|
||||||
b = 0;
|
b = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(bc && !bq){
|
else if(bc && !bq){
|
||||||
if(!luacon_mouseevent(x/sdl_scale, y/sdl_scale, bc, LUACON_MDOWN)){
|
if(!luacon_mouseevent(x, y, bc, LUACON_MDOWN)){
|
||||||
b = 0;
|
b = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!bc && bq){
|
else if(!bc && bq){
|
||||||
if(!luacon_mouseevent(x/sdl_scale, y/sdl_scale, bq, LUACON_MUP)){
|
if(!luacon_mouseevent(x, y, bq, LUACON_MUP)){
|
||||||
b = 0;
|
b = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
luacon_step(x/sdl_scale, y/sdl_scale,sl,sr);
|
luacon_step(x, y,sl,sr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
quickoptions_menu(vid_buf, b, bq, x, y);
|
quickoptions_menu(vid_buf, b, bq, x, y);
|
||||||
@ -1791,27 +1793,21 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
for (i=0; i<SC_TOTAL; i++)//check mouse position to see if it is on a menu section
|
for (i=0; i<SC_TOTAL; i++)//check mouse position to see if it is on a menu section
|
||||||
{
|
{
|
||||||
if (!b&&x>=sdl_scale*(XRES-2) && x<sdl_scale*(XRES+BARSIZE-1) &&y>= sdl_scale*((i*16)+YRES+MENUSIZE-16-(SC_TOTAL*16)) && y<sdl_scale*((i*16)+YRES+MENUSIZE-16-(SC_TOTAL*16)+15))
|
if (!b&&x>=(XRES-2) && x<(XRES+BARSIZE-1) &&y>= ((i*16)+YRES+MENUSIZE-16-(SC_TOTAL*16)) && y<((i*16)+YRES+MENUSIZE-16-(SC_TOTAL*16)+15))
|
||||||
{
|
{
|
||||||
active_menu = i;
|
active_menu = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
menu_ui_v3(vid_buf, active_menu, &sl, &sr, &su, &dae, b, bq, x, y); //draw the elements in the current menu
|
menu_ui_v3(vid_buf, active_menu, &sl, &sr, &su, &dae, b, bq, x, y); //draw the elements in the current menu
|
||||||
if (zoom_en && x>=sdl_scale*zoom_wx && y>=sdl_scale*zoom_wy //change mouse position while it is in a zoom window
|
mouse_coords_window_to_sim(&x, &y, x, y);//change mouse position while it is in a zoom window
|
||||||
&& x<sdl_scale*(zoom_wx+ZFACTOR*ZSIZE)
|
if (y>=0 && y<YRES && x>=0 && x<XRES)
|
||||||
&& y<sdl_scale*(zoom_wy+ZFACTOR*ZSIZE))
|
|
||||||
{
|
|
||||||
x = (((x/sdl_scale-zoom_wx)/ZFACTOR)+zoom_x)*sdl_scale;
|
|
||||||
y = (((y/sdl_scale-zoom_wy)/ZFACTOR)+zoom_y)*sdl_scale;
|
|
||||||
}
|
|
||||||
if (y>0 && y<sdl_scale*YRES && x>0 && x<sdl_scale*XRES)
|
|
||||||
{
|
{
|
||||||
int cr; //cr is particle under mouse, for drawing HUD information
|
int cr; //cr is particle under mouse, for drawing HUD information
|
||||||
char nametext[50];
|
char nametext[50];
|
||||||
if (photons[y/sdl_scale][x/sdl_scale]) {
|
if (photons[y][x]) {
|
||||||
cr = photons[y/sdl_scale][x/sdl_scale];
|
cr = photons[y][x];
|
||||||
} else {
|
} else {
|
||||||
cr = pmap[y/sdl_scale][x/sdl_scale];
|
cr = pmap[y][x];
|
||||||
}
|
}
|
||||||
if (cr)
|
if (cr)
|
||||||
{
|
{
|
||||||
@ -1856,28 +1852,28 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if (DEBUG_MODE)
|
if (DEBUG_MODE)
|
||||||
{
|
{
|
||||||
sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C, Life: %d, Tmp:%d", nametext, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life, parts[cr>>8].tmp);
|
sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C, Life: %d, Tmp:%d", nametext, pv[y/CELL][x/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life, parts[cr>>8].tmp);
|
||||||
sprintf(coordtext, "#%d, X:%d Y:%d", cr>>8, x/sdl_scale, y/sdl_scale);
|
sprintf(coordtext, "#%d, X:%d Y:%d", cr>>8, x, y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C, Life: %d, Tmp:%d", nametext, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life, parts[cr>>8].tmp);
|
sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C, Life: %d, Tmp:%d", nametext, pv[y/CELL][x/CELL], parts[cr>>8].temp-273.15f, parts[cr>>8].life, parts[cr>>8].tmp);
|
||||||
#else
|
#else
|
||||||
sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C", nametext, pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL], parts[cr>>8].temp-273.15f);
|
sprintf(heattext, "%s, Pressure: %3.2f, Temp: %4.2f C", nametext, pv[y/CELL][x/CELL], parts[cr>>8].temp-273.15f);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if ((cr&0xFF)==PT_PHOT) wavelength_gfx = parts[cr>>8].ctype;
|
if ((cr&0xFF)==PT_PHOT) wavelength_gfx = parts[cr>>8].ctype;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(heattext, "Empty, Pressure: %3.2f", pv[(y/sdl_scale)/CELL][(x/sdl_scale)/CELL]);
|
sprintf(heattext, "Empty, Pressure: %3.2f", pv[y/CELL][x/CELL]);
|
||||||
if (DEBUG_MODE)
|
if (DEBUG_MODE)
|
||||||
{
|
{
|
||||||
if (ngrav_enable)
|
if (ngrav_enable)
|
||||||
sprintf(coordtext, "X:%d Y:%d. GX: %.2f GY: %.2f", x/sdl_scale, y/sdl_scale, gravx[(((y/sdl_scale)/CELL)*(XRES/CELL))+((x/sdl_scale)/CELL)], gravy[(((y/sdl_scale)/CELL)*(XRES/CELL))+((x/sdl_scale)/CELL)]);
|
sprintf(coordtext, "X:%d Y:%d. GX: %.2f GY: %.2f", x, y, gravx[((y/CELL)*(XRES/CELL))+(x/CELL)], gravy[((y/CELL)*(XRES/CELL))+(x/CELL)]);
|
||||||
else
|
else
|
||||||
sprintf(coordtext, "X:%d Y:%d", x/sdl_scale, y/sdl_scale);
|
sprintf(coordtext, "X:%d Y:%d", x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1885,8 +1881,8 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
mx = x;
|
mx = x;
|
||||||
my = y;
|
my = y;
|
||||||
if (b && !bq && x>=(XRES-19-new_message_len)*sdl_scale &&
|
if (b && !bq && x>=(XRES-19-new_message_len) &&
|
||||||
x<=(XRES-14)*sdl_scale && y>=(YRES-37)*sdl_scale && y<=(YRES-24)*sdl_scale && svf_messages)
|
x<=(XRES-14) && y>=(YRES-37) && y<=(YRES-24) && svf_messages)
|
||||||
{
|
{
|
||||||
open_link("http://" SERVER "/Conversations.html");
|
open_link("http://" SERVER "/Conversations.html");
|
||||||
}
|
}
|
||||||
@ -1908,8 +1904,8 @@ int main(int argc, char *argv[])
|
|||||||
update_flag = 0;
|
update_flag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b && !bq && x>=(XRES-19-old_ver_len)*sdl_scale &&
|
if (b && !bq && x>=(XRES-19-old_ver_len) &&
|
||||||
x<=(XRES-14)*sdl_scale && y>=(YRES-22)*sdl_scale && y<=(YRES-9)*sdl_scale && old_version)
|
x<=(XRES-14) && y>=(YRES-22) && y<=(YRES-9) && old_version)
|
||||||
{
|
{
|
||||||
tmp = malloc(128);
|
tmp = malloc(128);
|
||||||
#ifdef BETA
|
#ifdef BETA
|
||||||
@ -1954,9 +1950,9 @@ int main(int argc, char *argv[])
|
|||||||
old_version = 0;
|
old_version = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (y>=sdl_scale*(YRES+(MENUSIZE-20))) //mouse checks for buttons at the bottom, to draw mouseover texts
|
if (y>=(YRES+(MENUSIZE-20))) //mouse checks for buttons at the bottom, to draw mouseover texts
|
||||||
{
|
{
|
||||||
if (x>=189*sdl_scale && x<=202*sdl_scale && svf_login && svf_open && svf_myvote==0)
|
if (x>=189 && x<=202 && svf_login && svf_open && svf_myvote==0)
|
||||||
{
|
{
|
||||||
db = svf_own ? 275 : 272;
|
db = svf_own ? 275 : 272;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
@ -1974,25 +1970,25 @@ int main(int argc, char *argv[])
|
|||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=219*sdl_scale && x<=((XRES+BARSIZE-(510-349))*sdl_scale) && svf_login && svf_open)
|
else if (x>=219 && x<=((XRES+BARSIZE-(510-349))) && svf_login && svf_open)
|
||||||
{
|
{
|
||||||
db = svf_own ? 257 : 256;
|
db = svf_own ? 257 : 256;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=((XRES+BARSIZE-(510-351))*sdl_scale) && x<((XRES+BARSIZE-(510-366))*sdl_scale))
|
else if (x>=((XRES+BARSIZE-(510-351))) && x<((XRES+BARSIZE-(510-366))))
|
||||||
{
|
{
|
||||||
db = 270;
|
db = 270;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=((XRES+BARSIZE-(510-367))*sdl_scale) && x<((XRES+BARSIZE-(510-383))*sdl_scale))
|
else if (x>=((XRES+BARSIZE-(510-367))) && x<((XRES+BARSIZE-(510-383))))
|
||||||
{
|
{
|
||||||
db = 266;
|
db = 266;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=37*sdl_scale && x<=187*sdl_scale)
|
else if (x>=37 && x<=187)
|
||||||
{
|
{
|
||||||
if(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))
|
if(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))
|
||||||
{
|
{
|
||||||
@ -2003,13 +1999,13 @@ int main(int argc, char *argv[])
|
|||||||
else if(svf_login)
|
else if(svf_login)
|
||||||
{
|
{
|
||||||
db = 259;
|
db = 259;
|
||||||
if (svf_open && svf_own && x<=55*sdl_scale)
|
if (svf_open && svf_own && x<=55)
|
||||||
db = 258;
|
db = 258;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (x>=((XRES+BARSIZE-(510-385))*sdl_scale) && x<=((XRES+BARSIZE-(510-476))*sdl_scale))
|
else if (x>=((XRES+BARSIZE-(510-385))) && x<=((XRES+BARSIZE-(510-476))))
|
||||||
{
|
{
|
||||||
db = svf_login ? 261 : 260;
|
db = svf_login ? 261 : 260;
|
||||||
if (svf_admin)
|
if (svf_admin)
|
||||||
@ -2023,7 +2019,7 @@ int main(int argc, char *argv[])
|
|||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=sdl_scale && x<=17*sdl_scale)
|
else if (x>=1 && x<=17)
|
||||||
{
|
{
|
||||||
if(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))
|
if(sdl_mod & (KMOD_LCTRL|KMOD_RCTRL))
|
||||||
db = 276;
|
db = 276;
|
||||||
@ -2032,19 +2028,19 @@ int main(int argc, char *argv[])
|
|||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=((XRES+BARSIZE-(510-494))*sdl_scale) && x<=((XRES+BARSIZE-(510-509))*sdl_scale))
|
else if (x>=((XRES+BARSIZE-(510-494))) && x<=((XRES+BARSIZE-(510-509))))
|
||||||
{
|
{
|
||||||
db = sys_pause ? 264 : 263;
|
db = sys_pause ? 264 : 263;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=((XRES+BARSIZE-(510-476))*sdl_scale) && x<=((XRES+BARSIZE-(510-491))*sdl_scale))
|
else if (x>=((XRES+BARSIZE-(510-476))) && x<=((XRES+BARSIZE-(510-491))))
|
||||||
{
|
{
|
||||||
db = 267;
|
db = 267;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
da ++;
|
da ++;
|
||||||
}
|
}
|
||||||
else if (x>=19*sdl_scale && x<=35*sdl_scale && svf_open)
|
else if (x>=19 && x<=35 && svf_open)
|
||||||
{
|
{
|
||||||
db = 265;
|
db = 265;
|
||||||
if (da < 51)
|
if (da < 51)
|
||||||
@ -2067,8 +2063,8 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (load_mode)
|
if (load_mode)
|
||||||
{
|
{
|
||||||
load_x = CELL*((mx/sdl_scale-load_w/2+CELL/2)/CELL);
|
load_x = CELL*((mx-load_w/2+CELL/2)/CELL);
|
||||||
load_y = CELL*((my/sdl_scale-load_h/2+CELL/2)/CELL);
|
load_y = CELL*((my-load_h/2+CELL/2)/CELL);
|
||||||
if (load_x+load_w>XRES) load_x=XRES-load_w;
|
if (load_x+load_w>XRES) load_x=XRES-load_w;
|
||||||
if (load_y+load_h>YRES) load_y=YRES-load_h;
|
if (load_y+load_h>YRES) load_y=YRES-load_h;
|
||||||
if (load_x<0) load_x=0;
|
if (load_x<0) load_x=0;
|
||||||
@ -2089,8 +2085,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if (save_mode==1)//getting the area you are selecting
|
else if (save_mode==1)//getting the area you are selecting
|
||||||
{
|
{
|
||||||
save_x = mx/sdl_scale;
|
save_x = mx;
|
||||||
save_y = my/sdl_scale;
|
save_y = my;
|
||||||
if (save_x >= XRES) save_x = XRES-1;
|
if (save_x >= XRES) save_x = XRES-1;
|
||||||
if (save_y >= YRES) save_y = YRES-1;
|
if (save_y >= YRES) save_y = YRES-1;
|
||||||
save_w = 1;
|
save_w = 1;
|
||||||
@ -2107,8 +2103,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if (save_mode==2)
|
else if (save_mode==2)
|
||||||
{
|
{
|
||||||
save_w = mx/sdl_scale + 1 - save_x;
|
save_w = mx + 1 - save_x;
|
||||||
save_h = my/sdl_scale + 1 - save_y;
|
save_h = my + 1 - save_y;
|
||||||
if (save_w+save_x>XRES) save_w = XRES-save_x;
|
if (save_w+save_x>XRES) save_w = XRES-save_x;
|
||||||
if (save_h+save_y>YRES) save_h = YRES-save_y;
|
if (save_h+save_y>YRES) save_h = YRES-save_y;
|
||||||
if (save_w<1) save_w = 1;
|
if (save_w<1) save_w = 1;
|
||||||
@ -2139,8 +2135,6 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else if (sdl_zoom_trig && zoom_en<2)
|
else if (sdl_zoom_trig && zoom_en<2)
|
||||||
{
|
{
|
||||||
x /= sdl_scale;
|
|
||||||
y /= sdl_scale;
|
|
||||||
x -= ZSIZE/2;
|
x -= ZSIZE/2;
|
||||||
y -= ZSIZE/2;
|
y -= ZSIZE/2;
|
||||||
if (x<0) x=0;
|
if (x<0) x=0;
|
||||||
@ -2162,8 +2156,6 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
if (it > 50)
|
if (it > 50)
|
||||||
it = 50;
|
it = 50;
|
||||||
x /= sdl_scale;
|
|
||||||
y /= sdl_scale;
|
|
||||||
if (y>=YRES+(MENUSIZE-20))//check if mouse is on menu buttons
|
if (y>=YRES+(MENUSIZE-20))//check if mouse is on menu buttons
|
||||||
{
|
{
|
||||||
if (!lb)//mouse is NOT held down, so it is a first click
|
if (!lb)//mouse is NOT held down, so it is a first click
|
||||||
@ -2245,7 +2237,7 @@ int main(int argc, char *argv[])
|
|||||||
else
|
else
|
||||||
execute_save(vid_buf);
|
execute_save(vid_buf);
|
||||||
while (!sdl_poll())
|
while (!sdl_poll())
|
||||||
if (!SDL_GetMouseState(&x, &y))
|
if (!mouse_get_state(&x, &y))
|
||||||
break;
|
break;
|
||||||
b = bq = 0;
|
b = bq = 0;
|
||||||
}
|
}
|
||||||
@ -2303,7 +2295,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c==WL_SIGN+100)
|
if (c==WL_SIGN+100 || MSIGN!=-1) // if sign tool is selected or a sign is being moved
|
||||||
{
|
{
|
||||||
if (!bq)
|
if (!bq)
|
||||||
add_sign_ui(vid_buf, x, y);
|
add_sign_ui(vid_buf, x, y);
|
||||||
@ -2475,8 +2467,6 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
if (lb && lm) //lm is box/line tool
|
if (lb && lm) //lm is box/line tool
|
||||||
{
|
{
|
||||||
x /= sdl_scale;
|
|
||||||
y /= sdl_scale;
|
|
||||||
c = (lb&1) ? sl : sr;
|
c = (lb&1) ? sl : sr;
|
||||||
su = c;
|
su = c;
|
||||||
if (lm == 1)//line
|
if (lm == 1)//line
|
||||||
@ -2506,9 +2496,9 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (zoom_en!=1 && !load_mode && !save_mode)//draw normal cursor
|
if (zoom_en!=1 && !load_mode && !save_mode)//draw normal cursor
|
||||||
{
|
{
|
||||||
render_cursor(vid_buf, mx/sdl_scale, my/sdl_scale, su, bsx, bsy);
|
render_cursor(vid_buf, mx, my, su, bsx, bsy);
|
||||||
mousex = mx/sdl_scale;
|
mousex = mx;
|
||||||
mousey = my/sdl_scale;
|
mousey = my;
|
||||||
}
|
}
|
||||||
#ifdef OGLR
|
#ifdef OGLR
|
||||||
draw_parts_fbo();
|
draw_parts_fbo();
|
||||||
|
@ -2794,6 +2794,7 @@ void clear_area(int area_x, int area_y, int area_w, int area_h)
|
|||||||
{
|
{
|
||||||
int cx = 0;
|
int cx = 0;
|
||||||
int cy = 0;
|
int cy = 0;
|
||||||
|
int i;
|
||||||
for (cy=0; cy<area_h; cy++)
|
for (cy=0; cy<area_h; cy++)
|
||||||
{
|
{
|
||||||
for (cx=0; cx<area_w; cx++)
|
for (cx=0; cx<area_w; cx++)
|
||||||
@ -2802,6 +2803,13 @@ void clear_area(int area_x, int area_y, int area_w, int area_h)
|
|||||||
delete_part(cx+area_x, cy+area_y, 0);
|
delete_part(cx+area_x, cy+area_y, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (i=0; i<MAXSIGNS; i++)
|
||||||
|
{
|
||||||
|
if (signs[i].x>=area_x && signs[i].x<area_x+area_w && signs[i].y>=area_y && signs[i].y<area_y+area_h)
|
||||||
|
{
|
||||||
|
signs[i].text[0] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_box(int x1, int y1, int x2, int y2, int c, int flags)
|
void create_box(int x1, int y1, int x2, int y2, int c, int flags)
|
||||||
|
138
src/save.c
138
src/save.c
@ -440,9 +440,11 @@ fin:
|
|||||||
void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h, unsigned char bmap[YRES/CELL][XRES/CELL], float vx[YRES/CELL][XRES/CELL], float vy[YRES/CELL][XRES/CELL], float pv[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* o_partsptr)
|
void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h, unsigned char bmap[YRES/CELL][XRES/CELL], float vx[YRES/CELL][XRES/CELL], float vy[YRES/CELL][XRES/CELL], float pv[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* o_partsptr)
|
||||||
{
|
{
|
||||||
particle *partsptr = o_partsptr;
|
particle *partsptr = o_partsptr;
|
||||||
unsigned char *partsData = NULL, *partsPosData = NULL, *fanData = NULL, *wallData = NULL, *finalData = NULL, *outputData = NULL;
|
unsigned char *partsData = NULL, *partsPosData = NULL, *fanData = NULL, *wallData = NULL, *finalData = NULL, *outputData = NULL, *soapLinkData = NULL;
|
||||||
unsigned *partsPosLink = NULL, *partsPosFirstMap = NULL, *partsPosCount = NULL, *partsPosLastMap = NULL;
|
unsigned *partsPosLink = NULL, *partsPosFirstMap = NULL, *partsPosCount = NULL, *partsPosLastMap = NULL;
|
||||||
int partsDataLen, partsPosDataLen, fanDataLen, wallDataLen, finalDataLen, outputDataLen;
|
unsigned partsCount = 0, *partsSaveIndex = NULL;
|
||||||
|
unsigned *elementCount = calloc(PT_NUM, sizeof(unsigned));
|
||||||
|
int partsDataLen, partsPosDataLen, fanDataLen, wallDataLen, finalDataLen, outputDataLen, soapLinkDataLen;
|
||||||
int blockX, blockY, blockW, blockH, fullX, fullY, fullW, fullH;
|
int blockX, blockY, blockW, blockH, fullX, fullY, fullW, fullH;
|
||||||
int x, y, i, wallDataFound = 0;
|
int x, y, i, wallDataFound = 0;
|
||||||
int posCount, signsCount;
|
int posCount, signsCount;
|
||||||
@ -557,6 +559,8 @@ void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
*/
|
*/
|
||||||
partsData = malloc(NPART * (sizeof(particle)+1));
|
partsData = malloc(NPART * (sizeof(particle)+1));
|
||||||
partsDataLen = 0;
|
partsDataLen = 0;
|
||||||
|
partsSaveIndex = calloc(NPART, sizeof(unsigned));
|
||||||
|
partsCount = 0;
|
||||||
for (y=0;y<fullH;y++)
|
for (y=0;y<fullH;y++)
|
||||||
{
|
{
|
||||||
for (x=0;x<fullW;x++)
|
for (x=0;x<fullW;x++)
|
||||||
@ -573,8 +577,12 @@ void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
//Turn pmap entry into a partsptr index
|
//Turn pmap entry into a partsptr index
|
||||||
i = i>>8;
|
i = i>>8;
|
||||||
|
|
||||||
|
//Store saved particle index+1 for this partsptr index (0 means not saved)
|
||||||
|
partsSaveIndex[i] = (partsCount++) + 1;
|
||||||
|
|
||||||
//Type (required)
|
//Type (required)
|
||||||
partsData[partsDataLen++] = partsptr[i].type;
|
partsData[partsDataLen++] = partsptr[i].type;
|
||||||
|
elementCount[partsptr[i].type]++;
|
||||||
|
|
||||||
//Location of the field descriptor
|
//Location of the field descriptor
|
||||||
fieldDescLoc = partsDataLen++;
|
fieldDescLoc = partsDataLen++;
|
||||||
@ -679,6 +687,47 @@ void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
soapLinkData = malloc(3*elementCount[PT_SOAP]);
|
||||||
|
soapLinkDataLen = 0;
|
||||||
|
//Iterate through particles in the same order that they were saved
|
||||||
|
for (y=0;y<fullH;y++)
|
||||||
|
{
|
||||||
|
for (x=0;x<fullW;x++)
|
||||||
|
{
|
||||||
|
//Find the first particle in this position
|
||||||
|
i = partsPosFirstMap[y*fullW + x];
|
||||||
|
|
||||||
|
//Loop while there is a pmap entry
|
||||||
|
while (i)
|
||||||
|
{
|
||||||
|
//Turn pmap entry into a partsptr index
|
||||||
|
i = i>>8;
|
||||||
|
|
||||||
|
if (partsptr[i].type==PT_SOAP)
|
||||||
|
{
|
||||||
|
//Only save forward link for each particle, back links can be deduced from other forward links
|
||||||
|
//linkedIndex is index within saved particles + 1, 0 means not saved or no link
|
||||||
|
unsigned linkedIndex = 0;
|
||||||
|
if ((partsptr[i].ctype&2) && partsptr[i].tmp>=0 && partsptr[i].tmp<NPART)
|
||||||
|
{
|
||||||
|
linkedIndex = partsSaveIndex[partsptr[i].tmp];
|
||||||
|
}
|
||||||
|
soapLinkData[soapLinkDataLen++] = (linkedIndex&0xFF0000)>>16;
|
||||||
|
soapLinkData[soapLinkDataLen++] = (linkedIndex&0x00FF00)>>8;
|
||||||
|
soapLinkData[soapLinkDataLen++] = (linkedIndex&0x0000FF);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get the pmap entry for the next particle in the same position
|
||||||
|
i = partsPosLink[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!soapLinkDataLen)
|
||||||
|
{
|
||||||
|
free(soapLinkData);
|
||||||
|
soapLinkData = NULL;
|
||||||
|
}
|
||||||
if(!partsDataLen)
|
if(!partsDataLen)
|
||||||
{
|
{
|
||||||
free(partsData);
|
free(partsData);
|
||||||
@ -704,10 +753,12 @@ void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
bson_append_binary(&b, "wallMap", BSON_BIN_USER, wallData, wallDataLen);
|
bson_append_binary(&b, "wallMap", BSON_BIN_USER, wallData, wallDataLen);
|
||||||
if(fanData)
|
if(fanData)
|
||||||
bson_append_binary(&b, "fanMap", BSON_BIN_USER, fanData, fanDataLen);
|
bson_append_binary(&b, "fanMap", BSON_BIN_USER, fanData, fanDataLen);
|
||||||
|
if(soapLinkData)
|
||||||
|
bson_append_binary(&b, "soapLinks", BSON_BIN_USER, soapLinkData, soapLinkDataLen);
|
||||||
signsCount = 0;
|
signsCount = 0;
|
||||||
for(i = 0; i < MAXSIGNS; i++)
|
for(i = 0; i < MAXSIGNS; i++)
|
||||||
{
|
{
|
||||||
if(signs[i].text[0] && signs[i].x>=fullX && signs[i].x<=fullX+fullW && signs[i].y>=fullY && signs[i].y<=fullY+fullH)
|
if(signs[i].text[0] && signs[i].x>=orig_x0 && signs[i].x<=orig_x0+orig_w && signs[i].y>=orig_y0 && signs[i].y<=orig_y0+orig_h)
|
||||||
{
|
{
|
||||||
signsCount++;
|
signsCount++;
|
||||||
}
|
}
|
||||||
@ -717,7 +768,7 @@ void *build_save_OPS(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
bson_append_start_array(&b, "signs");
|
bson_append_start_array(&b, "signs");
|
||||||
for(i = 0; i < MAXSIGNS; i++)
|
for(i = 0; i < MAXSIGNS; i++)
|
||||||
{
|
{
|
||||||
if(signs[i].text[0] && signs[i].x>=fullX && signs[i].x<=fullX+fullW && signs[i].y>=fullY && signs[i].y<=fullY+fullH)
|
if(signs[i].text[0] && signs[i].x>=orig_x0 && signs[i].x<=orig_x0+orig_w && signs[i].y>=orig_y0 && signs[i].y<=orig_y0+orig_h)
|
||||||
{
|
{
|
||||||
bson_append_start_object(&b, "sign");
|
bson_append_start_object(&b, "sign");
|
||||||
bson_append_string(&b, "text", signs[i].text);
|
bson_append_string(&b, "text", signs[i].text);
|
||||||
@ -770,6 +821,12 @@ fin:
|
|||||||
free(wallData);
|
free(wallData);
|
||||||
if(fanData)
|
if(fanData)
|
||||||
free(fanData);
|
free(fanData);
|
||||||
|
if (elementCount)
|
||||||
|
free(elementCount);
|
||||||
|
if (partsSaveIndex)
|
||||||
|
free(partsSaveIndex);
|
||||||
|
if (soapLinkData)
|
||||||
|
free(soapLinkData);
|
||||||
|
|
||||||
return outputData;
|
return outputData;
|
||||||
}
|
}
|
||||||
@ -777,8 +834,9 @@ fin:
|
|||||||
int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned char bmap[YRES/CELL][XRES/CELL], float vx[YRES/CELL][XRES/CELL], float vy[YRES/CELL][XRES/CELL], float pv[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* o_partsptr, unsigned pmap[YRES][XRES])
|
int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned char bmap[YRES/CELL][XRES/CELL], float vx[YRES/CELL][XRES/CELL], float vy[YRES/CELL][XRES/CELL], float pv[YRES/CELL][XRES/CELL], float fvx[YRES/CELL][XRES/CELL], float fvy[YRES/CELL][XRES/CELL], sign signs[MAXSIGNS], void* o_partsptr, unsigned pmap[YRES][XRES])
|
||||||
{
|
{
|
||||||
particle *partsptr = o_partsptr;
|
particle *partsptr = o_partsptr;
|
||||||
unsigned char * inputData = save, *bsonData = NULL, *partsData = NULL, *partsPosData = NULL, *fanData = NULL, *wallData = NULL;
|
unsigned char * inputData = save, *bsonData = NULL, *partsData = NULL, *partsPosData = NULL, *fanData = NULL, *wallData = NULL, *soapLinkData = NULL;
|
||||||
int inputDataLen = size, bsonDataLen = 0, partsDataLen, partsPosDataLen, fanDataLen, wallDataLen;
|
int inputDataLen = size, bsonDataLen = 0, partsDataLen, partsPosDataLen, fanDataLen, wallDataLen, soapLinkDataLen;
|
||||||
|
unsigned partsCount = 0, *partsSimIndex = NULL;
|
||||||
int i, freeIndicesCount, x, y, returnCode = 0, j;
|
int i, freeIndicesCount, x, y, returnCode = 0, j;
|
||||||
int *freeIndices = NULL;
|
int *freeIndices = NULL;
|
||||||
int blockX, blockY, blockW, blockH, fullX, fullY, fullW, fullH;
|
int blockX, blockY, blockW, blockH, fullX, fullY, fullW, fullH;
|
||||||
@ -874,7 +932,7 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
{
|
{
|
||||||
if(strcmp(bson_iterator_key(&signiter), "text")==0 && bson_iterator_type(&signiter)==BSON_STRING)
|
if(strcmp(bson_iterator_key(&signiter), "text")==0 && bson_iterator_type(&signiter)==BSON_STRING)
|
||||||
{
|
{
|
||||||
strcpy(signs[i].text, bson_iterator_string(&signiter));
|
strncpy(signs[i].text, bson_iterator_string(&signiter), 255);
|
||||||
clean_text(signs[i].text, 158-14);
|
clean_text(signs[i].text, 158-14);
|
||||||
}
|
}
|
||||||
else if(strcmp(bson_iterator_key(&signiter), "justification")==0 && bson_iterator_type(&signiter)==BSON_INT)
|
else if(strcmp(bson_iterator_key(&signiter), "justification")==0 && bson_iterator_type(&signiter)==BSON_INT)
|
||||||
@ -951,6 +1009,17 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
fprintf(stderr, "Invalid datatype of fan data: %d[%d] %d[%d] %d[%d]\n", bson_iterator_type(&iter), bson_iterator_type(&iter)==BSON_BINDATA, (unsigned char)bson_iterator_bin_type(&iter), ((unsigned char)bson_iterator_bin_type(&iter))==BSON_BIN_USER, bson_iterator_bin_len(&iter), bson_iterator_bin_len(&iter)>0);
|
fprintf(stderr, "Invalid datatype of fan data: %d[%d] %d[%d] %d[%d]\n", bson_iterator_type(&iter), bson_iterator_type(&iter)==BSON_BINDATA, (unsigned char)bson_iterator_bin_type(&iter), ((unsigned char)bson_iterator_bin_type(&iter))==BSON_BIN_USER, bson_iterator_bin_len(&iter), bson_iterator_bin_len(&iter)>0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(strcmp(bson_iterator_key(&iter), "soapLinks")==0)
|
||||||
|
{
|
||||||
|
if(bson_iterator_type(&iter)==BSON_BINDATA && ((unsigned char)bson_iterator_bin_type(&iter))==BSON_BIN_USER && (soapLinkDataLen = bson_iterator_bin_len(&iter)) > 0)
|
||||||
|
{
|
||||||
|
soapLinkData = bson_iterator_bin_data(&iter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Invalid datatype of soap data: %d[%d] %d[%d] %d[%d]\n", bson_iterator_type(&iter), bson_iterator_type(&iter)==BSON_BINDATA, (unsigned char)bson_iterator_bin_type(&iter), ((unsigned char)bson_iterator_bin_type(&iter))==BSON_BIN_USER, bson_iterator_bin_len(&iter), bson_iterator_bin_len(&iter)>0);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(strcmp(bson_iterator_key(&iter), "legacyEnable")==0 && replace)
|
else if(strcmp(bson_iterator_key(&iter), "legacyEnable")==0 && replace)
|
||||||
{
|
{
|
||||||
if(bson_iterator_type(&iter)==BSON_BOOL)
|
if(bson_iterator_type(&iter)==BSON_BOOL)
|
||||||
@ -1102,6 +1171,8 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
parts_lastActiveIndex = NPART-1;
|
parts_lastActiveIndex = NPART-1;
|
||||||
freeIndicesCount = 0;
|
freeIndicesCount = 0;
|
||||||
freeIndices = calloc(sizeof(int), NPART);
|
freeIndices = calloc(sizeof(int), NPART);
|
||||||
|
partsSimIndex = calloc(NPART, sizeof(unsigned));
|
||||||
|
partsCount = 0;
|
||||||
for (i = 0; i<NPART; i++)
|
for (i = 0; i<NPART; i++)
|
||||||
{
|
{
|
||||||
//Ensure ALL parts (even photons) are in the pmap so we can overwrite, keep a track of indices we can use
|
//Ensure ALL parts (even photons) are in the pmap so we can overwrite, keep a track of indices we can use
|
||||||
@ -1141,7 +1212,7 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
}
|
}
|
||||||
if(partsData[i] >= PT_NUM)
|
if(partsData[i] >= PT_NUM)
|
||||||
partsData[i] = PT_DMND; //Replace all invalid elements with diamond
|
partsData[i] = PT_DMND; //Replace all invalid elements with diamond
|
||||||
if(pmap[y][x])
|
if(pmap[y][x] && posCount==0) // Check posCount to make sure an existing particle is not replaced twice if two particles are saved in that position
|
||||||
{
|
{
|
||||||
//Replace existing particle or allocated block
|
//Replace existing particle or allocated block
|
||||||
newIndex = pmap[y][x]>>8;
|
newIndex = pmap[y][x]>>8;
|
||||||
@ -1158,7 +1229,10 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
}
|
}
|
||||||
if(newIndex < 0 || newIndex >= NPART)
|
if(newIndex < 0 || newIndex >= NPART)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
//Store partsptr index+1 for this saved particle index (0 means not loaded)
|
||||||
|
partsSimIndex[partsCount++] = newIndex+1;
|
||||||
|
|
||||||
//Clear the particle, ready for our new properties
|
//Clear the particle, ready for our new properties
|
||||||
memset(&(partsptr[newIndex]), 0, sizeof(particle));
|
memset(&(partsptr[newIndex]), 0, sizeof(particle));
|
||||||
|
|
||||||
@ -1284,11 +1358,43 @@ int parse_save_OPS(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
STKM_init_legs(&(fighters[fcount]), newIndex);
|
STKM_init_legs(&(fighters[fcount]), newIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (partsptr[newIndex].type == PT_SOAP)
|
||||||
|
{
|
||||||
|
//Clear soap links, links will be added back in if soapLinkData is present
|
||||||
|
partsptr[newIndex].ctype &= ~6;
|
||||||
|
}
|
||||||
if (!ptypes[partsptr[newIndex].type].enabled)
|
if (!ptypes[partsptr[newIndex].type].enabled)
|
||||||
partsptr[newIndex].type = PT_NONE;
|
partsptr[newIndex].type = PT_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (soapLinkData)
|
||||||
|
{
|
||||||
|
int soapLinkDataPos = 0;
|
||||||
|
for (i=0; i<partsCount; i++)
|
||||||
|
{
|
||||||
|
if (partsSimIndex[i] && partsptr[partsSimIndex[i]-1].type == PT_SOAP)
|
||||||
|
{
|
||||||
|
// Get the index of the particle forward linked from this one, if present in the save data
|
||||||
|
int linkedIndex = 0;
|
||||||
|
if (soapLinkDataPos+3 > soapLinkDataLen) break;
|
||||||
|
linkedIndex |= soapLinkData[soapLinkDataPos++]<<16;
|
||||||
|
linkedIndex |= soapLinkData[soapLinkDataPos++]<<8;
|
||||||
|
linkedIndex |= soapLinkData[soapLinkDataPos++];
|
||||||
|
// All indexes in soapLinkData and partsSimIndex have 1 added to them (0 means not saved/loaded)
|
||||||
|
if (!linkedIndex || linkedIndex-1>=partsCount || !partsSimIndex[linkedIndex-1])
|
||||||
|
continue;
|
||||||
|
linkedIndex = partsSimIndex[linkedIndex-1]-1;
|
||||||
|
newIndex = partsSimIndex[i]-1;
|
||||||
|
|
||||||
|
//Attach the two particles
|
||||||
|
partsptr[newIndex].ctype |= 2;
|
||||||
|
partsptr[newIndex].tmp = linkedIndex;
|
||||||
|
partsptr[linkedIndex].ctype |= 4;
|
||||||
|
partsptr[linkedIndex].tmp2 = newIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
goto fin;
|
goto fin;
|
||||||
fail:
|
fail:
|
||||||
@ -1298,6 +1404,8 @@ fin:
|
|||||||
bson_destroy(&b);
|
bson_destroy(&b);
|
||||||
if(freeIndices)
|
if(freeIndices)
|
||||||
free(freeIndices);
|
free(freeIndices);
|
||||||
|
if(partsSimIndex)
|
||||||
|
free(partsSimIndex);
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1580,7 +1688,7 @@ void *build_save_PSv(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
for (j=0; j<w*h; j++)
|
for (j=0; j<w*h; j++)
|
||||||
{
|
{
|
||||||
i = m[j];
|
i = m[j];
|
||||||
if (i && (parts[i-1].type==PT_PBCN)) {
|
if (i && (parts[i-1].type==PT_PBCN || parts[i-1].type==PT_TRON)) {
|
||||||
//Save tmp2
|
//Save tmp2
|
||||||
d[p++] = parts[i-1].tmp2;
|
d[p++] = parts[i-1].tmp2;
|
||||||
}
|
}
|
||||||
@ -1638,14 +1746,14 @@ void *build_save_PSv(int *size, int orig_x0, int orig_y0, int orig_w, int orig_h
|
|||||||
j = 0;
|
j = 0;
|
||||||
for (i=0; i<MAXSIGNS; i++)
|
for (i=0; i<MAXSIGNS; i++)
|
||||||
if (signs[i].text[0] &&
|
if (signs[i].text[0] &&
|
||||||
signs[i].x>=x0 && signs[i].x<x0+w &&
|
signs[i].x>=orig_x0 && signs[i].x<orig_x0+orig_w &&
|
||||||
signs[i].y>=y0 && signs[i].y<y0+h)
|
signs[i].y>=orig_y0 && signs[i].y<orig_y0+orig_h)
|
||||||
j++;
|
j++;
|
||||||
d[p++] = j;
|
d[p++] = j;
|
||||||
for (i=0; i<MAXSIGNS; i++)
|
for (i=0; i<MAXSIGNS; i++)
|
||||||
if (signs[i].text[0] &&
|
if (signs[i].text[0] &&
|
||||||
signs[i].x>=x0 && signs[i].x<x0+w &&
|
signs[i].x>=orig_x0 && signs[i].x<orig_x0+orig_w &&
|
||||||
signs[i].y>=y0 && signs[i].y<y0+h)
|
signs[i].y>=orig_y0 && signs[i].y<orig_y0+orig_h)
|
||||||
{
|
{
|
||||||
d[p++] = (signs[i].x-x0);
|
d[p++] = (signs[i].x-x0);
|
||||||
d[p++] = (signs[i].x-x0)>>8;
|
d[p++] = (signs[i].x-x0)>>8;
|
||||||
@ -1963,7 +2071,7 @@ int parse_save_PSv(void *save, int size, int replace, int x0, int y0, unsigned c
|
|||||||
{
|
{
|
||||||
i = m[j];
|
i = m[j];
|
||||||
ty = d[pty+j];
|
ty = d[pty+j];
|
||||||
if (i && ty==PT_PBCN)
|
if (i && (ty==PT_PBCN || (ty==PT_TRON && ver>=77)))
|
||||||
{
|
{
|
||||||
if (p >= size)
|
if (p >= size)
|
||||||
goto corrupt;
|
goto corrupt;
|
||||||
|
Reference in New Issue
Block a user