def ShowDamageLocators(itemID):
    ball = sm.StartService('michelle').GetBallpark().GetBall(itemID)
    ship = ball.model
    if not ship:
        return
    if getattr(ball, 'visualizingDamageLocators', False):
        toRemove = []
        for child in ship.children:
            if child.name == 'DamageLocatorVisualization':
                toRemove.append(child)
            elif child.name == 'ImpactDirectionVisualization':
                toRemove.append(child)

        for tr in toRemove:
            ship.children.remove(tr)

        setattr(ball, 'visualizingDamageLocators', False)
    else:
        scale = ship.boundingSphereRadius / 10
        for i in range(len(ship.damageLocators)):
            damageLocator = ship.damageLocators[i]
            sphere = trinity.Load('res:/model/global/damageLocator.red')
            sphere.translation = damageLocator[0]
            sphere.scaling = [scale, scale, scale]
            ship.children.append(sphere)
            impacDir = damageLocator[1]
            direction = trinity.Load('res:/model/global/impactDirection.red')
            direction.translation = damageLocator[0]
            direction.scaling = [scale, scale, scale]
            direction.rotation = impacDir
            ship.children.append(direction)

        setattr(ball, 'visualizingDamageLocators', True)
Example #2
0
def CreateBackgroundLandscape(scene, medDetailThreshold = 0.0001, lowDetailThreshold = 0.0001, shaderModel = 'SM_3_0_DEPTH'):
    m10 = trinity.Load('res:/dx9/scene/universe/m10_cube.red')
    scene.backgroundEffect = m10.backgroundEffect
    scene.envMapResPath = m10.envMapResPath
    scene.envMap1ResPath = m10.envMap1ResPath
    scene.envMap2ResPath = m10.envMap2ResPath
    scene.envMap3ResPath = m10.envMap3ResPath
    scene.backgroundEffect = scene.backgroundEffect
    scene.sunDiffuseColor = (1.5, 1.5, 1.5, 1.0)
    trinity.settings.SetValue('eveSpaceSceneVisibilityThreshold', 3.0)
    trinity.settings.SetValue('eveSpaceSceneMediumDetailThreshold', medDetailThreshold)
    trinity.settings.SetValue('eveSpaceSceneLowDetailThreshold', lowDetailThreshold)
    trinity.SetShaderModel(shaderModel)
    scene.starfield = trinity.Load('res:/dx9/scene/starfield/spritestars.red')
    scene.starfield.minDist = 40
    scene.starfield.maxDist = 80
    scene.starfield.numStars = 500
    universe = [ stars for stars in scene.backgroundObjects if stars.name == 'Neighboring Stars' ]
    if not universe:
        universe = trinity.Load('res:/dx9/scene/starfield/universe.red')
        scene.backgroundObjects.append(universe)
        systemX = -20474870.72500089
        systemY = 4023837.993657142
        systemZ = 5762127.890242104
        universe.children[0].translation = (systemX, systemY, systemZ)
    scene.backgroundRenderingEnabled = True
    if jessica:
        CreateFisRenderJob(scene)
Example #3
0
 def LoadModel(self):
     graphicFile = self.typeData.get('graphicFile', None)
     baseName = graphicFile.split('/')[-1]
     self.godRaysLoaded = False
     if self.useGodRays and gfxsettings.Get(gfxsettings.UI_GODRAYS):
         graphicFile = graphicFile.replace('.red', '_godrays.red')
         self.godRaysLoaded = True
     self.lensflare = trinity.Load(graphicFile)
     scene = self.spaceMgr.GetScene()
     scene.sunBall = self
     sunModelFile = 'res:/dx9/Model/WorldObject/Sun/' + baseName
     self.sunmodel = trinity.Load(sunModelFile)
     self.model = trinity.EvePlanet()
     self.model.translationCurve = self
     self.model.rotationCurve = self
     self.model.name = '%d' % self.id
     self.model.ready = True
     self.sunmodel.name = self.model.name
     self.model.highDetail = self.sunmodel
     self.model.resourceCallback = self.ResourceCallback
     if self.model is not None:
         scene.planets.append(self.model)
     if self.lensflare is not None:
         self.lensflare.translationCurve = self
         scene.lensflares.append(self.lensflare)
     self.SetupAmbientAudio()
     if self._audioEntity:
         self._audioEntity.SetAttenuationScalingFactor(100.0)
Example #4
0
 def PrepareBackgroundLandscapes(self, scene):
     starSeed = 0
     securityStatus = 1
     if eve.session.stationid is not None:
         return
     if scene is None:
         return
     if bool(eve.session.solarsystemid2):
         starSeed = int(eve.session.constellationid)
         securityStatus = sm.StartService('map').GetSecurityStatus(
             eve.session.solarsystemid)
     scene.starfield = trinity.Load(
         'res:/dx9/scene/starfield/spritestars.red')
     if scene.starfield is not None:
         scene.starfield.seed = starSeed
         scene.starfield.minDist = 40
         scene.starfield.maxDist = 80
         if util.IsWormholeSystem(eve.session.solarsystemid):
             scene.starfield.numStars = 0
         else:
             scene.starfield.numStars = 500 + int(250 * securityStatus)
     if scene.backgroundEffect is None:
         scene.backgroundEffect = trinity.Load(
             'res:/dx9/scene/starfield/starfieldNebula.red')
         node = nodemanager.FindNode(scene.backgroundEffect.resources,
                                     'NebulaMap',
                                     'trinity.TriTexture2DParameter')
         if node is not None:
             node.resourcePath = scene.envMap1ResPath
     if scene.starfield is None or scene.backgroundEffect is None:
         return
     scene.backgroundRenderingEnabled = True
