Exemple #1
0
        public void Update(Control control, Map map, Player player, GameTime time, Package package)
        {
            UpdatePlayers(control, map);

            NetOutgoingMessage msgout = NetClient.CreateMessage();
            msgout.Write(BuildCommand(player));
            NetClient.SendMessage(msgout, NetDeliveryMethod.Unreliable);

            NetIncomingMessage msg;
            while ((msg = NetClient.ReadMessage()) != null)
            {
                switch(msg.MessageType)
                {
                    case NetIncomingMessageType.DiscoveryResponse:
                        NetClient.Connect(msg.SenderEndpoint);

                        Player newplayer = new Player();
                        newplayer.Initialize(PlayerTexture, BarsTexture, package, map.Spawn);
                        Messages.Add("new player");
                        Players.Add(newplayer);
                        break;
                    case NetIncomingMessageType.Data:

                        HandleData(msg);

                        break;
                    default:
                       // Messages.Add(msg.ReadString());
                        break;
                }
            }
        }
Exemple #2
0
        public void UpdatePlayers(Control control, Map map)
        {
            foreach (var player in Players)
            {
                player.Update(control, map);

                // Update Player
            }
        }
 public LiveProjectile(Weapon weapon, Vector2 location, float force, Control control, Camera camera)
     : base(weapon, location)
 {
     Movement = new Movement(location, 24, 6);
     Movement.Gravity = 0.15f;
     Movement.Drag = 0.06f;
     Movement.PushbackFrom(new Vector2(control.currentMouse.X - camera.X, control.currentMouse.Y - camera.Y), force);
     TimeToLive = 250;
 }
Exemple #4
0
        public void Draw(SpriteBatch spriteBatch, Control control, SpriteFont font, ItemPackage itemPackage)
        {
            Quickbar.Draw(spriteBatch, InventoryTexture, itemPackage, font);
            Bag.Draw(spriteBatch, InventoryTexture, itemPackage, font);

            // Dragging Item
            if(HeldItem != null)
            {
                spriteBatch.Draw(itemPackage.ItemTexture, new Rectangle(control.currentMouse.X,control.currentMouse.Y,30,30), HeldItem.Type.Location, Color.White);
                control.ChangeCursor(Control.CursorStates.Custom);
            }
        }
Exemple #5
0
        public void Update(Control control, Map map, Player player, GameTime time, Package package)
        {
            UpdatePlayers(control, map);

            NetOutgoingMessage msgout = NetServer.CreateMessage();
            msgout.Write(BuildCommand(player));
            NetServer.SendToAll(msgout, NetDeliveryMethod.Unreliable);

            Time = time;
            NetIncomingMessage msg;
            while ((msg = NetServer.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                    case NetIncomingMessageType.DiscoveryRequest:
                        NetServer.SendDiscoveryResponse(null, msg.SenderEndpoint);
                        break;
                    case NetIncomingMessageType.StatusChanged:
                        NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();
                        if (status == NetConnectionStatus.Connected)
                        {
                            Player newplayer = new Player();
                            newplayer.Initialize(PlayerTexture, BarsTexture, package, map.Spawn);

                            Players.Add(newplayer);

                            Message(NetUtility.ToHexString(msg.SenderConnection.RemoteUniqueIdentifier) + " connected!");
                        }
                        else if(status == NetConnectionStatus.Disconnected)
                        {
                            Message(NetUtility.ToHexString(msg.SenderConnection.RemoteUniqueIdentifier) + " disconnected!");
                        }
                        break;
                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.WarningMessage:
                    case NetIncomingMessageType.ErrorMessage:
                        Messages.Add(new ChatMessage(msg.ReadString(), time));
                        break;
                    case NetIncomingMessageType.Data:
                        HandleData(msg);
                        break;
                    default:
                        Messages.Add(new ChatMessage("Unhandled request ("+msg.MessageType+"): " + msg.ReadString(), time));
                        break;
                }
                NetServer.Recycle(msg);
            }
        }
