Beispiel #1
0
        public MessageProcessingResult Process(EntityAddedMessage <GameEntity> message, GameManager manager)
        {
            switch (message.Group.Name)
            {
            case nameof(GameManager.AbilitiesToAffectableRelationship):
                var ability = message.Entity.Ability;
                if (ability != null &&
                    (ability.Activation & ActivationType.Always) != 0 &&
                    !ability.IsActive &&
                    manager.EffectsToContainingAbilityRelationship[ability.EntityId].Count != 0)
                {
                    Debug.Assert(!ability.IsActive);

                    Activate(ability, manager);
                }

                break;

            case nameof(GameManager.EntityItemsToContainerRelationship):
                if (message.ReferencedEntity != null &&
                    message.ReferencedEntity.HasComponent(EntityComponent.Being))
                {
                    var activation = CreateActivateAbilityMessage(manager);
                    activation.ActivatorEntity = message.ReferencedEntity;
                    activation.TargetEntity    = message.ReferencedEntity;

                    ActivateAbilities(message.Entity.Id, ActivationType.WhilePossessed, activation, manager, pretend: false);
                    manager.ReturnMessage(activation);
                }

                break;

            case nameof(GameManager.Effects):
                var effect = message.Entity.Effect;
                if (effect.ContainingAbilityId != null)
                {
                    var containingAbility = manager.FindEntity(effect.ContainingAbilityId)?.Ability;
                    if (containingAbility != null &&
                        (containingAbility.Activation & ActivationType.Always) != 0 &&
                        !containingAbility.IsActive &&
                        manager.EffectsToContainingAbilityRelationship[containingAbility.EntityId].Count == 1)
                    {
                        Activate(containingAbility, manager);
                    }
                }

                break;

            default:
                throw new InvalidOperationException(message.Group.Name);
            }

            return(MessageProcessingResult.ContinueProcessing);
        }
Beispiel #2
0
        public MessageProcessingResult Process(EntityAddedMessage <GameEntity> message, GameManager manager)
        {
            var affectedEntity = manager.FindEntity(message.Entity.Effect?.AffectedEntityId);

            if (affectedEntity?.HasComponent(EntityComponent.Player) != true)
            {
                return(MessageProcessingResult.ContinueProcessing);
            }

            manager.XPSystem.UpdateNextLevelXP(affectedEntity);
            return(MessageProcessingResult.ContinueProcessing);
        }
        public MessageProcessingResult Process(EntityAddedMessage <GameEntity> message, GameManager manager)
        {
            ResetVisibility(manager, message.Entity.Sensor);

            return(MessageProcessingResult.ContinueProcessing);
        }
Beispiel #4
0
        public MessageProcessingResult Process(EntityAddedMessage <GameEntity> message, GameManager manager)
        {
            TrySlot(message.Entity.Ability, manager);

            return(MessageProcessingResult.ContinueProcessing);
        }