MCPcopy Create free account
hub / github.com/OpenApoc/OpenApoc / getDominantItemInHands

Method getDominantItemInHands

game/state/shared/agent.cpp:1240–1291  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1238}
1239
1240StateRef<AEquipmentType> Agent::getDominantItemInHands(GameState &state,
1241 StateRef<AEquipmentType> itemLastFired) const
1242{
1243 sp<AEquipment> e1 = getFirstItemInSlot(EquipmentSlotType::RightHand);
1244 sp<AEquipment> e2 = getFirstItemInSlot(EquipmentSlotType::LeftHand);
1245 // If there is only one item - return it, if none - return nothing
1246 if (!e1 && !e2)
1247 return nullptr;
1248 else if (e1 && !e2)
1249 return e1->type;
1250 else if (e2 && !e1)
1251 return e2->type;
1252 // If item was last fired and still in hands - return it
1253 if (itemLastFired)
1254 {
1255 if (e1 && e1->type == itemLastFired)
1256 return e1->type;
1257 if (e2 && e2->type == itemLastFired)
1258 return e2->type;
1259 }
1260 // Calculate item priorities:
1261 // - Firing (whichever fires sooner)
1262 // - CanFire >> Two-Handed >> Weapon >> Usable Item >> Others
1263 int e1Priority =
1264 e1->isFiring()
1265 ? 1440 - e1->weapon_fire_ticks_remaining
1266 : (e1->canFire(state)
1267 ? 4
1268 : (e1->type->two_handed ? 3
1269 : (e1->type->type == AEquipmentType::Type::Weapon ? 2
1270 : (e1->type->type != AEquipmentType::Type::Ammo &&
1271 e1->type->type != AEquipmentType::Type::Armor &&
1272 e1->type->type != AEquipmentType::Type::Loot)
1273 ? 1
1274 : 0)));
1275 int e2Priority =
1276 e2->isFiring()
1277 ? 1440 - e2->weapon_fire_ticks_remaining
1278 : (e2->canFire(state)
1279 ? 4
1280 : (e2->type->two_handed ? 3
1281 : (e2->type->type == AEquipmentType::Type::Weapon ? 2
1282 : (e2->type->type != AEquipmentType::Type::Ammo &&
1283 e2->type->type != AEquipmentType::Type::Armor &&
1284 e2->type->type != AEquipmentType::Type::Loot)
1285 ? 1
1286 : 0)));
1287 // Right hand has priority in case of a tie
1288 if (e1Priority >= e2Priority)
1289 return e1->type;
1290 return e2->type;
1291}
1292
1293sp<AEquipment> Agent::getFirstItemInSlot(EquipmentSlotType equipmentSlotType, bool lazy) const
1294{

Callers 1

updateDisplayedItemMethod · 0.80

Calls 2

isFiringMethod · 0.80
canFireMethod · 0.45

Tested by

no test coverage detected