Exemple #6
0
        protected override void Initialize()
        {

            Player = new Player();
            Map = new Map();
            Chat = new Chat();
            ItemPackage = new ItemPackage();
            WeaponPackage = new WeaponPackage();
            Control = new Control();
            NpcPackage = new NpcPackage();
            Ui = new Ui.Ui();
            Lighting.Initialize();

            base.Initialize();
        }
        public void Update(Control control, Camera camera)
        {
            foreach (Entity item in Entities)
            {
                if (item == null) { continue; }

                EntityType type = getType(item.Type);
                if (type.Function == EntityType.EntityFunction.Door)
                {
                    if (camera.FromRectangle(item.Area).Intersects(control.MousePos))
                    {
                        control.State = Control.CursorStates.Interact;
                        if (control.currentMouse.RightButton == ButtonState.Pressed && control.previousMouse.RightButton == ButtonState.Released)
                        {
                            if (item.Solid) { item.Solid = false; } else { item.Solid = true; }
                        }
                    }
                }
                else
                {
                    #region Custom Entities
                    foreach (Event e in item.Events)
                    {

                        // Proccess Triggers
                        switch (e.Trigger)
                        {
                            case Event.Triggers.PlayerInteract:
                                if (control.previousMouse.RightButton == ButtonState.Released && control.currentMouse.RightButton == ButtonState.Pressed)
                                {
                                    if (Rectangle.Intersect(item.Area, camera.FromRectangle(new Rectangle(control.currentMouse.X, control.currentMouse.Y, 1, 1))) != Rectangle.Empty)
                                    {
                                        e.TriggerEvent();
                                    }
                                }
                                break;
                        }

                        // Proccess Conditions

                        // Proccess Actions
                        if (e.Active)
                        {
                            switch (e.Action)
                            {
                                case Event.Actions.Solid:
                                    if (e.ActionData == "toggle")
                                    {
                                        if (item.Solid) { item.Solid = false; } else { item.Solid = true; }
                                    }
                                    break;
                                case Event.Actions.Animation:
                                    if (item.AltSprite) { item.AltSprite = false; } else { item.AltSprite = true; }
                                    break;
                            }
                            e.Active = false; // Finish Firing Event
                        }

                    }
                    #endregion
                }

            }
        }
Exemple #8
0
        public void Update( Map map, Player player, Control control, Camera camera, SpriteFont font )
        {
            for (int i = 0; i < ActiveNpcs.Count; i++)
            {
                //ActiveNpcs[i].Npc.Ai.Update(ActiveNpcs[i].Movement, player); ai off

                ActiveNpc npc = ActiveNpcs[i];

                // Follow the path
                if (npc.CurrentPath != null)
                {
                    if (npc.CurrentDestination == Point.Zero)
                        npc.CurrentDestination = npc.CurrentPath.Pop();

                    if (npc.Movement.Area.Intersects(new Rectangle(npc.CurrentDestination.X * 24, npc.CurrentDestination.Y * 24, 24, 24)))
                    {
                        if (npc.CurrentPath.Count > 0)
                            { npc.CurrentDestination = npc.CurrentPath.Pop(); }
                        else
                            { npc.CurrentPath = null; npc.CurrentDestination = Point.Zero; }

                    }
                }

                if (npc.CurrentDestination != Point.Zero)
                    MovementChase(npc.Movement, npc.CurrentDestination);
                else
                    npc.Movement.Intention.Stop();

                ActiveNpcs[i].Movement.Update(map);
                ActiveNpcs[i].Type.Race.Animation.Update(ActiveNpcs[i].Movement);

                #region Interaction

                if (control.MousePos.Intersects(camera.FromRectangle(npc.Movement.Area)))
                {
                    control.State = Control.CursorStates.Interact;
                    if (control.Click(false))
                        Interaction.Start(npc);
                }

                if (Interaction.State != NpcInteraction.NpcInteractionState.None)
                {
                    if (Geometry.Range(player.Movement.Area, npc.Movement.Area) > 7)
                        Interaction.End();
                }

                Interaction.Update(camera, control, font);

                #endregion

                #region Damage / Combat

                if(npc.Movement.Area.Intersects(player.Movement.Area))
                {
                    player.Damage(5);
                }

                #endregion

                ActiveNpcs[i].Invunerable -= 1;
            }
        }
Exemple #9
0
        public void Update(Control control, Map map)
        {
            Movement.Update(map);
            Animation.Update(Movement);

            if (Invunerable > 0) { Invunerable -= 1; }

            HealthRegenCounter++;
            if (HealthRegenCounter >= 30)
            { HealthRegenCounter = 0; if (Health < 100) { Health++; } }

            // Killing
            if (Movement.Area.Y > map.SizeY * 24)
            {
                Damage(5000);
            }
        }
