private void Awake() { NavMeshAgent navigator = GetComponent <NavMeshAgent>(); Behaviour = new ActorBehaviour(this, new MovableAI(navigator), new StateMachine(this)); StatusInstances = statusData.InitializeStatusInstancesFromStatusData(); ListStatus = StatusInstances.Select(s => s.Value).ToList(); Behaviour.Movement.Navigator.speed = critterData.Speed; Behaviour.Movement.Navigator.acceleration = critterData.Acceleration; }
public string Details() { var statuses = SJ('\t', StatusInstances.Select(el => el.ToString())); if (statuses.Length > 0) { statuses = " " + statuses; } var relics = " " + SJ('\t', Relics); return($"{Name} {HP}/{HPMax} B{Block}{statuses}{relics}"); }
public IEntity CopyEntity(IEntity entity) { var sis = StatusInstances.Select(el => el.Copy()).ToList(); entity.Name = Name; entity.Dead = Dead; entity.Block = Block; entity.EntityType = EntityType; entity.Relics = Relics.Select(el => el.Copy()).ToList(); entity.StatusInstances = sis; entity.HP = HP; entity.HPMax = HPMax; return(entity); }
public void ApplyStatus(Fight f, Deck d, StatusInstance statusInstance) { if (CheckTurnip(statusInstance)) { return; } var exiStatus = StatusInstances.SingleOrDefault(el => el.Status.StatusType == statusInstance.Status.StatusType); if (exiStatus == null) { if (statusInstance.Intensity < 0 && !statusInstance.Status.CanAddNegative) { return; } StatusInstances.Add(statusInstance); statusInstance.Apply(f, d, this); } else { //combining statuses. setting up the if this way avoids the ambiguity between flame barrier (scalable, impermanent) and pennib (unscalable, impermanent) if (statusInstance.Status.Scalable) { exiStatus.Intensity += statusInstance.Intensity; //flame barrier, strength } else { //vuln exiStatus.Duration += statusInstance.Duration; } if (exiStatus.Duration == 0 || exiStatus.Intensity == 0) { StatusInstances.Remove(exiStatus); exiStatus.Unapply(f, d, this); } //we never apply the new status so it's inactive. we just mined it for intensity. } }