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 FrameUpdate(FrameEventArgs args)
        {
            base.FrameUpdate(args);

            if (AttachedEntity?.IsValid() != true || !AttachedEntity.TryGetComponent(out DoAfterComponent? doAfterComponent))
            {
                return;
            }

            var doAfters = doAfterComponent.DoAfters;

            // Nothing to render so we'll hide.
            if (doAfters.Count == 0 && _cancelledDoAfters.Count == 0)
            {
                _firstDraw = true;
                Visible    = false;
                return;
            }

            // Set position ready for 2nd+ frames.
            _playerPosition = _eyeManager.WorldToScreen(AttachedEntity.Transform.GridPosition);
            LayoutContainer.SetPosition(this, new Vector2(_playerPosition.X - Width / 2, _playerPosition.Y - Height - 30.0f));

            if (_firstDraw)
            {
                _firstDraw = false;
                return;
            }

            Visible = true;
            var currentTime = _gameTiming.CurTime;
            var toCancel    = new List <byte>();

            // Cleanup cancelled DoAfters
            foreach (var(id, cancelTime) in _cancelledDoAfters)
            {
                if ((currentTime - cancelTime).TotalSeconds > DoAfterSystem.ExcessTime)
                {
                    toCancel.Add(id);
                }
            }

            foreach (var id in toCancel)
            {
                RemoveDoAfter(id);
            }

            // Update 0 -> 1.0f of the things
            foreach (var(id, message) in doAfters)
            {
                if (_cancelledDoAfters.ContainsKey(id) || !_doAfterControls.ContainsKey(id))
                {
                    continue;
                }

                var doAfterBar = _doAfterBars[id];
                doAfterBar.Ratio = MathF.Min(1.0f,
                                             (float)(currentTime - message.StartTime).TotalSeconds / message.Delay);
            }
        }
示例#3
0
        protected override void FrameUpdate(FrameEventArgs args)
        {
            base.FrameUpdate(args);

            _timeLeft -= args.DeltaSeconds;
            if (_entityManager.Deleted(_senderEntity) || _timeLeft <= 0)
            {
                // Timer spawn to prevent concurrent modification exception.
                Timer.Spawn(0, Die);
                return;
            }

            // Lerp to our new vertical offset if it's been modified.
            if (MathHelper.CloseToPercent(_verticalOffsetAchieved - VerticalOffset, 0, 0.1))
            {
                _verticalOffsetAchieved = VerticalOffset;
            }
            else
            {
                _verticalOffsetAchieved = MathHelper.Lerp(_verticalOffsetAchieved, VerticalOffset, 10 * args.DeltaSeconds);
            }

            if (!_entityManager.TryGetComponent <TransformComponent>(_senderEntity, out var xform) ||
                !xform.Coordinates.IsValid(_entityManager))
            {
                Modulate = Color.White.WithAlpha(0);
                return;
            }

            if (_timeLeft <= FadeTime)
            {
                // Update alpha if we're fading.
                Modulate = Color.White.WithAlpha(_timeLeft / FadeTime);
            }
            else
            {
                // Make opaque otherwise, because it might have been hidden before
                Modulate = Color.White;
            }


            var worldPos    = xform.WorldPosition;
            var scale       = _eyeManager.MainViewport.GetRenderScale();
            var offset      = new Vector2(0, EntityVerticalOffset * EyeManager.PixelsPerMeter * scale);
            var lowerCenter = (_eyeManager.WorldToScreen(worldPos) - offset) / UIScale;

            var screenPos = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved);

            // Round to nearest 0.5
            screenPos = (screenPos * 2).Rounded() / 2;
            LayoutContainer.SetPosition(this, screenPos);

            var height = MathF.Ceiling(MathHelper.Clamp(lowerCenter.Y - screenPos.Y, 0, ContentHeight));

            SetHeight = height;
        }
        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();
        }
        protected override void FrameUpdate(FrameEventArgs args)
        {
            base.FrameUpdate(args);

            _timeLeft -= args.DeltaSeconds;

            if (_timeLeft <= FadeTime)
            {
                // Update alpha if we're fading.
                Modulate = Color.White.WithAlpha(_timeLeft / FadeTime);
            }

            if (_senderEntity.Deleted || _timeLeft <= 0)
            {
                // Timer spawn to prevent concurrent modification exception.
                Timer.Spawn(0, Die);
                return;
            }

            // Lerp to our new vertical offset if it's been modified.
            if (MathHelper.CloseToPercent(_verticalOffsetAchieved - VerticalOffset, 0, 0.1))
            {
                _verticalOffsetAchieved = VerticalOffset;
            }
            else
            {
                _verticalOffsetAchieved = MathHelper.Lerp(_verticalOffsetAchieved, VerticalOffset, 10 * args.DeltaSeconds);
            }

            if (!_senderEntity.Transform.Coordinates.IsValid(_senderEntity.EntityManager))
            {
                return;
            }

            var worldPos = _senderEntity.Transform.WorldPosition;

            worldPos += (0, EntityVerticalOffset);

            var lowerCenter = _eyeManager.WorldToScreen(worldPos) / UIScale;
            var screenPos   = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved);

            LayoutContainer.SetPosition(this, screenPos);

            var height = MathHelper.Clamp(lowerCenter.Y - screenPos.Y, 0, ContentHeight);

            SetHeight = height;
        }
