コード例 #1
0
 private void SetEnemyConstraintsOnAllPoints(EnemyRank inRank, EnemySize inSize)
 {
     for (int i = 0; i < spawnPoints.Count; i++)
     {
         spawnPoints[i].SetEnemyConstraints(inRank, inSize);
     }
 }
コード例 #2
0
 public TemporaryEnemy(int xPosition, int yPosition, EnemyType movementType, EnemySize size)
 {
     this.xPosition    = xPosition;
     this.yPosition    = yPosition;
     this.movementType = movementType;
     this.size         = size;
 }
コード例 #3
0
        /// <summary>
        /// Figures out if you can spawn an enemy of the size asked for
        /// Returns true if you can spawn the enemy
        /// </summary>
        public bool SpaceCheck(EnemySize size, int xPos, int yPos)
        {
            switch (size)
            {
            // Large enemies take up a 2x2 space
            case EnemySize.Large:
                if ((terrain[xPos][yPos] == ' ' || terrain[xPos][yPos] == 'C') &&
                    (terrain[xPos + 1][yPos] == ' ' || terrain[xPos + 1][yPos] == 'C') &&
                    (terrain[xPos][yPos + 1] == ' ' || terrain[xPos][yPos + 1] == 'C') &&
                    (terrain[xPos + 1][yPos + 1] == ' ' || terrain[xPos + 1][yPos + 1] == 'C'))
                {
                    return(true);
                }
                return(false);

            // Medium and small enemies only take up 1 block worth of space.
            case EnemySize.Medium:
            case EnemySize.Small:
                if (terrain[xPos][yPos] == ' ' || terrain[xPos][yPos] == 'C')
                {
                    return(true);
                }
                return(false);

            default:
                return(false);
            }
        }
コード例 #4
0
    private void AddEnemySpawnPoint(EnemyRank inRank, EnemySize inSize, Vector2 inPosition)
    {
        isEnemySpawnPattern = true;

        //enemies always face left
        SpawnPoint s = new SpawnPoint(inPosition, Direction.LEFT);

        s.SetEnemyConstraints(inRank, inSize);
        spawnPoints.Add(s);
    }
コード例 #5
0
ファイル: BaseEnemy.cs プロジェクト: AidanMM/ProjectGreco
        /// <summary>
        /// Basic paramaterized constructor for the base enemy object. Does not account for health, use the health paramaterzied constructor for that
        /// </summary>
        /// <param name="animationList">The animations for the enemy</param>
        /// <param name="pos">The position to spawn the enemy at</param>
        public BaseEnemy(List <List <Texture2D> > animationList, Vector2 pos, EnemyType ai, Random rand, Player myPlayer, EnemySize size)
            : base(animationList, pos, "enemy")
        {
            this.rand = rand;

            zOrder = 8999;

            //Create the vertices and their color
            vertices             = new VertexPositionColor[3];
            vertices[0].Position = new Vector3(pos.X, pos.Y, 0);
            vertices[0].Color    = Color.Red;
            vertices[1].Position = new Vector3(pos.X, pos.Y, 0);
            vertices[1].Color    = Color.Green;
            this.ai        = ai;
            this.myPlayer  = myPlayer;
            this.mySize    = size;
            this.animating = true;
            this.looping   = true;

            this.projectiles = new List <int>();

            CheckForCollisions = true;

            currentHealth = maxHealth;

            if (ai == EnemyType.Flying)
            {
                overshootEndDistance = 16;
            }

            if (mySize == EnemySize.Small)
            {
                maxHealth     = 1;
                currentHealth = 1;
                baseSpeed     = 2.0f;
                chaseDistance = 6 * 64;
            }

            if (mySize == EnemySize.Medium)
            {
                maxHealth     = 3;
                currentHealth = 3;
                baseSpeed     = 1.0f;
                chaseDistance = 8 * 64;
            }

            if (mySize == EnemySize.Large)
            {
                maxHealth     = 10;
                currentHealth = 10;
                baseSpeed     = 0.5f;
                chaseDistance = 10 * 64;
            }
        }