Example #5
0
 def ShowCursor(self):
     scene = sm.GetService('sceneManager').GetRegisteredScene('default')
     if scene is None:
         return
     self.cursor = trinity.Load('res:/Model/UI/posCursor.red')
     self.cube = trinity.Load('res:/Model/UI/posGlassCube.red')
     s = float(boxSizes[7 - self.boxSize])
     blue.pyos.synchro.SleepWallclock(1)
     self.yCursor = [self.cursor.children[0], self.cursor.children[1]]
     self.xCursor = [self.cursor.children[4], self.cursor.children[5]]
     self.zCursor = [self.cursor.children[2], self.cursor.children[3]]
     self.cube.scaling = (s, s, s)
     newScale = s * 0.075 * 0.25
     self.cursor.scaling = (newScale, newScale, newScale)
     self.cursor.useDistanceBasedScale = True
     self.cursor.distanceBasedScaleArg1 = 0.00015
     self.cursor.distanceBasedScaleArg2 = 0
     bp = sm.GetService('michelle').GetBallpark()
     ball = bp.GetBall(self.posID)
     pos = ball.GetVectorAt(blue.os.GetSimTime())
     self.cursor.translation = (pos.x, pos.y, pos.z)
     scene.objects.append(self.cursor)
     scene.objects.append(self.cube)
     self.Update()
     self.active = 1
    def Prepare(self, addToScene=True):
        shipBall = self.GetEffectShipBall()
        self.isShortWarp = self._IsShortWarp(shipBall)
        if self.isShortWarp:
            return
        model = getattr(shipBall, 'model', None)
        if model is None:
            return
        self.startPos = shipBall.GetVectorAt(blue.os.GetSimTime())
        self.startPos = (self.startPos.x, self.startPos.y, self.startPos.z)
        self.lastPos = self.startPos

        def _sizeFunction(x):
            return 0.0039 * x + 2.5

        r = _sizeFunction(model.boundingSphereRadius)
        self.gfx_trace = trinity.Load('res:/fisfx/jump/warp/warp_out.red')
        self.gfxModel_trace = trinity.EveRootTransform()
        self.gfxModel_trace.children.append(self.gfx_trace)
        self.gfxModel_trace.scaling = (r, r, 8)
        self.gfx_ship = trinity.Load('res:/fisfx/jump/warp/warp_glow.red')
        self.gfxModel_ship = trinity.EveRootTransform()
        self.gfxModel_ship.children.append(self.gfx_ship)
        r *= 0.5
        self.gfxModel_ship.scaling = (r, r, 6)
        self.soundInsert = 'frig'
        if model.boundingSphereRadius > 350:
            self.soundInsert = 'battle'
        self.gfx = self.gfx_trace
        self.AddSoundToEffect(0.0007)
Example #7
0
 def SetModel(self, scale):
     graphic = cfg.invtypes.Get(self.pinKv.typeID).Graphic()
     self.model = None
     if graphic and graphic.graphicFile:
         graphicFile = str(graphic.graphicFile)
         graphicFile = graphicFile.replace(':/model',
                                           ':/dx9/model').replace(
                                               '.blue', '.red')
         self.model = trinity.Load(graphicFile)
     if not self.model or self.model.__bluetype__ != 'trinity.EveTransform':
         self.model = trinity.Load(
             'res:/dx9/model/worldobject/Orbital/UI/Terrestrial/Command/CommT_T1/CommT_T1.red'
         )
     if not self.model:
         return
     EXT = 1.026
     self.model.scaling = (scale, scale, scale)
     self.model.sortValueMultiplier = 0.5
     self.model.translation = (EXT * self.surfacePoint.x,
                               EXT * self.surfacePoint.y,
                               EXT * self.surfacePoint.z)
     plnSurfRotMat = geo2.MatrixRotationAxis(
         geo2.Vec3Cross(
             geo2.Vec3Normalize(self.surfacePoint.GetAsXYZTuple()),
             (0.0, 1.0, 0.0)), -math.acos(
                 geo2.Vec3Dot(
                     geo2.Vec3Normalize(self.surfacePoint.GetAsXYZTuple()),
                     (0.0, 1.0, 0.0))))
     rotQuat = geo2.QuaternionRotationMatrix(plnSurfRotMat)
     self.model.rotation = rotQuat
     self.model.name = '%s,%s' % (planetCommon.PINTYPE_NORMAL,
                                  self.pinKv.id)
     self.transform.children.append(self.model)