示例#6
0
        public override void Update(float frameTime)
        {
            base.Update(frameTime);
            if (_tooltips == 0)
            {
                if (_aiBoxes.Count > 0)
                {
                    foreach (var(_, panel) in _aiBoxes)
                    {
                        panel.Dispose();
                    }

                    _aiBoxes.Clear();
                }
                return;
            }

            var deletedEntities = new List <IEntity>(0);

            foreach (var(entity, panel) in _aiBoxes)
            {
                if (entity.Deleted)
                {
                    deletedEntities.Add(entity);
                    continue;
                }

                if (!_eyeManager.GetWorldViewport().Contains(entity.Transform.WorldPosition))
                {
                    panel.Visible = false;
                    continue;
                }

                var(x, y) = _eyeManager.WorldToScreen(entity.Transform.GridPosition).Position;
                var offsetPosition = new Vector2(x - panel.Width / 2, y - panel.Height - 50f);
                panel.Visible = true;

                LayoutContainer.SetPosition(panel, offsetPosition);
            }

            foreach (var entity in deletedEntities)
            {
                _aiBoxes.Remove(entity);
            }
        }
示例#7
0
        protected override void FrameUpdate(FrameEventArgs args)
        {
            base.FrameUpdate(args);

            _timeLeft -= args.DeltaSeconds;

            if (_timeLeft <= FadeTime)
            {
                // Update alpha if we're fading.
                Modulate = Color.White.WithAlpha(_timeLeft / FadeTime);
            }

            if (_senderEntity.Deleted || _timeLeft <= 0)
            {
                // Timer spawn to prevent concurrent modification exception.
                Timer.Spawn(0, Die);
                return;
            }

            // Lerp to our new vertical offset if it's been modified.
            if (FloatMath.CloseTo(_verticalOffsetAchieved - VerticalOffset, 0, 0.1))
            {
                _verticalOffsetAchieved = VerticalOffset;
            }
            else
            {
                _verticalOffsetAchieved = FloatMath.Lerp(_verticalOffsetAchieved, VerticalOffset, 10 * args.DeltaSeconds);
            }

            var worldPos = _senderEntity.Transform.WorldPosition;

            worldPos += (0, EntityVerticalOffset);

            var lowerCenter = _eyeManager.WorldToScreen(worldPos) / UIScale;
            var screenPos   = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved);

            Position = screenPos;

            var height = (lowerCenter.Y - screenPos.Y).Clamp(0, ContentHeight);

            Size = (Size.X, height);
        }
示例#8
0
        private void DrawGraph(DrawingHandleScreen screenHandle, Box2 viewport)
        {
            foreach (var(chunk, nodes) in Graph)
            {
                foreach (var tile in nodes)
                {
                    if (!viewport.Contains(tile))
                    {
                        continue;
                    }

                    var screenTile = _eyeManager.WorldToScreen(tile);
                    var box        = new UIBox2(
                        screenTile.X - 15.0f,
                        screenTile.Y - 15.0f,
                        screenTile.X + 15.0f,
                        screenTile.Y + 15.0f);

                    screenHandle.DrawRect(box, _graphColors[chunk]);
                }
            }
        }
        public override void FrameUpdate(float frameTime)
        {
            base.FrameUpdate(frameTime);
            if (!Enabled)
            {
                _label.Visible = false;
                return;
            }

            var player = _playerManager.LocalPlayer?.ControlledEntity;

            if (player == null || !player.TryGetComponent(out PhysicsComponent? body))
            {
                _label.Visible = false;
                return;
            }

            var screenPos = _eyeManager.WorldToScreen(player.Transform.WorldPosition);

            LayoutContainer.SetPosition(_label, screenPos + new Vector2(0, 50));
            _label.Visible = true;

            _label.Text = $"Speed: {body.LinearVelocity.Length}\nLinear: {body.LinearVelocity.X:0.00}, {body.LinearVelocity.Y:0.00}\nAngular:{body.AngularVelocity}";
        }
