def onInfluenceZoneSpawn(self, influenceZone, go):
        from battle_royale.abilities.dynamic_cache_loader import DynamicObjectsCacheLoader
        equipment = vehicles.g_cache.equipments()[influenceZone.equipmentID]
        if not equipment.usagePrefab:
            go.createComponent(DynamicObjectsCacheLoader, self.spaceID,
                               influenceZone.equipmentID,
                               influenceZone.zonesPosition, influenceZone.team)
            return

        def postloadSetup(go):
            eqComponent = go.createComponent(InfluenceZoneEquipmentComponent)
            eqComponent.setupEquipment(equipment)
            multiVisualizer = go.findComponentByType(
                InfluenceZoneMultiVisualizer)
            if multiVisualizer is not None:
                self.__multipositionSpawn(go, multiVisualizer, influenceZone,
                                          equipment,
                                          equipment.influenceZone.radius)
            markerComponent = go.findComponentByType(CombatMarker)
            if markerComponent is not None:
                postfix = self.ENEMY_MARKER_POSTFIX
                if self.__guiSessionProvider.getArenaDP().isAllyTeam(
                        influenceZone.team):
                    postfix = self.ALLY_MARKER_POSTFIX
                markerComponent.shape += postfix
                markerComponent.disappearanceRadius = equipment.radius + equipment.influenceZone.radius
            terrainAreaComponent = go.findComponentByType(
                InfluenceZoneTerrainArea)
            if terrainAreaComponent is not None:
                terrainAreaComponent.dropOffset = influenceZone.dropOffset
            return

        CGF.loadGameObjectIntoHierarchy(equipment.usagePrefab, go,
                                        Math.Vector3(0, 0, 0), postloadSetup)
示例#2
0
 def tick(self):
     if not self.__sequenceAnimator.isPlaying():
         self.__sequenceAnimator.stop()
         self.__sequenceAnimator.setEnabled(False)
         self.__sequenceAnimator = None
         CGF.removeGameObject(self.parent)
     return
示例#3
0
 def onEnterWorld(self, prereqs):
     super(ClientSelectableCGFObject, self).onEnterWorld(prereqs)
     parent = self.entityGameObject
     if parent is not None and self.usedPrefab:
         CGF.loadGameObjectIntoHierarchy(self.usedPrefab, parent, Vector3(),
                                         self.__onGameObjectLoaded)
     return
    def __launch(self, gameObject, thunderStrikeEntity, equipment):

        def postloadSetup(go):
            go.addComponent(equipment)
            thunderStrikeEntity.onHit += functools.partial(self.__processHit, go)

        CGF.loadGameObjectIntoHierarchy(equipment.usagePrefab, gameObject, Math.Vector3(0, 0, 0), postloadSetup)
 def __processFlightEnd(self):
     self.onFlightEnd(self)
     if self.parent is not None:
         self.parent.removeComponent(self.plane)
         self.plane = None
         if self.cargo is None:
             CGF.removeGameObject(self.parent)
     return
示例#6
0
    def wrapper(func):
        CGF.registerManager(manager, False, presentInEditor)

        def wrapper_self(self):
            CGF.createManager(manager, func(self), self.spaceID)
            return None

        return ManagerRegistrator(wrapper_self)
示例#7
0
def __assemblePrefabComponent(appearance, attachment, _, __):

    def _onLoaded(gameObject):
        appearance.undamagedStateChildren.append(gameObject)
        gameObject.createComponent(GenericComponents.RedirectorComponent, appearance.gameObject)
        gameObject.createComponent(GenericComponents.DynamicModelComponent, appearance.compoundModel)

    CGF.loadGameObjectIntoHierarchy(attachment.modelName, appearance.gameObject, attachment.transform, _onLoaded)
示例#8
0
    def __launch(self, equipment, position, duration):
        def postloadSetup(go):
            go.addComponent(equipment)
            go.createComponent(GenericComponents.RemoveGoDelayedComponent,
                               duration)

        CGF.loadGameObject(equipment.usagePrefab, self.entity.spaceID,
                           position, postloadSetup)
示例#9
0
    def endShotPassion(self, vehicle):

        def postloadSetup(go):
            go.createComponent(GenericComponents.RedirectorComponent, vehicle.appearance.gameObject)

        if vehicle is not None and vehicle.isAlive() and vehicle.appearance:
            equipmentID = vehicles.g_cache.equipmentIDs().get(VehicleShotPassionComponent.EQUIPMENT_NAME)
            equipment = vehicles.g_cache.equipments()[equipmentID]
            CGF.loadGameObjectIntoHierarchy(equipment.posteffectPrefab, vehicle.appearance.partsGameObjects.getPartGameObject(TankNodeNames.GUN_INCLINATION, vehicle.appearance.gameObject.spaceID, vehicle.appearance.gameObject), Math.Vector3(0, 0, 0), postloadSetup)
        return
