Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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;
        }