예제 #1
0
    // 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));
                    }
                }
            }
        }
    }
예제 #2
0
        // 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()
            });
        }