public override void StateBehaviour() { if (lightToUse == null) { StateStart(); } else { WispAI bestWisp = null; float dist = float.PositiveInfinity; foreach (WispAI wisp in WispSpawner.AllWisps) { float wispToLightDist = Vector3.Distance(lightToUse.transform.position, wisp.transform.position); if (wispToLightDist <= 15.0f && wispToLightDist >= 3.0f && wispToLightDist < dist) { bestWisp = wisp; dist = wispToLightDist; } } if (bestWisp != null) { var heading = lightToUse.transform.position - bestWisp.transform.position; var direction = heading / heading.magnitude; Vector3 positionToMoveTo = lightToUse.transform.position - direction * 2; EnemyAI.SetTargetPosition(positionToMoveTo); EnemyAI.MoveAlongPath(EnemyAI.walkSpeed); if (dist < 5.5f) { EnemyAI.GetComponent <Animator>().SetTrigger("Stick_Up"); } } } }
void CreateEntities() { entities = new List <WispAI>(); for (int i = 0; i < populationSize; i++) { WispAI wispAI = Instantiate(entityPrefab, wispSpawnPosition.position, entityPrefab.transform.rotation).GetComponent <WispAI>(); wispAI.InitGathering(neuralNetworks[i], WispTargetPosition); entities.Add(wispAI); } }
private void SpawnWisp() { foreach (Grid grid in gridManager.grids) { List <Node> availableNodes = grid.GetAvailableNodes(); if (availableNodes.Count > 0) { int rndNumber = UnityEngine.Random.Range(0, availableNodes.Count); WispAI wisp = Instantiate(WispPrefab, availableNodes[rndNumber].vPosition + new Vector3(0.0f, 3.5f, 0.0f), Quaternion.identity).GetComponent <WispAI>(); AllWisps.Add(wisp); if (neuralNetworks.Count > 0) { int rndNumber2 = UnityEngine.Random.Range(0, neuralNetworks.Count); wisp.neuralNetworkRoam = neuralNetworks[rndNumber2]; } } } }
public FleeState(WispAI wisp, Transform transform, float time) { Wisp = wisp; this.transform = transform; this.timer = time; }
public RoamState(WispAI wisp) { Wisp = wisp; }
public GatheringState(WispAI wisp) { Wisp = wisp; timer = 0.0f; }