示例#10
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();
        }
示例#11
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();
        }
示例#12
0
        protected override void FrameUpdate(FrameEventArgs args)
        {
            if (!VisibleInTree)
            {
                return;
            }

            var stringBuilder = new StringBuilder();

            var mouseScreenPos = _inputManager.MouseScreenPosition;
            var screenSize     = _displayManager.ScreenSize;

            MapCoordinates    mouseWorldMap;
            EntityCoordinates mouseGridPos;
            TileRef           tile;

            mouseWorldMap = _eyeManager.ScreenToMap(mouseScreenPos);

            if (_mapManager.TryFindGridAt(mouseWorldMap, out var mouseGrid))
            {
                mouseGridPos = mouseGrid.MapToGrid(mouseWorldMap);
                tile         = mouseGrid.GetTileRef(mouseGridPos);
            }
            else
            {
                mouseGridPos = new EntityCoordinates(_mapManager.GetMapEntityId(mouseWorldMap.MapId), mouseWorldMap.Position);
                tile         = new TileRef(mouseWorldMap.MapId, GridId.Invalid, mouseGridPos.ToVector2i(_entityManager, _mapManager), Tile.Empty);
            }

            var controlHovered = UserInterfaceManager.CurrentlyHovered;

            stringBuilder.AppendFormat(@"Positioning Debug:
Screen Size: {0}
Mouse Pos:
    Screen: {1}
    {2}
    {3}
    {4}
    GUI: {5}", screenSize, mouseScreenPos, mouseWorldMap, mouseGridPos,
                                       tile, controlHovered);

            stringBuilder.AppendLine("\nAttached Entity:");
            if (_playerManager.LocalPlayer?.ControlledEntity == null)
            {
                stringBuilder.AppendLine("No attached entity.");
            }
            else
            {
                var entityTransform   = _playerManager.LocalPlayer.ControlledEntity.Transform;
                var playerWorldOffset = entityTransform.MapPosition;
                var playerScreen      = _eyeManager.WorldToScreen(playerWorldOffset.Position);

                var playerCoordinates = _playerManager.LocalPlayer.ControlledEntity.Transform.Coordinates;

                stringBuilder.AppendFormat(@"    Screen: {0}
    {1}
    {2}
    EntId: {3}
    GridID: {4}", playerScreen, playerWorldOffset, playerCoordinates, entityTransform.Owner.Uid, entityTransform.GridID);
            }

            if (controlHovered != null)
            {
                _uiBox = UIBox2i.FromDimensions(controlHovered.GlobalPixelPosition, controlHovered.PixelSize);
            }

            _contents.Text = stringBuilder.ToString();
            MinimumSizeChanged();
        }
示例#13
0
        protected override void FrameUpdate(FrameEventArgs args)
        {
            if (!VisibleInTree)
            {
                return;
            }

            var stringBuilder = new StringBuilder();

            var mouseScreenPos = inputManager.MouseScreenPosition;
            var screenSize     = _displayManager.ScreenSize;

            MapCoordinates  mouseWorldMap;
            GridCoordinates mouseGridPos;
            TileRef         tile;

            mouseWorldMap = eyeManager.ScreenToMap(mouseScreenPos);

            if (_mapManager.TryFindGridAt(mouseWorldMap, out var mouseGrid))
            {
                mouseGridPos = mouseGrid.MapToGrid(mouseWorldMap);
                tile         = mouseGrid.GetTileRef(mouseGridPos);
            }
            else
            {
                mouseGridPos = new GridCoordinates(mouseWorldMap.Position, GridId.Invalid);
                tile         = default;
            }

            stringBuilder.AppendFormat(@"Positioning Debug:
Screen Size: {0}
Mouse Pos:
    Screen: {1}
    {2}
    {3}
    {4}
    GUI: {5}", screenSize, mouseScreenPos, mouseWorldMap, mouseGridPos,
                                       tile, 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.MapPosition;
                var playerScreen      = eyeManager.WorldToScreen(playerWorldOffset.Position);

                GridCoordinates playerGridPos;
                if (_mapManager.TryFindGridAt(playerWorldOffset, out var playerGrid))
                {
                    playerGridPos = playerGrid.MapToGrid(playerWorldOffset);
                }
                else
                {
                    playerGridPos = new GridCoordinates(playerWorldOffset.Position, GridId.Invalid);
                }

                stringBuilder.AppendFormat(@"    Screen: {0}
    {1}
    {2}
    EntityUid: {3}", playerScreen, playerWorldOffset, playerGridPos, entityTransform.Owner.Uid);
            }

            contents.Text = stringBuilder.ToString();
            MinimumSizeChanged();
        }