コード例 #6
0
    public static List <EnemyCharacterData> GetEnemiesOfSize(EnemySize inSize)
    {
        List <EnemyCharacterData> enemiesOfSize = new List <EnemyCharacterData>();

        for (int i = 0; i < enemyCollectionList.Count; i++)
        {
            if (enemyCollectionList[i].size == inSize && !enemyCollectionList[i].isOre)
            {
                enemiesOfSize.Add(enemyCollectionList[i]);
            }
        }

        return(enemiesOfSize);
    }
コード例 #7
0
    public void SetSize(EnemySize size)
    {
        this.size = size;

        if ((int)size < 2)
        {
            speed = 1;
        }
        if ((int)size < 4)
        {
            speed = 2;
        }
        if ((int)size < 5)
        {
            speed = 3;
        }
    }
コード例 #8
0
    public static Boat_Stats GenerateBoatStats(EnemySize size, EnemyType type)
    {
        Boat_Stats stats = null;

        switch (size)
        {
        case EnemySize.Small:
            stats = new Boat_Stats(45, new Stats(5, 1), new Stats(50, 1), new Stats(5, 1), new Stats(0, 0));
            break;

        case EnemySize.Big:
            stats = new Boat_Stats(160, new Stats(3, 1), new Stats(50, 1), new Stats(5, 1), new Stats(0, 0));
            break;
        }

        stats.canons = GenerateCanons(size, type);
        return(stats);
    }
コード例 #9
0
    public void SetRandomEnemy(GameObject newEnemy, int maxLevel)
    {
        int        randomValue = Random.Range(0, maxLevel);
        EnemyColor color       = (EnemyColor)randomValue;
        string     colorStr    = color.ToString() + "_";

        if ((int)color == 0)
        {
            colorStr = "";
        }

        EnemySize size       = (EnemySize)Random.Range(0, 6);
        string    enemySize  = size.ToString();
        string    spriteName = colorStr + enemySize;

        newEnemy.GetComponent <SpriteRenderer>().sprite = findEnemySpriteByName(spriteName.ToLower());
        newEnemy.GetComponent <EnemyController>().SetColor(color);
        newEnemy.GetComponent <EnemyController>().SetSize(size);
    }
コード例 #10
0
 public void SetEnemyConstraints(EnemyRank inRank, EnemySize inSizes)
 {
     allowedRank  = inRank;
     allowedSizes = inSizes;
 }
