diff --git a/tile_editor/assets.h b/tile_editor/assets.h index 1e8e302..5ba335c 100644 --- a/tile_editor/assets.h +++ b/tile_editor/assets.h @@ -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 diff --git a/tile_editor/sdl.c b/tile_editor/sdl.c index 738c195..e5196bb 100644 --- a/tile_editor/sdl.c +++ b/tile_editor/sdl.c @@ -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; diff --git a/tile_editor/sdl.h b/tile_editor/sdl.h index a9a8d95..aa38cd9 100644 --- a/tile_editor/sdl.h +++ b/tile_editor/sdl.h @@ -73,6 +73,7 @@ void setIdCallback(); void changeKeyCallback(); void changeValueCallback(); +void loadTile(int set, int id); void showSpritesheet(); void reloadImagePreview();