|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using CIGEnums;
- using SUISSEngine;
- using UnityEngine;
-
- public class CIGAnimalManager : MonoBehaviour
- {
- private void Start()
- {
- this.animalAllowedTiles = this.horsePrefabs[0].GetComponent<AttachedElementTypeList>();
- base.transform.position = this.grid.transform.position;
- this.InitialiseAnimals();
- }
-
- private void InitialiseAnimals()
- {
- List<CIGExpansions.ExpansionBlock> freeBlocks = this.GetFreeBlocks();
- if (freeBlocks.Count == 0)
- {
- UnityEngine.Debug.LogWarning("No free blocks for animals; no animals");
- return;
- }
- CIGExpansions.ExpansionBlock block = freeBlocks[UnityEngine.Random.Range(0, freeBlocks.Count)];
- List<GridElement> suitableElements = this.GetSuitableElements(block);
- List<Boid> list = new List<Boid>();
- for (int i = 0; i < this.animalCount; i++)
- {
- CIGMovingUnit cigmovingUnit = this.CreateHorseAt(new GridPoint(suitableElements[UnityEngine.Random.Range(0, suitableElements.Count)].Index));
- cigmovingUnit.SetTargetLocation(new GridPoint(suitableElements[UnityEngine.Random.Range(0, suitableElements.Count)].Index));
- list.Add(cigmovingUnit.GetComponent<Boid>());
- }
- foreach (Boid boid in list)
- {
- boid.SetHerd(list);
- }
- }
-
- private CIGMovingUnit CreateHorseAt(GridPoint place)
- {
- GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.horsePrefabs[UnityEngine.Random.Range(0, this.horsePrefabs.Count<GameObject>())]);
- gameObject.transform.parent = base.transform;
- CIGMovingUnit component = gameObject.GetComponent<CIGMovingUnit>();
- component.SpawnAt(this.grid, place);
- return component;
- }
-
- private List<CIGExpansions.ExpansionBlock> GetFreeBlocks()
- {
- List<CIGExpansions.ExpansionBlock> list = new List<CIGExpansions.ExpansionBlock>();
- foreach (CIGExpansions.ExpansionBlock expansionBlock in this.expansions.AllBlocks)
- {
- if (expansionBlock != null)
- {
- if (this.animalAllowedTiles == null)
- {
- UnityEngine.Debug.LogError("Animal prefab has no attached element type list, to get the allowed tiles to walk on");
- }
- else if (!expansionBlock.Unlocked && this.GetSuitableElements(expansionBlock).Count > expansionBlock.AvailableElements / 2)
- {
- list.Add(expansionBlock);
- }
- }
- }
- return list;
- }
-
- private List<GridElement> GetSuitableElements(CIGExpansions.ExpansionBlock block)
- {
- List<GridElement> list = new List<GridElement>();
- for (int i = block.Origin.u; i < block.Origin.u + block.Size.u; i++)
- {
- for (int j = block.Origin.v; j < block.Origin.v + block.Size.v; j++)
- {
- GridElement gridElement = this.grid[i, j];
- foreach (SurfaceType surfaceType in this.animalAllowedTiles.elementTypes)
- {
- if (gridElement.Type == (int)surfaceType)
- {
- list.Add(gridElement);
- }
- }
- }
- }
- return list;
- }
-
- [SerializeField]
- private IsometricGrid grid;
-
- [SerializeField]
- private CIGExpansions expansions;
-
- [SerializeField]
- private GameObject[] horsePrefabs;
-
- public int animalCount = 10;
-
- private AttachedElementTypeList animalAllowedTiles;
- }
|