public ITask GenerateTask() { Queue <ITask> queuedTasks = new Queue <ITask>(); ITask compositeTask = new CompositeTask(queuedTasks); ITask findFood = new FindTask <Food>(_owningAgent, (target, food) => { // Called when food found. Create seek task. ITask seekFood = new SeekTask(_owningAgent, target, 3, () => { ITask intentTask = new IntentTask(_owningAgent, food, EIntent.EAT, () => { EnergyCompontent foodEnergy = food.TakeEnergy(new EnergyCompontent { EnergyType = EEnergyType.NOURISHMENT }); _owningAgent.GiveEnergy(new EnergyCompontent { EnergyType = EEnergyType.NOURISHMENT, KiloJoules = foodEnergy.KiloJoules }); }); queuedTasks.Enqueue(intentTask); }); queuedTasks.Enqueue(seekFood); }); queuedTasks.Enqueue(findFood); compositeTask.Start(); return(compositeTask); }
public void GiveEnergy(EnergyCompontent energy) { if (energy.EnergyType == EEnergyType.NOURISHMENT) { _kiloJouleEnergy += energy.KiloJoules; } }
public EnergyCompontent TakeEnergy(EnergyCompontent energy) { if (energy.EnergyType == EEnergyType.NOURISHMENT) { // Can not currently eat people } return(new EnergyCompontent()); }
public EnergyCompontent TakeEnergy(EnergyCompontent energy) { // Lets say that 10 calories can be eaten in 1 seconds. float caloriesConsumed = Time.deltaTime * 10; if (caloriesConsumed > _caloriesLeft) { caloriesConsumed = _caloriesLeft; } _caloriesLeft -= caloriesConsumed; return(new EnergyCompontent { EnergyType = EEnergyType.NOURISHMENT, KiloJoules = caloriesConsumed * 4.184f }); }
public void GiveEnergy(EnergyCompontent energy) { // Food cannot recieve energy }