Added UI elements for InventoryData in the tile editor. Also added various buttons for deleting key=>value pairs and for adding new pairs, new inventories, and new inventory items. These buttons do not change anything at the moment. Also changed the tile editor's dimensions.
parent
38f62c970e
commit
ff8409be64
|
@ -1,6 +1,8 @@
|
|||
#ifndef ASSETS_H
|
||||
#define ASSETS_H
|
||||
/* globals */
|
||||
int g_width;
|
||||
int g_height;
|
||||
int g_gfx; // 0 = not loaded, 1 = loaded
|
||||
int g_data; // 0 = not loaded, 1 = loaded
|
||||
int g_set;
|
||||
|
@ -53,4 +55,7 @@ struct Element *text_value;
|
|||
|
||||
struct Element *image_tile;
|
||||
|
||||
struct Element *button_add_pair;
|
||||
struct Element *button_add_inventory;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -18,21 +18,23 @@
|
|||
#include "../data.h"
|
||||
|
||||
int interfaceInit() {
|
||||
g_width = 400;
|
||||
g_height = 480;
|
||||
// since we use threads, Mac OS 10+ support only. Also threaded os.
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
// Enable Unicode, for later text input
|
||||
SDL_EnableUNICODE(SDL_ENABLE);
|
||||
// Set up our SDL Window
|
||||
if ((screen = SDL_SetVideoMode(320, 480, 32, SDL_SWSURFACE|SDL_DOUBLEBUF)) == NULL) {
|
||||
if ((screen = SDL_SetVideoMode(g_width, g_height, 32, SDL_SWSURFACE|SDL_DOUBLEBUF)) == NULL) {
|
||||
return -1;
|
||||
}
|
||||
SDL_WM_SetCaption("TS:Tile Editor", NULL);
|
||||
menu_area = SDL_CreateRGBSurface(screen->flags, 320, 112, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
menu_area = SDL_CreateRGBSurface(screen->flags, g_width, 112, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
tile_area_rect.y = 112;
|
||||
tile_area = SDL_CreateRGBSurface(screen->flags, 320, 392, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
tile_area = SDL_CreateRGBSurface(screen->flags, g_width, 392, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
|
||||
sprite_area_rect.x = 320;
|
||||
sprite_area = SDL_CreateRGBSurface(screen->flags, 320, screen->h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
sprite_area_rect.x = g_width;
|
||||
sprite_area = SDL_CreateRGBSurface(screen->flags, g_width, screen->h, screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask);
|
||||
|
||||
loadFont(&font, font_images, font_images_length, 8, 8);
|
||||
|
||||
|
@ -161,7 +163,7 @@ int interfaceInit() {
|
|||
setElementPosition(text_value, 2 + (20 * font.width), 2);
|
||||
addElementToList(editor_elements, text_value);*/
|
||||
|
||||
SDL_FillRect(tile_area, NULL, SDL_MapRGB(tile_area->format, 8, 16, 12));
|
||||
SDL_FillRect(tile_area, NULL, SDL_MapRGB(tile_area->format, 8, 16, 24));
|
||||
|
||||
drawElements();
|
||||
|
||||
|
@ -450,10 +452,10 @@ void handleKeyDown(const SDL_KeyboardEvent *event) {
|
|||
// F11 = fullscreen/windowed toggle
|
||||
if (event->keysym.sym == 292) {
|
||||
if (g_fullscreen == 1) {
|
||||
screen = SDL_SetVideoMode(320, 480, 32, SDL_SWSURFACE|SDL_DOUBLEBUF);
|
||||
screen = SDL_SetVideoMode(g_width, g_height, 32, SDL_SWSURFACE|SDL_DOUBLEBUF);
|
||||
g_fullscreen = 0;
|
||||
} else {
|
||||
screen = SDL_SetVideoMode(320, 480, 32, SDL_FULLSCREEN|SDL_SWSURFACE|SDL_DOUBLEBUF);
|
||||
screen = SDL_SetVideoMode(g_width, g_height, 32, SDL_FULLSCREEN|SDL_SWSURFACE|SDL_DOUBLEBUF);
|
||||
g_fullscreen = 1;
|
||||
}
|
||||
return;
|
||||
|
@ -484,7 +486,6 @@ void handleMouseDown(const SDL_MouseButtonEvent *event) {
|
|||
element = editor_elements->first;
|
||||
x_offset = tile_area_rect.x;
|
||||
y_offset = tile_area_rect.y;
|
||||
printf("running w/ editor elements at %dx%d\n", x_offset, y_offset);
|
||||
}
|
||||
int t_x, t_y, t_w, t_h = 0;
|
||||
while (element != NULL) {
|
||||
|
@ -763,9 +764,9 @@ void loadDataCallback() {
|
|||
printConsole(temp);
|
||||
|
||||
if (buffer != NULL) {
|
||||
loadTile(g_set, g_id);
|
||||
free(buffer);
|
||||
}
|
||||
loadTile(g_set, g_id);
|
||||
}
|
||||
|
||||
void saveDataCallback() {
|
||||
|
@ -775,10 +776,28 @@ void saveDataCallback() {
|
|||
void loadTile(int set, int id) {
|
||||
char temp[128];
|
||||
|
||||
if (g_data != 1) {
|
||||
return;
|
||||
}
|
||||
/* delete old elements */
|
||||
SDL_FillRect(tile_area, NULL, SDL_MapRGB(tile_area->format, 8, 16, 12));
|
||||
SDL_FillRect(tile_area, NULL, SDL_MapRGB(tile_area->format, 8, 16, 24));
|
||||
deleteElementsFromList(editor_elements);
|
||||
|
||||
button_add_inventory = newElement(TYPE_BUTTON);
|
||||
setElementText(button_add_inventory, "Add Inventory");
|
||||
setElementPosition(button_add_inventory, tile_area->w - getElementWidth(button_add_inventory) - 2, 2);
|
||||
addElementToList(editor_elements, button_add_inventory);
|
||||
button_add_pair = newElement(TYPE_BUTTON);
|
||||
setElementText(button_add_pair, "Add Pair");
|
||||
setElementPosition(button_add_pair, tile_area->w - getElementWidth(button_add_pair) - getElementWidth(button_add_inventory) - 4, 2);
|
||||
addElementToList(editor_elements, button_add_pair);
|
||||
|
||||
drawElement(button_add_inventory);
|
||||
drawElement(button_add_pair);
|
||||
|
||||
int y_offset = getElementHeight(button_add_pair)+4;
|
||||
int x_offset = 0;
|
||||
|
||||
if (set < 0) {
|
||||
sprintf(temp, "ERR, set(%d) must be non-negative!", set);
|
||||
printConsole(temp);
|
||||
|
@ -805,20 +824,28 @@ void loadTile(int set, int id) {
|
|||
while(table_pair != NULL) {
|
||||
struct InventoryData *inv;
|
||||
struct Element *extra_element;
|
||||
struct Element *delete_element;
|
||||
delete_element = newElement(TYPE_BUTTON);
|
||||
setElementText(delete_element, "x");
|
||||
setElementPosition(delete_element, 2, j*(font.height+6)+1+y_offset);
|
||||
addElementToList(editor_elements, delete_element);
|
||||
x_offset = getElementWidth(delete_element)+8;
|
||||
struct Element *value_element;
|
||||
struct Element *key_element = newElement(TYPE_TEXT_INPUT); // @@ memory leak here
|
||||
setElementSize(key_element, 16);
|
||||
setElementText(key_element, table_pair->key);
|
||||
setElementPosition(key_element, 2, j*(font.height+6)+2);
|
||||
setElementPosition(key_element, x_offset, j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, key_element);
|
||||
|
||||
setElementParent(delete_element, key_element);
|
||||
switch(table_pair->type) {
|
||||
case T_STRING:
|
||||
value_element = newElement(TYPE_TEXT_INPUT); // and here
|
||||
addElementChild(key_element, value_element);
|
||||
setElementParent(value_element, key_element);
|
||||
setElementSize(value_element, 22);
|
||||
setElementSize(value_element, 30);
|
||||
setElementText(value_element, table_pair->value);
|
||||
setElementPosition(value_element, getElementWidth(key_element) + 4, j*(font.height+6)+2);
|
||||
setElementPosition(value_element, x_offset+getElementWidth(key_element) + 2, j*(font.height+6)+2+y_offset);
|
||||
setElementCallback(value_element, &changeValueCallback);
|
||||
addElementToList(editor_elements, value_element);
|
||||
break;
|
||||
|
@ -826,34 +853,86 @@ void loadTile(int set, int id) {
|
|||
value_element = newElement(TYPE_TEXT_INPUT); // and here
|
||||
addElementChild(key_element, value_element);
|
||||
setElementParent(value_element, key_element);
|
||||
setElementSize(value_element, 22);
|
||||
setElementSize(value_element, 30);
|
||||
setElementValue(value_element, (*(int*)table_pair->value));
|
||||
setElementPosition(value_element, getElementWidth(key_element) + 4, j*(font.height+6)+2);
|
||||
setElementPosition(value_element, x_offset+getElementWidth(key_element) + 2, j*(font.height+6)+2+y_offset);
|
||||
setElementCallback(value_element, &changeValueCallback);
|
||||
addElementToList(editor_elements, value_element);
|
||||
break;
|
||||
case T_PROTO_INVENTORY: // @@ add fields for count range and chance
|
||||
case T_PROTO_INVENTORY:
|
||||
extra_element = newElement(TYPE_BUTTON);
|
||||
setElementText(extra_element, "add");
|
||||
setElementPosition(extra_element, x_offset+getElementWidth(key_element) + 2, j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, extra_element);
|
||||
inv = table_pair->value;
|
||||
while (inv != NULL) {
|
||||
j++;
|
||||
// key
|
||||
// delete element button
|
||||
delete_element = newElement(TYPE_BUTTON);
|
||||
setElementText(delete_element, "x");
|
||||
setElementPosition(delete_element, x_offset+2, j*(font.height+6)+1+y_offset);
|
||||
addElementToList(editor_elements, delete_element);
|
||||
// name key
|
||||
extra_element = newElement(TYPE_TEXT);
|
||||
setElementSize(extra_element, 16);
|
||||
setElementSize(extra_element, 10);
|
||||
setElementText(extra_element, "name");
|
||||
setElementPosition(extra_element, 2, j*(font.height+6)+2);
|
||||
setElementPosition(extra_element, x_offset+4 + getElementWidth(delete_element), j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, extra_element);
|
||||
// value
|
||||
// name value
|
||||
value_element = newElement(TYPE_TEXT_INPUT);
|
||||
addElementChild(key_element, value_element);
|
||||
setElementParent(value_element, key_element);
|
||||
setElementSize(value_element, 22);
|
||||
setElementSize(value_element, 30);
|
||||
setElementText(value_element, inv->name);
|
||||
setElementPosition(value_element, getElementWidth(key_element) + 4, j*(font.height+6)+2);
|
||||
setElementPosition(value_element, x_offset + getElementWidth(delete_element) + getElementWidth(extra_element) + 7, j*(font.height+6)+2+y_offset);
|
||||
setElementCallback(value_element, &changeValueCallback);
|
||||
addElementToList(editor_elements, value_element);
|
||||
j++;
|
||||
// count min key
|
||||
struct Element *count_min_key_element = newElement(TYPE_TEXT);
|
||||
setElementSize(count_min_key_element, 4);
|
||||
setElementText(count_min_key_element, "min");
|
||||
setElementPosition(count_min_key_element, x_offset+5 + getElementWidth(delete_element), j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, count_min_key_element);
|
||||
// count min count_min_value
|
||||
struct Element *count_min_value_element = newElement(TYPE_SPINNER);
|
||||
addElementChild(key_element, count_min_value_element);
|
||||
setElementParent(count_min_value_element, key_element);
|
||||
setElementSize(count_min_value_element, 4);
|
||||
setElementValue(count_min_value_element, inv->count.min);
|
||||
setElementPosition(count_min_value_element, x_offset + getElementWidth(delete_element) + getElementWidth(count_min_key_element) + 7, j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, count_min_value_element);
|
||||
// count max key
|
||||
struct Element *count_max_key_element = newElement(TYPE_TEXT);
|
||||
setElementSize(count_max_key_element, 4);
|
||||
setElementText(count_max_key_element, "max");
|
||||
setElementPosition(count_max_key_element, x_offset+11 + getElementWidth(delete_element) + getElementWidth(count_min_key_element) + getElementWidth(count_min_value_element), j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, count_max_key_element);
|
||||
// count max count_max_value
|
||||
struct Element *count_max_value_element = newElement(TYPE_SPINNER);
|
||||
addElementChild(key_element, count_max_value_element);
|
||||
setElementParent(count_max_value_element, key_element);
|
||||
setElementSize(count_max_value_element, 4);
|
||||
setElementValue(count_max_value_element, inv->count.max);
|
||||
setElementPosition(count_max_value_element, x_offset + getElementWidth(delete_element) + getElementWidth(count_min_value_element) + getElementWidth(count_max_key_element) + getElementWidth(count_min_key_element) + 13, j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, count_max_value_element);
|
||||
// count max key
|
||||
struct Element *chance_key_element = newElement(TYPE_TEXT);
|
||||
setElementSize(chance_key_element, 7);
|
||||
setElementText(chance_key_element, "chance");
|
||||
setElementPosition(chance_key_element, x_offset+16 + getElementWidth(delete_element) + getElementWidth(count_min_key_element) + getElementWidth(count_min_value_element) + getElementWidth(count_max_key_element) + getElementWidth(count_max_value_element), j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, chance_key_element);
|
||||
// count max chance_value
|
||||
struct Element *chance_value_element = newElement(TYPE_SPINNER);
|
||||
addElementChild(key_element, chance_value_element);
|
||||
setElementParent(chance_value_element, key_element);
|
||||
setElementSize(chance_value_element, 4);
|
||||
setElementValue(chance_value_element, inv->chance);
|
||||
setElementPosition(chance_value_element, x_offset + getElementWidth(delete_element) + getElementWidth(count_min_value_element) + + getElementWidth(count_min_key_element) + getElementWidth(count_max_key_element) + getElementWidth(count_max_value_element) + getElementWidth(chance_key_element) + 18, j*(font.height+6)+2+y_offset);
|
||||
addElementToList(editor_elements, chance_value_element);
|
||||
|
||||
inv = inv->next;
|
||||
}
|
||||
j++; // for the visual break
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -927,7 +1006,7 @@ void showSpritesheet() {
|
|||
return;
|
||||
break;
|
||||
}
|
||||
screen = SDL_SetVideoMode(320+spritesheet->spritesheet->w, 480, 32, SDL_SWSURFACE|SDL_DOUBLEBUF);
|
||||
screen = SDL_SetVideoMode(g_width+spritesheet->spritesheet->w, g_height, 32, SDL_SWSURFACE|SDL_DOUBLEBUF);
|
||||
|
||||
int rows = spritesheet->spritesheet->h / spritesheet->height;
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@ void setIdCallback();
|
|||
void changeKeyCallback();
|
||||
void changeValueCallback();
|
||||
|
||||
void loadTile(int set, int id);
|
||||
void showSpritesheet();
|
||||
void reloadImagePreview();
|
||||
|
||||
|
|
Loading…
Reference in New Issue