// Run on every game tick // 1 is the first tick *I think* public static void Tick(BBI.Game.Commands.SimFrameNumber frameNumber) { lock (artUiLock) { FrameNumber = frameNumber.FrameNumber; if (CustomLayout) { // Checking if any artifacts need respawning if (frameNumber.FrameNumber >= 10u && (Sim.Instance.Settings.GameMode.GameSessionSettings.VictoryConditions & VictoryConditions.Retrieval) != 0) { for (int i = 0; i < artifacts.Count; i++) { if (artifacts[i].NeedsRespawning) { Entity e = SceneEntityCreator.CreateCollectibleEntity("Artifact", CollectibleType.Artifact, artifacts[i].position, default(Orientation2)); artifacts[i] = new MapArtifactData { entity = e, position = artifacts[i].position, }; } } } // Creating extraction zones (waiting till frame 10 until SExtractionZoneViewController is set) if (frameNumber.FrameNumber == 10u && (Sim.Instance.Settings.GameMode.GameSessionSettings.VictoryConditions & VictoryConditions.Retrieval) != 0) { while (SExtractionZoneViewController == null) { ; // Spin wait for SExtractionZoneViewController to be set } // Hiding existing extraction zones foreach (Entity entity in Sim.Instance.EntitySystem) { if (entity.HasComponent(14)) { SExtractionZoneViewController.ShowExtractionZone(entity, false); } } // Loading extraction zones foreach (MapEzData ez in ezs) { ExtractionZoneDescriptor descriptorEz = new ExtractionZoneDescriptor("ExtractionZone", ez.position, default(Orientation2), new string[] { "G2-Zone2" }, new SceneExtractionZoneEntity(), new ExtractionZoneAttributesData { m_RadiusMeters = ez.radius, m_Query = new QueryContainer { UseEntityTypeQuery = true, QEntityTypeNames = new List <string>(new string[] { "C_Baserunner", "G_Baserunner", "C_Baserunner_MP", "G_Baserunner_MP", "C_Harvester_MP", "G_Harvester_MP", "C_Sob_Baserunner_MP", "K_Baserunner_MP", // For some reason harvesters were in this array for other extraction zones so keeping them in just in case }) } }, ez.team); // SceneEntityCreator.CreateEntityFromDescriptor(descriptorRelic, ref fgh); (doesn't work) // Creating the extraction zone entity int artifactCount = 0; // Used for nothing Entity entityEz = SceneEntityCreator.CreateEntityFromDescriptor(descriptorEz, ref artifactCount); SExtractionZoneViewController.OnSceneEntityCreated(new SceneEntityCreatedEvent(entityEz, descriptorEz)); } } } } }
// Token: 0x06000B1A RID: 2842 RVA: 0x0003E800 File Offset: 0x0003CA00 private void CreateExtractionZoneEntityView(Entity entity, ExtractionZoneDescriptor descriptor) { Assert.Release(!this.mExtractionZoneViews.ContainsKey(entity), "[RH]: Trying to create an ExtractionZoneView for entity but one already exists!"); ExtractionZoneAttributes extractionZoneAttribs = descriptor.ExtractionZoneAttribs; if (extractionZoneAttribs == null) { Log.Error(Log.Channel.UI, "Missing ExtractionZoneAttributes for extraction zone entity {0}", new object[] { entity.ToFriendlyString() }); return; } int num = Fixed64.IntValue(extractionZoneAttribs.RadiusMeters); if (num <= 0) { Log.Error(Log.Channel.UI, "Attempting to create an ExtractionZoneView for extraction zone entity {0} with non-positive radius {1}!", new object[] { entity.ToFriendlyString(), num }); return; } SceneEntityHUDAttributes typeAttributes = entity.GetTypeAttributes <SceneEntityHUDAttributes>(); if (typeAttributes == null) { Log.Error(Log.Channel.UI, "Missing SceneEntityHUDAttributes for extraction zone entity {0}", new object[] { entity.ToFriendlyString() }); return; } if (typeAttributes.CirclePrefab != null && typeAttributes.ArrowPrefab != null) { Vector3 vector = VectorHelper.SimVector2ToUnityVector3(descriptor.Position); vector = UnitView.RaycastToGroundFromPoint(vector); Color colour; TeamID teamID; if (!this.DetermineColorAndTeamIDForExtractionZone(entity, out colour, out teamID)) { // MOD: Fix for incorrect colors of extraction zones if (this.mCommanderManager.GetCommanderFromID(this.mCommanderManager.LocalCommanderID).TeamID.ID - 1 == descriptor.TeamSpawnIndex) { colour = this.mUnitHUDInterfaceAttributes.ExtractionZone.FriendlyColour; } else { colour = this.mUnitHUDInterfaceAttributes.ExtractionZone.EnemyColour; } // MOD Log.Error(Log.Channel.Gameplay, "Failed to determine colour and TeamID for extraction zone entity {0}! Using defaults.", new object[] { entity.ToFriendlyString() }); } UISprite circle = this.CreateExtractionZoneCircle(entity, typeAttributes.CirclePrefab, vector, num, colour); string label = (!string.IsNullOrEmpty(typeAttributes.LocalizedTitleStringID)) ? typeAttributes.LocalizedTitleStringID.TokenFormat(new object[] { teamID.ID }, this.mLocalizationManager) : string.Empty; ExtractionZoneView extractionZoneView = new ExtractionZoneView(entity, descriptor, circle, typeAttributes.ArrowPrefab, this.mSettings.MarkerAltitudeOffset, label, this.mHUDSystem, colour); extractionZoneView.Show(true); this.mExtractionZoneViews.Add(entity, extractionZoneView); return; } Log.Error(Log.Channel.UI, "Missing circle or arrow prefab for extraction zone scene entity {0}!", new object[] { entity.ToFriendlyString() }); }