Example #8
0
    def Prepare(self, addToScene=True):
        shipBall = self.GetEffectShipBall()
        if WarpFlashIn._bigGlows < 5:
            gfx = trinity.Load('res:/fisfx/jump/warp/warp_in_glow.red')
            WarpFlashIn._bigGlows += 1
            self.useBigGlow = True
        else:
            gfx = trinity.Load('res:/fisfx/jump/warp/warp_in_noglow.red')
            self.useBigGlow = False
        if gfx is None:
            return
        self.gfx = gfx
        model = getattr(shipBall, 'model', None)
        if model is None:
            return
        s = 0.7778 * model.GetBoundingSphereRadius()**0.3534
        self.gfx.scaling = (s, s, s)
        self.gfx_ship = trinity.Load('res:/fisfx/jump/warp/warp_glow.red')

        def _glowScale(x):
            return 9e-08 * x * x + 0.005 * x + 0.6898

        self.gfxModel_ship = trinity.EveRootTransform()
        self.gfxModel_ship.children.append(self.gfx_ship)
        r = 0.125 * _glowScale(model.boundingSphereRadius)
        self.gfxModel_ship.scaling = (r, r, r * 3)
        self.soundEvent = 'warp_in_frig_play'
        if model.GetBoundingSphereRadius() > 350:
            self.soundEvent = 'warp_in_battle_play'
        self.AddSoundToEffect(0.001)
Example #9
0
 def __init__(self):
     self.rootPersistenceKey = (self, 'rootTransform')
     self.rootCurve = OffsetPositionFunction(None)
     self.sceneManager = sm.GetService('sceneManager')
     self.rootTransform = trinity.EveRootTransform()
     self.rootTransform.translationCurve = self.rootCurve.GetBlueFunction()
     self.sceneManager.RegisterPersistentSpaceObject(self.rootPersistenceKey, self.rootTransform)
     self.rootTransform.name = 'TacticalOverlayMain'
     self.connectorPersistenceKey = (self, 'connectorContainer')
     self.connectorContainer = trinity.Load('res:/ui/inflight/tactical/tacticalOverlay.red')
     self.connectorContainer.translationCurve = self.rootCurve.GetBlueFunction()
     self.sceneManager.RegisterPersistentSpaceObject(self.connectorPersistenceKey, self.connectorContainer)
     self.anchorDiffuse = self.connectorContainer.anchorEffect.parameters.FindByName('DiffuseColor')
     self.bombSphere = trinity.Load(_RANGE_SPHERE_PATH)
     self.bombSpherePersistanceKey = (self, 'bombSphere')
     self.sceneManager.RegisterPersistentSpaceObject(self.bombSpherePersistanceKey, self.bombSphere)
     self.bombRangeAnchorConnector = None
     self.firingRangePersistenceKey = (self, 'firingRange')
     self.firingRangeRoot = trinity.EveRootTransform()
     self.firingRangeRoot.name = 'TacticalOverlayRangeSphere'
     self.sceneManager.RegisterPersistentSpaceObject(self.firingRangePersistenceKey, self.firingRangeRoot)
     self.darkDiscPersistenceKey = (self, 'darkDisc')
     self.darkDiscContainer = trinity.EveRootTransform()
     self.darkDiscContainer.name = 'TacticalOverlayDarkDisc'
     self.sceneManager.RegisterPersistentSpaceObject(self.darkDiscPersistenceKey, self.darkDiscContainer)
     self.connectors = {}
     self.selection = None
     self.targetingRange = None
     self.optimalRange = None
     self.falloffRange = None
     self.baseRadius = 0.0
     self.compassDisc = CompassDisc(self.rootTransform, self.firingRangeRoot, self.darkDiscContainer)
Example #10
0
 def LoadScene(self, sceneContainer):
     sceneContainer.PrepareSpaceScene(maxPitch=0.0,
                                      scenePath=self.scenePath)
     model = trinity.Load(
         'res:/dx9/model/ship/IconPreview/PreviewAmmoShip.red')
     sceneContainer.AddToScene(model)
     ammoRedFile = inventorycommon.typeHelpers.GetGraphicFile(self.typeID)
     ammoRedFile = ammoRedFile[:-4] + '_hi' + ammoRedFile[-4:]
     ammo = trinity.Load(ammoRedFile)
     if ammo.__bluetype__ != 'trinity.EveMissile':
         raise InvalidPreviewType(
             '{%s (%s) is not a trinity.EveMissile' %
             (evetypes.GetName(self.typeID), self.typeID))
     warhead = ammo.warheads[0]
     floatHeight = ammo.boundingSphereRadius - ammo.boundingSphereCenter[2]
     floatHeight += 0.2 * ammo.boundingSphereRadius
     warhead.translation = (0.0, floatHeight, 0.0)
     warhead.rotation = geo2.QuaternionRotationAxis((1.0, 0.0, 0.0),
                                                    -0.5 * math.pi)
     warhead.startDataValid = True
     model.children.append(warhead)
     del warhead.children[:]
     reflection = warhead.CopyTo()
     reflection.translation = (0.0, -floatHeight, 0.0)
     reflection.rotation = geo2.QuaternionRotationAxis((1.0, 0.0, 0.0),
                                                       0.5 * math.pi)
     reflection.startDataValid = True
     model.children.append(reflection)
     boundingCenterY = ammo.boundingSphereRadius + 0.5 * floatHeight
     model.boundingSphereCenter = (0.0, boundingCenterY, 0.0)
     model.boundingSphereRadius = ammo.boundingSphereRadius + floatHeight
     SetupSpaceCamera(sceneContainer, model)
