void EventHandler::handleEvent(const Vector& eventPos, const Transform& objectTrans, Object* sourceObject, int sourceId, float time) { if (sourceObject && sourceId != -1) { Actor* sourceActor = getActorFromId(sourceId); if (sourceActor) { // Event was fired by an actor. Accumulate data in the actor's memory about how much firing strength it has fired. // Get information about source weapon. Object* actorVehicle = sourceActor->getPlayer()->getCurrentObject(); Armaments* actorArms = actorVehicle ? (actorVehicle->getArmament()) : 0; int weaponId = actorArms ? actorArms->getActiveWeaponIndex() : -1; if (weaponId != -1) { if (actorArms) { Weapon* weapon = actorArms->getWeapon(weaponId); if (weapon) { // if (weapon->getExplosionRadius() > 0) // sourceActor->getMemory()->setTimeOfEvent(time); // Get information about target, and bots memory of target. ObjectProxy currentTargetHandle = sourceActor->getMemory()->getTarget(); Object* currentTarget = currentTargetHandle.get(); // Always deal with primaryObject if (currentTarget && !currentTarget->isPrimary()) { currentTargetHandle = currentTarget->getPrimaryObject()->proxy(); currentTarget = currentTargetHandle.get(); } const SensingData* currentTargetSensingData = sourceActor->getSenses()->getSensingData(currentTarget); if (currentTarget && currentTargetSensingData) { ASSERT(0 <= weaponId && weaponId < 8, "Illegal weaponId: &u", weaponId); //DEBUG_OUTPUT("FiringStrength accumulation for weaponId %u... %f\n", weaponId, cyrrentTargetSensingData->typesFired[weaponId]; int targetType = currentTarget->getType(); if (targetType <= 3) // Lighter types { //for (int strType = targetType; strType <= 3; ++strType) // currentTargetSensingData->typesFired[weaponId] += weapon->getTypeValue(strType); } else if (targetType == 4) // Other type { //currentTargetSensingData->typesFired[weaponId] += weapon->getTypeValue(4); } else if (targetType == 5) // Third type { //currentTargetSensingData->typesFired[weaponId] += weapon->getTypeValue(2); // Other type //currentTargetSensingData->typesFired[weaponId] += weapon->getTypeValue(3); // Other type //currentTargetSensingData->typesFired[weaponId] += weapon->getTypeValue(5); // Third type /* ObjectProxy victimHandle = targetObject->getVehicle(sourceActor->getTeam()); SensingData* spottedObj = sourceActor->getSensingDataFromHandle(victimHandle); if (spottedObj) { spottedObj->fireSuccess += 1; }*/ } //DEBUG_OUTPUT("...became %f\n", currentTargetSensingData->typesFired[weaponId]); } } } } } } }