Exemple #10
0
        public void Update( ref Control control, GameTime time  )
        {
            if (LockFade > 0) { LockFade--; }

            // Toggle the opening and submitting of chat messages
            if (control.previousKeyboard.IsKeyUp(Keys.Enter) && control.currentKeyboard.IsKeyDown(Keys.Enter))
            {
                if (control.Typing)
                {
                    control.Typing = false;
                    if (Writer.Message.Length > 0) {
                        // Submit message
                        Add(Writer.Message.ToString(), time, "Firebolt");
                        Writer.Clear();
                    }
                }
                else {control.Typing = true;}
            }

            // If typing
            if (control.Typing)
            {
                RefreshLog();

                if (control.currentKeyboard.IsKeyDown(Keys.CapsLock) && control.previousKeyboard.IsKeyUp(Keys.CapsLock))
                { if (CapsLock) { CapsLock = false; } else { CapsLock = true; } }

                bool Shift;
                if (CapsLock || control.currentKeyboard.IsKeyDown(Keys.LeftShift) || control.currentKeyboard.IsKeyDown(Keys.RightShift))
                    { Shift = true; } else { Shift = false; }

                // If key is allowed, add it
                foreach (Keys key in TypedKeys)
                {
                    if (control.previousKeyboard.IsKeyUp(key) && control.currentKeyboard.IsKeyDown(key))
                    {
                        if (key == Keys.Space) { Writer.Type(" ");  } else
                        if (key == Keys.OemQuotes) { if (Shift) { Writer.Type("\""); } else { Writer.Type("'"); } } else
                        if (key == Keys.OemQuestion) { if (Shift) { Writer.Type("?"); } else { Writer.Type("/"); }; } else
                        if (key == Keys.OemComma) { if (Shift) { Writer.Type("<"); } else { Writer.Type(","); } } else
                        if (key == Keys.OemPeriod) { if (Shift) { Writer.Type(">"); } else { Writer.Type("."); } } else
                        if (key == Keys.OemSemicolon) { if (Shift) { Writer.Type(":"); } else { Writer.Type(";"); } } else
                        if (key == Keys.OemOpenBrackets) { if (Shift) { Writer.Type("{"); } else { Writer.Type("["); } } else
                        if (key == Keys.OemCloseBrackets) { if (Shift) { Writer.Type("}"); } else { Writer.Type("]"); } } else
                        if (key == Keys.D0) { if (Shift) { Writer.Type(")"); } else { Writer.Type("0"); } } else
                        if (key == Keys.D1) { if (Shift) { Writer.Type("!"); } else { Writer.Type("1"); } } else
                        if (key == Keys.D2) { if (Shift) { Writer.Type("@"); } else { Writer.Type("2"); } } else
                        if (key == Keys.D3) { if (Shift) { Writer.Type("#"); } else { Writer.Type("3"); } } else
                        if (key == Keys.D4) { if (Shift) { Writer.Type("$"); } else { Writer.Type("4"); } } else
                        if (key == Keys.D5) { if (Shift) { Writer.Type("%"); } else { Writer.Type("5"); } } else
                        if (key == Keys.D6) { if (Shift) { Writer.Type("^"); } else { Writer.Type("6"); } } else
                        if (key == Keys.D7) { if (Shift) { Writer.Type("&"); } else { Writer.Type("7"); } } else
                        if (key == Keys.D8) { if (Shift) { Writer.Type("*"); } else { Writer.Type("8"); } } else
                        if (key == Keys.D9) { if (Shift) { Writer.Type("("); } else { Writer.Type("9"); } }
                        else
                            if (CapsLock || control.currentKeyboard.IsKeyDown(Keys.LeftShift) || control.currentKeyboard.IsKeyDown(Keys.RightShift))
                            { Writer.Type(key.ToString()); }
                            else
                            { Writer.Type(key.ToString().ToLower()); }
                    }
                }

                // User presses backspace
                if (control.previousKeyboard.IsKeyUp(Keys.Back) && control.currentKeyboard.IsKeyDown(Keys.Back))
                    { Writer.Backspace(); BackspaceHold = 0; }

                // User holds the backspace key
                if (control.currentKeyboard.IsKeyDown(Keys.Back))
                {
                    BackspaceHold++;
                    if (BackspaceHold > 30)
                    {
                        BackspaceHold2++;
                        if (BackspaceHold2 >= 2)
                        { Writer.Backspace(); BackspaceHold2 = 0; }
                    }
                }

                // User presses delete
                if (control.previousKeyboard.IsKeyUp(Keys.Delete) && control.currentKeyboard.IsKeyDown(Keys.Delete)) { Writer.Delete(); }

                // Navigate cursor
                if (control.previousKeyboard.IsKeyUp(Keys.Left) && control.currentKeyboard.IsKeyDown(Keys.Left)) {Writer.MoveCursor(-1);}
                if (control.previousKeyboard.IsKeyUp(Keys.Right) && control.currentKeyboard.IsKeyDown(Keys.Right)){ Writer.MoveCursor(1); }
            }

            // Update typing status
            Typing = control.Typing;
        }