コード例 #11
0
ファイル: Boss.cs プロジェクト: AidanMM/ProjectGreco
        public override void Update()
        {
            // Base update
            UpdateCollisionBox();

            if (animating == true)
            {
                if (Game1.TIMER % (60 / framesPerSecond) == 0)
                {
                    frameIndex++;
                }
                if (frameIndex >= animationList[animationListIndex].Count && looping == true)
                {
                    frameIndex = 0;
                }
                else if (frameIndex >= animationList[animationListIndex].Count && looping == false)
                {
                    A_StopAnimating();
                }
            }

            rotation += 1;
            rotation  = rotation % 360;

            //OnScreenCheck();
            onScreen = true;


            // Enemy spawning

            if (rotation == 0)
            {
                EnemyType myType = (EnemyType)rand.Next(0, 3);
                EnemySize mySize = (EnemySize)rand.Next(0, 3);

                int    numberToSpawn = 0;
                string myTexture     = "";

                // Choose a texture and a number of enemies to spawn.
                #region TextureChoosing
                switch (myType)
                {
                case EnemyType.Flying:
                    if (mySize == EnemySize.Large)
                    {
                        myTexture     = "FlyingEnemyLarge";
                        numberToSpawn = 1;
                    }
                    if (mySize == EnemySize.Medium)
                    {
                        myTexture     = "FlyingEnemy";
                        numberToSpawn = 2;
                    }
                    if (mySize == EnemySize.Small)
                    {
                        myTexture     = "FlyingEnemySmall";
                        numberToSpawn = 5;
                    }
                    break;

                case EnemyType.Ghost:
                    if (mySize == EnemySize.Large)
                    {
                        myTexture     = "GhostEnemyLarge";
                        numberToSpawn = 1;
                    }
                    if (mySize == EnemySize.Medium)
                    {
                        myTexture     = "GhostEnemy";
                        numberToSpawn = 2;
                    }
                    if (mySize == EnemySize.Small)
                    {
                        myTexture     = "GhostEnemySmall";
                        numberToSpawn = 5;
                    }
                    break;

                case EnemyType.Ground:
                    if (mySize == EnemySize.Large)
                    {
                        myTexture     = "GroundEnemyLarge";
                        numberToSpawn = 1;
                    }
                    if (mySize == EnemySize.Medium)
                    {
                        myTexture     = "Onion";
                        numberToSpawn = 2;
                    }
                    if (mySize == EnemySize.Small)
                    {
                        myTexture     = "GroundEnemySmall";
                        numberToSpawn = 5;
                    }
                    break;
                }
                #endregion

                for (int i = 0; i < numberToSpawn; i++)
                {
                    BaseEnemy myEnemy = new BaseEnemy(Game1.A_CreateListOfAnimations(Game1.ANIMATION_DICTIONARY[myTexture]), new Vector2(position.X + rand.Next(-64, 65), position.Y + rand.Next(-64, 65)), myType, rand, myPlayer, mySize);
                    myEnemy.chaseDistance = 14 * 64;
                    level.AddObjectToHandler("Enemy", myEnemy);
                }
            }

            if (destroyThis)
            {
                PlayerStats.mula += 10000;
                StreamReader stReader;
                try
                {
                    stReader = new StreamReader(File.OpenRead("..\\Debug\\Content\\HighScores.txt"));
                }
                catch
                {
                    StreamWriter st2Writer = new StreamWriter(File.Create("..\\Debug\\Content\\HighScores.txt"));
                    st2Writer.Close();
                    stReader = new StreamReader(File.OpenRead("..\\Debug\\Content\\HighScores.txt"));
                }
                string all = stReader.ReadToEnd();
                stReader.Close();
                StreamWriter stWriter = new StreamWriter(File.OpenWrite("..\\Debug\\Content\\HighScores.txt"));

                stWriter.WriteLine(all + PlayerStats.mula);

                stWriter.Close();
                Destroy();
                PlayerStats.bossDead = true;
            }
        }
コード例 #12
0
    private static List <Canon> GenerateCanons(EnemySize size, EnemyType type)
    {
        if (defaultCanonball == null)
        {
            LoadResources();
        }

        List <Canon> canons = new List <Canon>();

        CanonType canonType = CanonType.Normal;

        int maxCanon = (size == EnemySize.Small) ? 2 : 6;

        for (int i = 0; i < maxCanon; i++)
        {
            float      damage       = 25;
            float      baseCooldown = 3;
            GameObject canonball    = defaultCanonball;

            switch (type)
            {
            case EnemyType.Normal:
                canonType    = CanonType.Normal;
                damage       = 15;
                baseCooldown = 3;
                canonball    = defaultCanonball;
                break;

            case EnemyType.Fire:
                canonType    = CanonType.LanceFlammes;
                damage       = 10;
                baseCooldown = 5;
                canonball    = flameEffect;
                break;

            case EnemyType.Triple:
                canonType    = CanonType.TirTriple;
                damage       = 7;
                baseCooldown = 3.5f;
                canonball    = defaultCanonball;

                //Reduce power
                switch (size)
                {
                case EnemySize.Big:
                    if (i == 1 || i == 4)
                    {
                        canons.Add(null);
                        continue;
                    }
                    break;
                }

                break;
            }

            canons.Add(new Canon(canonType, damage, baseCooldown, canonball, 1, 1.15f));
        }

        return(canons);
    }
