public override void FrameUpdate(FrameEventArgs e) { placementManager.FrameUpdate(e); _entityManager.FrameUpdate(e.DeltaSeconds); var mousePosWorld = eyeManager.ScreenToWorld(new ScreenCoordinates(inputManager.MouseScreenPosition)); var entityToClick = GetEntityUnderPosition(mousePosWorld); if (entityToClick == lastHoveredEntity) { return; } if (lastHoveredEntity != null && !lastHoveredEntity.Deleted) { lastHoveredEntity.GetComponent <IClientClickableComponent>().OnMouseLeave(); } lastHoveredEntity = entityToClick; if (lastHoveredEntity != null) { lastHoveredEntity.GetComponent <IClientClickableComponent>().OnMouseEnter(); } }
public override void FrameUpdate(RenderFrameEventArgs e) { placementManager.FrameUpdate(e); _entityManager.FrameUpdate(e.Elapsed); var map = playerManager.LocalPlayer.ControlledEntity.GetComponent <ITransformComponent>().MapID; var mousePosWorld = eyeManager.ScreenToWorld(new ScreenCoordinates(inputManager.MouseScreenPosition, map)); IEntity entityToClick = GetEntityUnderPosition(mousePosWorld); if (entityToClick == lastHoveredEntity) { return; } if (lastHoveredEntity != null) { lastHoveredEntity.GetComponent <IClientClickableComponent>().OnMouseLeave(); } lastHoveredEntity = entityToClick; if (lastHoveredEntity != null) { lastHoveredEntity.GetComponent <IClientClickableComponent>().OnMouseEnter(); } }
protected override void Update(ProcessFrameEventArgs args) { if (!Visible) { return; } if (playerManager.LocalPlayer?.ControlledEntity == null) { contents.Text = "No attached entity."; return; } var entityTransform = playerManager.LocalPlayer.ControlledEntity.Transform; var playerWorldOffset = entityTransform.WorldPosition; var playerScreen = eyeManager.WorldToScreen(playerWorldOffset); var mouseScreenPos = inputManager.MouseScreenPosition; int mouseWorldMap; int mouseWorldGrid; GridCoordinates mouseWorldPos; ScreenCoordinates worldToScreen; IEntity mouseEntity = null; try { var coords = eyeManager.ScreenToWorld(new ScreenCoordinates(mouseScreenPos)); mouseWorldMap = (int)coords.MapID; mouseWorldGrid = (int)coords.GridID; mouseWorldPos = coords; worldToScreen = eyeManager.WorldToScreen(coords); if (stateManager.CurrentState is GameScreen gameScreen) { mouseEntity = gameScreen.GetEntityUnderPosition(coords); } } catch { mouseWorldPos = eyeManager.ScreenToWorld(mouseScreenPos); mouseWorldGrid = 0; mouseWorldMap = 0; worldToScreen = new ScreenCoordinates(); } contents.Text = $@"Positioning Debug: Character Pos: World: {playerWorldOffset} Screen: {playerScreen} Grid: {entityTransform.GridID} Map: {entityTransform.MapID} Mouse Pos: Screen: {mouseScreenPos} World: {mouseWorldPos} W2S: {worldToScreen.Position} Grid: {mouseWorldGrid} Map: {mouseWorldMap} Entity: {mouseEntity}"; MinimumSizeChanged(); }
protected override void Update(ProcessFrameEventArgs args) { if (!Visible) { return; } if (playerManager.LocalPlayer?.ControlledEntity == null) { contents.Text = "No attached entity."; return; } var entityTransform = playerManager.LocalPlayer.ControlledEntity.GetComponent <ITransformComponent>(); var playerWorldOffset = entityTransform.WorldPosition; var playerScreen = eyeManager.WorldToScreen(playerWorldOffset); var mouseScreenPos = inputManager.MouseScreenPosition; int mouseWorldMap; int mouseWorldGrid; Vector2 mouseWorldPos; try { var coords = eyeManager.ScreenToWorld(new ScreenCoordinates(mouseScreenPos, entityTransform.MapID)); mouseWorldMap = (int)coords.MapID; mouseWorldGrid = (int)coords.GridID; mouseWorldPos = coords.Position; } catch { mouseWorldPos = eyeManager.ScreenToWorld(mouseScreenPos); mouseWorldGrid = 0; mouseWorldMap = 0; } contents.Text = $@"Positioning Debug: Character Pos: World: {playerWorldOffset} Screen: {playerScreen} Grid: {entityTransform.GridID} Map: {entityTransform.MapID} Mouse Pos: Screen: {mouseScreenPos} World: {mouseWorldPos} Grid: {mouseWorldGrid} Map: {mouseWorldMap}"; MinimumSizeChanged(); }
public override void Update(float frameTime) { base.Update(frameTime); if (!_gameTiming.IsFirstTimePredicted) { return; } var canFireSemi = _isFirstShot; var state = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use); if (!_combatModeSystem.IsInCombatMode() || state != BoundKeyState.Down) { _isFirstShot = true; _blocked = false; return; } _isFirstShot = false; var entity = _playerManager.LocalPlayer.ControlledEntity; if (entity == null || !entity.TryGetComponent(out IHandsComponent hands)) { return; } var held = hands.ActiveHand; if (held == null || !held.TryGetComponent(out ClientRangedWeaponComponent weapon)) { _blocked = true; return; } if (_blocked) { return; } var worldPos = _eyeManager.ScreenToWorld(_inputManager.MouseScreenPosition); if (weapon.Automatic || canFireSemi) { Logger.Debug(IoCManager.Resolve <IGameTiming>().CurTick.ToString()); weapon.SyncFirePos(worldPos); } }
protected override void Draw(DrawingHandle handle) { if (_parallaxTexture == null) { return; } var(sizeX, sizeY) = _parallaxTexture.Size; var(posX, posY) = _eyeManager.ScreenToWorld(Vector2.Zero).ToWorld().Position; var(ox, oy) = (Vector2i) new Vector2(-posX / Slowness, posY / Slowness); ox = MathHelper.Mod(ox, sizeX); oy = MathHelper.Mod(oy, sizeY); handle.DrawTexture(_parallaxTexture, new Vector2(ox, oy)); handle.DrawTexture(_parallaxTexture, new Vector2(ox - sizeX, oy)); handle.DrawTexture(_parallaxTexture, new Vector2(ox, oy - sizeY)); handle.DrawTexture(_parallaxTexture, new Vector2(ox - sizeX, oy - sizeY)); }
public override void Update(float frameTime) { base.Update(frameTime); var canFireSemi = _isFirstShot; var state = _inputSystem.CmdStates.GetState(ContentKeyFunctions.Attack); if (!_combatModeSystem.UseOrAttackIsDown && state != BoundKeyState.Down) { _isFirstShot = true; _blocked = false; return; } _isFirstShot = false; var entity = _playerManager.LocalPlayer.ControlledEntity; if (entity == null || !entity.TryGetComponent(out IHandsComponent hands)) { return; } var held = hands.ActiveHand; if (held == null || !held.TryGetComponent(out ClientRangedWeaponComponent weapon)) { _blocked = true; return; } if (_blocked) { return; } var worldPos = _eyeManager.ScreenToWorld(_inputManager.MouseScreenPosition); if (weapon.Automatic || canFireSemi) { weapon.SyncFirePos(worldPos); } }
public override void FrameUpdate(FrameEventArgs e) { placementManager.FrameUpdate(e); _entityManager.FrameUpdate(e.DeltaSeconds); var mousePosWorld = eyeManager.ScreenToWorld(new ScreenCoordinates(inputManager.MouseScreenPosition)); var entityToClick = GetEntityUnderPosition(mousePosWorld); var inRange = false; if (playerManager.LocalPlayer.ControlledEntity != null && entityToClick != null) { var playerPos = playerManager.LocalPlayer.ControlledEntity.Transform.GridPosition; var entityPos = entityToClick.Transform.GridPosition; var distance = playerPos.Distance(_mapManager, entityPos); inRange = distance <= VerbUtility.InteractionRange; } InteractionOutlineComponent outline; if (entityToClick == lastHoveredEntity) { if (entityToClick != null && entityToClick.TryGetComponent(out outline)) { outline.UpdateInRange(inRange); } return; } if (lastHoveredEntity != null && !lastHoveredEntity.Deleted && lastHoveredEntity.TryGetComponent(out outline)) { outline.OnMouseLeave(); } lastHoveredEntity = entityToClick; if (lastHoveredEntity != null && lastHoveredEntity.TryGetComponent(out outline)) { outline.OnMouseEnter(inRange); } }
public override void FrameUpdate(FrameEventArgs e) { base.FrameUpdate(e); var mousePosWorld = _eyeManager.ScreenToWorld(_inputManager.MouseScreenPosition); var entityToClick = _userInterfaceManager.CurrentlyHovered != null ? null : GetEntityUnderPosition(mousePosWorld); var inRange = false; if (_playerManager.LocalPlayer.ControlledEntity != null && entityToClick != null) { var playerPos = _playerManager.LocalPlayer.ControlledEntity.Transform.MapPosition; var entityPos = entityToClick.Transform.MapPosition; inRange = _entitySystemManager.GetEntitySystem <SharedInteractionSystem>() .InRangeUnobstructed(playerPos, entityPos, predicate: entity => entity != _playerManager.LocalPlayer.ControlledEntity || entity != entityToClick); } InteractionOutlineComponent outline; if (entityToClick == _lastHoveredEntity) { if (entityToClick != null && entityToClick.TryGetComponent(out outline)) { outline.UpdateInRange(inRange); } return; } if (_lastHoveredEntity != null && !_lastHoveredEntity.Deleted && _lastHoveredEntity.TryGetComponent(out outline)) { outline.OnMouseLeave(); } _lastHoveredEntity = entityToClick; if (_lastHoveredEntity != null && _lastHoveredEntity.TryGetComponent(out outline)) { outline.OnMouseEnter(inRange); } }
public override void FrameUpdate(FrameEventArgs e) { base.FrameUpdate(e); var mousePosWorld = _eyeManager.ScreenToWorld(new ScreenCoordinates(_inputManager.MouseScreenPosition)); var entityToClick = GetEntityUnderPosition(mousePosWorld); var inRange = false; if (_playerManager.LocalPlayer.ControlledEntity != null && entityToClick != null) { var playerPos = _playerManager.LocalPlayer.ControlledEntity.Transform.WorldPosition; var entityPos = entityToClick.Transform.WorldPosition; inRange = (entityPos - playerPos).Length <= VerbUtility.InteractionRange; } InteractionOutlineComponent outline; if (entityToClick == _lastHoveredEntity) { if (entityToClick != null && entityToClick.TryGetComponent(out outline)) { outline.UpdateInRange(inRange); } return; } if (_lastHoveredEntity != null && !_lastHoveredEntity.Deleted && _lastHoveredEntity.TryGetComponent(out outline)) { outline.OnMouseLeave(); } _lastHoveredEntity = entityToClick; if (_lastHoveredEntity != null && _lastHoveredEntity.TryGetComponent(out outline)) { outline.OnMouseEnter(inRange); } }
public bool OnButtonPressed(GUIBoundKeyEventArgs args, IEntity item) { args.Handle(); if (item == null) { return(false); } if (args.Function == ContentKeyFunctions.ExamineEntity) { _entitySystemManager.GetEntitySystem <ExamineSystem>() .DoExamine(item); } else if (args.Function == ContentKeyFunctions.OpenContextMenu) { _entitySystemManager.GetEntitySystem <VerbSystem>() .OpenContextMenu(item, new ScreenCoordinates(args.PointerLocation.Position)); } else if (args.Function == ContentKeyFunctions.ActivateItemInWorld) { var inputSys = _entitySystemManager.GetEntitySystem <InputSystem>(); var func = args.Function; var funcId = _inputManager.NetworkBindMap.KeyFunctionID(args.Function); var mousePosWorld = _eyeManager.ScreenToWorld(args.PointerLocation); var message = new FullInputCmdMessage(_gameTiming.CurTick, funcId, BoundKeyState.Down, mousePosWorld, args.PointerLocation, item.Uid); // client side command handlers will always be sent the local player session. var session = _playerManager.LocalPlayer.Session; inputSys.HandleInputCommand(session, func, message); } else { return(false); } return(true); }
protected override void FrameUpdate(FrameEventArgs args) { if (!VisibleInTree) { return; } var stringBuilder = new StringBuilder(); var mouseScreenPos = inputManager.MouseScreenPosition; var screenSize = _displayManager.ScreenSize; int mouseWorldMap; GridCoordinates mouseWorldPos; TileRef tile; try { var coords = eyeManager.ScreenToWorld(new ScreenCoordinates(mouseScreenPos)); mouseWorldMap = (int)_mapManager.GetGrid(coords.GridID).ParentMapId; mouseWorldPos = coords; tile = _mapManager.GetGrid(coords.GridID).GetTileRef(coords); } catch { mouseWorldPos = eyeManager.ScreenToWorld(mouseScreenPos); mouseWorldMap = 0; tile = new TileRef(); } stringBuilder.AppendFormat(@"Positioning Debug: Screen Size: {0} Mouse Pos: Screen: {1} World: {2} Map: {3} Tile: {5} GUI: {4}", screenSize, mouseScreenPos, mouseWorldPos, mouseWorldMap, UserInterfaceManager.CurrentlyHovered, tile); stringBuilder.AppendLine("\nAttached Entity:"); if (playerManager.LocalPlayer?.ControlledEntity == null) { stringBuilder.AppendLine("No attached entity."); } else { var entityTransform = playerManager.LocalPlayer.ControlledEntity.Transform; var playerWorldOffset = entityTransform.WorldPosition; var playerScreen = eyeManager.WorldToScreen(playerWorldOffset); stringBuilder.AppendFormat(@" World: {0} Screen: {1} Grid: {2} Map: {3}", playerWorldOffset, playerScreen, entityTransform.GridID, entityTransform.MapID); } contents.Text = stringBuilder.ToString(); MinimumSizeChanged(); }
public override void MouseDown(MouseButtonEventArgs eventargs) { if (playerManager.LocalPlayer == null || placementManager.MouseDown(eventargs)) { return; } var map = playerManager.LocalPlayer.ControlledEntity.GetComponent <ITransformComponent>().MapID; var mousePosWorld = eyeManager.ScreenToWorld(new ScreenCoordinates(eventargs.Position, map)); // Find all the entities intersecting our click var entities = _entityManager.GetEntitiesIntersecting(mousePosWorld.MapID, mousePosWorld.Position); // Check the entities against whether or not we can click them var clickedEntities = new List <(IEntity clicked, int drawDepth)>(); foreach (IEntity entity in entities) { if (entity.TryGetComponent <IClientClickableComponent>(out var component) && entity.GetComponent <ITransformComponent>().IsMapTransform && component.CheckClick(mousePosWorld, out int drawdepthofclicked)) { clickedEntities.Add((entity, drawdepthofclicked)); } } IEntity entityToClick; if (clickedEntities.Any()) { entityToClick = (from cd in clickedEntities orderby cd.drawDepth ascending, cd.clicked.GetComponent <ITransformComponent>().LocalPosition .Y ascending select cd.clicked).Last(); } else { entityToClick = null; } //First possible exit point for click, acceptable due to being clientside if (entityToClick != null && placementManager.Eraser && placementManager.IsActive) { placementManager.HandleDeletion(entityToClick); return; } ClickType clicktype = eventargs.ClickType; //Dispatches clicks to relevant clickable components, another single exit point for UI if (entityToClick != null) { var clickable = entityToClick.GetComponent <IClientClickableComponent>(); switch (eventargs.ClickType) { case ClickType.Left: clickable.DispatchClick(playerManager.LocalPlayer.ControlledEntity, ClickType.Left); break; case ClickType.Right: clickable.DispatchClick(playerManager.LocalPlayer.ControlledEntity, ClickType.Right); break; /* * //Acceptable click exit due to being a UI behavior * case Mouse.Button.Middle: * OpenEntityEditWindow(entToClick); * return; */ } } //Assemble information to send to server about click if (clicktype != ClickType.None) { var UID = EntityUid.Invalid; if (entityToClick != null) { UID = entityToClick.Uid; } ClickEventMessage message = new ClickEventMessage(UID, clicktype, mousePosWorld); IoCManager.Resolve <IEntityNetworkManager>().SendSystemNetworkMessage(message); } }
protected override void FrameUpdate(RenderFrameEventArgs args) { if (!VisibleInTree) { return; } var stringBuilder = new StringBuilder(); var mouseScreenPos = inputManager.MouseScreenPosition; var screenSize = _displayManager.ScreenSize; int mouseWorldMap; int mouseWorldGrid; GridCoordinates mouseWorldPos; ScreenCoordinates worldToScreen; IEntity mouseEntity = null; try { var coords = eyeManager.ScreenToWorld(new ScreenCoordinates(mouseScreenPos)); mouseWorldMap = (int)coords.MapID; mouseWorldGrid = (int)coords.GridID; mouseWorldPos = coords; worldToScreen = eyeManager.WorldToScreen(coords); if (stateManager.CurrentState is GameScreen gameScreen) { mouseEntity = gameScreen.GetEntityUnderPosition(coords); } } catch { mouseWorldPos = eyeManager.ScreenToWorld(mouseScreenPos); mouseWorldGrid = 0; mouseWorldMap = 0; worldToScreen = new ScreenCoordinates(); } stringBuilder.AppendFormat(@"Positioning Debug: Screen Size: {0} Mouse Pos: Screen: {1} World: {2} W2S: {3} Grid: {4} Map: {5} Entity: {6} GUI: {7} ", screenSize, mouseScreenPos, mouseWorldPos, worldToScreen, mouseWorldGrid, mouseWorldMap, mouseEntity, UserInterfaceManager.CurrentlyHovered); stringBuilder.AppendLine("\nAttached Entity:"); if (playerManager.LocalPlayer?.ControlledEntity == null) { stringBuilder.AppendLine("No attached entity."); } else { var entityTransform = playerManager.LocalPlayer.ControlledEntity.Transform; var playerWorldOffset = entityTransform.WorldPosition; var playerScreen = eyeManager.WorldToScreen(playerWorldOffset); stringBuilder.AppendFormat(@" World: {0} Screen: {1} Grid: {2} Map: {3}", playerWorldOffset, playerScreen, entityTransform.GridID, entityTransform.MapID); } contents.Text = stringBuilder.ToString(); MinimumSizeChanged(); }