Example #11
0
 def __init__(self, scene=None):
     self._connectorContainer = trinity.Load(self._CONNECTOR_CONTAINER_PATH)
     self._freeformLineSet = trinity.Load(self._FREEFORM_LINESET_PATH)
     if scene is not None:
         scene.objects.append(self._connectorContainer)
         scene.objects.append(self._freeformLineSet)
     else:
         sm.GetService('sceneManager').RegisterPersistentSpaceObject(
             (LineController, 0), self._connectorContainer)
         sm.GetService('sceneManager').RegisterPersistentSpaceObject(
             (LineController, 1), self._freeformLineSet)
Example #12
0
 def Explode(self,
             explosionURL=None,
             scaling=1.0,
             managed=False,
             delay=0.0):
     self.LogInfo('Exploding')
     if self.exploded:
         return False
     sm.ScatterEvent('OnObjectExplode', self.GetModel())
     self.exploded = True
     delayedRemove = delay
     if settings.user.ui.Get('explosionEffectsEnabled', 1):
         gfx = None
         if managed:
             gfx = self.explosionManager.GetExplosion(
                 explosionURL, callback=self.ClearExplosion)
         else:
             if explosionURL is None:
                 self.LogError(
                     'explosionURL not set when calling Explode. Possibly wrongly authored content. typeID:',
                     self.typeID)
                 explosionURL, (delay, scaling) = self.GetExplosionInfo()
             explosionURL = explosionURL.replace('.blue', '.red').replace(
                 '/Effect/', '/Effect3/')
             gfx = trinity.Load(explosionURL)
             if not gfx:
                 self.LogError('Failed to load explosion: ', explosionURL,
                               ' - using default')
                 gfx = trinity.Load(
                     'res:/Model/Effect/Explosion/entityExplode_large.red')
             if gfx.__bluetype__ == 'trinity.EveEffectRoot':
                 self.LogWarn(
                     'EveEffectRoot explosion not managed for %s. ExplosionManager circumvented.'
                     % explosionURL)
                 gfx.Start()
             elif gfx.__bluetype__ != 'trinity.EveRootTransform':
                 root = trinity.EveRootTransform()
                 root.children.append(gfx)
                 root.name = explosionURL
                 gfx = root
         gfx.translationCurve = self
         self.explosionModel = gfx
         scale = scaling
         gfx.scaling = (gfx.scaling[0] * scale, gfx.scaling[1] * scale,
                        gfx.scaling[2] * scale)
         scene = sm.StartService('sceneManager').GetRegisteredScene(
             'default')
         scene.objects.append(gfx)
     if self.wreckID is not None:
         wreckBall = sm.StartService('michelle').GetBall(self.wreckID)
         if wreckBall is not None:
             uthread.pool('Wreck::DisplayWreck', wreckBall.DisplayWreck,
                          500)
     return delayedRemove
Example #13
0
    def GetPlanetScene(self):
        scenepath = sm.GetService('sceneManager').GetScene()
        scene = trinity.Load(scenepath)
        scene.backgroundEffect = trinity.Load(
            'res:/dx9/scene/starfield/starfieldNebula.red')
        if scene.backgroundEffect is not None:
            for node in scene.backgroundEffect.resources.Find(
                    'trinity.TriTextureParameter'):
                if node.name == 'NebulaMap':
                    node.resourcePath = scene.envMap1ResPath

        scene.backgroundRenderingEnabled = True
        return scene
Example #14
0
    def LoadScene(self):
        self.camera = trinity.Load('res:/dx9/scene/login_screen_camera.red')
        self.scene = trinity.Load('res:/dx9/scene/login_screen.red')
        blue.resMan.Wait()
        self.CheckHeightMaps()
        stations = self.scene.Find('trinity.EveStation2')
        for station in stations:
            station.PlayAnimationEx('NormalLoop', 0, 0, 0.2)

        self.camera.audio2Listener = audio2.GetListener(0)
        sm.GetService('sceneManager').SetActiveCamera(self.camera)
        sm.GetService('sceneManager').SetActiveScene(self.scene)
        audioService = sm.GetService('audio')
        audioService.UpdateDynamicMusic()
        self.sceneLoadedEvent.set()
        blue.pyos.synchro.Yield()
Example #15
0
 def PrepareComponent(self, sceneID, entityID, component):
     if component.redFile == '':
         return
     if not sm.GetService('device').GetAppFeatureState(
             'Interior.LensflaresEnabled', True):
         return
     component.trinityObject = trinity.Load(component.redFile)
