예제 #1
0
        public override bool Execute(Scenario scenario, ActionArg arg)
        {
            var attackArg = arg as AttackActionArg;

            if (attackArg == null)
            {
                return(false);
            }

            var character = attackArg.Character;
            var enemyType = attackArg.EnemyType;
            var weapons   = attackArg.Weapons;

            if (HasWeaponsToKillEnemy(scenario, weapons) != true)
            {
                return(false);
            }

            var enemy = GetCharacterAround(scenario, character.Position, enemyType);

            if (enemy == null)
            {
                return(false);
            }

            KillEnemy(scenario, enemy);

            return(true);
        }
예제 #2
0
        public bool Interact()
        {
            var scenario  = currScenario;
            var character = BaseAction.FindCharacter(scenario, MapElements.HERO);
            var type      = interactionFinder.FindInteractionType(character.Position);

            ActionArg  actionArg = null;
            BaseAction action    = null;

            if (interactionCreator.CreateInteraction(type, character, out action, out actionArg) != true)
            {
                return(false);
            }

            action.Execute(scenario, actionArg);

            return(true);
        }
        public override bool Execute(Scenario scenario, ActionArg arg)
        {
            var climbLadderArg = arg as ClimbLadderArg;

            if (climbLadderArg == null)
            {
                return(false);
            }

            var character = climbLadderArg.Character;
            var ladder    = climbLadderArg.LadderType;

            if (IsObjectAround(scenario, character.Position, ladder) != true)
            {
                return(false);
            }

            scenario.SetClimbedUpLadder();

            return(true);
        }
예제 #4
0
        public override bool Execute(Scenario scenario, ActionArg arg)
        {
            var moveData  = arg as MoveArg;
            var character = moveData.Character;
            var direction = moveData.Direction;

            var nextPos = FindNextPosition(character.Position, direction);

            if (IsPositionMoveable(scenario, nextPos) != true)
            {
                return(false);
            }

            character.Move(direction);

            var scenElemAtNextPos = GetScenarioElementAtNextPos(scenario, nextPos);

            character.SetParentTile(scenElemAtNextPos);

            return(true);
        }
        public override bool Execute(Scenario scenario, ActionArg arg)
        {
            var getObjArg = arg as GetObjectArg;
            var character = getObjArg.Character;

            var obj = GetObjectAtPos(scenario, character.Position);

            if (obj == null)
            {
                return(false);
            }

            scenario.AddObjectToPlayer(obj.Type);
            scenario.RemObjectFromScenario(obj);

            var scenElemAtNextPos = GetScenarioElementAtNextPos(scenario, character.Position);

            character.SetParentTile(scenElemAtNextPos);

            obj.Disable();

            return(true);
        }
예제 #6
0
        public override bool Execute(Scenario scenario, ActionArg arg)
        {
            var pullLeverArg = arg as PullLeverArg;
            var character    = pullLeverArg.Character;

            var lever = GetObjectAround(scenario, character.Position, MapElements.INACTIVE_LEVER) as Lever;

            if (lever == null)
            {
                return(false);
            }

            var bridge = FindObject(scenario, MapElements.BROKEN_BRIDGE) as Bridge;

            if (bridge == null)
            {
                return(false);
            }

            lever.IsActive = true;
            bridge.IsFixed = true;

            return(true);
        }
        public override bool Execute(Scenario scenario, ActionArg arg)
        {
            var useKeyArg = arg as UseKeyArg;
            var character = useKeyArg.Character;
            var keyType   = useKeyArg.KeyType;
            var doorType  = useKeyArg.DoorType;

            if (scenario.PlayerHasObject(keyType) != true)
            {
                return(false);
            }

            var door = GetObjectAround(scenario, character.Position, doorType);

            if (door == null)
            {
                return(false);
            }

            OpenDoor(scenario, door);
            scenario.RemObjectFromPlayer(keyType);

            return(true);
        }
 public abstract bool Execute(Scenario scenario, ActionArg arg);
예제 #9
0
        private void CreateUseKeyAction(DynamicElement character, out BaseAction action, out ActionArg arg)
        {
            var keyType  = MapElements.EMPTY;
            var doorType = MapElements.EMPTY;

            if (BaseAction.IsObjectAround(currScenario, character.Position, MapElements.IRON_DOOR) &&
                currScenario.PlayerHasObject(MapElements.IRON_KEY))
            {
                keyType  = MapElements.IRON_KEY;
                doorType = MapElements.IRON_DOOR;
            }

            if (BaseAction.IsObjectAround(currScenario, character.Position, MapElements.BRONZE_DOOR) &&
                currScenario.PlayerHasObject(MapElements.BRONZE_KEY))
            {
                keyType  = MapElements.BRONZE_KEY;
                doorType = MapElements.BRONZE_DOOR;
            }

            arg    = new UseKeyArg(character, keyType, doorType);
            action = new UseKeyAction();
        }
예제 #10
0
 private void CreateClimbLadderAction(DynamicElement character, out BaseAction action, out ActionArg arg)
 {
     action = new ClimbLadderAction();
     arg    = new ClimbLadderArg(character, MapElements.LADDER);
 }
예제 #11
0
 private void CreateAttackAction(DynamicElement character, out BaseAction action, out ActionArg arg)
 {
     action = new AttackAction();
     arg    = new AttackActionArg(character, MapElements.ENEMY, MapElements.WEAPON, MapElements.SHIELD);
 }
예제 #12
0
 private void CreatePullLeverAction(DynamicElement character, out BaseAction action, out ActionArg arg)
 {
     action = new PullLeverAction();
     arg    = new PullLeverArg(character);
 }
예제 #13
0
 private void CreateGetObjectAction(DynamicElement character, out BaseAction action, out ActionArg arg)
 {
     action = new GetObjectAction();
     arg    = new GetObjectArg(character);
 }
예제 #14
0
        public bool CreateInteraction(InteractionType type, DynamicElement character, out BaseAction action, out ActionArg arg)
        {
            if (interactionsCreator.ContainsKey(type) != true)
            {
                action = null;
                arg    = null;
                return(false);
            }

            interactionsCreator[type](character, out action, out arg);
            return(true);
        }