示例#10
0
 def manager_registrator(cls):
     CGF.registerManager(cls, presentInAllWorlds, presentInEditor,
                         creationPredicate)
     modulePath = sys.modules[
         cls.
         __module__].__file__ if cls.__module__ != '__builtin__' else '__builtin__'
     CGF.registerModulePath(cls, modulePath)
     if presentInAllWorlds is False:
         generateRule(cls, category)
     return cls
示例#11
0
    def __clearModelAnimators(self):
        self.flagComponent = None
        for modelAnimator in self.__modelAnimators:
            modelAnimator.animator.stop()

        self.__modelAnimators = []
        for go in self.undamagedStateChildren:
            CGF.removeGameObject(go)

        self.undamagedStateChildren = []
        return
示例#12
0
def loadAppearancePrefab(prefab, appearance, posloadCallback=None):

    def _onLoaded(gameObject):
        appearance.undamagedStateChildren.append(gameObject)
        gameObject.createComponent(GenericComponents.RedirectorComponent, appearance.gameObject)
        gameObject.createComponent(GenericComponents.DynamicModelComponent, appearance.compoundModel)
        if posloadCallback:
            posloadCallback(gameObject)

    if appearance.compoundModel:
        CGF.loadGameObjectIntoHierarchy(prefab, appearance.gameObject, Math.Vector3(0, 0, 0), _onLoaded)
    else:
        appearance.pushToLoadingQueue(prefab, appearance.gameObject, Math.Vector3(0, 0, 0), _onLoaded)
示例#13
0
 def __onResourceLoaded(self, effectP, position, scaleRatio, pointDescr,
                        resourceRefs):
     if effectP in resourceRefs.failedIDs:
         return
     else:
         gameObject = self.gameObject
         if gameObject is None:
             return
         x = z = pointDescr.radius
         if scaleRatio:
             y = x / scaleRatio
             zoneHeight = y * pointDescr.height / (pointDescr.height +
                                                   pointDescr.depth)
             zoneDepth = y - zoneHeight
         else:
             zoneHeight = pointDescr.height
             zoneDepth = pointDescr.depth
         scale = (x, zoneHeight + zoneDepth, z)
         from battleground.components import SequenceComponent
         yShift = -zoneDepth
         position = position + Math.Vector3(0, yShift, 0)
         g = CGF.GameObject(self.spaceID)
         g.createComponent(GenericComponents.TransformComponent, position)
         g.createComponent(GenericComponents.HierarchyComponent,
                           self.gameObject)
         sequenceComponent = g.createComponent(SequenceComponent,
                                               resourceRefs[effectP])
         sequenceComponent.createTerrainEffect(position,
                                               scale=scale,
                                               loopCount=-1)
         g.activate()
         g.transferOwnershipToWorld()
         return
 def _createParticles(self):
     if self.__vehicleEffectConfig is not None:
         self.__particle = gameObject = CGF.GameObject(self.__gameObject.spaceID)
         gameObject.createComponent(GenericComponents.HierarchyComponent, self.__gameObject)
         gameObject.createComponent(GenericComponents.ParticleComponent, self.__vehicleEffectConfig.path, True, self.__vehicleEffectConfig.rate)
         gameObject.createComponent(GenericComponents.TransformComponent, self.__vehicleEffectConfig.offset)
         gameObject.activate()
     return
 def __enableGroupDraw(self, enable, groupName):
     highlightQuery = CGF.Query(self.spaceID,
                                (HighlightComponent, DynamicModelComponent))
     for highlightComponent, dynamicModelComponent in highlightQuery:
         if highlightComponent.groupName and highlightComponent.groupName == groupName:
             if enable:
                 BigWorld.wgAddEdgeDetectDynamicModel(dynamicModelComponent)
             else:
                 BigWorld.wgDelEdgeDetectDynamicModel(dynamicModelComponent)
class TestMaterialManipulatorManager(CGF.ComponentManager):
    queryManipulator = CGF.QueryConfig(TestMaterialParamManipulator)

    @tickGroup('Simulation')
    def tick1(self):
        for manipulator in self.queryManipulator:
            manipulator.model().setMaterialParameterVector4(
                manipulator.paramName,
                Math.Vector4(0, math.sin(self.clock.gameTime), 1, 0))