Exemple #11
0
 public void Update(Camera camera, Control control)
 {
     Quickbar.Update(camera, control, ref HeldItem);
     Bag.Update(camera, control, ref HeldItem);
 }
Exemple #12
0
 /// <summary>Converts user controls into movement intentions</summary>
 public void HandleControls( Control control )
 {
     if (control.currentKeyboard.IsKeyDown(Keys.A)) { Intention.Left = true; } else { Intention.Left = false; }
     if (control.currentKeyboard.IsKeyDown(Keys.D)) { Intention.Right = true; } else {Intention.Right = false; }
     if (control.currentKeyboard.IsKeyDown(Keys.D) && control.currentKeyboard.IsKeyDown(Keys.A)) { Intention.Right = false; Intention.Left = false; }
     if (control.previousKeyboard.IsKeyUp(Keys.Space) && control.currentKeyboard.IsKeyDown(Keys.Space)) { Intention.Jumping = true; }
     if (control.currentKeyboard.IsKeyUp(Keys.Space)) { Intention.Jumping = false; }
     if (control.currentKeyboard.IsKeyUp(Keys.Space) && control.previousKeyboard.IsKeyDown(Keys.Space) && !Intention.Jumping) { Falling = true; }
     if (Moved.Y > 0 && Intention.Jumping) { Intention.Jumping = false; }
 }
Exemple #13
0
        public void Update(Camera camera, Control control, ref Item held_item)
        {
            // Toggle backpack
            if (control.previousKeyboard.IsKeyUp(Keys.B) && control.currentKeyboard.IsKeyDown(Keys.B))
            {
                if (Open) { Open = false; } else { Open = true; }
            }

            if (Open)
            {

                // Check if the mouse is within the bag area
                int offsetx = (camera.Width - (AreaWidth + OffsetX)) / 2;
                int offsety = camera.Height - (AreaHeight + OffsetY);
                Rectangle bounds = new Rectangle(offsetx - 10, offsety - 10, AreaWidth + 20, AreaHeight + 20);
                Rectangle innerBounds = new Rectangle(offsetx, offsety, AreaWidth, AreaHeight);

                if (bounds.Intersects(new Rectangle(control.currentMouse.X, control.currentMouse.Y, 1, 1)))
                {

                    // Mouse is inside the inventory area
                    int col_remainder;
                    int row_remainder;
                    int current_col = Math.DivRem( control.currentMouse.X - offsetx, IconWidth + IconMargin, out col_remainder);
                    int current_row = Math.DivRem(control.currentMouse.Y - offsety, IconWidth + IconMargin, out row_remainder);

                    // Check if mouse landed within the icon area
                    if (col_remainder <= IconWidth && row_remainder <= IconWidth && col_remainder >= 0 && row_remainder >= 0)
                    {

                        int position = current_col + current_row * Width;
                        if (innerBounds.Intersects(new Rectangle(control.currentMouse.X, control.currentMouse.Y, 1, 1)))
                            { MouseOver = (int)MathHelper.Clamp(position, 0, Items.Size); } else { MouseOver = -1; }

                        // Mousedown on button
                        if (MouseOver > -1 && control.currentMouse.LeftButton == ButtonState.Pressed && control.previousMouse.LeftButton == ButtonState.Released)
                        {
                            MouseDown = MouseOver;
                        }

                        // Mouseup
                        if (MouseDown > -1 && control.currentMouse.LeftButton == ButtonState.Released && control.previousMouse.LeftButton == ButtonState.Pressed)
                        {
                            if (held_item != null && MouseOver > -1) // Drop on quickbar, moving its position
                            {
                                Item swapItem = Items.Items[MouseOver];
                                Items.Items[MouseOver] = held_item;
                                held_item = swapItem;
                            }
                            else if (held_item != null)
                            {
                                Selected = MouseOver;
                            }
                            MouseDown = -1;
                        }
                    }
                    else
                    {
                        MouseOver = -1;
                    }
                    // While hovering
                    if (MouseDown > -1)
                    {
                        if (MouseDown != MouseOver && Items.Items[MouseDown] != null) // If the player is now dragging the item
                        {
                            held_item = Items.Items[MouseDown];
                            Items.Items[MouseDown] = null;
                        }
                    }
                }
                else
                {
                    MouseOver = -1;
                }

            }
        }
