Пример #1
0
 /// <summary>
 /// Simple constructor of a motionless platform. 
 /// </summary>
 /// <param name="rect">Position and size of the platform.</param>
 /// <param name="Velocity">Vector2: initial velocity of the platform.</param>
 /// <param name="tex">Texture2D: texture for the platform.</param>
 /// <param name="Shape">ObjectShape: shape of the platform.</param>
 /// <param name="IsHazardous">boolean: Platform is hazardous.</param>
 /// <param name="gravity">boolen: Platform is affected by gravity.</param>
 public Platform(Rectangle rect, int textureIndex, ObjectShape Shape, bool IsHazardous, bool gravity)
     : base(rect, textureArray[textureIndex], Shape)
 {
     isHazardous = IsHazardous;
     hasGravity = gravity;
     base.isTiled = true;
     patrol = null;
     suspendRopes = new List<SuspendRope>();
 }
        public void PatrolModel_CurrentVelocityTest()
        {
            PatrolModel p = new PatrolModel();

            Vector2 a = new Vector2(2.0f, 5.0f);
            Vector2 b = new Vector2(3.0f, -7.0f);

            p.addVector(a, 5);
            p.addVector(b, 12);

            Assert.Equal(p.getCurrentVector(3).Equals(a), true); // Make sure it picks the first item
            Assert.Equal(p.getCurrentVector(9).Equals(b), true); // Make sure it picks the second item
            Assert.Equal(p.getCurrentVector(20).Equals(a), true); // Make sure it picks the first item again
        }
Пример #3
0
 public void SetPatrol(PatrolModel newPatrol)
 {
     patrol = newPatrol;
 }
Пример #4
0
        /// <summary>
        /// Read all the platform objects from the currentReadTarget file
        /// </summary>
        /// <returns></returns>
        public static LinkedList<Platform> readPlatforms()
        {
            const int platformObjSize = 8;
            string content;

            if (currentReadTarget == null)
                throw new Exception("File read target not set. LevelParser.readPlatforms");

            using (System.Xml.XmlReader r = System.Xml.XmlReader.Create(currentReadTarget))
            {
                r.MoveToContent();
                r.ReadToFollowing("objects");
                r.ReadToDescendant("platforms");

                content = r.ReadElementContentAsString();
                r.Close();
            }

            LinkedList<Platform> platforms = new LinkedList<Platform>();

            String[] PlatformString = CleanUp(content);
            for (int i = 0; i < PlatformString.Length / platformObjSize; i++)
            {
                //create the rectangle for this platform
                int[] rectangleValues = getNumbers(PlatformString[i*platformObjSize].Substring(4));
                Rectangle r = new Rectangle(rectangleValues[0], rectangleValues[1], rectangleValues[2], rectangleValues[3]);

                //determine whether or not this platform has gravitic properties
                bool hasGravity = PlatformString[i*platformObjSize + 1].Equals("yesgravity", StringComparison.CurrentCultureIgnoreCase);

                // check hazard status
                bool isHazardous = PlatformString[i * platformObjSize + 3].Equals("hazardous", StringComparison.CurrentCultureIgnoreCase);
                bool goThrough = PlatformString[i*platformObjSize+6].Equals("through", StringComparison.CurrentCultureIgnoreCase);
                bool isTiled = PlatformString[i*platformObjSize+7].Equals("tile", StringComparison.CurrentCultureIgnoreCase);
                bool isAnimated = PlatformString[i*platformObjSize+4].Contains("hplatform");
                // parse texture
                string texName = "Interactive/" + PlatformString[i * platformObjSize + 4];

                Platform final = new Platform(r, texName, isHazardous, isAnimated, hasGravity, goThrough, isTiled);

                //get the patrol values for this platform (out of parse order because it has to be created after the platform object)
                if (!PlatformString[i * platformObjSize + 2].Equals("nopatrol"))
                {
                    int[] patrolValues = getNumbers(PlatformString[i * platformObjSize + 2].Substring(4));
                    PatrolModel p = new PatrolModel();

                    for (int j = 0; j < patrolValues.Length / 3; j++)
                    {
                        p.addVector(new Vector2((float)patrolValues[j * 3], (float)patrolValues[j * 3 + 1]), patrolValues[j * 3 + 2]);
                    }
                    final.SetPatrol(p);

                }

                // read trigger
                if (!PlatformString[i * platformObjSize + 5].Equals("notrigger"))
                {
                    int [] triggerValues = getNumbers(PlatformString[i*platformObjSize+5].Substring(8));
                    for (int j = 0; j < triggerValues.Length; j+=4)
                    {
                        final.addTrigger(new Trigger(new Rectangle(triggerValues[j],triggerValues[j+1],triggerValues[j+2],triggerValues[j+3]), final));
                    }
                }
                platforms.AddFirst(final);
            }
            return platforms;
        }
Пример #5
0
        /// <summary>
        /// Read all enemy objects present in the level.
        /// </summary>
        /// <returns></returns>
        public static LinkedList<Enemy> readEnemies()
        {
            int EnemyCount;
            LinkedList<Enemy> enemies = new LinkedList<Enemy>();
            string content;

            if (currentReadTarget == null)
                throw new Exception("File read target not set. LevelParser.readEnemies");

            using (System.Xml.XmlReader r = System.Xml.XmlReader.Create(currentReadTarget))
            {
                r.MoveToContent();
                r.ReadToFollowing("objects");
                r.ReadToDescendant("enemies");

                content = r.ReadElementContentAsString();
                r.Close();
            }

            String[] EnemyString = CleanUp(content);

            EnemyCount = EnemyString.Length / 3;

            for (int i = 0; i < EnemyCount; ++i)
            {
                int[] rectangleValues = getNumbers(EnemyString[i * 3].Substring(4));
                Rectangle r = new Rectangle(rectangleValues[0], rectangleValues[1], rectangleValues[2], rectangleValues[3]);

                //get the patrol values for this enemy
                int[] textureNums = getNumbers(EnemyString[(i * 3) + 2].Substring(4));

                Enemy final = new Enemy(r, textureNums[0], ObjectShape.Rectangle);
                if (!EnemyString[(i * 3) + 1].Equals("nopatrol"))
                {
                    int[] patrolValues = getNumbers(EnemyString[(i * 3) + 1].Substring(4));
                    PatrolModel p = new PatrolModel();

                    for (int j = 0; j < patrolValues.Length / 3; j++)
                    {
                        p.addVector(new Vector2((float)patrolValues[j * 3], (float)patrolValues[j * 3 + 1]), patrolValues[j * 3 + 2]);
                    }
                    final.setPatrolModel(p);

                }

                enemies.AddLast(final);
            }

            return enemies;
        }
Пример #6
0
 /// <summary>
 /// Simple constructor of a motionless platform. 
 /// </summary>
 /// <param name="rect">Position and size of the platform.</param>
 /// <param name="Velocity">Vector2: initial velocity of the platform.</param>
 /// <param name="tex">Texture2D: texture for the platform.</param>
 /// <param name="Shape">ObjectShape: shape of the platform.</param>
 /// <param name="IsHazardous">boolean: Platform is hazardous.</param>
 /// <param name="gravity">boolen: Platform is affected by gravity.</param>
 public Platform(Rectangle rect, Texture2D drawTex, ObjectShape Shape, bool IsHazardous, bool gravity)
     : base(rect, drawTex, Shape)
 {
     isHazardous = IsHazardous;
     hasGravity = gravity;
     patrol = null;
     suspendRopes = new List<SuspendRope>();
 }
Пример #7
0
 public void setPatrolModel(PatrolModel model)
 {
     patrol = model;
 }