Skip to content

Commit

Permalink
Show city tile output correctly in city dialog.
Browse files Browse the repository at this point in the history
  • Loading branch information
freecivnet committed Jun 18, 2011
1 parent 70a2637 commit 7a1b125
Show file tree
Hide file tree
Showing 11 changed files with 135 additions and 21 deletions.
4 changes: 4 additions & 0 deletions freeciv-proxy/packets.def
Expand Up @@ -584,6 +584,10 @@ PACKET_CITY_INFO=21; sc,lsend
STRING can_build_unit[MAX_LEN_MSG];
STRING can_build_improvement[MAX_LEN_MSG];
STRING improvements[MAX_LEN_MSG];

STRING food_output[MAX_LEN_MSG];
STRING shield_output[MAX_LEN_MSG];
STRING trade_output[MAX_LEN_MSG];
#BV_CITY_OPTIONS city_options;
STRING name[MAX_LEN_NAME];
end
Expand Down
16 changes: 8 additions & 8 deletions freeciv-web/src/main/webapp/javascript-compressed/webclient.js

Large diffs are not rendered by default.

37 changes: 33 additions & 4 deletions freeciv-web/src/main/webapp/javascript/city.js
Expand Up @@ -17,10 +17,6 @@ var city_rules = {};

var active_city = null;

var I_NEVER = (-1); /* Improvement never built */
var I_DESTROYED = (-2); /* Improvement built and destroyed */



/**************************************************************************
...
Expand Down Expand Up @@ -479,3 +475,36 @@ function city_sell_improvement(improvement_id)
}

}

/**************************************************************************
Converts from coordinate offset from city center (dx, dy),
to index in the city_info['food_output'] packet.
**************************************************************************/
function get_city_dxy_to_index(dx, dy)
{
city_tile_map = {};
city_tile_map[" 00"] = 0;
city_tile_map[" 10"] = 1;
city_tile_map[" 01"] = 2;
city_tile_map[" 0-1"] = 3;
city_tile_map[" -10"] = 4;
city_tile_map[" 11"] = 5;
city_tile_map[" 1-1"] = 6;
city_tile_map[" -11"] = 7;
city_tile_map[" -1-1"] = 8;
city_tile_map[" 20"] = 9;
city_tile_map[" 02"] = 10;
city_tile_map[" 0-2"] = 11;
city_tile_map[" -20"] = 12;
city_tile_map[" 21"] = 13;
city_tile_map[" 2-1"] = 14;
city_tile_map[" 12"] = 15;
city_tile_map[" 1-2"] = 16;
city_tile_map[" -12"] = 17;
city_tile_map[" -1-2"] = 18;
city_tile_map[" -21"] = 19;
city_tile_map[" -2-1"] = 20;

return city_tile_map[" "+dx+""+dy];

}
8 changes: 4 additions & 4 deletions freeciv-web/src/main/webapp/javascript/mapview.js
Expand Up @@ -397,10 +397,10 @@ function set_city_mapview_active()
}


mapview['width'] = 300;
mapview['height'] = 150;
mapview['store_width'] = 300;
mapview['store_height'] = 150;
mapview['width'] = 350;
mapview['height'] = 175;
mapview['store_width'] = 350;
mapview['store_height'] = 175;

set_default_mapview_inactive();

Expand Down
40 changes: 39 additions & 1 deletion freeciv-web/src/main/webapp/javascript/tilespec.js
Expand Up @@ -175,9 +175,20 @@ function fill_sprite_array(layer, ptile, pedge, pcorner, punit, pcity, citymode)
sprite_array.push(get_city_flag_sprite(pcity));
sprite_array.push(get_city_sprite(pcity));
sprite_array = sprite_array.concat(get_city_size_sprites(pcity));
}
}

if (active_city != null && ptile != null && ptile['worked'] != null && active_city['id'] == ptile['worked']) {
sprite_array.push(get_city_active_worked_sprite());
var dx = city_tile(active_city)['x'] - ptile['x'];
var dy = city_tile(active_city)['y'] - ptile['y'];
var idx = get_city_dxy_to_index(dx, dy);
var food_output = active_city['food_output'].substring(idx, idx + 1);
var shield_output = active_city['shield_output'].substring(idx, idx + 1);
var trade_output = active_city['trade_output'].substring(idx, idx + 1);

sprite_array.push(get_city_food_output_sprite(food_output));
sprite_array.push(get_city_shields_output_sprite(shield_output));
sprite_array.push(get_city_trade_output_sprite(trade_output));
} else if (active_city != null && ptile != null && ptile['worked'] != 0) {
sprite_array.push(get_city_invalid_worked_sprite());
}
Expand Down Expand Up @@ -506,6 +517,33 @@ function get_city_active_worked_sprite() {
"offset_y" : 0};
}

/**********************************************************************
...
***********************************************************************/
function get_city_food_output_sprite(num) {
return {"key" : "city.t_food_" + num,
"offset_x" : normal_tile_width/4,
"offset_y" : -normal_tile_height/4};
}

/**********************************************************************
...
***********************************************************************/
function get_city_shields_output_sprite(num) {
return {"key" : "city.t_shields_" + num,
"offset_x" : normal_tile_width/4,
"offset_y" : -normal_tile_height/4};
}

/**********************************************************************
...
***********************************************************************/
function get_city_trade_output_sprite(num) {
return {"key" : "city.t_trade_" + num,
"offset_x" : normal_tile_width/4,
"offset_y" : -normal_tile_height/4};
}


