public Vector2 Update(Enemy enemy)
        {
            Vector2 s = new Vector2(-1f, -1f);
            for (int i = 0; i < list.Count; i++) {
                shot temp = list[i];
                if (list[i].bullet.Collided(enemy) && !list[i].hit) {
                    s = enemy.TurnEnemyToBunny();
                    temp.hit = true;
                    list[i] = temp;
                }
                list[i].emitter.Center = list[i].bullet.Center;
            }

            return s;
        }
        int y; //location of the room in y

        #endregion Fields

        #region Constructors

        public Room(ref StreamReader m, int xCoord, int yCoord)
        {
            x = xCoord;
            y = yCoord;

            roomOrigin = new Vector2((float)xCoord * 100f, (float)yCoord * ((9f / 16f) * 100f));
            backGround = new XNACS1Rectangle(new Vector2(roomOrigin.X + 50f, roomOrigin.Y + 50 * (9f / 16f)), 100f, 100f * (9f / 16f), "bg1");
            walls = new WallSet(roomOrigin);

            hasStairs = Convert.ToInt32(m.ReadLine());
            numDoors = Convert.ToInt32(m.ReadLine());
            myDoors = new Doors[numDoors];
            numEnemies = Convert.ToInt32(m.ReadLine());

            if (hasStairs == 1) {
                float stairX = (float)Convert.ToDouble(m.ReadLine());
                float stairY = (float)Convert.ToDouble(m.ReadLine());
                stairs = new Stair(new Vector2(stairX + roomOrigin.X, stairY + roomOrigin.Y));
            }

            activeEnemies = numEnemies;
            myEnemies = new Enemy[numEnemies];
            roomObjects = new XNACS1PrimitiveSet();

            coord = new Vector2((float)x, (float)y);

            for (int i = 0; i < numEnemies; i++) {
                float posX = (float)Convert.ToDouble(m.ReadLine()) + roomOrigin.X;
                string line = m.ReadLine();
                float posY = (float)Convert.ToDouble(line) + roomOrigin.Y;
                myEnemies[i] = new Enemy(new Vector2(posX, posY), "guard");
                roomObjects.AddToSet(myEnemies[i]);
            }

            for (int i = 0; i < numDoors; i++) {
                //takes in the origin of the room and the door type
                myDoors[i] = new Doors(roomOrigin, coord, m.ReadLine());
                roomObjects.AddToSet(myDoors[i]);
            }

            roomObjects.RemoveAllFromAutoDrawSet();

            wand = new Wand();
        }
        public void UpdateCollisionWithEnemy(Enemy enemy)
        {
            Vector2 mVectorV;
            Vector2 TangentVector;

            float DistOnTangent;
            Vector2 PtOnTangentLine;
            Vector2 NormalVector;
            float DistOnNormal;
            Vector2 mPtOnNormal;
            float mDistOnTangern;

            if (Collided(enemy)) {

                mVectorV = Center - enemy.Center;    // V vector(vector from hero center to wall center)

                TangentVector = enemy.FrontDirection;  //  tangent vector
                TangentVector.Normalize();
                DistOnTangent = Vector2.Dot(mVectorV, TangentVector);
                PtOnTangentLine = enemy.Center + (DistOnTangent * TangentVector);
                NormalVector = mVectorV - (DistOnTangent * TangentVector);
                NormalVector.Normalize();
                DistOnNormal = Vector2.Dot(mVectorV, NormalVector);

                mPtOnNormal = enemy.Center + (DistOnNormal * NormalVector);
                mDistOnTangern = Vector2.Dot(mVectorV, TangentVector);

                if (Math.Abs(DistOnTangent) < enemy.Width / 2f) // collided with top and bottom
                {
                    float dOnN = Height / 2 + (enemy.Height / 2f);
                    if (Math.Abs(DistOnNormal) < dOnN)
                        Center = PtOnTangentLine + Math.Sign(DistOnNormal) * (dOnN * NormalVector);
                }
                else {// collide with left and right

                    if (Math.Abs(mDistOnTangern) < Width / 2 + (enemy.Width / 2f))
                        Center = mPtOnNormal + Math.Sign(mDistOnTangern) * (Width / 2 + enemy.Width / 2f) * TangentVector;

                }

            }
        }
        int y; //location of the room in y

        #endregion Fields

        #region Constructors

        public Room(ref StreamReader m, int xCoord, int yCoord)
        {
            x = xCoord;
            y = yCoord;

            roomOrigin = new Vector2((float)xCoord * 100f, (float)yCoord * ((9f / 16f) * 100f));
            walls = new WallSet(roomOrigin);

            numDoors = Convert.ToInt32(m.ReadLine());
            myDoors = new Doors[numDoors];

            numEnemies = Convert.ToInt32(m.ReadLine());
            activeEnemies = numEnemies;
            myEnemies = new Enemy[numEnemies];
            //line = m.ReadLine();
            //isVisited = Convert.ToBoolean(line);

            //line = m.ReadLine();
            //hasStairs = Convert.ToBoolean(line);
            roomObjects = new XNACS1PrimitiveSet();

            coord = new Vector2((float)x, (float)y);

            for (int i = 0; i < numEnemies; i++) {
                float posX = Convert.ToInt64(m.ReadLine()) + roomOrigin.X;
                float posY = Convert.ToInt64(m.ReadLine()) + roomOrigin.Y;
                myEnemies[i] = new Enemy(new Vector2(posX, posY), "guard");
                roomObjects.AddToSet(myEnemies[i]);
            }

            for (int i = 0; i < numDoors; i++) {
                //takes in the origin of the room and the door type
                myDoors[i] = new Doors(roomOrigin, coord, m.ReadLine());
                roomObjects.AddToSet(myDoors[i]);
            }

            roomObjects.RemoveAllFromAutoDrawSet();

            wand = new Wand();
        }
        public Vector2 Update(Enemy[] enemy)
        {
            Vector2 s = new Vector2(-1f, -1f);
            for (int i = 0; i < list.Count; i++) {
                shot temp = list[i];
                if (list[i].shotLife == 0) {
                    list[i].bullet.RemoveFromAutoDrawSet();
                    list[i].emitter.RemoveFromAutoDrawSet();
                    list.Remove(list[i]);
                }
                else {
                    temp.shotLife--;
                    for (int j = 0; j < enemy.Length; j++) {
                        list[i] = temp;
                        if (list[i].bullet.Collided(enemy[j]) && !list[i].hit) {
                            s = enemy[j].TurnEnemyToBunny();
                            temp.hit = true;
                            list[i] = temp;
                        }
                        list[i].emitter.Center = list[i].bullet.Center;
                    }

                    BoundCollideStatus status = XNACS1Base.World.CollideWorldBound(temp.bullet);
                    switch (status) {
                        case BoundCollideStatus.CollideBottom:
                        case BoundCollideStatus.CollideLeft:
                        case BoundCollideStatus.CollideRight:
                        case BoundCollideStatus.CollideTop:
                            temp.bullet.RemoveFromAutoDrawSet();
                            temp.emitter.RemoveFromAutoDrawSet();
                            list.Remove(list[i]);
                            break;
                    }
                }
            }

            return s;
        }
 public void UpdateWallCollisionWithEnemy(Enemy enemy)
 {
     for (int i = 0; i < RoomWalls.Length; i++)
         enemy.UpdateCollisionWithWall(RoomWalls[i]);
 }