Example #16
0
    def EnableResourceLayer(self):
        if self.planetTransform is not None:
            if self.resourceLayer is None:
                self.LogInfo(
                    '_ShowResource no resourceLayer found. Loading resource layer'
                )
                self.resourceLayer = trinity.Load(
                    'res:/dx9/model/worldobject/planet/uiplanet.red')
                trinity.WaitForResourceLoads()
                effect = self.resourceLayer.mesh.transparentAreas[0].effect
                for resource in effect.resources:
                    if resource.name == 'ColorRampMap':
                        resource.resourcePath = 'res:/dx9/model/worldobject/planet/resource_colorramp.dds'

                for param in effect.parameters:
                    if param.name == 'MainColor':
                        param.value = RESOURCE_BASE_COLOR
                    elif param.name == 'ResourceTextureInfo':
                        param.value = (PLANET_RESOURCE_TEX_WIDTH,
                                       PLANET_RESOURCE_TEX_HEIGHT, 0, 0)

                offset = trinity.Tr2FloatParameter()
                offset.name = 'HeatOffset'
                offset.value = 0.0
                effect.parameters.append(offset)
                stretch = trinity.Tr2FloatParameter()
                stretch.name = 'HeatStretch'
                stretch.value = 1.0
                effect.parameters.append(stretch)
                self.planetTransform.children.append(self.resourceLayer)
            else:
                self.resourceLayer.display = True
            low, hi = settings.char.ui.Get('planet_resource_display_range',
                                           (0.0, 1.0))
            self.SetResourceDisplayRange(low, hi)
Example #17
0
    def LoadScene(self, sceneContainer):
        sceneContainer.PrepareSpaceScene(maxPitch=0.0,
                                         scenePath=self.scenePath)
        model = trinity.Load(
            'res:/dx9/model/ship/IconPreview/PreviewTurretShip.red')
        turretSet = TurretSet.FitTurret(model=model,
                                        parentTypeID=None,
                                        turretTypeID=self.typeID,
                                        locatorID=1,
                                        checkSettings=False)
        if turretSet is None:
            typeInfo = cfg.invtypes.Get(self.typeID)
            raise RuntimeError(
                'Failed to load preview for {0.name} ({0.typeID})'.format(
                    typeInfo))
        boundingSphere = turretSet.turretSets[0].boundingSphere
        model.boundingSphereRadius = boundingSphere[3]
        model.boundingSphereCenter = boundingSphere[:3]
        if model.boundingSphereCenter[1] < 2.0:
            model.boundingSphereCenter = (boundingSphere[0], 2.0,
                                          boundingSphere[2])
        for turret in turretSet.turretSets:
            turret.bottomClipHeight = 0.0
            turret.FreezeHighDetailLOD()
            turret.ForceStateDeactive()
            turret.EnterStateIdle()

        sceneContainer.AddToScene(model)
        SetupSpaceCamera(sceneContainer, model)
Example #18
0
 def LoadScene(self, sceneContainer):
     sceneContainer.PrepareSpaceScene(scenePath=self.scenePath)
     typeInfo = cfg.invtypes.Get(self.typeID)
     resFile = typeInfo.GraphicFile()
     if typeInfo.categoryID == invconst.categoryStation and self.itemID:
         stations = cfg.mapSolarSystemContentCache.npcStations
         npcStation = stations.get(self.itemID, None)
         if npcStation:
             graphicID = npcStation.graphicID
             resFile = cfg.graphics.Get(graphicID).graphicFile
     modelDNA = gfxutils.BuildSOFDNAFromTypeID(self.typeID)
     if modelDNA is not None:
         spaceObjectFactory = sm.GetService('sofService').spaceObjectFactory
         model = spaceObjectFactory.BuildFromDNA(modelDNA)
     else:
         model = trinity.Load(resFile)
     if model is None:
         raise InvalidPreviewType(
             '{0.name} ({0.typeID}) failed to load associated model'.format(
                 typeInfo))
     if getattr(model, 'boosters', None) is not None:
         model.boosters = None
     if getattr(model, 'modelRotationCurve', None) is not None:
         model.modelRotationCurve = None
     if getattr(model, 'modelTranslationCurve', None) is not None:
         model.modelTranslationCurve = None
     SetupAnimations(model, self.typeID)
     sceneContainer.AddToScene(model)
     SetupSpaceCamera(sceneContainer, model)
Example #19
0
    def AddDistrict(self, uniqueName, centerNormal, size, enableBattle):
        if uniqueName in self.districts:
            self.LogError('District ' + str(uniqueName) +
                          ' already exists for planet with id ' +
                          str(self.itemID))
            return
        randomDistrictNum = len(self.districts) % 10 + 1
        randomDistrictResPath = 'res:/dx9/model/worldobject/Planet/Terrestrial/district/District%02d.red' % randomDistrictNum
        newDistrict = trinity.Load(randomDistrictResPath)
        if newDistrict is None:
            self.LogError('District ' + str(randomDistrictResPath) +
                          ' not found for planet with id ' + str(self.itemID))
            return
        newDistrict.name = uniqueName
        newDistrict.centerNormal = centerNormal
        for param in newDistrict.pinEffect.parameters:
            if param.name == 'AnimatedFactors2':
                param.value = (param.value[0], float(enableBattle),
                               random.random(), param.value[3])
                break

        newDistrict.pinRadius = PLANET_DISTRICT_RADIUS_RATIO * size / self.radius
        newDistrict.pinMaxRadius = PLANET_DISTRICT_RADIUS_RATIO * size / self.radius
        newDistrict.pinRotation = 0.0
        self.districts[uniqueName] = newDistrict
        self.districtContainer.children.append(newDistrict)
        self.districtsInfo[uniqueName] = {'num': randomDistrictNum}
        self.__ApplyPlanetAttributesToDistricts()
