//------- Begin of function Town::draw_detect_link_line ---------// // // [int] actionDetect - 0 - this is a draw action // 1 - this is a detect action // (default: 0) // // return: <int> 1 - detected // 0 - not detected // int Town::draw_detect_link_line(int actionDetect) { //-------- set source points ----------// int srcX = ( ZOOM_X1 + (loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; int srcY = ( ZOOM_Y1 + (loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; //------ draw lines to linked firms ---------// char* bitmapPtr; for(int i=0 ; i<linked_firm_count ; i++ ) { int firmX, firmY; Firm *firmPtr = firm_array[linked_firm_array[i]]; firmX = ( ZOOM_X1 + (firmPtr->loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (firmPtr->loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; firmY = ( ZOOM_Y1 + (firmPtr->loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (firmPtr->loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; anim_line.draw_line(&vga_back, srcX, srcY, firmX, firmY, linked_firm_enable_array[i]==LINK_EE ); if( !can_toggle_firm_link(linked_firm_array[i]) ) continue; //------ draw the link icon and detect mouse action -----// bitmapPtr = power.get_link_icon( linked_firm_enable_array[i], nation_recno==firmPtr->nation_recno ); if( actionDetect ) { int rc = world.zoom_matrix->detect_bitmap_clip( firmX-11, firmY-11, bitmapPtr ); if( rc ) mouse.reset_click(); // reset queued mouse click for fast single clicking //------ left clicking to toggle link -------// if( rc==1 && nation_recno==nation_array.player_recno ) { if( linked_firm_enable_array[i] & LINK_ED ) { toggle_firm_link( i+1, 0, COMMAND_PLAYER ); // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("TURN_OFF"); // ###### end Gilbert 25/9 #######// } else { toggle_firm_link( i+1, 1, COMMAND_PLAYER ); // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("TURN_ON"); // ###### end Gilbert 25/9 #######// } // ######## begin Gilbert 23/9 ##########// if( firmPtr->firm_id == FIRM_CAMP && !remote.is_enable()) // ######## end Gilbert 23/9 ##########// { if( nation_recno ) update_target_loyalty(); else update_target_resistance(); update_camp_link(); } return 1; } //------ right clicking to recruit soldiers ------// else if( rc==2 ) { if( firmPtr->nation_recno == nation_recno && !firmPtr->under_construction && firmPtr->worker_array && firmPtr->worker_count < MAX_WORKER ) { firmPtr->pull_town_people(town_recno, COMMAND_PLAYER, browse_selected_race_id(), 1); // last 1-force pulling people from the town to the firm // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("PULL_MAN"); // ###### end Gilbert 25/9 #######// } } } else { if( nation_recno == nation_array.player_recno ) world.zoom_matrix->put_bitmap_clip( firmX-11, firmY-11, bitmapPtr ); } } //------ draw lines to linked towns ---------// bool awesome_lines_flag = false; // Set this to true to draw animated lines to ALL towns in the network. Not advised for actual play. for( int i=0 ; i<linked_town_count ; i++ ) { int townX, townY; int townRecno = linked_town_array[i]; Town *townPtr = town_array[townRecno]; townX = ( ZOOM_X1 + (townPtr->loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (townPtr->loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; townY = ( ZOOM_Y1 + (townPtr->loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (townPtr->loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; if ( !awesome_lines_flag || (townPtr->nation_recno != nation_array.player_recno) ) anim_line.draw_line(&vga_back, srcX, srcY, townX, townY, linked_town_enable_array[i]==LINK_EE ); } //------------ detect on the migration icon ------------// // allow migration to any town in the same town network // if (town_network_recno != 0 && (nation_recno == nation_array.player_recno)) { TownNetwork &townNetwork = *town_network_array[town_network_recno]; bitmapPtr = image_icon.get_ptr("MIGRATE"); for (int i = 0; i < townNetwork.size(); ++i) { int townRecno = townNetwork[i]; Town *townPtr = town_array[townRecno]; // Do not draw/detect on self if (townRecno == town_recno) continue; int townX, townY; townX = ( ZOOM_X1 + (townPtr->loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (townPtr->loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; townY = ( ZOOM_Y1 + (townPtr->loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (townPtr->loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; // If awesome_lines_flag is true then draw the aminated lines on all towns in the town-network if (awesome_lines_flag) { anim_line.draw_line(&vga_back, srcX, srcY, townX, townY, 1 /*-animated*/); } // Only perform checks on migration (draw/detect) when the 'active' part of the town is within // the zoom matrix if ( world.zoom_matrix->is_bitmap_clip( townX-11, townY-11, bitmapPtr ) && can_migrate(townRecno) ) { if( actionDetect ) { int detectClick = world.zoom_matrix->detect_bitmap_clip( townX-11, townY-11, bitmapPtr ); if( detectClick ) { mouse.reset_click(); // reset queued mouse click for fast single clicking // Migrate 1 person on left click and 10 people on right click err_when(town_array[townRecno]->population>MAX_TOWN_POPULATION); int migrateRaceId = browse_selected_race_id(); err_when( !migrateRaceId ); migrate_to(townRecno, COMMAND_PLAYER, migrateRaceId, (detectClick == 1 ? 1 : 10)); // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("PULL_MAN"); // ###### end Gilbert 25/9 #######// return 1; } } else { world.zoom_matrix->put_bitmap_clip( townX-11, townY-11, bitmapPtr ); } } } } return 0; }
//------- Begin of function Town::draw_detect_link_line ---------// // // [int] actionDetect - 0 - this is a draw action // 1 - this is a detect action // (default: 0) // // return: <int> 1 - detected // 0 - not detected // int Town::draw_detect_link_line(int actionDetect) { int i, firmX, firmY, townX, townY; Firm* firmPtr; Town* townPtr; //-------- set source points ----------// int srcX = ( ZOOM_X1 + (loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; int srcY = ( ZOOM_Y1 + (loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; //------ draw lines to linked firms ---------// char* bitmapPtr; char goodLinkName[9] = "GOODLINK"; goodLinkName[7] = '1'+(char)(sys.frame_count%3); for( i=0 ; i<linked_firm_count ; i++ ) { firmPtr = firm_array[linked_firm_array[i]]; firmX = ( ZOOM_X1 + (firmPtr->loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (firmPtr->loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; firmY = ( ZOOM_Y1 + (firmPtr->loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (firmPtr->loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; anim_line.draw_line(&vga_back, srcX, srcY, firmX, firmY, linked_firm_enable_array[i]==LINK_EE ); if( !can_toggle_firm_link(linked_firm_array[i]) ) continue; //------ draw the link icon and detect mouse action -----// bitmapPtr = power.get_link_icon( linked_firm_enable_array[i], nation_recno==firmPtr->nation_recno ); if( actionDetect ) { int rc = world.zoom_matrix->detect_bitmap_clip( firmX-11, firmY-11, bitmapPtr ); if( rc ) mouse.reset_click(); // reset queued mouse click for fast single clicking //------ left clicking to toggle link -------// if( rc==1 && nation_recno==nation_array.player_recno ) { if( linked_firm_enable_array[i] & LINK_ED ) { toggle_firm_link( i+1, 0, COMMAND_PLAYER ); // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("TURN_OFF"); // ###### end Gilbert 25/9 #######// } else { toggle_firm_link( i+1, 1, COMMAND_PLAYER ); // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("TURN_ON"); // ###### end Gilbert 25/9 #######// } // ######## begin Gilbert 23/9 ##########// if( firmPtr->firm_id == FIRM_CAMP && !remote.is_enable()) // ######## end Gilbert 23/9 ##########// { if( nation_recno ) update_target_loyalty(); else update_target_resistance(); update_camp_link(); } return 1; } //------ right clicking to recruit soldiers ------// else if( rc==2 ) { if( firmPtr->nation_recno == nation_recno && !firmPtr->under_construction && firmPtr->worker_array && firmPtr->worker_count < MAX_WORKER ) { firmPtr->pull_town_people(town_recno, COMMAND_PLAYER, browse_selected_race_id(), 1); // last 1-force pulling people from the town to the firm // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("PULL_MAN"); // ###### end Gilbert 25/9 #######// } } } else { if( nation_recno == nation_array.player_recno ) world.zoom_matrix->put_bitmap_clip( firmX-11, firmY-11, bitmapPtr ); } } //------ draw lines to linked towns ---------// int townRecno; for( i=0 ; i<linked_town_count ; i++ ) { townRecno = linked_town_array[i]; townPtr = town_array[townRecno]; townX = ( ZOOM_X1 + (townPtr->loc_x1-world.zoom_matrix->top_x_loc) * ZOOM_LOC_WIDTH + ZOOM_X1 + (townPtr->loc_x2-world.zoom_matrix->top_x_loc+1) * ZOOM_LOC_WIDTH ) / 2; townY = ( ZOOM_Y1 + (townPtr->loc_y1-world.zoom_matrix->top_y_loc) * ZOOM_LOC_HEIGHT + ZOOM_Y1 + (townPtr->loc_y2-world.zoom_matrix->top_y_loc+1) * ZOOM_LOC_HEIGHT ) / 2; anim_line.draw_line(&vga_back, srcX, srcY, townX, townY, linked_town_enable_array[i]==LINK_EE ); //------- detect on the migration icon -------// if( nation_recno == nation_array.player_recno && nation_recno == townPtr->nation_recno && can_migrate(townRecno) ) { bitmapPtr = image_icon.get_ptr("MIGRATE"); if( actionDetect ) { if( world.zoom_matrix->detect_bitmap_clip( townX-11, townY-11, bitmapPtr ) ) { mouse.reset_click(); // reset queued mouse click for fast single clicking err_when(town_array[townRecno]->population>MAX_TOWN_POPULATION); migrate_to(townRecno, COMMAND_PLAYER); // ###### begin Gilbert 25/9 #######// se_ctrl.immediate_sound("PULL_MAN"); // ###### end Gilbert 25/9 #######// return 1; } } else { world.zoom_matrix->put_bitmap_clip( townX-11, townY-11, bitmapPtr ); } } } return 0; }