コード例 #1
0
 def getEntityNominalSpeed(entity):
     if isAvatar(entity):
         settings = db.DBLogic.g_instance.getDestructibleObjectData(entity)
         return settings.flightModel.engine[airplanesConfigurations[
             entity.globalID].logicalParts[LOGICAL_PART.ENGINE]].maxSpeed
     else:
         return 0.0
コード例 #2
0
 def isActive(self):
     if self._lockTargetId > 0:
         target = BigWorld.entities.get(self._lockTargetId)
         if target is not None and isAvatar(
                 target) and EntityStates.inState(target,
                                                  EntityStates.GAME):
             return self._isFrontAttack(target)
     self._lockTargetId = -1
     return False
コード例 #3
0
 def _execute(self, entityId):
     e = BigWorld.entities.get(entityId)
     if e is None:
         LOG_ERROR('[VSE] Entity does not exist: {0}'.format(entityId))
         return -1
     elif not isAvatar(e):
         LOG_ERROR('[VSE] Entity is not avatar: {0}'.format(entityId))
         return -1
     else:
         return db.DBLogic.g_instance.getPlaneIDByGlobalID(e.globalID)
コード例 #4
0
 def _execute(self, entityId):
     e = BigWorld.entities.get(entityId)
     if e is None:
         logEntityDoesNotExistError(entityId, self)
         return 0
     elif not isAvatar(e):
         logNotSupportedEntityError(e, self)
         return 0
     else:
         return e.getSpeed() * METERS_PER_SEC_TO_KMH_FACTOR
コード例 #5
0
 def _execute(self, entityId):
     e = BigWorld.entities.get(entityId)
     if e is None:
         logEntityDoesNotExistError(entityId, self)
         return 0
     elif not isAvatar(e):
         logNotSupportedEntityError(e, self)
         return 0
     else:
         return e.getAltitudeAboveObstacle()
コード例 #6
0
 def _execute(self, dst, pos, radius):
     del dst[:]
     e = BigWorld.entities[self.planEntityId]
     if isAvatar(e) and e.position.distTo(pos) <= radius:
         dst.append(e.id)
     avatars = e.entitiesInRange(radius, 'Avatar', pos) + e.entitiesInRange(
         radius, 'AvatarBot', pos) + e.entitiesInRange(
             radius, 'Bomber', pos)
     dst.extend((a.id for a in avatars))
     return 'out'
コード例 #7
0
 def _tryGetAvatar(self, entityId):
     e = BigWorld.entities.get(entityId)
     if e is None:
         logEntityDoesNotExistError(entityId, self)
         return
     elif not isAvatar(e):
         logNotSupportedEntityError(e, self)
         return
     else:
         return e
コード例 #8
0
 def _execute(self, entityId):
     e = BigWorld.entities.get(entityId)
     if e is None:
         logEntityDoesNotExistError(entityId, self)
         return 0
     elif not isAvatar(e):
         logNotSupportedEntityError(e, self)
         return 0
     else:
         return _performanceCharacteristics_db.airplanes[
             e.globalID].maxSpeed
コード例 #9
0
 def _execute(self, entityId, triggerName, isOn):
     e = BigWorld.entities.get(entityId)
     if e is None:
         logEntityDoesNotExistError(entityId, self)
         return
     elif not isAvatar(e) and not isTeamObject(e):
         logNotSupportedEntityError(e, self)
         return
     else:
         e.controllers['modelManipulator'].setEffectVisible(
             triggerName, isOn)
         return 'out'
コード例 #10
0
 def setOwner(self, owner):
     AvatarControllerBase.setOwner(self, owner)
     self.__pastTime = 0.0
     self.__isMainEntityAvatar = False if not owner else isAvatar(owner)
     self._wrdh.setOwner(owner)
     if IS_CLIENT:
         if owner:
             self.__isPlayer = self._owner.isPlayer()
             self.__isOwnerAvatar = not isTeamObject(owner)
             self.__initClientUpdateCallBack()
         elif self.__updateCallBack:
             BigWorld.cancelCallback(self.__updateCallBack)
             self.__updateCallBack = None
     return
コード例 #11
0
 def __idleAnimate(self):
     if self.__callback is not None:
         BigWorld.cancelCallback(self.__callback)
     if not IS_EDITOR and isAvatar(
             BigWorld.player()) and EntityStates.inState(
                 BigWorld.player(), EntityStates.GAME):
         if self.__passiveTime > 0:
             self.__passiveTime -= PilotHeadController.CALLBACK_TIME
         else:
             rudderY = choice([-1, 0, 1])
             self.matrixProvider.yaw = self.maxAngle * rudderY
             rudderP = choice([0, -1]) * (1 if not self.reversed else -1)
             self.matrixProvider.pitch = self.maxAngle * rudderP
             self.__passiveTime = PilotHeadController.PASSIVE_TIME
     self.__callback = BigWorld.callback(PilotHeadController.CALLBACK_TIME,
                                         self.__idleAnimate)
     return
