void CAirMoveType::StopMoving() { SetGoal(owner->pos); SetWantedMaxSpeed(0.0); if ((aircraftState == AAirMoveType::AIRCRAFT_FLYING) && !owner->unitDef->DontLand() && autoLand) { SetState(AIRCRAFT_LANDING); } }
bool AMoveType::SetMemberValue(unsigned int memberHash, void* memberValue) { #define MEMBER_CHARPTR_HASH(memberName) HsiehHash(memberName, strlen(memberName), 0) #define MEMBER_LITERAL_HASH(memberName) HsiehHash(memberName, sizeof(memberName) - 1, 0) #define MAXSPEED_MEMBER_IDX 0 #define MAXWANTEDSPEED_MEMBER_IDX 1 #define REPAIRBELOWHEALTH_MEMBER_IDX 2 static const unsigned int floatMemberHashes[] = { MEMBER_LITERAL_HASH( "maxSpeed"), MEMBER_LITERAL_HASH( "maxWantedSpeed"), MEMBER_LITERAL_HASH("repairBelowHealth"), }; #undef MEMBER_CHARPTR_HASH #undef MEMBER_LITERAL_HASH /* // unordered_map etc. perform dynallocs, so KISS here float* floatMemberPtrs[] = { &maxSpeed, &maxWantedSpeed, &repairBelowHealth, }; */ // special cases if (memberHash == floatMemberHashes[MAXSPEED_MEMBER_IDX]) { SetMaxSpeed((*reinterpret_cast<float*>(memberValue)) / GAME_SPEED); return true; } if (memberHash == floatMemberHashes[MAXWANTEDSPEED_MEMBER_IDX]) { SetWantedMaxSpeed((*reinterpret_cast<float*>(memberValue)) / GAME_SPEED); return true; } if (memberHash == floatMemberHashes[REPAIRBELOWHEALTH_MEMBER_IDX]) { SetRepairBelowHealth(*reinterpret_cast<float*>(memberValue)); return true; } return false; }
void CAirMoveType::StartMoving(float3 pos, float goalRadius, float speed) { SetWantedMaxSpeed(speed); SetGoal(pos); }
void CAirMoveType::StartMoving(float3 gpos, float goalRadius) { SetWantedMaxSpeed(owner->maxSpeed); SetGoal(gpos); }