Esempio n. 7
0
 public void UpdateWallCollisionWithEnemy(Enemy enemy)
 {
     enemy.UpdateCollisionWithObject(this);
 }
Esempio n. 8
0
        public Vector2 Update(Enemy[] enemy, WallSet walls)
        {
            Vector2 s = new Vector2(-1f, -1f);
            for (int i = 0; i < list.Count; i++) {
                shot temp = list[i];
                if (list[i].shotLife == 0) {
                    list[i].bullet.RemoveFromAutoDrawSet();
                    list[i].emitter.RemoveFromAutoDrawSet();
                    list.Remove(list[i]);
                }
                else {
                    temp.shotLife--;
                    for (int j = 0; j < enemy.Length; j++) {
                        list[i] = temp;
                        if (list[i].bullet.Collided(enemy[j]) && !list[i].hit) {
                            enemy[j].Caught();
                            if (enemy[j].NumLivesLeft <= 0) {
                                s = enemy[j].TurnEnemyToBunny();
                            }

                            temp.bullet.RemoveFromAutoDrawSet();
                            temp.emitter.RemoveFromAutoDrawSet();
                            list.Remove(list[i]);
                            temp.hit = true;
                            break;
                        }

                    }
                    if (!temp.hit) {
                        list[i] = temp;

                        list[i].emitter.Center = list[i].bullet.Center;

                        for (int k = 0; k < walls.RoomWalls.Length; k++) {
                            if (temp.bullet.Collided(walls.RoomWalls[k])) {
                                temp.bullet.RemoveFromAutoDrawSet();
                                temp.emitter.RemoveFromAutoDrawSet();
                                list.Remove(list[i]);
                            }
                        }
                    }
                }
            }

            return s;
        }