cpu_idea
unknown
csharp
4 years ago
3.8 kB
5
Indexable
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class CPURTSController : MonoBehaviour { public static CPURTSController Instance; public enum BigMonsterBehaviour { ARRIVAL, MOVING_FOWARD, FACING_OBSTACLE, ATTACKING_HUMANBASE } /* Atributos */ public BigMonsterBehaviour behaviour = BigMonsterBehaviour.ARRIVAL; public float energyGenerationFreq = 1.0f; private float curEnergyGeneration; public int energyGenerated = 10; public CPUState cpuData; private Queue<CPUTasksBase> pendingTasks = new Queue<CPUTasksBase> (); private bool isDead; /* Aplicación al motor */ private void Update () { if (GameManager.Instance.IsGamePaused == false) { if (isDead == false && behaviour != BigMonsterBehaviour.ARRIVAL) { HandlePassiveEnergyGeneration (); switch (behaviour) { case BigMonsterBehaviour.MOVING_FOWARD: // Necesito minerales ? // - Quiero hacer cosas y no tengo plata. // - Cada vez que gasto plata, un 50% de las veces querre recuperar la plata // Quiero atacar al humano ? // - Quiero ir a la base huamana, o atacar a un grupo de humanos? // - Si encontre la base humana y tengo un exceso de poblacion y recursos // atacaré a la base con tutti. Si no he encontrado la base humana, enviare // pelotones donde hayan habido alertas de combate. // Quiero crear unidades ? // - acabo de atacar // - necesito mantener siempre X cantidad de unidades ? // - tengo poblacion ? // - poblacion al tope ?, a lo mejor quiero atacar... // Quiero mejorar unidades ? // - poblacion al maximo, y recursos suficientes // Quiero defenderme ? // - humano ataca a monstruo grande // - cantidad de unidades humanas dentro del rango de vision del monsturo grande // supera a la cantidad de minions dentro de la misma area. // Quiero mantener patrullas aldededor mio? // - exceso de unidades en idle break; case BigMonsterBehaviour.FACING_OBSTACLE: // Quiero defenderme ? // - humano ataca a monstruo grande // - cantidad de unidades humanas dentro del rango de vision del monsturo grande // supera a la cantidad de minions dentro de la misma area. break; case BigMonsterBehaviour.ATTACKING_HUMANBASE: break; } } } } /* Funciones */ public void MoveActionGroup (List<UnitCore> actionGroup, Vector3 targetPos, bool buffering, bool aggresive) { List<Vector2> destination = Pathfinding.PositionsAroundTargetNode (RTSController.Instance.GetClosestNode (targetPos), actionGroup.Count); for (int i = 0; i < actionGroup.Count; i++) { MovementData unitMovement = new MovementData (aggresive, destination[i], null); actionGroup[i].SetDestinationCoord (unitMovement, buffering); } } private void HandlePassiveEnergyGeneration () { if (curEnergyGeneration < energyGenerationFreq) { curEnergyGeneration += Time.deltaTime; } else { cpuData.currentEnergy += energyGenerated; curEnergyGeneration = 0.0f; } } } [Serializable] public class ActionGroupTasks { public bool TaskOnHold; public List<UnitCore> actionGroup; public CPUTasksBase task; // puede que falte un UnitCPUTask para los UnitCapacities de la cpu } [Serializable] public class CPUState { public int currentEnergy; public int totalTechs; public int totalBolaGon; public int totalDogGon; public int totalBirdGon; public int Population { get; private set; } public int TotalUnits => totalBirdGon + totalBolaGon + totalDogGon; public void AddPopulation (int newPopulae) { Population += newPopulae; } }
Editor is loading...