コード例 #13
0
    public static void CreateEnemyCharacters()
    {
        enemyCollection = new Dictionary <string, EnemyCharacterData>();

        //use this line to load from a json file
        //EnemyCharacterMap map = Utils.LoadJsonFromPath<EnemyCharacterMap>(inPath);

        /*
         *     {"id":"1:rat",                                                  "area": "CAVERNS|JAIL",     "rank":"NORM",        "size": "MD",               "base_stats" : ["hp=2",     "atk=1",      "spd=default"],                "spawn_rate": 1,        "area_spawn_range": "0-50",       "drop_rate":"3",                "drops": "6",                                                                   "fps":4,        "frames":3,           "shadow_size": 7,      "shadow_offset":0,         "fly_height": 0,        "fly_speed": 0,          "projectile_spawn_offset":"0,0",          "fade_amt":0,              "flags": "CANT_STRIKE",                                                      "variable_target_preference":1,     "skills":"CLAW"},
         *     {"id":"11:tunneler",                                          "area": "CAVERNS",          "rank":"MBOS",        "size": "LG",               "base_stats" : ["hp=8",     "atk=2",      "spd=default"],                "spawn_rate": 1,        "area_spawn_range": "0-50",       "drop_rate":"1",                "drops": "3",                                                                   "fps":4,        "frames":3,           "shadow_size": 0,      "shadow_offset":0,         "fly_height": 0,        "fly_speed": 0,          "projectile_spawn_offset":"0,0",          "fade_amt":0,              "flags": "IN_GROUND",                                                        "variable_target_preference":1,     "skills":""},
         *     {"id":"13:dragon",                                          "area": "CAVERNS",          "rank":"BOSS",        "size": "XL",               "base_stats" : ["hp=28",    "atk=3",      "spd=default"],                "spawn_rate": 1,        "area_spawn_range": "0-50",       "drop_rate":"50",               "drops": "55",                                                                  "fps":4,        "frames":3,           "shadow_size": 23,     "shadow_offset":0,         "fly_height": 30,       "fly_speed": 10,         "projectile_spawn_offset":"0,0",          "fade_amt":0,              "flags": "",                                                                 "variable_target_preference":1,     "skills":"METEOR"},
         */

        //instead, create the data manually
        var ratData = new EnemyCharacterRow()
        {
            id = "1:" + EnemyId.RAT, area = "CAVERNS|JAIL", rank = "NORM", size = "MD", base_stats = new string[] { "hp=2", "atk=1", "spd=default" }, spawn_rate = 1, area_spawn_range = "0-50", drop_rate = "3", drops = "6", flags = "", variable_target_preference = 1, skills = ""
        };
        var tunnelerData = new EnemyCharacterRow()
        {
            id = "11:" + EnemyId.TUNNELER, area = "CAVERNS", rank = "MBOS", size = "MD", base_stats = new string[] { "hp=8", "atk=2", "spd=default" }, spawn_rate = 1, area_spawn_range = "0-50", drop_rate = "1", drops = "", flags = "IN_GROUND", variable_target_preference = 1, skills = ""
        };
        var dragonData = new EnemyCharacterRow()
        {
            id = "13:" + EnemyId.DRAGON, area = "CAVERNS", rank = "BOSS", size = "MD", base_stats = new string[] { "hp=28", "atk=3", "spd=default" }, spawn_rate = 1, area_spawn_range = "0-50", drop_rate = "50", drops = "", flags = "", variable_target_preference = 1, skills = "METEOR"
        };

        EnemyCharacterMap map = new EnemyCharacterMap();

        map.enemy_characters = new EnemyCharacterRow[] { ratData, tunnelerData, dragonData };

        EnemyCharacterRow  row;
        EnemyCharacterData tempCharacter;

        string[] idPieces;

        for (int i = 0; i < map.enemy_characters.Length; i++)
        {
            row           = map.enemy_characters[i];
            tempCharacter = new EnemyCharacterData();
            tempCharacter.Init();

            idPieces = row.id.Split(':');
            int storageId = int.Parse(idPieces[0]);

            tempCharacter.SetId(idPieces[1]);
            tempCharacter.SetStorageId(storageId);
            tempCharacter.SetSpecies(Species.CREATURE);
            tempCharacter.SetBaseFaction(Faction.ENEMY);

            Stats.ParseArrayIntoStatObject(row.base_stats, tempCharacter.baseStats);

            tempCharacter.spawnAreas = Utils.ParseStringToFlagEnum <AdventureArea>(row.area, '|');

            EnemyRank parsedRank = (EnemyRank)Enum.Parse(typeof(EnemyRank), row.rank);
            EnemySize parsedSize = (EnemySize)Enum.Parse(typeof(EnemySize), row.size);
            tempCharacter.SetRankAndSize(parsedRank, parsedSize);

            int      spawnRate = row.spawn_rate;
            string[] rangeInfo = row.area_spawn_range.Split('-');
            if (rangeInfo.Length != 2)
            {
                throw new Exception("Spawn range for enemy " + row.id + " is not exactly two elements");
            }
            int minSpawnRange = int.Parse(rangeInfo[0]);
            int maxSpawnRange = int.Parse(rangeInfo[1]);
            tempCharacter.SetSpawnValues(spawnRate, minSpawnRange, maxSpawnRange);

            string[] drops = row.drops == "" ? new string[] { } : row.drops.Split('|');
            for (int j = 0; j < drops.Length; j++)
            {
                if (!ItemId.IsValid(drops[j]))
                {
                    throw new Exception("Item drop id '" + drops[j] + "' is not valid");
                }
            }

            int dropRate = 9;
            if (row.drop_rate != "default")
            {
                dropRate = int.Parse(row.drop_rate);
            }
            tempCharacter.SetItemDrops(dropRate, drops);

            tempCharacter.SetVisualValues(row.fps, row.frames, row.shadow_size, row.shadow_offset, row.fade_amt);
            tempCharacter.SetFlightValue(row.fly_height, row.fly_speed);

            CharacterFlags flags = Utils.ParseStringToFlagEnum <CharacterFlags>(row.flags, ',');
            flags |= CharacterFlags.CANT_DEFEND;
            tempCharacter.SetFlags(flags);
            tempCharacter.SetVariableTargetPreference(row.variable_target_preference);

            if (row.skills.Length > 0)
            {
                tempCharacter.SetBaseSkills(row.skills.Split(','));
            }

            //was the cant strike flag set? only allow this if the enemy has at least one other skill that costs 0 mp
            if (tempCharacter.FlagIsSet(CharacterFlags.CANT_STRIKE))
            {
                if (tempCharacter.baseSkills[0].mpCost != 0)
                {
                    throw new Exception("0 mp Default skill not provided for enemy " + row.id + " (cant_strike flag set)");
                }
            }

            enemyCollection.Add(tempCharacter.id, tempCharacter);
            characterCollection.Add(tempCharacter.id, tempCharacter);
        }

        enemyCollectionList = enemyCollection.Values.ToList();

        if (enemyCollection.Count > GameContext.MAX_NUM_ENEMIES_SUPPPORTED)
        {
            throw new Exception("Loaded " + enemyCollection.Count + " enemy types but game only allows a max of " + GameContext.MAX_NUM_ENEMIES_SUPPPORTED);
        }
    }
コード例 #14
0
 public void SetRankAndSize(EnemyRank inRank, EnemySize inSize)
 {
     rank = inRank;
     size = inSize;
 }