示例#17
0
 def __init__(self, arenaUniqueID, arenaTypeID, arenaBonusType, arenaGuiType, arenaExtraData, spaceID):
     self.__vehicles = {}
     self.__vehicleIndexToId = {}
     self.__positions = {}
     self.__statistics = {}
     self.__teamBasesData = defaultdict(dict)
     self.__periodInfo = (ARENA_PERIOD.WAITING,
      0,
      0,
      None)
     self.__viewPoints = []
     self.__isFogOfWarEnabled = False
     self.__hasFogOfWarHiddenVehicles = False
     self.__arenaInfo = None
     self.__teamInfo = None
     self.__settings = {}
     self.__eventManager = Event.EventManager()
     em = self.__eventManager
     self.onArenaSettingsReceived = Event.Event(em)
     self.onNewVehicleListReceived = Event.Event(em)
     self.onVehicleAdded = Event.Event(em)
     self.onVehicleUpdated = Event.Event(em)
     self.onPositionsUpdated = Event.Event(em)
     self.onPeriodChange = Event.Event(em)
     self.onNewStatisticsReceived = Event.Event(em)
     self.onVehicleStatisticsUpdate = Event.Event(em)
     self.onVehicleKilled = Event.Event(em)
     self.onVehicleHealthChanged = Event.Event(em)
     self.onVehicleRecovered = Event.Event(em)
     self.onAvatarReady = Event.Event(em)
     self.onTeamBasePointsUpdate = Event.Event(em)
     self.onTeamBasePointsUpdateAlt = Event.Event(em)
     self.onTeamBaseCaptured = Event.Event(em)
     self.onTeamKiller = Event.Event(em)
     self.onCombatEquipmentUsed = Event.Event(em)
     self.onInteractiveStats = Event.Event(em)
     self.onGameModeSpecifcStats = Event.Event(em)
     self.onViewPoints = Event.Event(em)
     self.onFogOfWarEnabled = Event.Event(em)
     self.onFogOfWarHiddenVehiclesSet = Event.Event(em)
     self.onTeamHealthPercentUpdate = Event.Event(em)
     self.onChatCommandTargetUpdate = Event.Event(em)
     self.onChatCommandTriggered = Event.Event(em)
     self.onRadarInfoReceived = Event.Event(em)
     self.arenaUniqueID = arenaUniqueID
     self._vsePlans = makeMultiPlanProvider(ASPECT.CLIENT, CallableProviderType.ARENA, arenaBonusType)
     self.arenaType = ArenaType.g_cache.get(arenaTypeID, None)
     self.bonusType = arenaBonusType
     self.guiType = arenaGuiType
     self.extraData = arenaExtraData
     self.__arenaBBCollider = None
     self.__spaceBBCollider = None
     if spaceID == 0:
         spaceID = self.DEFAULT_ARENA_WORLD_ID
     self.gameSpace = CGF.World(spaceID)
     self.componentSystem = assembler.createComponentSystem(self, self.bonusType, self.arenaType)
     return
    def _destroySystems(self):
        self.__systemStarted = False
        if self.trackScrollController is not None:
            self.trackScrollController.deactivate()
            self.__trackScrollCtl = None
        for modelAnimator in self.__modelAnimators:
            modelAnimator.animator.stop()

        if self.__periodicTimerID is not None:
            BigWorld.cancelCallback(self.__periodicTimerID)
            self.__periodicTimerID = None
        self.__modelAnimators = []
        self.filter.enableLagDetection(False)
        for go in self.undamagedStateChildren:
            CGF.removeGameObject(go)

        self.undamagedStateChildren = []
        return
