//--------- Begin of function Unit::Unit ---------// // Unit::Unit() { memset( sizeof(UnitB) + (char *)this, 0, sizeof(Unit) - sizeof(UnitB)); pushed_order.mode = -1; // -1 means not used set_original_target(-1, -1); auto_retreat_hit_point = 0; }
//--------- Begin of function Unit::pop_order ---------// // // Note: the stack only has space for one Order object. // void Unit::pop_order() { stop_move(); // stop the current action first err_when( has_pushed_order() == 0 ); // cannot push when the only one stack space is used cur_order = pushed_order; pushed_order.set(-1); set_original_target(-1, -1); // clear the original target }
//--------- Begin of function Unit::stop_order ---------// // // Stop the current order without completion. // void Unit::stop_order() { stop_move(); // a UnitB function //----- if the order is initiated by an AI --// if( cur_order.ai_action_id && nation_recno ) nation_array[nation_recno]->action_failure(cur_order.ai_action_id, sprite_recno); cur_order.set(UNIT_STOP); clear_pushed_order(); // clear pushed orders if there are any set_original_target(-1, -1); // clear the original target force_move_flag = false; }