コード例 #1
0
ファイル: Ability.cs プロジェクト: TensAndTwenties/Ruin
        public static List<Ability> createTestCharacterAbiities()
        {
            List<Ability> abilitiesToReturn = new List<Ability>();

            //for basic attack
            List<AbilityStatsToAffect> basicAttackStats = new List<AbilityStatsToAffect> { AbilityStatsToAffect.health };
            //for heal ability
            List<AbilityStatsToAffect> basicHealStats = new List<AbilityStatsToAffect> { AbilityStatsToAffect.health };

            CharAbility basicAttack = new CharAbility(true, basicAttackStats, AbilityType.physicalAttack, AbilityPosibleTargets.singleEnemy, "Basic Attack", 1, 30);
            CharAbility basicHeal = new CharAbility(true, basicHealStats, AbilityType.spellBuff, AbilityPosibleTargets.singleChar,"Basic Heal", 2, 30);

            abilitiesToReturn.Add(basicAttack);
            abilitiesToReturn.Add(basicHeal);

            return abilitiesToReturn;
        }
コード例 #2
0
ファイル: Targeting.cs プロジェクト: TensAndTwenties/Ruin
        public static void InitializeTargetingCharAbility(Character originatingChar, CharAbility castedAbility, PlayState playstate)
        {
            List<Character> potentialTargets = new List<Character>();

            switch (castedAbility.abilityPossibleTargets)
            {
                case (AbilityPosibleTargets.singleAlly):
                    if (castedAbility.limitedByRange) {
                        potentialTargets = GetCharatersInAbilityRange(originatingChar, castedAbility, playstate);
                        if (potentialTargets.Count > 0)
                        {
                            playstate.charactersTargeted = new List<Character> { potentialTargets[0] };
                            playstate.potentialTargets = potentialTargets;
                        }
                    }else {
                        playstate.charactersTargeted = new List<Character> { playstate.allies[0] };
                        playstate.potentialTargets = playstate.allies;
                    }
                    break;

                case (AbilityPosibleTargets.singleEnemy):
                    if (castedAbility.limitedByRange)
                    {
                        potentialTargets = GetCharatersInAbilityRange(originatingChar, castedAbility, playstate);
                        if (potentialTargets.Count > 0)
                        {
                            playstate.charactersTargeted = new List<Character> { potentialTargets[0] };
                            playstate.potentialTargets = potentialTargets;
                        }
                    }
                    else
                    {
                        playstate.charactersTargeted = new List<Character> { playstate.enemies[0] };
                        playstate.potentialTargets = playstate.enemies;
                    }
                    break;
                case (AbilityPosibleTargets.allAllies):
                    playstate.charactersTargeted = playstate.allies;
                    playstate.potentialTargets = playstate.allies;
                    break;
                case (AbilityPosibleTargets.allEnemies):
                    playstate.charactersTargeted = playstate.enemies;
                    playstate.potentialTargets = playstate.enemies;
                    break;
                case (AbilityPosibleTargets.allInRange):
                    potentialTargets = GetCharatersInAbilityRange(originatingChar, castedAbility, playstate);
                        if (potentialTargets.Count > 0)
                        {
                            playstate.charactersTargeted = new List<Character> { potentialTargets[0] };
                            playstate.potentialTargets = potentialTargets;
                        }
                    break;
                case (AbilityPosibleTargets.global):
                    playstate.charactersTargeted = playstate.allCharacters;
                    playstate.potentialTargets = playstate.allCharacters;
                    break;
                case (AbilityPosibleTargets.singleChar):
                    if (castedAbility.limitedByRange)
                    {
                        potentialTargets = GetCharatersInAbilityRange(originatingChar, castedAbility, playstate);
                        if (potentialTargets.Count > 0)
                        {
                            playstate.charactersTargeted = new List<Character> { potentialTargets[0] };
                            playstate.potentialTargets = potentialTargets;
                        }
                    }
                    else
                    {
                        playstate.charactersTargeted = new List<Character> { playstate.allCharacters[0] };
                        playstate.potentialTargets = playstate.allCharacters;
                    }
                    break;
            }
        }
コード例 #3
0
ファイル: Targeting.cs プロジェクト: TensAndTwenties/Ruin
 public static void TargetGroup(Character originatingChar, CharAbility castedAbility)
 {
     //this ability needs to automatically target a group of characters, like allies, enemies, or all characters
 }
