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.

master
kts 2014-01-19 02:29:01 -08:00
parent 38f62c970e
commit ff8409be64
3 changed files with 110 additions and 25 deletions

View File

@ -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

View File

@ -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;

View File

@ -73,6 +73,7 @@ void setIdCallback();
void changeKeyCallback();
void changeValueCallback();
void loadTile(int set, int id);
void showSpritesheet();
void reloadImagePreview();