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; } } }
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; }
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); } }
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); } }
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 } } }
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; } }
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); } }
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; }
public void Update(Camera camera, Control control) { Quickbar.Update(camera, control, ref HeldItem); Bag.Update(camera, control, ref HeldItem); }
/// <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; } }
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; } } }
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; } } }
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 }
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(); } }