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); }
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); }
public MessageProcessingResult Process(EntityAddedMessage <GameEntity> message, GameManager manager) { TrySlot(message.Entity.Ability, manager); return(MessageProcessingResult.ContinueProcessing); }