161
160
_("Create city.\nShortcut: c"));
162
161
tool_init(ETT_VISION, _("Vision"), ETF_HAS_SIZE,
163
162
_("Modify player's tile knowledge.\nShortcut: v"));
164
tool_init(ETT_STARTPOS, _("Start Position"), ETF_HAS_APPLIED_PLAYER,
165
_("Place a player start position.\nShortcut: p"));
163
tool_init(ETT_STARTPOS, _("Start Position"), ETF_NO_FLAGS,
164
_("Place a start position which allows any nation to "
165
"start at the tile. To allow only certain nations to "
166
"start there, middle click on the start position on "
167
"the map and use the property editor.\nShortcut: p"));
167
169
tool_init(ETT_COPYPASTE, _("Copy/Paste"), ETF_HAS_SIZE,
168
170
_("Copy and paste tiles.\n"
170
172
"Shoftcut for paste mode: shift-v"));
171
173
editor->copybuf = edit_buffer_new(EBT_ALL);
173
editor->selected_tile_table = hash_new(hash_fval_keyval,
175
hash_set_no_shrink(editor->selected_tile_table, TRUE);
175
editor->selected_tile_table = tile_hash_new();
176
tile_hash_set_no_shrink(editor->selected_tile_table, TRUE);
178
179
/****************************************************************************
395
396
apno = player_number(tile_owner(ptile));
398
if (valid_player_by_number(apno) != NULL) {
399
if (player_by_number(apno) != NULL) {
399
400
editor_tool_set_applied_player(editor_get_tool(), apno);
400
401
editgui_refresh();
528
529
tiles = tile_list_new();
530
531
if (editor_tile_is_selected(ptile)) {
531
hash_keys_iterate(editor->selected_tile_table, sel_tile) {
532
tile_hash_iterate(editor->selected_tile_table, sel_tile) {
532
533
if (can_edit_tile_properties(sel_tile)) {
533
534
tile_list_append(tiles, sel_tile);
535
} hash_keys_iterate_end;
536
} tile_hash_iterate_end;
537
538
if (can_edit_tile_properties(ptile)) {
538
539
tile_list_append(tiles, ptile);
801
802
enum editor_tool_type ett;
802
803
enum editor_tool_mode etm;
803
int value, size, count, apno, x, y, id;
804
int value, size, count, apno, tile, id;
805
806
struct connection *my_conn = &client.conn;
850
851
erase = (etm == ETM_ERASE);
852
tile = tile_index(ptile);
856
856
case ETT_TERRAIN:
857
dsend_packet_edit_tile_terrain(my_conn, x, y, erase ? 0 : value, size);
857
dsend_packet_edit_tile_terrain(my_conn, tile, erase ? 0 : value, size);
860
860
case ETT_TERRAIN_RESOURCE:
861
dsend_packet_edit_tile_resource(my_conn, x, y, erase ? -1 : value,
861
dsend_packet_edit_tile_resource(my_conn, tile, erase ? -1 : value,
865
865
case ETT_TERRAIN_SPECIAL:
866
dsend_packet_edit_tile_special(my_conn, x, y, value, erase, size);
866
dsend_packet_edit_tile_special(my_conn, tile, value, erase, size);
869
869
case ETT_MILITARY_BASE:
870
dsend_packet_edit_tile_base(my_conn, x, y, value, erase, size);
870
dsend_packet_edit_tile_base(my_conn, tile, value, erase, size);
875
dsend_packet_edit_unit_remove(my_conn, apno, x, y, value, count);
875
dsend_packet_edit_unit_remove(my_conn, apno, tile, value, count);
877
dsend_packet_edit_unit_create(my_conn, apno, x, y, value, count, 0);
877
dsend_packet_edit_unit_create(my_conn, apno, tile, value, count, 0);
886
886
dsend_packet_edit_city_remove(my_conn, id);
889
dsend_packet_edit_city_create(my_conn, apno, x, y, size, 0);
889
dsend_packet_edit_city_create(my_conn, apno, tile, size, 0);
894
894
if (client_has_player()) {
895
895
id = client_player_number();
896
dsend_packet_edit_player_vision(my_conn, id, x, y, !erase, size);
896
dsend_packet_edit_player_vision(my_conn, id, tile, !erase, size);
900
900
case ETT_STARTPOS:
901
dsend_packet_edit_startpos(my_conn, x, y,
902
erase ? NATION_NONE :
903
nation_number(player_by_number(apno)->nation));
901
dsend_packet_edit_startpos(my_conn, tile, erase, 0);
995
993
if (!editor || !ptile) {
998
hash_insert(editor->selected_tile_table, ptile, NULL);
996
tile_hash_insert(editor->selected_tile_table, ptile, NULL);
1001
999
/****************************************************************************
1017
1015
if (!editor || !ptile) {
1020
return hash_key_exists(editor->selected_tile_table, ptile);
1018
return tile_hash_lookup(editor->selected_tile_table, ptile, NULL);
1023
1021
/****************************************************************************
1042
1040
connection_do_buffer(&client.conn);
1043
hash_keys_iterate(editor->selected_tile_table, ptile) {
1041
tile_hash_iterate(editor->selected_tile_table, ptile) {
1044
1042
editor_apply_tool(ptile, TRUE);
1045
} hash_keys_iterate_end;
1043
} tile_hash_iterate_end;
1046
1044
editor_notify_edit_finished();
1047
1045
connection_do_unbuffer(&client.conn);
1241
1239
/****************************************************************************
1242
1240
Returns the current applied player number for the editor tool.
1244
May return a player number for which valid_player_by_number returns NULL.
1242
May return a player number for which player_by_number returns NULL.
1245
1243
****************************************************************************/
1246
1244
int editor_tool_get_applied_player(enum editor_tool_type ett)
1362
1360
if (ebuf->vtiles) {
1363
1361
tile_list_iterate(ebuf->vtiles, vtile) {
1364
destroy_tile_virtual(vtile);
1362
tile_virtual_destroy(vtile);
1365
1363
} tile_list_iterate_end;
1366
tile_list_free(ebuf->vtiles);
1364
tile_list_destroy(ebuf->vtiles);
1367
1365
ebuf->vtiles = NULL;
1475
1473
char name[MAX_LEN_NAME];
1477
1475
pcity = tile_city(ptile);
1478
my_snprintf(name, sizeof(name), "Copy of %s",
1476
fc_snprintf(name, sizeof(name), "Copy of %s",
1479
1477
city_name(pcity));
1480
1478
vcity = create_city_virtual(city_owner(pcity), NULL, name);
1481
1479
vcity->size = pcity->size;
1511
1509
const struct resource *presource;
1512
1510
const struct terrain *pterrain;
1513
const struct nation_type *pnation;
1515
1512
if (!packet || !ptile) {
1518
packet->id = tile_index(ptile);
1515
packet->tile = tile_index(ptile);
1519
1516
packet->specials = tile_specials(ptile);
1520
1517
packet->bases = tile_bases(ptile);
1525
1522
pterrain = tile_terrain(ptile);
1526
1523
packet->terrain = pterrain ? terrain_number(pterrain) : -1;
1528
pnation = map_get_startpos(ptile);
1529
packet->startpos_nation = pnation ? nation_number(pnation) : -1;
1532
1526
/****************************************************************************
1540
1534
struct connection *my_conn = &client.conn;
1541
1535
struct packet_edit_tile tile_packet;
1542
1536
struct city *vcity;
1543
int value, owner, x, y;
1537
int value, owner, tile;
1544
1538
bool send_edit_tile = FALSE;
1546
1540
if (!ebuf || !vtile || !ptile_dest) {
1544
tile = tile_index(ptile_dest);
1553
1546
fill_tile_edit_packet(&tile_packet, ptile_dest);
1561
1554
value = terrain_number(tile_terrain(vtile));
1562
dsend_packet_edit_tile_terrain(my_conn, x, y, value, 1);
1555
dsend_packet_edit_tile_terrain(my_conn, tile, value, 1);
1564
1557
case EBT_RESOURCE:
1565
1558
if (!tile_resource(vtile)) {
1568
1561
value = resource_number(tile_resource(vtile));
1569
dsend_packet_edit_tile_resource(my_conn, x, y, value, 1);
1562
dsend_packet_edit_tile_resource(my_conn, tile, value, 1);
1571
1564
case EBT_SPECIAL:
1572
1565
tile_packet.specials = tile_specials(vtile);
1580
1573
unit_list_iterate(vtile->units, vunit) {
1581
1574
value = utype_number(unit_type(vunit));
1582
1575
owner = player_number(unit_owner(vunit));
1583
dsend_packet_edit_unit_create(my_conn, owner, x, y, value, 1, 0);
1576
dsend_packet_edit_unit_create(my_conn, owner, tile, value, 1, 0);
1584
1577
} unit_list_iterate_end;
1591
1584
owner = player_number(city_owner(vcity));
1592
1585
value = vcity->size;
1593
dsend_packet_edit_city_create(my_conn, owner, x, y, value, 0);
1586
dsend_packet_edit_city_create(my_conn, owner, tile, value, 0);
1664
1657
return _("Paste");
1667
freelog(LOG_ERROR, "Unrecognized editor tool mode %d "
1668
"in editor_tool_get_mode_name().", etm);
1660
log_error("Unrecognized editor tool mode %d "
1661
"in editor_tool_get_mode_name().", etm);
1744
ret = mystrlcpy(buf, _("Buffer empty."), buflen);
1737
ret = fc_strlcpy(buf, _("Buffer empty."), buflen);
1745
1738
if (!ebuf || !ebuf->vtiles) {
1749
1742
total = tile_list_size(ebuf->vtiles);
1750
1743
if (total > 0) {
1751
1744
fmt = PL_("%d tile copied.", "%d tiles copied.", total);
1752
ret = my_snprintf(buf, buflen, fmt, total);
1745
ret = fc_snprintf(buf, buflen, fmt, total);
1809
count = hash_num_entries(editor->selected_tile_table);
1802
count = tile_hash_size(editor->selected_tile_table);
1810
1803
if (count < 1) {
1814
1807
origin = map_pos_to_tile(0, 0);
1815
hash_keys_iterate(editor->selected_tile_table, ptile) {
1808
tile_hash_iterate(editor->selected_tile_table, ptile) {
1816
1809
map_distance_vector(&dx, &dy, origin, ptile);
1819
} hash_keys_iterate_end;
1812
} tile_hash_iterate_end;
1821
1814
cx = xsum / count;
1822
1815
cy = ysum / count;