示例#19
0
    def __onResourcesLoaded(self, buildInd, resourceRefs):
        for prevGo in self.undamagedStateChildren:
            CGF.removeGameObject(prevGo)

        self.undamagedStateChildren = []
        self.removeComponentByType(GenericComponents.HierarchyComponent)
        self.removeComponentByType(GenericComponents.TransformComponent)
        self.createComponent(GenericComponents.HierarchyComponent, self.__vEntity.entityGameObject)
        self.createComponent(GenericComponents.TransformComponent, Math.Vector3(0, 0, 0))
        if not self.__vDesc:
            self.__fireResourcesLoadedEvent()
            return
        elif buildInd != self.__curBuildInd:
            return
        else:
            failedIDs = resourceRefs.failedIDs
            resources = self.__resources
            succesLoaded = True
            for resID, resource in resourceRefs.items():
                if resID not in failedIDs:
                    resources[resID] = resource
                _logger.error('Could not load %s', resID)
                succesLoaded = False

            if self.collisions:
                BigWorld.removeCameraCollider(self.collisions.getColliderID())
            self._modelCollisions = resourceRefs['ModelCollisions']
            hasCrashedCollisions = resourceRefs.has_key('CrashedModelCollisions')
            if hasCrashedCollisions:
                self._crashedModelCollisions = resourceRefs['CrashedModelCollisions']
            if self.__isVehicleDestroyed and hasCrashedCollisions:
                self.collisions = self.createComponent(BigWorld.CollisionComponent, self._crashedModelCollisions)
            else:
                self.collisions = self.createComponent(BigWorld.CollisionComponent, self._modelCollisions)
            if succesLoaded:
                self.__setupModel(buildInd)
            if self.turretRotator is not None:
                self.turretRotator.destroy()
            self.turretRotator = SimpleTurretRotator(self.compoundModel, self.__staticTurretYaw, self.__vDesc.hull.turretPositions[0], self.__vDesc.hull.turretPitches[0], easingCls=math_utils.Easing.squareEasing)
            self.__applyAttachmentsVisibility()
            self.__fireResourcesLoadedEvent()
            super(HangarVehicleAppearance, self).activate()
            return
示例#20
0
 def bindAsTerrainEffect(self, position, spaceId, scale=None, loopCount=1):
     if self.createTerrainEffect(position, scale, loopCount):
         effectHandler = CGF.GameObject(spaceId)
         effectHandler.createComponent(_SequenceAnimatorTimer,
                                       self.__sequenceAnimator,
                                       effectHandler)
         effectHandler.activate()
         effectHandler.transferOwnershipToWorld()
         self.__sequenceAnimator = None
     return
    def __new__(metacls, name, bases, attrs):
        global g_propertyIndex
        messages.append('InitMetaclass {0}'.format(name))
        cls = type.__new__(metacls, name, bases, attrs)
        if name == 'CGFComponent':
            CGF.registerBaseComponent(cls)
            return cls
        elif name == 'Rule':
            return cls
        else:
            meta = []
            allMeta = []
            basePropIndex = 0
            for base in bases:
                baseMeta = getattr(base, '__meta', None)
                if baseMeta is not None:
                    basePropIndex += len(baseMeta)
                    allMeta.extend(baseMeta)

            for key, value in attrs.items():
                if isinstance(value, ComponentProperty):
                    setattr(cls, key, None)
                    value.name = key
                    value.ownerName = name
                    value.applyIndex(basePropIndex)
                    meta.append(value)

            allMeta.extend(meta)
            setattr(cls, '__meta', allMeta)
            category = getattr(cls, 'category', 'Python')
            editorTitle = getattr(cls, 'editorTitle', name)
            modulePath = getattr(cls, 'modulePath', None)
            version = getattr(cls, 'version', 1)
            userVisible = getattr(cls, 'userVisible', True)
            vseVisible = getattr(cls, 'vseVisible', True)
            if modulePath is None:
                modulePath = sys.modules[
                    cls.
                    __module__].__file__ if cls.__module__ != '__builtin__' else '__builtin__'
            CGF.registerComponent(cls, modulePath, name, editorTitle,
                                  userVisible, vseVisible, category, version)
            g_propertyIndex = 0
            return cls
    def loadPostEffect(cls, postEffectTarget):
        if postEffectTarget is None or not postEffectTarget.isValid():
            _logger.warning(
                'postEffectTarget is not provided in HealthRestoreAbility Component'
            )
            return
        else:

            def postloadSetup(postEffectGO):
                postEffectGO.createComponent(
                    AdaptationHealthRestoreEffectArea,
                    teamMateRestoringRadius=cls.getEquipment(
                    ).teamMateRestoringRadius)

            transformComponent = postEffectTarget.findComponentByType(
                GenericComponents.TransformComponent)
            CGF.loadGameObject(cls.getEquipment().posteffectPrefab,
                               postEffectTarget.spaceID,
                               transformComponent.worldPosition, postloadSetup)
            return