コード例 #4
0
ファイル: Targeting.cs プロジェクト: TensAndTwenties/Ruin
 public static void TargetAllInRange(Character originatingChar, CharAbility castedAbility)
 {
     //this ability needs to automatically target all characters in range
 }
コード例 #5
0
ファイル: Targeting.cs プロジェクト: TensAndTwenties/Ruin
        public static void SelectTargetSingleChar(Character originatingChar, CharAbility castedAbility)
        {
            //this ability needs to target a single character

            /*
             * 0. Set casting character to targeting state
             * 0. When targeting, Esc cancels targeting and resets char/playstate
             * 1. Isolate all potential targets in range
             * 2. Automatically place selection indicator over nearest target
             * 3. tab now switches between potential targets rather than chars to move
             */

            originatingChar.state = charState.selectingTargets;
        }
コード例 #6
0
ファイル: Targeting.cs プロジェクト: TensAndTwenties/Ruin
        public static List<Character> GetCharatersInAbilityRange(Character originatingChar, CharAbility castedAbility, PlayState playstate)
        {
            //get subset of tiles in range of ability via the distance formula
            //boundaries of square to search defined by ability range

            int rangeToSearch = castedAbility.range;
            List<Tile> tilesInAbilityRange = new List<Tile>();
            List<Character> charactersInAbilityRange = new List<Character>();

            int castingCharacterPosX = (int)originatingChar.position.X;
            int castingCharacterPosY = (int)originatingChar.position.Y;

            int minimumXtoSearch = (int)originatingChar.position.X - rangeToSearch;
            int maximumXtoSearch = (int)originatingChar.position.X + rangeToSearch;
            int minimumYtoSearch = (int)originatingChar.position.Y - rangeToSearch;
            int maximumYtoSearch = (int)originatingChar.position.Y + rangeToSearch;

            if (minimumXtoSearch < 1)
                minimumXtoSearch = 1;

            if (minimumYtoSearch < 0)
                minimumYtoSearch = 1;

            if (maximumXtoSearch > playstate.currentMap.mapWidthInTiles()-1)
                maximumXtoSearch = playstate.currentMap.mapWidthInTiles()-1;

            if (maximumYtoSearch > playstate.currentMap.mapHeightInTiles()-1)
                maximumYtoSearch = playstate.currentMap.mapHeightInTiles()-1;

            for (int x = 0; x <= rangeToSearch; x++)
            {
                for (int y = 0; y <= rangeToSearch; y++)
                {
                    if (x >= minimumXtoSearch && x <= maximumXtoSearch && y >= minimumYtoSearch && y <= maximumYtoSearch)
                    {
                        int distanceFromSource = Math.Abs(castingCharacterPosX - x) + Math.Abs(castingCharacterPosY - y);
                        if (distanceFromSource <= rangeToSearch)
                        {
                            //this tile is in range - add it to the list. Also check to see if it has a character, and if so, add it as a viable target
                            Tile currentTile = playstate.currentMap.tiles[x, y];
                            tilesInAbilityRange.Add(currentTile);
                            Character currentChar = null;
                            if (castedAbility.abilityPossibleTargets == AbilityPosibleTargets.singleChar || castedAbility.abilityPossibleTargets == AbilityPosibleTargets.allInRange)
                            {
                                currentChar = playstate.allCharacters.Find(character => (int)character.position.X == x && (int)character.position.Y == y);
                            }
                            else if (castedAbility.abilityPossibleTargets == AbilityPosibleTargets.singleAlly)
                            {
                                currentChar = playstate.allies.Find(character => (int)character.position.X == x && (int)character.position.Y == y);
                            }
                            else if (castedAbility.abilityPossibleTargets == AbilityPosibleTargets.singleEnemy)
                            {
                                currentChar = playstate.enemies.Find(character => (int)character.position.X == x && (int)character.position.Y == y);
                            }

                            if (currentChar != null)
                            {
                                charactersInAbilityRange.Add(currentChar);
                            }
                        }
                    }
                }
            }

            if (charactersInAbilityRange.Count > 0)
            {
                //if characters can be targeted, we wil want to draw the targeting range
                playstate.tilesInAbilityRange = tilesInAbilityRange;
            }

            return charactersInAbilityRange;
        }