Пример #1
0
        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;
        }
Пример #2
0
        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}");
        }
Пример #3
0
        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);
        }
Пример #4
0
        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.
            }
        }