cpu_idea

mail@pastecode.io avatar
unknown
csharp
2 years ago
3.8 kB
3
Indexable
Never
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; }
}