Exemple #14
0
        public void Update(GameTime gameTime, Control control, Camera camera, EntityPackage entities)
        {
            Sun.X = 100 * 24;
            Sun.Y = -500 * 24;

            for (int i = 0; i < entities.Entities.Count; i++)
            {
                if (entities.Entities[i] == null) { continue; }
                if (entities.Entities[i].Light == null)
                {
                    entities.Entities[i].Light = new Light2D()
                    {
                        Texture = Light,
                        Range = 100f,
                        Color = new Color(255,255,255),
                        X = camera.FromRectangle(entities.Entities[i].Area).Center.X,
                        Y = camera.FromRectangle(entities.Entities[i].Area).Center.Y,
                        Angle = MathHelper.TwoPi * 1f,
                        Intensity = 2222f,
                    };
                    krypton.Lights.Add(entities.Entities[i].Light);
                }
                else
                {
                    entities.Entities[i].Light.X = camera.FromRectangle(entities.Entities[i].Area).Center.X;
                    entities.Entities[i].Light.Y = camera.FromRectangle(entities.Entities[i].Area).Center.Y;
                }
            }
        }
Exemple #15
0
        public void Update( Control control, Quickbar quickbar, Camera camera, Lighting lighting, Player player )
        {
            Fluids.Update(this);
            Entities.Update(control, camera);

            #region Flora

            // Grow Flora
            GrowCounter++;
            if (GrowCounter > 1000)
            {
                Flora.Update(this);
                GrowCounter = 0;
            }

            #endregion

            #region Using Items

            // preview
            Entities.Preview = null;
            if (quickbar.CurrentItem != null && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6)
            {
                ItemUse use = new ItemUse(quickbar.CurrentItem.Type.Use);
                if (use.Type == "placeentity" && CanPlaceEntity(Entities.getType(use.IntValue), control.AtTileX, control.AtTileY))
                {
                    Entities.Preview = new Entity(Entities.getType(int.Parse(use.Value)), control.AtTileX, control.AtTileY);
                }
            }

            if (quickbar.UsingItem.Type == "placeblock" && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6)
            {
                if (placeBlock(control.AtTileX, control.AtTileY, GetBlockType(quickbar.UsingItem.IntValue)))
                    { quickbar.useItem(quickbar.Selected); }
            }

            if (quickbar.UsingItem.Type == "placewall" && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6)
            {
                if (placeWall(control.AtTileX, control.AtTileY, GetWallType(quickbar.UsingItem.IntValue)))
                    { quickbar.useItem(quickbar.Selected); }
            }

            if (quickbar.UsingItem.Type == "mineblock" && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6)
            {
                if (mineBlock(control.AtTileX, control.AtTileY))
                    { quickbar.useItem(quickbar.Selected); }
            }

            if (quickbar.UsingItem.Type == "removewall" && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6)
            {
                if (RemoveWall(control.AtTileX, control.AtTileY))
                { quickbar.useItem(quickbar.Selected); }
            }

            if (quickbar.UsingItem.Type == "placeentity" && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6 && CanPlaceEntity(Entities.getType(quickbar.UsingItem.IntValue), control.AtTileX, control.AtTileY))
            {
                if( Entities.Add(control.AtTileX, control.AtTileY, quickbar.UsingItem.IntValue) )
                    { quickbar.useItem(quickbar.Selected); }
            }

            if (quickbar.UsingItem.Type == "removeentity" && Geometry.Range(camera.FromRectangle(player.Movement.Area), control.MousePos) < 6)
            {
                if( Entities.Damage(control.AtTileX, control.AtTileY))
                    { quickbar.useItem(quickbar.Selected); }
            }

            #endregion

            #region Lighting

            lighting.ClearShadows();

            int startx = (int)MathHelper.Clamp(camera.X * -1 / 24f, 0, this.SizeX);
            int endx = startx + camera.Width / 24;
            int starty = (int)MathHelper.Clamp(camera.Y * -1 / 24f, 0, this.SizeY);
            int endy = starty + camera.Height / 24;

            for (int x = startx; x <= endx + 2; x++)
            {
                for (int y = starty; y <= endy; y++)
                {
                    if (Blocks[x, y] != null)
                    {
                        lighting.AddShadow(camera.FromRectangle(new Rectangle(x * 24, y * 24,24,24)));
                    }
                    if (Fluids.Water.Blocks[x, y] > 18)
                    {
                        lighting.AddShadow(camera.FromRectangle(new Rectangle(x * 24, y * 24, 24, 24)));
                    }
                }
            }

            #endregion
        }
        public void Update(Control control, Camera camera, Player player, NpcPackage npcs, Ui.FloatingTextCollection floatingText, ref Map map)
        {
            #region Initialize Weapons

            if (player.Inventory.Quickbar.UsingItem.Type == "useweapon")
            {
                ItemUse use = player.Inventory.Quickbar.UsingItem;
                Weapon weapon = GetWeaponById(int.Parse(use.Value));

                if (weapon.Type.Name == "Sword" && !player.Inventory.Quickbar.IsUsingItem)
                {
                    LiveWeapons.Add(new LiveSword(GetWeaponById(player.Inventory.Quickbar.UsingItem.IntValue),new Vector2(player.Movement.Area.Center.X, player.Movement.Area.Center.Y - 5), player.Movement.Direction));
                    player.Inventory.Quickbar.IsUsingItem = true;
                }

                if (weapon.Type.Name == "Arrow")
                {
                    if(control.currentMouse.LeftButton == ButtonState.Pressed){
                        if(!player.Inventory.Quickbar.IsUsingItem) {
                            player.Inventory.Quickbar.IsUsingItem = true;
                            use.Charge = 10f;
                        } else {
                            use.Charge += 0.1f;
                        }
                    } else {
                        LiveProjectile liveWeapon = new LiveProjectile(Weapons[2], new Vector2(player.Movement.Area.Center.X, player.Movement.Area.Center.Y), (float)use.Charge, control, camera);
                        use.Charge = 0;
                        LiveWeapons.Add(liveWeapon);
                        player.Inventory.Quickbar.IsUsingItem = false;
                        Player = player;
                    }
                }
            }

            #endregion

            #region Update weapons

            for ( int i = 0; i < LiveWeapons.Count; i++)
            {
                if (LiveWeapons[i].Weapon.Type.Name == "Sword")
                {
                    LiveSword weapon = LiveWeapons[i];
                    weapon.Rotation += LiveWeapons[i].Speed;
                    LiveWeapons[i].Location += player.Movement.Moved;
                    if ((LiveWeapons[i].SwingEnd > 0 && LiveWeapons[i].Rotation > LiveWeapons[i].SwingEnd) || (LiveWeapons[i].SwingEnd < 0 && LiveWeapons[i].Rotation < LiveWeapons[i].SwingEnd))
                    {
                        LiveWeapons.RemoveAt(i);
                        player.Inventory.Quickbar.IsUsingItem = false;
                    }
                } else if(LiveWeapons[i].Weapon.Type.Name == "Arrow")
                {
                    LiveProjectile weapon = LiveWeapons[i];
                    if (weapon.Movement.Velocity != Vector2.Zero)
                    {
                        weapon.Movement.Update(map);
                    }
                    else
                    {
                        weapon.TimeToLive -= 1;
                        if (weapon.TimeToLive <= 0) { LiveWeapons.RemoveAt(i); }
                    }
                }
            }

            #endregion

            #region Check for weapon collisions

            // Npc Collisions
            for (int w = 0; w < LiveWeapons.Count; w++)
            {

                var weapon = LiveWeapons[w];
                for (int i = 0; i < npcs.ActiveNpcs.Count; i++)
                {

                    if (weapon.Weapon.Type.Name == "Sword")
                    {
                        LiveSword sword = weapon;
                        if (weapon.currentLocation.Intersects(npcs.ActiveNpcs[i].Movement.Area))
                        {
                            if (npcs.Damage(npcs.ActiveNpcs[i], 10, weapon.Location))
                            {
                                floatingText.Add("10", weapon.Location);
                            }
                        }
                    }
                    else if(weapon.Weapon.Type.Name == "Arrow" && weapon.Movement.Velocity != Vector2.Zero)
                    {
                        LiveProjectile projectile = weapon;
                        if (projectile.Movement.Area.Intersects(npcs.ActiveNpcs[i].Movement.Area))
                        {
                            if (npcs.Damage(npcs.ActiveNpcs[i], 10, weapon.Location))
                            {
                                floatingText.Add("10", new Vector2(projectile.Movement.Area.Center.X, projectile.Movement.Area.Center.Y));
                                LiveWeapons.RemoveAt(w);
                            }
                        }
                    }
                }

                // X/Y Collisions
                int startx = (int)MathHelper.Clamp(camera.X * -1 / 24f, 0, map.SizeX);
                int endx = startx + camera.Width / 24;
                int starty = (int)MathHelper.Clamp(camera.Y * -1 / 24f, 0, map.SizeY);
                int endy = starty + camera.Height / 24;

                for (int x = startx; x < endx; x++)
                {
                    for (int y = starty; y < endy; y++)
                    {

                        Rectangle area = new Rectangle(x * 24, y * 24, 24,24);

                        if (map.Flora.Flora[x, y] != null)
                        {
                            if (weapon.Weapon.Type.Name == "Sword")
                            {
                                if (weapon.currentLocation.Intersects(area)) { map.Flora.Flora[x, y] = null; }
                            }
                            else if (weapon.Weapon.Type.Name == "Arrow")
                            {
                                if (weapon.Movement.Area.Intersects(area)) { map.Flora.Flora[x, y] = null; }
                            }
                        }

                    }
                }

            }

            #endregion
        }
        public void Update(Camera camera, Control control, SpriteFont font)
        {
            #region Setup Dialog Area

            if (State == NpcInteractionState.Intro || State == NpcInteractionState.Gossip)
            {
                // Calculate dialog area
                CurrentLines = TextHelper.SplitWrap(CurrentText, 330, font, 0.75f).Length;
                CurrentBody = camera.FromRectangle(new Rectangle(Subject.Movement.Area.Center.X - Width / 2, Subject.Movement.Area.Top - Height - 20, Width, Height));
                CurrentHeader = camera.FromRectangle(new Rectangle(Subject.Movement.Area.Center.X - Width / 2, Subject.Movement.Area.Top - Height - 52, Width, 32));
                Height = 30 + (int)(font.MeasureString("S").Y - 4) * (CurrentLines + 1);

                if (control.MousePos.Intersects(CurrentBody))
                    control.MouseLock = true;
            }

            #endregion

            #region Intro

            if (State == NpcInteractionState.Intro)
            {

                // Actions
                Vector2 footer_offset = new Vector2(CurrentBody.X + 10, CurrentBody.Y + Height - 25);
                CurrentSelection = "";
                Vector2 current_font;

                // if shop
                current_font = font.MeasureString("Shop") * ScaleActions;
                if (control.MousePos.Intersects(new Rectangle((int)footer_offset.X, (int)footer_offset.Y, (int)current_font.X, (int)current_font.Y)))
                {
                    CurrentSelection = "Shop";
                    if (control.Click()) { State = NpcInteractionState.Shop; }
                }
                footer_offset.X += (int)(font.MeasureString("Shop").X * 0.7f) + 10;

                // if gossip
                current_font = font.MeasureString("Gossip") * ScaleActions;
                if (control.MousePos.Intersects(new Rectangle((int)footer_offset.X, (int)footer_offset.Y, (int)current_font.X, (int)current_font.Y)))
                {
                    CurrentSelection = "Gossip";
                    if (control.Click()) { State = NpcInteractionState.Gossip; CurrentText = Subject.Type.Dialog.Get(State).Line; }
                }
                footer_offset.X += (int)(font.MeasureString("Gossip").X * 0.7f) + 10;

                // if follow
                current_font = font.MeasureString("Follow Me") * ScaleActions;
                if (control.MousePos.Intersects(new Rectangle((int)footer_offset.X, (int)footer_offset.Y, (int)current_font.X, (int)current_font.Y)))
                {
                    CurrentSelection = "Follow Me";
                    if (control.Click()) { State = NpcInteractionState.None; }
                }
                footer_offset.X += (int)(font.MeasureString("Follow Me").X * 0.7f) + 10;

            }

            #endregion
        }
