mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 01:24:18 +00:00
fixed so that the editor works again
This commit is contained in:
parent
07c8ff2e53
commit
f2611cad8b
BIN
data/checker.png
Normal file
BIN
data/checker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 116 B |
|
@ -122,7 +122,7 @@ editor = Compile(settings, Collect("src/editor/*.cpp"))
|
|||
|
||||
crapnet = Compile(settings, Collect("src/crapnet/*.cpp"))
|
||||
|
||||
client_exe = Link(settings, "teewars", engine, client, game_shared, game_client)
|
||||
client_exe = Link(settings, "teewars", engine, client, editor, game_shared, game_client)
|
||||
server_exe = Link(server_settings, "teewars_srv", engine, server, game_shared, game_server)
|
||||
-- editor_exe = Link(settings, "editor", engine, game_shared, editor)
|
||||
crapnet_exe = Link(server_settings, "crapnet", crapnet)
|
||||
|
|
|
@ -15,6 +15,8 @@ Group: 0.2.x -
|
|||
* Cleanup: editor.cpp
|
||||
|
||||
* Web: FAQ on the webpage
|
||||
* Web: New webpage
|
||||
* Web: Forum
|
||||
|
||||
* Game: Pickup sounds
|
||||
* Game: Add the sounds
|
||||
|
|
|
@ -1,21 +1,22 @@
|
|||
#include <stdio.h>
|
||||
#include <baselib/system.h>
|
||||
#include <baselib/keys.h>
|
||||
#include <baselib/mouse.h>
|
||||
#include <baselib/input.h>
|
||||
//#include <baselib/mouse.h>
|
||||
|
||||
#include "interface.h"
|
||||
#include "datafile.h"
|
||||
#include "ui.h"
|
||||
#include <engine/interface.h>
|
||||
#include <engine/datafile.h>
|
||||
#include <engine/client/ui.h>
|
||||
|
||||
#include "game/mapres_image.h"
|
||||
#include "game/mapres_tilemap.h"
|
||||
#include <game/client/mapres_image.h>
|
||||
#include <game/client/mapres_tilemap.h>
|
||||
//#include "game/mapres_col.h"
|
||||
#include "game/mapres.h"
|
||||
#include "game/game.h"
|
||||
#include <game/mapres.h>
|
||||
#include <game/game.h>
|
||||
|
||||
using namespace baselib;
|
||||
|
||||
static int font_texture = 0;
|
||||
static int checker_texture = 0;
|
||||
|
||||
struct ent_type
|
||||
{
|
||||
|
@ -31,13 +32,8 @@ static ent_type ent_types[] = {
|
|||
{"rocket", MAPRES_ITEM, ITEM_WEAPON_ROCKET},
|
||||
{"sniper", MAPRES_ITEM, ITEM_WEAPON_SNIPER},
|
||||
{"hammer", MAPRES_ITEM, ITEM_WEAPON_HAMMER},
|
||||
{"health_1", MAPRES_ITEM, ITEM_HEALTH_1},
|
||||
{"health_5", MAPRES_ITEM, ITEM_HEALTH_5},
|
||||
{"health_10", MAPRES_ITEM, ITEM_HEALTH_10},
|
||||
{"armor_1", MAPRES_ITEM, ITEM_ARMOR_1},
|
||||
{"armor_5", MAPRES_ITEM, ITEM_ARMOR_5},
|
||||
{"armor_10", MAPRES_ITEM, ITEM_ARMOR_10},
|
||||
{"ninja!", MAPRES_ITEM, ITEM_NINJA},
|
||||
{"health", MAPRES_ITEM, ITEM_HEALTH},
|
||||
{"armor", MAPRES_ITEM, ITEM_ARMOR},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
|
@ -297,7 +293,7 @@ static int tilesets_set_img(int index, int w, int h, void *data)
|
|||
if(tilesets[index].img.data)
|
||||
mem_free(tilesets[index].img.data);
|
||||
tilesets[index].img.data = data;
|
||||
tilesets[index].tex_id = gfx_load_texture_raw(w, h, data);
|
||||
tilesets[index].tex_id = gfx_load_texture_raw(w, h, IMG_BGRA, data);
|
||||
return index;
|
||||
}
|
||||
|
||||
|
@ -342,6 +338,22 @@ static void render_tilemap(tilemap *tm, float sx, float sy, float scale)
|
|||
EDITOR
|
||||
*********************************************************/
|
||||
|
||||
static void ui_do_frame(float x, float y, float w, float h)
|
||||
{
|
||||
static int frame_id = 0;
|
||||
int inside = ui_mouse_inside(x,y,w,h);
|
||||
if(inside)
|
||||
ui_set_hot_item(&frame_id);
|
||||
|
||||
gfx_texture_set(-1);
|
||||
gfx_blend_normal();
|
||||
gfx_quads_begin();
|
||||
gfx_quads_setcolor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
gfx_quads_drawTL(x, y, w, h);
|
||||
gfx_quads_end();
|
||||
gfx_blend_normal();
|
||||
}
|
||||
|
||||
static tilemap brush = {0};
|
||||
static tilemap chooser = {0};
|
||||
static float world_offset_x = 0, world_offset_y = 0;
|
||||
|
@ -357,7 +369,7 @@ static int ui_do_tilemap(void *id, tilemap *tm, int flags, float x, float y, flo
|
|||
{
|
||||
/*
|
||||
int do_input = 1;
|
||||
if(inp_key_pressed(keys::lalt) || inp_key_pressed(keys::ralt))
|
||||
if(inp_key_pressed(input::lalt) || inp_key_pressed(input::ralt))
|
||||
do_input = 0;*/
|
||||
|
||||
|
||||
|
@ -420,6 +432,7 @@ static int ui_do_tilemap(void *id, tilemap *tm, int flags, float x, float y, flo
|
|||
select_ww = select_w*scale;
|
||||
select_wh = select_h*scale;
|
||||
}
|
||||
|
||||
// ui_do_tilemap always tries to steal the focus
|
||||
ui_set_hot_item(id);
|
||||
|
||||
|
@ -572,7 +585,6 @@ static int editor_reset()
|
|||
while(layers_count())
|
||||
layers_remove(layers_count()-1);
|
||||
|
||||
//layers_new(50, 50);
|
||||
tilemap_destroy(&brush);
|
||||
current_layer = 0;
|
||||
|
||||
|
@ -607,8 +619,7 @@ void draw_editor_button(void *id, const char *text, int checked, float x, float
|
|||
|
||||
gfx_quads_drawTL(x,y,w,h);
|
||||
gfx_quads_end();
|
||||
gfx_texture_set(font_texture);
|
||||
gfx_quads_text(x, y, 6.2f, text);
|
||||
gfx_pretty_text(x+1, y-1, 6.5f, text);
|
||||
}
|
||||
|
||||
static int editor_loadimage = -1;
|
||||
|
@ -642,6 +653,9 @@ static void editor_render_loadfile_dialog()
|
|||
|
||||
int index = 0;
|
||||
fs_listdir("tilesets", editor_listdir_callback, &index);
|
||||
|
||||
if(inp_key_pressed(input::esc))
|
||||
editor_loadimage = -1;
|
||||
}
|
||||
|
||||
static void editor_render()
|
||||
|
@ -701,6 +715,8 @@ static void editor_render()
|
|||
// toolbox
|
||||
float toolbox_width = 50.0f;
|
||||
|
||||
ui_do_frame(0, 0, toolbox_width, 300);
|
||||
|
||||
if(editor_mode == 0)
|
||||
{
|
||||
float layerbox_x = 0;
|
||||
|
@ -714,15 +730,15 @@ static void editor_render()
|
|||
if(l->main_layer)
|
||||
{
|
||||
main_layer = i;
|
||||
sprintf(buf, "Main Layer (%dx%d)", l->tm.width, l->tm.height);
|
||||
sprintf(buf, "Main\n(%dx%d)", l->tm.width, l->tm.height);
|
||||
count = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(main_layer == -1)
|
||||
sprintf(buf, "Background %d (%dx%d)", count, l->tm.width, l->tm.height);
|
||||
sprintf(buf, "Bg %d\n(%dx%d)", count, l->tm.width, l->tm.height);
|
||||
else
|
||||
sprintf(buf, "Foreground %d (%dx%d)", count, l->tm.width, l->tm.height);
|
||||
sprintf(buf, "Fg %d\n(%dx%d)", count, l->tm.width, l->tm.height);
|
||||
count++;
|
||||
}
|
||||
|
||||
|
@ -731,15 +747,13 @@ static void editor_render()
|
|||
if(layers_get(i)->visible)
|
||||
text = "V";
|
||||
|
||||
if(ui_do_button(&layers_get(i)->visible, text, 0, layerbox_x, layerbox_y+i*8, 6, 6, draw_editor_button))
|
||||
if(ui_do_button(&layers_get(i)->visible, text, 0, layerbox_x, layerbox_y+i*14, 6, 6, draw_editor_button))
|
||||
layers_get(i)->visible = layers_get(i)->visible^1;
|
||||
|
||||
if(ui_do_button(&layers_get(i)->tileset_id, buf, current_layer == i, layerbox_x+8, layerbox_y+i*8, toolbox_width-8, 6, draw_editor_button))
|
||||
{
|
||||
// select layer
|
||||
// layer bytton
|
||||
if(ui_do_button(&layers_get(i)->tileset_id, buf, current_layer == i, layerbox_x+8, layerbox_y+i*14, toolbox_width-8, 12, draw_editor_button))
|
||||
current_layer = i;
|
||||
}
|
||||
}
|
||||
|
||||
// draw buttons
|
||||
{
|
||||
|
@ -805,11 +819,21 @@ static void editor_render()
|
|||
tilemap_destroy(&brush);
|
||||
}
|
||||
|
||||
if(inp_key_pressed(keys::space))
|
||||
if(inp_key_pressed(input::space))
|
||||
{
|
||||
// render chooser
|
||||
float chooser_x = 0;
|
||||
float chooser_y = 0;
|
||||
float chooser_x = toolbox_width+10.0f;
|
||||
float chooser_y = 10.0f;
|
||||
|
||||
|
||||
gfx_texture_set(checker_texture);
|
||||
gfx_blend_normal();
|
||||
gfx_quads_begin();
|
||||
gfx_quads_setcolor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
gfx_quads_setsubset(0,0,32.0f, 32.0f);
|
||||
gfx_quads_drawTL(chooser_x, chooser_y, 16*16.0f, 16*16.0f);
|
||||
gfx_quads_end();
|
||||
gfx_blend_normal();
|
||||
|
||||
gfx_texture_set(-1);
|
||||
layer *l = layers_get_current();
|
||||
|
@ -924,7 +948,6 @@ int editor_load(const char *filename)
|
|||
{
|
||||
if(ent_types[i].id == MAPRES_ITEM && ent_types[i].item_id == it->type)
|
||||
{
|
||||
dbg_msg("editor", "i type=%x mapped=%d", it->type, i);
|
||||
type = i;
|
||||
break;
|
||||
}
|
||||
|
@ -1025,7 +1048,7 @@ int editor_save(const char *filename)
|
|||
}
|
||||
}
|
||||
|
||||
// finish adn clean up
|
||||
// finish and clean up
|
||||
datafile_finish(df);
|
||||
mem_free(collisiondata);
|
||||
|
||||
|
@ -1037,9 +1060,9 @@ static int editor_loop()
|
|||
int mouse_x = 0;
|
||||
int mouse_y = 0;
|
||||
|
||||
mouse::set_mode(mouse::mode_relative);
|
||||
input::set_mouse_mode(input::mode_relative);
|
||||
|
||||
while(!inp_key_pressed(keys::esc))
|
||||
while(!(inp_key_pressed(input::lctrl) && inp_key_pressed('Q')))
|
||||
{
|
||||
// update input
|
||||
inp_update();
|
||||
|
@ -1063,9 +1086,9 @@ static int editor_loop()
|
|||
mwy = world_offset_y+my*world_zoom; // adjust to zoom and offset
|
||||
|
||||
int buttons = 0;
|
||||
if(inp_mouse_button_pressed(0)) buttons |= 1;
|
||||
if(inp_mouse_button_pressed(1)) buttons |= 2;
|
||||
if(inp_mouse_button_pressed(2)) buttons |= 4;
|
||||
if(inp_key_pressed(input::mouse_1)) buttons |= 1;
|
||||
if(inp_key_pressed(input::mouse_2)) buttons |= 2;
|
||||
if(inp_key_pressed(input::mouse_3)) buttons |= 4;
|
||||
|
||||
ui_update(mx,my,mwx,mwy,buttons);
|
||||
}
|
||||
|
@ -1073,11 +1096,11 @@ static int editor_loop()
|
|||
//
|
||||
editor_render();
|
||||
|
||||
if(inp_key_pressed(keys::lalt) || inp_key_pressed(keys::ralt))
|
||||
if(inp_key_pressed(input::lalt) || inp_key_pressed(input::ralt))
|
||||
{
|
||||
static int moveid;
|
||||
ui_set_hot_item(&moveid);
|
||||
if(inp_mouse_button_pressed(0))
|
||||
if(inp_key_pressed(input::mouse_1))
|
||||
{
|
||||
world_offset_x -= rx*2;
|
||||
world_offset_y -= ry*2;
|
||||
|
@ -1102,18 +1125,17 @@ static int editor_loop()
|
|||
gfx_swap();
|
||||
|
||||
//
|
||||
if(keys::pressed(keys::f1))
|
||||
mouse::set_mode(mouse::mode_absolute);
|
||||
if(keys::pressed(keys::f2))
|
||||
mouse::set_mode(mouse::mode_relative);
|
||||
|
||||
if(input::pressed(input::f1))
|
||||
input::set_mouse_mode(input::mode_absolute);
|
||||
if(input::pressed(input::f2))
|
||||
input::set_mouse_mode(input::mode_relative);
|
||||
|
||||
// mode switch
|
||||
if(inp_key_down(keys::tab))
|
||||
if(inp_key_down(input::tab))
|
||||
editor_mode ^= 1;
|
||||
|
||||
// zoom in
|
||||
if(inp_key_down(keys::kp_add))
|
||||
if(inp_key_down(input::kp_add))
|
||||
{
|
||||
world_zoom--;
|
||||
if(world_zoom < 3)
|
||||
|
@ -1121,14 +1143,14 @@ static int editor_loop()
|
|||
}
|
||||
|
||||
// zoom out
|
||||
if(inp_key_down(keys::kp_subtract))
|
||||
if(inp_key_down(input::kp_subtract))
|
||||
{
|
||||
world_zoom++;
|
||||
if(world_zoom > 8)
|
||||
world_zoom = 8;
|
||||
}
|
||||
|
||||
if(inp_key_pressed(keys::lctrl) || inp_key_pressed(keys::rctrl))
|
||||
if(inp_key_pressed(input::lctrl) || inp_key_pressed(input::rctrl))
|
||||
{
|
||||
if(inp_key_down('L'))
|
||||
{
|
||||
|
@ -1155,13 +1177,13 @@ static int editor_loop()
|
|||
|
||||
}
|
||||
|
||||
if(inp_key_down(keys::f5))
|
||||
if(inp_key_down(input::f5))
|
||||
{
|
||||
dbg_msg("editor", "quick save");
|
||||
editor_save("quicksave.map");
|
||||
}
|
||||
|
||||
if(inp_key_down(keys::f8))
|
||||
if(inp_key_down(input::f8))
|
||||
{
|
||||
dbg_msg("editor", "quick load");
|
||||
int s = current_layer;
|
||||
|
@ -1180,6 +1202,7 @@ static int editor_loop()
|
|||
return 0;
|
||||
}
|
||||
|
||||
extern void modmenu_init();
|
||||
|
||||
int editor_main(int argc, char **argv)
|
||||
{
|
||||
|
@ -1205,8 +1228,11 @@ int editor_main(int argc, char **argv)
|
|||
if(!gfx_init(false))
|
||||
return -1;
|
||||
|
||||
modmenu_init();
|
||||
|
||||
// reset and start
|
||||
font_texture = gfx_load_texture_tga("data/debug_font.tga");
|
||||
font_texture = gfx_load_texture("data/debug_font.png");
|
||||
checker_texture = gfx_load_texture("data/checker.png");
|
||||
editor_reset();
|
||||
|
||||
// load or new
|
||||
|
@ -1216,13 +1242,6 @@ int editor_main(int argc, char **argv)
|
|||
l->main_layer = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
ents_new(0, 10, 10);
|
||||
ents_new(0, 10, 10);
|
||||
ents_new(0, 10, 10);
|
||||
ents_new(0, 10, 10);
|
||||
*/
|
||||
|
||||
editor_loop();
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -412,6 +412,13 @@ public:
|
|||
if(input::pressed(input::lctrl) && input::pressed('Q'))
|
||||
break;
|
||||
|
||||
// editor invoke
|
||||
/*
|
||||
if(input::pressed(input::lctrl) && input::pressed('O'))
|
||||
{
|
||||
disconnect();
|
||||
}*/
|
||||
|
||||
// pump the network
|
||||
pump_network();
|
||||
|
||||
|
@ -634,6 +641,8 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
int editor_main(int argc, char **argv);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
dbg_msg("client", "starting...");
|
||||
|
@ -645,6 +654,7 @@ int main(int argc, char **argv)
|
|||
//const char *name = "nameless jerk";
|
||||
bool connect_at_once = false;
|
||||
bool fullscreen = true;
|
||||
bool editor = false;
|
||||
|
||||
// init network, need to be done first so we can do lookups
|
||||
net_init();
|
||||
|
@ -686,11 +696,20 @@ int main(int argc, char **argv)
|
|||
// -w
|
||||
fullscreen = false;
|
||||
}
|
||||
else if(argv[i][0] == '-' && argv[i][1] == 'e' && argv[i][2] == 0)
|
||||
{
|
||||
editor = true;
|
||||
}
|
||||
}
|
||||
|
||||
// start the server
|
||||
if(editor)
|
||||
editor_main(argc, argv);
|
||||
else
|
||||
{
|
||||
// start the client
|
||||
client c;
|
||||
c.set_fullscreen(fullscreen);
|
||||
c.run(connect_at_once ? &server_address : 0x0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -544,11 +544,19 @@ void gfx_quads_draw_freeform(
|
|||
void gfx_quads_text(float x, float y, float size, const char *text)
|
||||
{
|
||||
gfx_quads_begin();
|
||||
float startx = x;
|
||||
while(*text)
|
||||
{
|
||||
char c = *text;
|
||||
text++;
|
||||
|
||||
if(c == '\n')
|
||||
{
|
||||
x = startx;
|
||||
y += size;
|
||||
}
|
||||
else
|
||||
{
|
||||
gfx_quads_setsubset(
|
||||
(c%16)/16.0f,
|
||||
(c/16)/16.0f,
|
||||
|
@ -558,6 +566,7 @@ void gfx_quads_text(float x, float y, float size, const char *text)
|
|||
gfx_quads_drawTL(x,y,size,size);
|
||||
x += size/2;
|
||||
}
|
||||
}
|
||||
|
||||
gfx_quads_end();
|
||||
}
|
||||
|
@ -620,9 +629,19 @@ void gfx_pretty_text(float x, float y, float size, const char *text)
|
|||
gfx_texture_set(current_font->font_texture);
|
||||
gfx_quads_begin();
|
||||
|
||||
float startx = x;
|
||||
|
||||
while (*text)
|
||||
{
|
||||
const int c = *text;
|
||||
|
||||
if(c == '\n')
|
||||
{
|
||||
x = startx;
|
||||
y += size;
|
||||
}
|
||||
else
|
||||
{
|
||||
const float width = current_font->m_CharEndTable[c] - current_font->m_CharStartTable[c];
|
||||
|
||||
x -= size * current_font->m_CharStartTable[c];
|
||||
|
@ -640,6 +659,7 @@ void gfx_pretty_text(float x, float y, float size, const char *text)
|
|||
x_nudge = extra_kerning[text[0] + text[1] * 256];
|
||||
|
||||
x += (width + current_font->m_CharStartTable[c] + spacing + x_nudge) * size;
|
||||
}
|
||||
|
||||
text++;
|
||||
}
|
||||
|
|
|
@ -181,11 +181,7 @@ enum
|
|||
ITEM_WEAPON_ROCKET=0x00010003,
|
||||
ITEM_WEAPON_SNIPER=0x00010004,
|
||||
ITEM_WEAPON_HAMMER=0x00010005,
|
||||
ITEM_HEALTH_1 =0x00020001,
|
||||
ITEM_HEALTH_5 =0x00020005,
|
||||
ITEM_HEALTH_10=0x00020010,
|
||||
ITEM_ARMOR_1=0x00030001,
|
||||
ITEM_ARMOR_5=0x00030005,
|
||||
ITEM_ARMOR_10=0x00030010,
|
||||
ITEM_HEALTH =0x00020001,
|
||||
ITEM_ARMOR=0x00030001,
|
||||
ITEM_NINJA=0x00040001,
|
||||
};
|
||||
|
|
|
@ -1261,11 +1261,11 @@ void mods_init()
|
|||
subtype = WEAPON_TYPE_MELEE;
|
||||
break;
|
||||
|
||||
case ITEM_HEALTH_1:
|
||||
case ITEM_HEALTH:
|
||||
type = POWERUP_TYPE_HEALTH;
|
||||
break;
|
||||
|
||||
case ITEM_ARMOR_1:
|
||||
case ITEM_ARMOR:
|
||||
type = POWERUP_TYPE_ARMOR;
|
||||
break;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue