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]); }
public void UpdateWallCollisionWithEnemy(Enemy enemy) { enemy.UpdateCollisionWithObject(this); }
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; }