Example #20
0
    def __init__(self, rootTransform):
        self.rootTransform = rootTransform
        self.baseTile = trinity.Load('res:/dx9/model/UI/HexTile.red')
        self.tilePool = []
        self.layoutCache = {}
        self.systemInfoMap = {}
        minx, miny, maxx, maxy = (0, 0, 0, 0)
        self.aabb = AABB()
        map = sm.GetService('map')
        systems = []
        self.mapHeight = 0.0
        for systemID in map.IterateSolarSystemIDs():
            item = map.GetItem(systemID)
            x, y = item.x * STARMAP_SCALE, item.z * STARMAP_SCALE
            systemInfo = HexSystemInfo(systemID, item.factionID, x, y)
            self.systemInfoMap[systemID] = systemInfo
            systems.append(systemInfo)
            self.aabb.IncludePoint(systemInfo.point)
            self.mapHeight = max(self.mapHeight, item.y * STARMAP_SCALE)

        self.systemQuadTree = QuadTree(systems, depth=6, aabb=self.aabb)
        self.centerPoint = self.systemQuadTree.center
        self.mapHeight *= 1.1
        self.legend = []
        self.CalculateHexagonParameters()
        self.nextTileNum = 0
        self.firstUnusedTileNum = None
        self.SetupScene()
Example #21
0
 def AddExplosion(self, uniqueName, explosionGfxID, spreadOut):
     if uniqueName not in self.districts:
         self.logger.error('Could not find district %s for planet with id %s', str(uniqueName), str(self.itemID))
     graphics = GetGraphic(explosionGfxID)
     if graphics is None:
         self.logger.error("Explosion graphicsID %s doesn't exist!", str(explosionGfxID))
         return
     fx = trinity.Load(graphics.graphicFile)
     if fx is None:
         self.logger.error("Explosion %s doesn't exist!", str(graphics.graphicFile))
         return
     if len(fx.curveSets) == 0:
         self.logger.error('Explosion %s has no curveSets! This is useless...', str(graphics.graphicFile))
         return
     direction = self.districts[uniqueName].centerNormal
     rotMatrix1 = geo2.MatrixRotationAxis((direction[1], direction[2], direction[0]), random.random() * spreadOut * self.districts[uniqueName].pinRadius)
     rotMatrix2 = geo2.MatrixRotationAxis(direction, random.uniform(0, 2.0 * math.pi))
     direction = geo2.Vec3TransformNormal(direction, rotMatrix1)
     direction = geo2.Vec3TransformNormal(direction, rotMatrix2)
     fx.translation = direction
     fx.scaling = (5000.0 / PLANET_SIZE_SCALE, 5000.0 / PLANET_SIZE_SCALE, 5000.0 / PLANET_SIZE_SCALE)
     v1 = geo2.Vec3Cross(geo2.Vec3Normalize(direction), (0.0, 1.0, 0.0))
     alpha = -math.acos(geo2.Vec3Dot(geo2.Vec3Normalize(direction), (0.0, 1.0, 0.0)))
     fx.rotation = geo2.QuaternionRotationAxis(v1, alpha)
     duration = fx.curveSets[0].GetMaxCurveDuration()
     self.districtExplosions.children.append(fx)
     uthread.new(self._RemoveExplosionFromDistrict, fx, duration)
    def SetupStubble(meshes, name, stubblePath, adding = True):
        ret = []
        stubbleName = '{0}Stubble'.format(name)
        stubbleMeshes = (mesh for mesh in meshes if mesh.name.startswith(pdDef.DOLL_PARTS.HEAD))
        for mesh in stubbleMeshes:
            if adding:
                if any(map(lambda x: 'stubble' in x.name.lower(), mesh.decalAreas)):
                    ret.append(mesh)
                    continue
                c_skin_areas = (area for area in mesh.opaqueAreas if area.effect.name.lower().startswith('c_skin_'))
                for area in c_skin_areas:
                    stubbleArea = trinity.Tr2MeshArea()
                    stubbleArea.name = stubbleName
                    stubbleArea.index = area.index
                    stubbleArea.count = area.count
                    stubbleArea.effect = trinity.Load(stubblePath)
                    for resource in stubbleArea.effect.resources:
                        if resource.name == 'LengthTexture':
                            while resource.resource.IsLoading():
                                pdCf.Yield()

                    mesh.decalAreas.append(stubbleArea)
                    ret.append(mesh)
                    if SkinSpotLightShadows.instance:
                        SkinSpotLightShadows.instance.CreateEffectParamsForMesh(mesh, False)
                    for instance in SkinLightmapRenderer.instances:
                        if instance():
                            instance().BindLightmapShader(mesh)

            else:
                targetAreasToRemove = [ area for area in mesh.decalAreas if area.name == stubbleName ]
                for ta in targetAreasToRemove:
                    mesh.decalAreas.remove(ta)

        return ret
