//--------- Begin of function UnitCaravan::disp_stop ---------// // void UnitCaravan::disp_stop(int dispY1, int refreshFlag) { int y = INFO_Y1 + 94; int i, j; for( i = 0; i < MAX_STOP_FOR_CARAVAN; ++i, y += 70 ) { TradeStop *tradeStop = stop_array+i; button_go_stop[i].create( INFO_X1+17, y+2, INFO_X1+167, y+35, i_button_go_stop, ButtonCustomPara( this, tradeStop->firm_recno ) ); button_go_stop[i].set_help_code( "CGOSTOP" ); button_set_stop[i].create( INFO_X1+169, y+2, INFO_X1+215, y+20, i_button_set_stop, ButtonCustomPara( NULL, 0 ) ); button_set_stop[i].set_help_code( "CSETSTOP" ); button_cancel_stop[i].create( INFO_X1+169, y+21, INFO_X1+215, y+39, i_button_cancel_stop, ButtonCustomPara( NULL, 0 ) ); button_cancel_stop[i].set_help_code( "CDELSTOP" ); button_reset_stop[i].create( INFO_X1+169, y+42, INFO_X1+215, y+60, i_button_reset_stop, ButtonCustomPara( NULL, 0 ) ); button_reset_stop[i].set_help_code( "CCLRSEL" ); for( j = 0; j < MAX_GOODS_SELECT_BUTTON; ++j ) button_select_array[i][j].create( INFO_X1+17+carv_gdd_x[j], y+34, INFO_X1+17+carv_gdd_x[j+1]-1, y+61, i_disp_caravan_select_button, ButtonCustomPara( NULL, j ), 0 ); button_go_stop[i].custom_para = ButtonCustomPara( this, tradeStop->firm_recno ); button_go_stop[i].paint(); button_set_stop[i].paint(); button_cancel_stop[i].paint(); button_reset_stop[i].paint(); Firm *firmPtr = NULL; if( !firm_array.is_deleted(tradeStop->firm_recno)) firmPtr = firm_array[tradeStop->firm_recno]; for( j = 0; j < MAX_GOODS_SELECT_BUTTON; ++j ) { // display quantity on the firm int rawId = j+FIRST_GOODS_SELECT_BUTTON-PICK_UP_RAW_FIRST+1; if( rawId < 1 || rawId > MAX_RAW ) rawId = 0; int productId = j+FIRST_GOODS_SELECT_BUTTON-PICK_UP_PRODUCT_FIRST+1; if( productId < 1 || productId > MAX_PRODUCT ) productId = 0; int stock = -1; if( firmPtr ) { if( firmPtr->cast_to_FirmMarket() ) { MarketGoods *marketGoods; if( rawId ) { marketGoods = firmPtr->cast_to_FirmMarket()->market_raw_array(rawId); err_when( marketGoods && marketGoods->raw_id != rawId ); } else if( productId ) { marketGoods = firmPtr->cast_to_FirmMarket()->market_product_array(productId); err_when( marketGoods && marketGoods->product_raw_id != productId ); } else { err_here(); marketGoods = NULL; } if( marketGoods ) stock = (int) marketGoods->stock_qty; } else if( firmPtr->cast_to_FirmMine() ) { if( rawId && firmPtr->cast_to_FirmMine()->raw_id == rawId ) { stock = (int) firmPtr->cast_to_FirmMine()->stock_qty; } } else if( firmPtr->cast_to_FirmFactory() ) { if( productId && firmPtr->cast_to_FirmFactory()->product_raw_id == productId ) { stock = (int) firmPtr->cast_to_FirmFactory()->stock_qty; } //else if( rawId && firmPtr->cast_to_FirmFactory()->product_raw_id == rawId ) //{ // stock = (int) firmPtr->cast_to_FirmFactory()->raw_stock_qty; //} } } if( stock >= 0 ) { // display button button_select_array[i][j].enable_flag = 1; button_select_array[i][j].paint( tradeStop->pick_up_array[j] ); } else { button_select_array[i][j].enable_flag = 0; button_select_array[i][j].pushed_flag = tradeStop->pick_up_array[j]; } } } }
//--------- Begin of function UnitArray::draw_dot ---------// // // Draw 2x2 tiny squares on map window representing the location of the unit ---// // // [int] filterUnitClassId - if given, only display units whose type is filterUnitClassId // void UnitArray::draw_dot(int filterUnitClassId) { int i, j, mapX, mapY; short nationColor; int vgaBufPitch = vga_back.buf_pitch(); short playerNationRecno = nation_array.player_recno; short lineFromX, lineFromY, lineToX, lineToY; short unexploredColor = vga_back.translate_color(UNEXPLORED_COLOR); short nationColorArray[MAX_NATION+1]; for( int n = 0; n < MAX_NATION+1; ++n ) nationColorArray[n] = vga_back.translate_color(nation_array.nation_color_array[n]); // ##### begin Gilbert 2/11 ######// short excitedColorArray[MAX_NATION+1]; //[excitedColorCount]; short slowExcitedColorArray[MAX_NATION+1]; //[excitedColorCount]; for( i = 0; i <= MAX_NATION; ++i ) { if( i == 0 || !nation_array.is_deleted(i) ) { short *remapTable = game.get_color_remap_table(i, 0); excitedColorArray[i] = remapTable[0xe0 + (sys.frame_count % 4)]; slowExcitedColorArray[i] = remapTable[0xe0 + (sys.frame_count % 8)/2]; } else { excitedColorArray[i] = slowExcitedColorArray[i] = vga_back.translate_color(V_WHITE); } } // ##### end Gilbert 2/11 ######// int arraySize = size(); //------------- set boundary of anim_line to mini-map ------------// short animLineBoundX1 = anim_line.bound_x1; short animLineBoundY1 = anim_line.bound_y1; short animLineBoundX2 = anim_line.bound_x2; short animLineBoundY2 = anim_line.bound_y2; anim_line.bound_x1 = MAP_X1; anim_line.bound_y1 = MAP_Y1; anim_line.bound_x2 = MAP_X2; anim_line.bound_y2 = MAP_Y2; // #### begin Gilbert 29/1 ########// int showAttackerPath = nation_array.player_recno && god_res[GOD_JAPANESE]->nation_prayer_count(nation_array.player_recno); int playerNation = nation_array.player_recno; // #### end Gilbert 29/1 ########// for(i=1; i<=arraySize; i++) { register Unit *unitPtr = (Unit*)get_ptr(i); if( !unitPtr || !unitPtr->is_visible() || unitPtr->is_stealth() ) continue; int lineColor = TRANSPARENT_CODE; if( !unitPtr->selected_flag ) // if the unit is currently selected, ignore the filters { if( filterUnitClassId && unit_res[unitPtr->unit_id]->unit_class != filterUnitClassId ) continue; // draw only caravan in trade mode if( world.map_matrix->map_mode == MAP_MODE_TRADE && unitPtr->unit_id != UNIT_CARAVAN ) continue; // filter selected nation if( world.map_matrix->filter_nation_flag && world.map_matrix->filter_nation_recno != unitPtr->nation_recno ) continue; } //---------------- draw unit path in mini_map ------------// if( (config.show_unit_path & 2) && unitPtr->selected_flag && (config.show_ai_info || !playerNation || unitPtr->is_nation(playerNation)) && unitPtr->cur_action != SPRITE_IDLE) { if( unitPtr->mobile_type == UNIT_SEA ) lineColor = V_WHITE; else lineColor = V_BLACK; } // ------ show unit targeting our nation ----------// else if( showAttackerPath && unitPtr->cur_order.mode == UNIT_ATTACK && unitPtr->cur_action != SPRITE_ATTACK // if already attack, not need to show path && !base_obj_array.is_deleted(unitPtr->cur_order.para) && base_obj_array[unitPtr->cur_order.para]->nation_recno == playerNation ) { lineColor = VGA_RED; } if( lineColor != TRANSPARENT_CODE ) { //-----------------------------------------------------------// if(unitPtr->cur_x_loc()!=unitPtr->go_x_loc() || unitPtr->cur_y_loc()!=unitPtr->go_y_loc()) { lineToX = world.map_matrix->calc_loc_pos_x(unitPtr->go_x_loc(), unitPtr->go_y_loc()) + MAP_X1; lineToY = world.map_matrix->calc_loc_pos_y(unitPtr->go_x_loc(), unitPtr->go_y_loc()) + MAP_Y1; lineFromX = world.map_matrix->calc_loc_pos_x(unitPtr->next_x_loc(), unitPtr->next_y_loc()) + MAP_X1; lineFromY = world.map_matrix->calc_loc_pos_y(unitPtr->next_x_loc(), unitPtr->next_y_loc()) + MAP_Y1; vga_back.line(lineFromX, lineFromY, lineToX, lineToY, lineColor); } //-----------------------------------------------------------// if( unitPtr->cur_path && unitPtr->cur_path_result_id > 0 ) { int locFromX, locFromY, locToX, locToY; locFromX = unitPtr->go_x_loc(); locFromY = unitPtr->go_y_loc(); for( j=unitPtr->cur_path_result_id ; j>0 ; j-- ) { PathResult* pathResult = unitPtr->cur_path + j - 1; locToX = pathResult->loc_x; locToY = pathResult->loc_y; lineFromX = world.map_matrix->calc_loc_pos_x(locFromX, locFromY) + MAP_X1; lineFromY = world.map_matrix->calc_loc_pos_y(locFromX, locFromY) + MAP_Y1; lineToX = world.map_matrix->calc_loc_pos_x(locToX, locToY) + MAP_X1; lineToY = world.map_matrix->calc_loc_pos_y(locToX, locToY) + MAP_Y1; vga_back.line(lineFromX, lineFromY, lineToX, lineToY, lineColor); locFromX = locToX; locFromY = locToY; } } } } //---------------- restore boundary setting of anim_line --------------// anim_line.bound_x1 = animLineBoundX1; anim_line.bound_y1 = animLineBoundY1; anim_line.bound_x2 = animLineBoundX2; anim_line.bound_y2 = animLineBoundY2; for(i=1; i<=arraySize; i++) { // #### begin Gilbert 3/11 ######// int dotSize; { // minimize register variable at one time register Unit *unitPtr = (Unit*)get_ptr(i); if( !unitPtr || !unitPtr->is_visible() || unitPtr->is_stealth()) continue; if( !unitPtr->selected_flag ) // if the unit is currently selected, ignore the filters { // draw only caravan in trade mode if( world.map_matrix->map_mode == MAP_MODE_TRADE && unitPtr->unit_id != UNIT_CARAVAN ) continue; if( filterUnitClassId && unit_res[unitPtr->unit_id]->unit_class != filterUnitClassId ) continue; // filter selected nation if( world.map_matrix->filter_nation_flag && world.map_matrix->filter_nation_recno != unitPtr->nation_recno ) continue; } //---------------------------------// if( world.map_matrix->map_mode != MAP_MODE_TRADE ) { if( unitPtr->cur_action == SPRITE_ATTACK ) nationColor = excitedColorArray[unitPtr->nation_recno]; else if( unitPtr->selected_flag ) nationColor = slowExcitedColorArray[unitPtr->nation_recno]; else nationColor = nationColorArray[unitPtr->nation_recno]; } else { // if selected firm is mine, factory or market, // caravan linked to it flashes err_when( MAX_STOP_FOR_CARAVAN != 2 ); // current code check only two stops Firm *firmPtr; if( firm_array.selected_recno && (firmPtr = firm_array[firm_array.selected_recno]) && (firmPtr->cast_to_FirmMine() || firmPtr->cast_to_FirmFactory() || firmPtr->cast_to_FirmMarket()) && ( ((UnitCaravan *)unitPtr)->stop_array[0].firm_recno == firm_array.selected_recno || ((UnitCaravan *)unitPtr)->stop_array[1].firm_recno == firm_array.selected_recno) ) { nationColor = slowExcitedColorArray[unitPtr->nation_recno]; } else { nationColor = nationColorArray[unitPtr->nation_recno]; } } mapX = world.map_matrix->calc_loc_pos_x(unitPtr->cur_x_loc(), unitPtr->cur_y_loc()) + MAP_X1; mapY = world.map_matrix->calc_loc_pos_y(unitPtr->cur_x_loc(), unitPtr->cur_y_loc()) + MAP_Y1; dotSize = unitPtr->mobile_type == UNIT_LAND ? 2 : 3; } { // minimize register variable at one time register short *writePtr = vga_back.buf_ptr(mapX, mapY); if( dotSize == 2 ) { if( writePtr[0] != unexploredColor ) writePtr[0] = nationColor; if( writePtr[1] != unexploredColor ) writePtr[1] = nationColor; if( writePtr[vgaBufPitch] != unexploredColor ) writePtr[vgaBufPitch] = nationColor; if( writePtr[vgaBufPitch+1] != unexploredColor ) writePtr[vgaBufPitch+1] = nationColor; } else if( dotSize == 3 ) { if( writePtr[-vgaBufPitch-1] != unexploredColor ) writePtr[-vgaBufPitch-1] = nationColor; if( writePtr[-vgaBufPitch] != unexploredColor ) writePtr[-vgaBufPitch] = nationColor; if( writePtr[-vgaBufPitch+1] != unexploredColor ) writePtr[-vgaBufPitch+1] = nationColor; if( writePtr[-1] != unexploredColor ) writePtr[-1] = nationColor; if( writePtr[0] != unexploredColor ) writePtr[0] = nationColor; if( writePtr[1] != unexploredColor ) writePtr[1] = nationColor; if( writePtr[vgaBufPitch-1] != unexploredColor ) writePtr[vgaBufPitch-1] = nationColor; if( writePtr[vgaBufPitch] != unexploredColor ) writePtr[vgaBufPitch] = nationColor; if( writePtr[vgaBufPitch+1] != unexploredColor ) writePtr[vgaBufPitch+1] = nationColor; } } // #### end Gilbert 3/11 ######// } //end for }