class TestTriggersManager(CGF.ComponentManager):
    whileInTrigger = CGF.QueryConfig(TestRotateWhileInTrigger,
                                     Triggers.AreaTriggerComponent,
                                     TestScriptAxisRotator)

    @tickGroup('Simulation')
    def tick(self):
        for config, trigger, rotator in self.whileInTrigger:
            if trigger.objectsInProximity:
                rotator.rotationSpeedYaw = config.rotationSpeed
            rotator.rotationSpeedYaw = 0.0
 def _onLoaded(gameObject):
     import Vehicle
     h = CGF.HierarchyManager(self.spaceID)
     vehicleGo = h.getTopMostParent(who)
     vehicle = vehicleGo.findComponentByType(Vehicle.Vehicle)
     appearance = vehicle.appearance
     appearance.undamagedStateChildren.append(gameObject)
     gameObject.createComponent(
         GenericComponents.RedirectorComponent, who)
     gameObject.createComponent(
         GenericComponents.DynamicModelComponent, vehicle.model)
示例#25
0
 def __createMarkerArea(self, config, equipmentDescr):
     markerArea = CGF.GameObject(self.__spaceID)
     effect3D = self.__getEffect(config.getBotDeliveryMarker())
     if effect3D is not None:
         effectPath = effect3D.path
         markerTerrainPosition = self.__deliveryPosition - equipmentDescr.botSpawnPointOffset
         BigWorld.loadResourceListBG((AnimationSequence.Loader(effectPath, self.__spaceID),), makeCallbackWeak(self.__on3dEffectLoaded, equipmentDescr, effectPath, markerTerrainPosition))
         return markerArea
     else:
         _logger.error('Marker Effect is not defined!')
         return
示例#26
0
    def reset(self, recreate=True):
        for descriptorName in self.__touchedDescriptors:
            setattr(self, descriptorName, None)

        spaceID = self._nativeSystem.spaceID
        self._components = []
        self._nativeSystem.destroy()
        if recreate:
            self._nativeSystem = CGF.GameObject(spaceID)
        else:
            self._nativeSystem = None
        return
 def __componentCreationEnter(self, creator, who, where):
     _logger.debug('TestComponentCreation. Trigger entered')
     if where.findComponentByType(TestScriptAxisRotator) is not None:
         return
     else:
         rotator = where.createComponent(TestScriptAxisRotator)
         rotator.rotationSpeedYaw = creator.rotationSpeed
         rotator.rotationSpeedPitch = 0
         rotator.rotationSpeedRoll = creator.rotationSpeed
         rotator.transform = CGF.ComponentLink(
             where, GenericComponents.TransformComponent)
         return
 def getPartGameObject(self, partName, spaceID, parentGO):
     go = self.__gameObjects.get(partName)
     if go is None or not go.isValid():
         go = CGF.GameObject(spaceID)
         go.activate()
         go.createComponent(GenericComponents.HierarchyComponent, parentGO)
         go.createComponent(GenericComponents.NodeFollower, partName,
                            parentGO)
         go.createComponent(GenericComponents.TransformComponent,
                            Math.Vector3(0, 0, 0))
         self.__gameObjects[partName] = go
     return go
示例#29
0
 def __onDeliverEffectLoaded(self, effectP, position, resourceRefs):
     if effectP in resourceRefs.failedIDs:
         _logger.error('Effect %s has not been loaded!', effectP)
         return
     effectAnimation = CGF.GameObject(self.__spaceID)
     sequenceComponent = effectAnimation.createComponent(SequenceComponent, resourceRefs[effectP])
     correctedPosition = position + Math.Vector3(0, self.ALTITUDE_CORRECTING, 0)
     sequenceComponent.createTerrainEffect(correctedPosition, loopCount=1, rotation=(self.__yawAxis, 0, 0))
     effectAnimation.activate()
     self.__deliveryEffect = effectAnimation
     timeToSpawn = self.__deliveryTime - BigWorld.serverTime()
     self.delayCallback(timeToSpawn + self.END_ANIMATION_TIME_CORRECTING, self.__removeDeliveryEffect)
    def __multipositionSpawn(self, go, multivisualizer, influenceZone,
                             equipment, radius):
        for zonePosition in influenceZone.zonesPosition:
            localPosition = zonePosition - influenceZone.position
            if multivisualizer.rotateFromCenter:
                transform = math_utils.createRTMatrix(
                    (localPosition.yaw, 0, 0), localPosition)
            else:
                transform = math_utils.createTranslationMatrix(localPosition)

            def postloadSetup(go):
                areaVisualizer = go.findComponentByType(AreaAbilityVisualizer)
                if areaVisualizer is not None:
                    areaVisualizer.radius = equipment.zoneRadius
                eqComponent = go.createComponent(
                    InfluenceZoneEquipmentComponent)
                eqComponent.setupEquipment(equipment)
                return

            CGF.loadGameObjectIntoHierarchy(multivisualizer.influencePrefab,
                                            go, transform, postloadSetup)