public void Use(GameTime gameTime, Vector2 mousePosition) { Vector2 mouseDirection = mousePosition - new Vector2(Holder.Position.X, Holder.Position.Y); mouseDirection.Normalize(); Humper.IBox box = world.CollisionWorld.Create(Holder.Position.X + Holder.Width / 2, Holder.Position.Y + Holder.Height / 2, ShotTexture.Width, ShotTexture.Height); shots.Add(new Tuple <double, VelocityObject>(gameTime.TotalGameTime.TotalMilliseconds, new VelocityObject(box, Vector2.Normalize(mouseDirection) * SHOT_SPEED))); }
public DroppedItem(World world, Vector2 position, IItem item) { this.world = world; this.Item = item; this.Velocity = new Vector2(0, -10); box = world.CollisionWorld.Create(position.X, position.Y, item.Texture.Width, item.Texture.Height); Thread t = new Thread(() => { Thread.Sleep(2000); box.AddTags(Collider.Item); box.Data = this; }); t.Start(); }
public void Update(GameTime gameTime) { bool collidedTile = false; var move = box.Move(Position.X + Velocity.X, Position.Y + Velocity.Y, (col) => { if (col.Other.HasTag(Collider.Tile)) { collidedTile = true; return(CollisionResponses.Bounce); } return(CollisionResponses.Ignore); }); if (box.HasTag(Collider.Item)) { // check if any players are near int offset = Constants.TILE_SIZE * 3; var boxes = world.CollisionWorld.Find(new Humper.Base.RectangleF(Position.X - offset, Position.Y - offset, Item.Texture.Width + offset, Item.Texture.Height + offset)); var players = boxes.Where((b) => b.HasTag(Collider.Player)); if (players.Any()) { Humper.IBox player = players.First(); Vector2 lDist = new Vector2(player.X, player.Y) - Position; foreach (var p in players.ToArray()) { var dist = new Vector2(p.X, p.Y) - Position; if (lDist.LengthSquared() > dist.LengthSquared()) { lDist = dist; player = p; } } var direction = Vector2.Normalize(lDist) * 3; box.Move(box.X + direction.X, box.Y + direction.Y, (col) => CollisionResponses.Ignore); } } Vector2 vel = Vector2.Zero; if (collidedTile) { vel = new Vector2(move.Destination.X - move.Origin.X, move.Destination.Y - move.Origin.Y); } else { vel = new Vector2(Velocity.X, Velocity.Y + 1); } Velocity = 0.9f * vel; }