コード例 #12
0
 def setTarget(self, entity):
     if not self.__inited:
         self.__createTarget()
     if entity is not None and isAvatar(entity):
         self.__matrixProvider.target = entity.matrix
         self.__deflectionTarget(entity)
         self.__offsetMtx.target = self.__matrixProvider
         self.__centerPointOffsetMtx.target = self.__matrixProvider
         if COLLISION_RECORDER:
             self.__matrixProvider.targetEntity = entity
     else:
         self.__matrixProvider.target = None
         self.__deflectionTarget(None)
         if entity is not None and TEAM_OBJECT_PARALLAX_ENABLED and isTeamObject(
                 entity):
             self.__offsetMtx.target = entity.matrix
             self.__centerPointOffsetMtx.target = entity.matrix
         else:
             self.__offsetMtx.target = None
             self.__centerPointOffsetMtx.target = None
         if COLLISION_RECORDER:
             self.__matrixProvider.targetEntity = None
     return
コード例 #13
0
ファイル: _base.py プロジェクト: SEA-group/wowp_scripts
 def shakable(self):
     if self.isShakeSettingsPresent:
         return consts.IS_CLIENT and self._shakeSettings.shakable and isAvatar(
             self._player) and EntityStates.inState(self._player,
                                                    EntityStates.GAME)
     return False
コード例 #14
0
    def doExplosiveDamage(owner,
                          bulletPos,
                          explosionRadius,
                          explosionRadiusEffective,
                          explosionDamage,
                          damageReason=DAMAGE_REASON.COMMON_EXPLOSION):
        try:
            spaceID = owner.spaceID
        except:
            return

        closestParts = BigWorld.hm_closestParts(spaceID, bulletPos,
                                                explosionRadius)
        if not closestParts:
            return
        victimsMap = {}
        for victim, partId, closestPos, dist in closestParts:
            isFriendlyVictim = victim.teamIndex == owner.teamIndex
            if not (isFriendlyVictim and isTeamObject(victim)):
                victimParts = victimsMap.get(victim, [])
                if not victimParts:
                    victimsMap[victim] = victimParts
                victimParts.append((partId, dist))

        normalizeVictimsPartsMap(victimsMap)
        for victim, victimParts in victimsMap.items():
            victimData = db.DBLogic.g_instance.getDestructibleObjectData(
                victim)
            damagedParts = []
            storePartId = -1
            storeDamage = -1
            if isTeamObject(victim):
                numParts = len(victimParts)
            else:
                numParts = 1
            isFriendlyVictim = victim.teamIndex == owner.teamIndex
            for partId, dist in victimParts:
                victimPartData = getEntityPartDataByID(victim, partId,
                                                       victimData)
                if victimPartData:
                    if isFriendlyVictim:
                        if damageReason == DAMAGE_REASON.BOMB_EXPLOSION:
                            damage = BOMB_ALLY_DAMAGE
                        elif damageReason == DAMAGE_REASON.ROCKET_EXPLOSION:
                            damage = owner.SETTINGS.ROCKET_ALLY_DAMAGE
                        else:
                            damage = 1.0
                    elif isAvatar(
                            victim
                    ) and damageReason == DAMAGE_REASON.BOMB_EXPLOSION:
                        damage = BOMB_ENEMY_DAMAGE
                    else:
                        damage = 1.0
                    if dist < explosionRadiusEffective:
                        damage *= explosionDamage / numParts
                    elif dist <= explosionRadius:
                        damage *= explosionDamage * (
                            explosionRadius - dist) / (
                                (explosionRadius - explosionRadiusEffective) *
                                numParts)
                    else:
                        LOG_ERROR(
                            'doExplosiveDamage : dist > explosionRadius, ',
                            partId, 'for object', victim, victim.id)
                    if damage > 0:
                        damagedParts.append({'key': partId, 'value': damage})
                else:
                    LOG_ERROR('Invalid partID', partId, 'for object', victim,
                              victim.id)

            if storeDamage > 0 and storePartId != -1:
                damagedParts.append({'key': storePartId, 'value': storeDamage})
            if damagedParts:
                victim.receiveExplosiveDamage(owner, damagedParts,
                                              owner.entityGroupMask,
                                              owner.teamIndex, damageReason,
                                              owner.unitNumber)

        owner.onHitTarget(victimsMap.iterkeys(), damageReason,
                          ACTION_DEALER.PILOT)
コード例 #15
0
 def isEnemyTurret(entity):
     return not isAvatar(entity) and isDestructibleObject(
         entity) and canAimToEnemyEntity(self._player, entity)
コード例 #16
0
 def isEnemy(entity):
     return isAvatar(entity) and canAimToEnemyEntity(
         self._player, entity)