Example #23
0
    def Explode(self):
        if self.exploded:
            return False
        self.fadeCurve = trinity.Load(
            'res:/dx9/model/shipwrecks/FadeCurve.red')
        self.model.curveSets.append(self.fadeCurve)
        if self.model.mesh:
            for area in self.model.mesh.opaqueAreas:
                for par in area.effect.parameters:
                    if par.name == 'AlphaThreshold':
                        newBinding = self.fadeCurve.bindings[0].CopyTo()
                        newBinding.destinationObject = par
                        newBinding.sourceObject = self.fadeCurve.curves[0]
                        self.fadeCurve.bindings.append(newBinding)

        self.fadeCurve.curves[0].Sort()
        self.exploded = True
        if self.model is None:
            return False
        curves = self.model.Find('trinity.TriColorCurve')
        timecurves.ReverseTimeCurvesF(curves)
        curves.extend(self.model.Find('audio.SoundNode'))
        timecurves.ResetTimeAndSoundCurves(curves)
        self.fadeCurve.Play()
        blue.pyos.synchro.SleepSim(10000)
        return False
    def RenderNormalAssets(self, bloodlineID, camera, character, genderID,
                           scene, tryout):
        doll = character.doll
        for category in self.assetCategoriesToRender:
            typeData = self.characterSvc.GetAvailableTypesByCategory(
                category, genderID, bloodlineID)
            lightScene = trinity.Load(NORMAL_LIGHT_COLOR)
            ccUtil.SetupLighting(scene, lightScene, lightScene)
            cameraSetup = self.SetUpCamera(camera, category, character, SETUP,
                                           scene, genderID)
            log.LogNotice('before dresscode')
            if category in DRESSCODE:
                removeDcModifers = self.EnforceDresscode(
                    bloodlineID, category, doll, genderID)
            else:
                removeDcModifers = []
            log.LogNotice('go render type')
            for itemType in typeData:
                wasRendered = self.RenderNormalType(bloodlineID, camera,
                                                    category, character,
                                                    genderID, itemType, scene)
                if tryout and wasRendered:
                    break

            log.LogNotice('remove the dresscode')
            for dcResPath in removeDcModifers:
                doll.RemoveResource(dcResPath, self.factory)

            log.LogNotice('done with category')
Example #25
0
    def _RenderLoop(self, tryout = False, fromWebtools = False):
        self.FindWhatToRender()
        self.characterSvc.characters = {}
        self.characterSvc.TearDown()
        uicore.layer.charactercreation.OpenView()
        uicore.layer.charactercreation.Flush()
        for layerName, layer in uicore.layer.__dict__.iteritems():
            if isinstance(layer, LayerCore):
                layer.display = False

        renderSize = self.sizeCombo.GetValue()
        uicore.device.ForceSize(renderSize, renderSize)
        sm.GetService('sceneManager').SetSceneType(0)
        uicore.layer.charactercreation.SetupScene(ccConst.SCENE_PATH_CUSTOMIZATION)
        self.resolution = self.resolutionCombo.GetValue()
        scene = uicore.layer.charactercreation.scene
        lightScene = trinity.Load(NORMAL_LIGHT_SETTINGS)
        ccUtil.SetupLighting(scene, lightScene, lightScene)
        uicore.layer.charactercreation.cameraUpdateJob = None
        uicore.layer.charactercreation.camera = CharCreationCamera(None)
        uicore.layer.charactercreation.SetupCameraUpdateJob()
        camera = uicore.layer.charactercreation.camera
        self.SetupRenderJob()
        blue.pyos.synchro.SleepWallclock(2000)
        self.DoLightsAndPoses(camera, scene)
        self.DoAssets(camera, scene, tryout)
Example #26
0
def RenderSun(outPath,
              objectPath,
              scenePath,
              size=512,
              cameraAngle=(0, 0, 0),
              postProcessingQuality=2,
              antiAliasingQuality=3,
              modifyScene=None):
    scene = trinity.Load(scenePath)
    blue.resMan.Wait()
    lensflare = blue.resMan.LoadObject(objectPath)
    blue.resMan.Wait()
    blue.os.Pump()
    scene.lensflares.append(lensflare)
    SetupLensflare(lensflare)
    fov = 1.0
    boundingSphereRadius = 100.0
    boundingSphereCenter = (0.0, 0.0, 0.0)
    view, projection = camera_util.GetViewAndProjectionUsingBoundingSphere(
        boundingSphereRadius,
        boundingSphereCenter,
        cameraAngle=cameraAngle,
        fov=fov)
    if modifyScene:
        view, projection = modifyScene(scene, view, projection)
    hostBitmap = RenderToSurface(scene=scene,
                                 view=view,
                                 projection=projection,
                                 size=size,
                                 postProcessingQuality=postProcessingQuality,
                                 antiAliasingQuality=antiAliasingQuality)
    hostBitmap.Save(outPath)
