public void unstackCreature(Creature creatureA, Creature creatureB, float speed) { if (creatureA.Rectangle.Intersects(creatureB.Rectangle)) { if (creatureA.Position.X >= creatureB.Position.X) { if (!creatureA.VelocityX.ContainsKey("stack" + creatureB.CreatureID)) creatureA.VelocityX.Add("stack" + creatureB.CreatureID, speed); if (!creatureB.VelocityX.ContainsKey("stack" + creatureA.CreatureID)) creatureB.VelocityX.Add("stack" + creatureA.CreatureID, -speed); } else { if (!creatureA.VelocityX.ContainsKey("stack" + creatureB.CreatureID)) creatureA.VelocityX.Add("stack" + creatureB.CreatureID, -speed); if (!creatureB.VelocityX.ContainsKey("stack" + creatureA.CreatureID)) creatureB.VelocityX.Add("stack" + creatureA.CreatureID, speed); } if (creatureA.Position.Y >= creatureB.Position.Y) { if (!creatureA.VelocityY.ContainsKey("stack" + creatureB.CreatureID)) creatureA.VelocityY.Add("stack" + creatureB.CreatureID, speed); if (!creatureB.VelocityY.ContainsKey("stack" + creatureA.CreatureID)) creatureB.VelocityY.Add("stack" + creatureA.CreatureID, -speed); } else { if (!creatureA.VelocityY.ContainsKey("stack" + creatureB.CreatureID)) creatureA.VelocityY.Add("stack" + creatureB.CreatureID, -speed); if (!creatureB.VelocityY.ContainsKey("stack" + creatureA.CreatureID)) creatureB.VelocityY.Add("stack" + creatureA.CreatureID, speed); } } else { if (creatureA.VelocityX.ContainsKey("stack" + creatureB.CreatureID)) creatureA.VelocityX.Remove("stack" + creatureB.CreatureID); if (creatureA.VelocityY.ContainsKey("stack" + creatureB.CreatureID)) creatureA.VelocityY.Remove("stack" + creatureB.CreatureID); if (creatureB.VelocityX.ContainsKey("stack" + creatureA.CreatureID)) creatureB.VelocityX.Remove("stack" + creatureA.CreatureID); if (creatureB.VelocityY.ContainsKey("stack" + creatureA.CreatureID)) creatureB.VelocityY.Remove("stack" + creatureA.CreatureID); } }
public void moveCreature(Creature creature, Vector2 position) { if (creature.Destination == null || creature.Destination == new Vector2(0, 0)) creature.Destination = position; if (!creature.VelocityX.ContainsKey("selectedMovement")) creature.VelocityX.Add("selectedMovement", 0); if (!creature.VelocityY.ContainsKey("selectedMovement")) creature.VelocityY.Add("selectedMovement", 0); if (creature.Position.X != (creature.Destination.X - (creature.Texture.Width / 2)) || creature.Position.Y != (creature.Destination.Y - (creature.Texture.Height / 2))) { if (creature.Position.X < creature.Destination.X - (creature.Texture.Width / 2)) { creature.VelocityX["selectedMovement"] = 3; if (creature.Position.X + creature.VelocityX["selectedMovement"] > creature.Destination.X - (creature.Texture.Width / 2)) creature.VelocityX["selectedMovement"] = 1; } if (creature.Position.X > creature.Destination.X - (creature.Texture.Width / 2)) { creature.VelocityX["selectedMovement"] = -3; if (creature.Position.X + creature.VelocityX["selectedMovement"] < creature.Destination.X - (creature.Texture.Width / 2)) creature.VelocityX["selectedMovement"] = -1; } if (creature.Position.X == creature.Destination.X - (creature.Texture.Width / 2)) creature.VelocityX["selectedMovement"] = 0; if (creature.Position.Y < creature.Destination.Y - (creature.Texture.Height / 2)) { creature.VelocityY["selectedMovement"] = 3; if (creature.Position.Y + creature.VelocityY["selectedMovement"] > creature.Destination.Y - (creature.Texture.Height / 2)) creature.VelocityY["selectedMovement"] = 1; } if (creature.Position.Y > creature.Destination.Y - (creature.Texture.Height / 2)) { creature.VelocityY["selectedMovement"] = -3; if (creature.Position.Y + creature.VelocityY["selectedMovement"] < creature.Destination.Y - (creature.Texture.Height / 2)) creature.VelocityY["selectedMovement"] = -1; } if (creature.Position.Y == creature.Destination.Y - (creature.Texture.Height / 2)) creature.VelocityY["selectedMovement"] = 0; } else { creature.Destination = new Vector2(0, 0); creature.VelocityX.Remove("selectedMovement"); creature.VelocityY.Remove("selectedMovement"); creature.IsMoving = false; } }
public void resetMovement(Creature creature) { if (creature.VelocityX.ContainsKey("selectedMovement")) creature.VelocityX.Remove("selectedMovement"); if (creature.VelocityY.ContainsKey("selectedMovement")) creature.VelocityY.Remove("selectedMovement"); creature.Destination = new Vector2(0, 0); creature.IsMoving = false; }
public void creatureCollision(Creature creatureA, Creature creatureB) { bool collisionX = false, collisionY = false; if (creatureA.NetVelocityY != 0 || creatureB.NetVelocityY != 0 && creatureA.NetVelocityY != creatureB.NetVelocityY) { } else { //top if ((creatureA.Rectangle.Y + creatureA.Texture.Height >= creatureB.Rectangle.Y) && (creatureA.Rectangle.Y + creatureA.Texture.Height <= creatureB.Rectangle.Y + 25) && (creatureA.Rectangle.X + creatureA.Texture.Width >= creatureB.Rectangle.X + 4) && (creatureA.Rectangle.X <= creatureB.Rectangle.X + creatureB.Texture.Width - 4)) { if (creatureA.NetVelocityY > creatureB.NetVelocityY) { if (!creatureB.VelocityY.ContainsKey("collision" + creatureA.CreatureID)) creatureB.VelocityY.Add("collision" + creatureA.CreatureID, creatureA.NetVelocityY); collisionY = true; } if (creatureA.NetVelocityY == creatureB.NetVelocityY) collisionY = true; } //bottom if ((creatureA.Rectangle.Y <= creatureB.Rectangle.Y + creatureB.Texture.Height) && (creatureA.Rectangle.Y >= creatureB.Rectangle.Y + creatureB.Texture.Height - 25) && (creatureA.Rectangle.X + creatureA.Texture.Width >= creatureB.Rectangle.X + 4) && (creatureA.Rectangle.X <= creatureB.Rectangle.X + creatureB.Texture.Width - 4)) { if (creatureA.NetVelocityY < creatureB.NetVelocityY) { if (!creatureB.VelocityY.ContainsKey("collision" + creatureA.CreatureID)) creatureB.VelocityY.Add("collision" + creatureA.CreatureID, creatureA.NetVelocityY); collisionY = true; } if (creatureA.NetVelocityY == creatureB.NetVelocityY) collisionY = true; } } if (collisionY == false) if (creatureB.VelocityY.ContainsKey("collision" + creatureA.CreatureID)) creatureB.VelocityY.Remove("collision" + creatureA.CreatureID); if (creatureA.NetVelocityX != 0 || creatureB.NetVelocityX != 0 && creatureA.NetVelocityX != creatureB.NetVelocityX) { } else { //left if ((creatureA.Rectangle.X + creatureA.Texture.Width >= creatureB.Rectangle.X) && (creatureA.Rectangle.X + creatureA.Texture.Width <= creatureB.Rectangle.X + 25) && (creatureA.Rectangle.Y + creatureA.Texture.Height >= creatureB.Rectangle.Y + 4) && (creatureA.Rectangle.Y <= creatureB.Rectangle.Y + creatureB.Texture.Height - 4)) { if (creatureA.NetVelocityX > creatureB.NetVelocityX) { if (!creatureB.VelocityX.ContainsKey("collision" + creatureA.CreatureID)) creatureB.VelocityX.Add("collision" + creatureA.CreatureID, creatureA.NetVelocityX); collisionX = true; } if (creatureA.NetVelocityX == creatureB.NetVelocityX) collisionX = true; } //right if ((creatureA.Rectangle.X <= creatureB.Rectangle.X + creatureB.Texture.Width) && (creatureA.Rectangle.X >= creatureB.Rectangle.X + creatureB.Texture.Width - 25) && (creatureA.Rectangle.Y + creatureA.Texture.Height >= creatureB.Rectangle.Y + 4) && (creatureA.Rectangle.Y <= creatureB.Rectangle.Y + creatureB.Texture.Height - 4)) { if (creatureA.NetVelocityX < creatureB.NetVelocityX) { if (!creatureB.VelocityX.ContainsKey("collision" + creatureA.CreatureID)) creatureB.VelocityX.Add("collision" + creatureA.CreatureID, creatureA.NetVelocityX); collisionX = true; } if (creatureA.NetVelocityX == creatureB.NetVelocityX) collisionX = true; } } if (collisionX == false) if (creatureB.VelocityX.ContainsKey("collision" + creatureA.CreatureID)) creatureB.VelocityX.Remove("collision" + creatureA.CreatureID); }