Ejemplo n.º 1
0
        public IObjectStatus Merge(IObjectStatus oldStatus)
        {
            if (!(oldStatus is OnFireObjectStatus oldFire))
            {
                throw new InvalidOperationException($"Unable to merge {nameof(OnFireObjectStatus)} status with {oldStatus.GetType().Name}");
            }

            return(oldFire);
        }
Ejemplo n.º 2
0
        public IObjectStatus Merge(IObjectStatus oldStatus)
        {
            if (!(oldStatus is PassiveObjectStatusBase passiveStatus) || !string.Equals(oldStatus.Type, Type))
            {
                throw new InvalidOperationException($"Unable to merge {GetType().Name} status with {oldStatus.GetType().Name}");
            }

            if (passiveStatus.timeToLive > timeToLive)
            {
                return(passiveStatus);
            }
            return(this);
        }
Ejemplo n.º 3
0
        public void Add(IObjectStatus status)
        {
            if (statusFilter(status.Type))
            {
                return;
            }

            if (statuses.ContainsKey(status.Type))
            {
                statuses[status.Type] = status.Merge(statuses[status.Type]);
            }
            else
            {
                var owner = CurrentGame.Map.GetDestroyableObject(ownerId);
                CurrentGame.Journal.Write(new StatusAddedMessage(owner, status.Type), owner);
                statuses.Add(status.Type, status);
            }
        }