cpu_idea
unknown
csharp
4 years ago
3.8 kB
21
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...