/**********************************************************************
Return the sprite for an invalid city worked tile.
Expand Down
4 changes: 2 additions & 2 deletions freeciv-web/src/main/webapp/stylesheets/civclient.css
Expand Up @@ -129,8 +129,8 @@ button {
}

#city_canvas_div {
width: 300px;
height: 150px;
width: 350px;
height: 175px;
margin: 5px;
border: 1px solid #888888;
float: left;
Expand Down
2 changes: 1 addition & 1 deletion freeciv-web/src/main/webapp/webclient/city.jsp
Expand Up @@ -4,7 +4,7 @@

<div id="city_left_panel">
<div id="city_canvas_div">
<canvas id="city_canvas" width="300" height="150" moz-opaque="true"></canvas>
<canvas id="city_canvas" width="350" height="175" moz-opaque="true"></canvas>
</div>

<div id="city_dialog_info">
Expand Down
4 changes: 4 additions & 0 deletions freeciv/common/packets.def
Expand Up @@ -584,6 +584,10 @@ PACKET_CITY_INFO=21; sc,lsend
STRING can_build_unit[MAX_LEN_MSG];
STRING can_build_improvement[MAX_LEN_MSG];
STRING improvements[MAX_LEN_MSG];

STRING food_output[MAX_LEN_MSG];
STRING shield_output[MAX_LEN_MSG];
STRING trade_output[MAX_LEN_MSG];
#BV_CITY_OPTIONS city_options;
STRING name[MAX_LEN_NAME];
end
Expand Down
6 changes: 6 additions & 0 deletions freeciv/common/packets_gen.c
Expand Up @@ -4270,6 +4270,9 @@ static struct packet_city_info *receive_packet_city_info_100(struct connection *
dio_get_string(pc->json_packet, "can_build_unit", real_packet->can_build_unit, sizeof(real_packet->can_build_unit));
dio_get_string(pc->json_packet, "can_build_improvement", real_packet->can_build_improvement, sizeof(real_packet->can_build_improvement));
dio_get_string(pc->json_packet, "improvements", real_packet->improvements, sizeof(real_packet->improvements));
dio_get_string(pc->json_packet, "food_output", real_packet->food_output, sizeof(real_packet->food_output));
dio_get_string(pc->json_packet, "shield_output", real_packet->shield_output, sizeof(real_packet->shield_output));
dio_get_string(pc->json_packet, "trade_output", real_packet->trade_output, sizeof(real_packet->trade_output));
dio_get_string(pc->json_packet, "name", real_packet->name, sizeof(real_packet->name));

RECEIVE_PACKET_END(real_packet);
Expand Down Expand Up @@ -4362,6 +4365,9 @@ static int send_packet_city_info_100(struct connection *pc, const struct packet_
dio_put_string(&dout, "can_build_unit", real_packet->can_build_unit);
dio_put_string(&dout, "can_build_improvement", real_packet->can_build_improvement);
dio_put_string(&dout, "improvements", real_packet->improvements);
dio_put_string(&dout, "food_output", real_packet->food_output);
dio_put_string(&dout, "shield_output", real_packet->shield_output);
dio_put_string(&dout, "trade_output", real_packet->trade_output);
dio_put_string(&dout, "name", real_packet->name);

SEND_PACKET_END;
Expand Down
3 changes: 3 additions & 0 deletions freeciv/common/packets_gen.h
Expand Up @@ -302,6 +302,9 @@ struct packet_city_info {
char can_build_unit[MAX_LEN_MSG];
char can_build_improvement[MAX_LEN_MSG];
char improvements[MAX_LEN_MSG];
char food_output[MAX_LEN_MSG];
char shield_output[MAX_LEN_MSG];
char trade_output[MAX_LEN_MSG];
char name[MAX_LEN_NAME];
};

Expand Down
32 changes: 31 additions & 1 deletion freeciv/server/citytools.c
Expand Up @@ -1803,6 +1803,9 @@ void package_city(struct city *pcity, struct packet_city_info *packet,
char impr_buf[MAX_NUM_ITEMS + 1];
char can_build_impr_buf[MAX_NUM_ITEMS + 1];
char can_build_unit_buf[MAX_NUM_ITEMS + 1];
char food_output_buf[MAX_NUM_ITEMS + 1];
char shield_output_buf[MAX_NUM_ITEMS + 1];
char trade_output_buf[MAX_NUM_ITEMS + 1];

packet->id=pcity->id;
packet->owner = player_number(city_owner(pcity));
Expand Down Expand Up @@ -1922,7 +1925,34 @@ void package_city(struct city *pcity, struct packet_city_info *packet,
} improvement_iterate_end;
impr_buf[improvement_count()] = '\0';
sz_strlcpy(packet->improvements, impr_buf);


struct tile *pcenter = city_tile(pcity);

int c = 0;
city_tile_iterate_cxy(pcenter, ptile, x, y) {
char f[2];
char s[2];
char t[2];

my_snprintf(f, sizeof(f), "%d", city_tile_output_now(pcity, ptile, O_FOOD));
my_snprintf(s, sizeof(s), "%d", city_tile_output_now(pcity, ptile, O_SHIELD));
my_snprintf(t, sizeof(t), "%d", city_tile_output_now(pcity, ptile, O_TRADE));
food_output_buf[c] = f[0];
shield_output_buf[c] = s[0];
trade_output_buf[c] = t[0];

c += 1;

} city_tile_iterate_cxy_end;
food_output_buf[c] = '\0';
shield_output_buf[c] = '\0';
trade_output_buf[c] = '\0';
sz_strlcpy(packet->food_output, food_output_buf);
sz_strlcpy(packet->shield_output, shield_output_buf);
sz_strlcpy(packet->trade_output, trade_output_buf);



}

/**************************************************************************
Expand Down

0 comments on commit 7a1b125

Please sign in to comment.