Exemple #1
0
 public override void End()
 {
     if (EnoughHaveBeenCollected())
     {
         if (Prefab.LocationTypeChangeOnCompleted != null)
         {
             ChangeLocationType(Prefab.LocationTypeChangeOnCompleted);
         }
         GiveReward();
         completed = true;
     }
     foreach (var kvp in SpawnedResources)
     {
         foreach (var i in kvp.Value)
         {
             if (i != null && !i.Removed && !HasBeenCollected(i))
             {
                 i.Remove();
             }
         }
     }
     SpawnedResources.Clear();
     RelevantLevelResources.Clear();
     MissionClusterPositions.Clear();
     failed = !completed && state > 0;
 }
Exemple #2
0
 private void CalculateMissionClusterPositions()
 {
     MissionClusterPositions.Clear();
     foreach (var kvp in SpawnedResources)
     {
         if (kvp.Value.None())
         {
             continue;
         }
         var pos       = Vector2.Zero;
         var itemCount = 0;
         foreach (var i in kvp.Value.Where(i => i != null && !i.Removed))
         {
             pos += i.WorldPosition;
             itemCount++;
         }
         pos /= itemCount;
         MissionClusterPositions.Add(new Tuple <string, Vector2>(kvp.Key, pos));
     }
 }
Exemple #3
0
        protected override void StartMissionSpecific(Level level)
        {
            if (SpawnedResources.Any())
            {
#if DEBUG
                throw new Exception($"SpawnedResources.Count > 0 ({SpawnedResources.Count})");
#else
                DebugConsole.AddWarning("Spawned resources list was not empty at the start of a mineral mission. The mission instance may not have been ended correctly on previous rounds.");
                SpawnedResources.Clear();
#endif
            }

            if (RelevantLevelResources.Any())
            {
#if DEBUG
                throw new Exception($"RelevantLevelResources.Count > 0 ({RelevantLevelResources.Count})");
#else
                DebugConsole.AddWarning("Relevant level resources list was not empty at the start of a mineral mission. The mission instance may not have been ended correctly on previous rounds.");
                RelevantLevelResources.Clear();
#endif
            }

            if (MissionClusterPositions.Any())
            {
#if DEBUG
                throw new Exception($"MissionClusterPositions.Count > 0 ({MissionClusterPositions.Count})");
#else
                DebugConsole.AddWarning("Mission cluster positions list was not empty at the start of a mineral mission. The mission instance may not have been ended correctly on previous rounds.");
                MissionClusterPositions.Clear();
#endif
            }

            caves.Clear();

            if (IsClient)
            {
                return;
            }
            foreach (var kvp in ResourceClusters)
            {
                var prefab = ItemPrefab.Find(null, kvp.Key);
                if (prefab == null)
                {
                    DebugConsole.ThrowError("Error in MineralMission - " +
                                            "couldn't find an item prefab with the identifier " + kvp.Key);
                    continue;
                }
                var spawnedResources = level.GenerateMissionResources(prefab, kvp.Value.First, out float rotation);
                if (spawnedResources.Count < kvp.Value.First)
                {
                    DebugConsole.ThrowError("Error in MineralMission - " +
                                            "spawned " + spawnedResources.Count + "/" + kvp.Value.First + " of " + prefab.Name);
                }
                if (spawnedResources.None())
                {
                    continue;
                }
                SpawnedResources.Add(kvp.Key, spawnedResources);
                kvp.Value.Second = rotation;

                foreach (Level.Cave cave in Level.Loaded.Caves)
                {
                    foreach (Item spawnedResource in spawnedResources)
                    {
                        if (cave.Area.Contains(spawnedResource.WorldPosition))
                        {
                            cave.DisplayOnSonar = true;
                            caves.Add(cave);
                            break;
                        }
                    }
                }
            }
            CalculateMissionClusterPositions();
            FindRelevantLevelResources();
        }