Exemple #18
0
        public void Update(Camera camera, Control control, ref Item held_item)
        {
            #region Scrolling and Hotkeys

            if (control.currentMouse.ScrollWheelValue > control.previousMouse.ScrollWheelValue)
            { Selected++; if (Selected > Size - 1) { Selected = Size - 1; } }
            if (control.currentMouse.ScrollWheelValue < control.previousMouse.ScrollWheelValue)
            { Selected--; if (Selected < 0) { Selected = 0; } }

            if (!control.Typing){
                if (control.currentKeyboard.IsKeyDown(Keys.D1) && control.previousKeyboard.IsKeyUp(Keys.D1) && Size >= 1){ Selected = 0; }
                if (control.currentKeyboard.IsKeyDown(Keys.D2) && control.previousKeyboard.IsKeyUp(Keys.D2) && Size >= 2) { Selected = 1; }
                if (control.currentKeyboard.IsKeyDown(Keys.D3) && control.previousKeyboard.IsKeyUp(Keys.D3) && Size >= 3) { Selected = 2; }
                if (control.currentKeyboard.IsKeyDown(Keys.D4) && control.previousKeyboard.IsKeyUp(Keys.D4) && Size >= 4) { Selected = 3; }
                if (control.currentKeyboard.IsKeyDown(Keys.D5) && control.previousKeyboard.IsKeyUp(Keys.D5) && Size >= 5) { Selected = 4; }
                if (control.currentKeyboard.IsKeyDown(Keys.D6) && control.previousKeyboard.IsKeyUp(Keys.D6) && Size >= 6) { Selected = 5; }
                if (control.currentKeyboard.IsKeyDown(Keys.D7) && control.previousKeyboard.IsKeyUp(Keys.D7) && Size >= 7) { Selected = 6; }
                if (control.currentKeyboard.IsKeyDown(Keys.D8) && control.previousKeyboard.IsKeyUp(Keys.D8) && Size >= 8) { Selected = 7; }
                if (control.currentKeyboard.IsKeyDown(Keys.D9) && control.previousKeyboard.IsKeyUp(Keys.D9) && Size >= 9) { Selected = 8; }
                if (control.currentKeyboard.IsKeyDown(Keys.D0) && control.previousKeyboard.IsKeyUp(Keys.D0) && Size >= 10) { Selected = 9; }
            }

            #endregion

            #region Positioning

            if (Layout == "horizontal")
            {
                Area.Height = 64;
                Area.Width = Size * (64 + Margin);
            }
            else
            {
                Area.Width = 64;
                Area.Height = Size * (64 + Margin);
            }

            if (Horizontal == "left")
                { Area.X = (int)Offset.X; }
            else if (Horizontal == "right")
                { Area.X = (int)(camera.Width - (Offset.X + Area.Width)); }
            else
                { Area.X = (int)(camera.Width - (Offset.X + Area.Width)) / 2; }

            if (Vertical == "top")
                { Area.Y = (int)Offset.Y; }
            else if (Vertical == "bottom")
                { Area.Y = (int)(camera.Height - (Offset.Y + Area.Height)); }
            else
                { Area.Y = (int)(camera.Height - (Offset.Y + Area.Height)) / 2; }

            #endregion

            #region Selection and item management

            bool locked_use = false;

            // Calculate if the mouse is hovering over any buttons or not
            if (Area.Intersects(control.MousePos))
            {
                locked_use = true;
                int innerpos = 0;
                if (Layout == "horizontal")
                {
                    int mousepos = Math.DivRem(control.currentMouse.X - Area.X, 64 + Margin, out innerpos);
                    if (innerpos <= 64) { MouseOver = mousepos; } else { MouseOver = -1; }
                }
                else
                {
                    int mousepos = Math.DivRem(control.currentMouse.Y - Area.Y, 64 + Margin, out innerpos);
                    if (innerpos <= 64) { MouseOver = mousepos; } else { MouseOver = -1; }
                }
            } else { MouseOver = -1; }

            // Check if the user just clicked their mouse, if so mark the button as being currently mouse downed on
            if ( MouseOver > -1 && control.currentMouse.LeftButton == ButtonState.Pressed && control.previousMouse.LeftButton == ButtonState.Released)
                { MouseDown = MouseOver; }

            // If the mouse is down on a button and it leaves the button, start dragging the item
            if (MouseDown > -1)
            {
                if (MouseDown != MouseOver && Items.Items[MouseDown] != null)
                {
                    held_item = Items.Items[MouseDown];
                    Items.Items[MouseDown] = null;
                }
            }

            // If the mouse was down and the user has now released the left mouse button
            if (MouseDown > -1 && control.currentMouse.LeftButton == ButtonState.Released && control.previousMouse.LeftButton == ButtonState.Pressed)
            {
                if (held_item != null && MouseOver > -1) // Holding and item and hovering over a button
                {
                    Item swapItem = Items.Items[MouseOver];
                    Items.Items[MouseOver] = held_item;
                    held_item = swapItem;
                }
                else if (held_item != null) // Holding an item and not overing over any other button
                {
                    Selected = MouseOver;
                }
                else if (MouseDown == MouseOver)
                {
                    Selected = MouseOver;
                }
                MouseDown = -1;
            }

            #endregion

            // Using Items
            if (!locked_use && Selected > -1 && control.currentMouse.LeftButton == ButtonState.Pressed && control.MouseLock == false && Items.Items[Selected] != null)
                { UsingItem.Update(Items.Items[Selected].Type.Use); }
            else if(control.currentMouse.LeftButton == ButtonState.Released && control.previousMouse.LeftButton == ButtonState.Pressed){
                // Wait up, some weapons want to finish
            }
            else { UsingItem.Clear(); }
        }