Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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();
        }
Esempio n. 5
0
        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));
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 12
0
        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();
        }
Esempio n. 13
0
        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);
            }
        }
Esempio n. 14
0
        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();
        }