Example #27
0
    def LoadScene(self, sceneContainer):
        sceneContainer.PrepareSpaceScene(maxPitch=0.0,
                                         scenePath=self.scenePath)
        model = trinity.Load(
            'res:/dx9/model/ship/IconPreview/PreviewTurretShip.red')
        turretSet = TurretSet.FitTurret(model,
                                        self.typeID,
                                        1,
                                        evetypes.GetSofFactionNameOrNone(
                                            self.typeID),
                                        checkSettings=False)
        if turretSet is None:
            raise RuntimeError('Failed to load preview for %s (%s)' %
                               (evetypes.GetName(self.typeID), self.typeID))
        boundingSphere = turretSet.turretSets[0].boundingSphere
        model.boundingSphereRadius = boundingSphere[3]
        model.boundingSphereCenter = boundingSphere[:3]
        if model.boundingSphereCenter[1] < 2.0:
            model.boundingSphereCenter = (boundingSphere[0], 2.0,
                                          boundingSphere[2])
        for turret in turretSet.turretSets:
            turret.bottomClipHeight = 0.0
            turret.FreezeHighDetailLOD()
            turret.ForceStateDeactive()
            turret.EnterStateIdle()

        sceneContainer.AddToScene(model)
        SetupSpaceCamera(sceneContainer, model)
Example #28
0
    def LoadScene(self,
                  scenefile,
                  inflight=0,
                  registerKey=None,
                  setupCamera=True,
                  applyScene=True):
        scene = None
        camera = None
        try:
            if registerKey:
                self.sceneLoadedEvents[registerKey] = locks.Event(registerKey)
            self.SetSceneType(SCENE_TYPE_SPACE)
            sceneFromFile = trinity.Load(scenefile)
            if sceneFromFile is None:
                return
            scene = sceneFromFile
            camera = self._GetCamera(registerKey, setupCamera)
            if inflight:
                self.ApplySolarsystemAttributes(scene, camera)
                self.ApplySceneInflightAttributes(scene, camera)
            if applyScene:
                self.ApplyScene(scene, camera, registerKey)
        except Exception:
            log.LogException('sceneManager::LoadScene')
            sys.exc_clear()
        finally:
            if registerKey and registerKey in self.sceneLoadedEvents:
                self.sceneLoadedEvents.pop(registerKey).set()

        return (scene, camera)
Example #29
0
 def LoadScene(self, sceneContainer):
     sceneContainer.PrepareSpaceScene(scenePath=self.scenePath)
     resFile = inventorycommon.typeHelpers.GetGraphicFile(self.typeID)
     modelDNA = None
     if evetypes.GetCategoryID(
             self.typeID) == invconst.categoryStation and self.itemID:
         stations = cfg.mapSolarSystemContentCache.npcStations
         npcStation = stations.get(self.itemID, None)
         if npcStation:
             graphicID = npcStation.graphicID
             modelDNA = gfxutils.BuildSOFDNAFromGraphicID(graphicID)
     if modelDNA is None:
         modelDNA = gfxutils.BuildSOFDNAFromTypeID(
             self.typeID, materialSetID=self.materialSetID)
     if modelDNA is not None:
         spaceObjectFactory = sm.GetService('sofService').spaceObjectFactory
         model = spaceObjectFactory.BuildFromDNA(modelDNA)
     else:
         model = trinity.Load(resFile)
     if model is None:
         raise InvalidPreviewType(
             '%s (%s) failed to load associated model' %
             (evetypes.GetName(self.typeID), self.typeID))
     if getattr(model, 'boosters', None) is not None:
         model.boosters = None
     if getattr(model, 'modelRotationCurve', None) is not None:
         model.modelRotationCurve = None
     if getattr(model, 'modelTranslationCurve', None) is not None:
         model.modelTranslationCurve = None
     SetupAnimations(model, self.typeID)
     model.FreezeHighDetailMesh()
     trinity.WaitForResourceLoads()
     sceneContainer.AddToScene(model)
     SetupSpaceCamera(sceneContainer, model)
Example #30
0
    def Prepare(self):
        shipID = self.ballIDs[0]
        shipBall = self.fxSequencer.GetBall(shipID)
        if shipBall is None:
            raise RuntimeError('EMPWave: no ball found')
        if self.moduleTypeID == 0:
            self.moduleTypeID = 15957
        graphicID = cfg.invtypes.Get(self.moduleTypeID).graphicID
        if graphicID is None:
            raise RuntimeError('EMPWave: no graphic ID')
        gfxString = util.GraphicFile(graphicID)
        self.gfx = trinity.Load(gfxString)
        if self.gfx is None:
            raise RuntimeError('EMPWave: no effect found')
        entity = audio2.AudEmitter('effect_' + str(shipID))
        obs = trinity.TriObserverLocal()
        obs.observer = entity
        if self.gfx.__bluetype__ in ('trinity.EveTransform', ):
            self.gfx.observers.append(obs)
        for curveSet in self.gfx.curveSets:
            for curve in curveSet.curves:
                if curve.__typename__ == 'TriEventCurve' and curve.name == 'audioEvents':
                    curve.eventListener = entity

        self.gfxModel = trinity.EveRootTransform()
        radius = self.fxSequencer.GetTypeAttribute(
            self.moduleTypeID, const.attributeEmpFieldRange)
        self.gfxModel.scaling = (radius / 1000, radius / 1000, radius / 1000)
        self.radius = radius
        self.gfxModel.name = self.__guid__
        self.gfxModel.children.append(self.gfx)
        self.gfxModel.translationCurve = shipBall
        scene = self.fxSequencer.GetScene()
        scene.objects.append(self.gfxModel)