コード例 #1
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            currentTile = currentMap.GetDefaultGrid().GetTile(mouseWorld);

            if (!RangeCheck())
            {
                return(false);
            }

            if (pManager.CurrentPermission.IsTile)
            {
                mouseWorld = new Vector2(currentTile.X + 0.5f,
                                         currentTile.Y + 0.5f);
                mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);
            }
            else
            {
                mouseWorld = new Vector2(currentTile.X + 0.5f + pManager.CurrentPrototype.PlacementOffset.X,
                                         currentTile.Y + 0.5f + pManager.CurrentPrototype.PlacementOffset.Y);
                mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);

//                if (CheckCollision())
//                    return false;
            }

            return(true);
        }
コード例 #2
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            if (!(ongrid = currentMap.TryFindGridAt(mouseWorld, out IMapGrid currentgrid)))  //Cant find a grid
            {
                return(false);
            }

            var mouselocal = currentgrid.WorldToLocal(mouseWorld); //Convert code to local grid coordinates

            snapsize = currentgrid.SnapSize;                       //Find snap size.

            mouselocal = new Vector2(                              //Round local coordinates onto the snap grid
                (float)(Math.Round((mouselocal.X / (double)snapsize - 0.5), MidpointRounding.AwayFromZero) + 0.5) * snapsize,
                (float)(Math.Round((mouselocal.Y / (double)snapsize - 0.5), MidpointRounding.AwayFromZero) + 0.5) * snapsize);

            //Convert back to original world and screen coordinates after applying offset
            mouseWorld  = currentgrid.LocalToWorld(mouselocal) + new Vector2(pManager.CurrentPrototype.PlacementOffset.X, pManager.CurrentPrototype.PlacementOffset.Y);
            mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);

            if (!RangeCheck())
            {
                return(false);
            }

            return(true);
        }
コード例 #3
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            currentTile = currentMap.GetDefaultGrid().GetTile(mouseWorld);

            if (!RangeCheck())
            {
                return(false);
            }

            var entitymanager = IoCManager.Resolve <IClientEntityManager>();
            var failtoplace   = entitymanager.AnyEntitiesIntersecting(new Box2(new Vector2(currentTile.X, currentTile.Y), new Vector2(currentTile.X + 0.99f, currentTile.Y + 0.99f)));

            if (pManager.CurrentPermission.IsTile)
            {
                mouseWorld = new Vector2(currentTile.X + 0.5f,
                                         currentTile.Y + 0.5f);
                mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);
            }
            else
            {
                mouseWorld = new Vector2(currentTile.X + 0.5f + pManager.CurrentPrototype.PlacementOffset.X,
                                         currentTile.Y + 0.5f + pManager.CurrentPrototype.PlacementOffset.Y);
                mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);
            }
            return(failtoplace);
        }
コード例 #4
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetSprite(pManager.CurrentBaseSpriteKey);

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            var bounds          = spriteToDraw.GetLocalBounds();
            var spriteSize      = CluwneLib.PixelToTile(new Vector2f(bounds.Width, bounds.Height));
            var spriteRectWorld = new FloatRect(mouseWorld.X - (spriteSize.X / 2f),
                                                mouseWorld.Y - (spriteSize.Y / 2f),
                                                spriteSize.X, spriteSize.Y);

            currentTile = currentMap.GetTileRef(mouseWorld);

            //if (currentMap.IsSolidTile(mouseWorld)) validPosition = false;

            var rangeSquared = pManager.CurrentPermission.Range * pManager.CurrentPermission.Range;

            if (rangeSquared > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <TransformComponent>(ComponentFamily.Transform)
                     .Position - mouseWorld).LengthSquared() > rangeSquared)
                {
                    return(false);
                }
            }

            if (pManager.CurrentPermission.IsTile)
            {
                mouseWorld = new Vector2f(currentTile.X + 0.5f,
                                          currentTile.Y + 0.5f);
                mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();
            }
            else
            {
                mouseWorld = new Vector2f(currentTile.X + 0.5f + pManager.CurrentTemplate.PlacementOffset.Key,
                                          currentTile.Y + 0.5f + pManager.CurrentTemplate.PlacementOffset.Value);
                mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();

                spriteRectWorld = new FloatRect(mouseWorld.X - (bounds.Width / 2f),
                                                mouseWorld.Y - (bounds.Height / 2f), bounds.Width,
                                                bounds.Height);
                if (pManager.CollisionManager.IsColliding(spriteRectWorld))
                {
                    return(false);
                }
                //Since walls also have collisions, this means we can't place objects on walls with this mode.
            }

            return(true);
        }
コード例 #5
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSpriteKey);

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            var bounds = spriteToDraw.GetLocalBounds();

            currentTile = currentMap.GetTileRef(mouseWorld);

            if (!currentTile.Tile.TileDef.IsWall)
            {
                return(false);
            }

            var rangeSquared = pManager.CurrentPermission.Range * pManager.CurrentPermission.Range;

            if (rangeSquared > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <ITransformComponent>()
                     .Position - mouseWorld).LengthSquared() > rangeSquared)
                {
                    return(false);
                }
            }

            if (pManager.CurrentPermission.IsTile)
            {
                mouseWorld = new Vector2f(currentTile.X + 0.5f,
                                          currentTile.Y + 0.5f);
                mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();
            }
            else
            {
                mouseWorld = new Vector2f(currentTile.X + 0.5f + pManager.CurrentPrototype.PlacementOffset.X,
                                          currentTile.Y + 0.5f + pManager.CurrentPrototype.PlacementOffset.Y);
                mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();

                FloatRect spriteRectWorld = new FloatRect(mouseWorld.X - (bounds.Width / 2f),
                                                          mouseWorld.Y - (bounds.Height / 2f), bounds.Width,
                                                          bounds.Height);
                if (pManager.CollisionManager.IsColliding(spriteRectWorld))
                {
                    return(false);
                }
                //Since walls also have collisions, this means we can't place objects on walls with this mode.
            }

            return(true);
        }
コード例 #6
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);
            currentTile = currentMap.GetDefaultGrid().GetTile(mouseWorld);

            return(true);
        }
コード例 #7
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSpriteKey);

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);
            currentTile = currentMap.GetTileRef(mouseWorld);

            return(true);
        }
コード例 #8
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            currentTile = currentMap.GetDefaultGrid().GetTile(mouseWorld);

            if (!RangeCheck())
            {
                return(false);
            }

            var nodes = new List <Vector2>();

            if (pManager.CurrentPrototype.MountingPoints != null)
            {
                nodes.AddRange(
                    pManager.CurrentPrototype.MountingPoints.Select(
                        current => new Vector2(mouseWorld.X, currentTile.Y + current)));
            }
            else
            {
                nodes.Add(new Vector2(mouseWorld.X, currentTile.Y + 0.5f));
                nodes.Add(new Vector2(mouseWorld.X, currentTile.Y + 1.0f));
                nodes.Add(new Vector2(mouseWorld.X, currentTile.Y + 1.5f));
            }

            Vector2 closestNode = (from Vector2 node in nodes
                                   orderby(node - mouseWorld).LengthSquared ascending
                                   select node).First();

            mouseWorld = closestNode + new Vector2(pManager.CurrentPrototype.PlacementOffset.X,
                                                   pManager.CurrentPrototype.PlacementOffset.Y);
            mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);

            return(true);
        }
コード例 #9
0
ファイル: AlignNone.cs プロジェクト: rouge/space-station-14
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSpriteKey);

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            var bounds          = spriteToDraw.GetLocalBounds();
            var spriteSize      = CluwneLib.PixelToTile(new Vector2f(bounds.Width, bounds.Height));
            var spriteRectWorld = new FloatRect(mouseWorld.X - (spriteSize.X / 2f),
                                                mouseWorld.Y - (spriteSize.Y / 2f),
                                                spriteSize.X, spriteSize.Y);

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            if (pManager.CollisionManager.IsColliding(spriteRectWorld))
            {
                return(false);
            }

            //if (currentMap.IsSolidTile(mouseWorld)) return false;

            var rangeSquared = pManager.CurrentPermission.Range * pManager.CurrentPermission.Range;

            if (rangeSquared > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <TransformComponent>(ComponentFamily.Transform)
                     .Position - mouseWorld).LengthSquared() > rangeSquared)
                {
                    return(false);
                }
            }

            currentTile = currentMap.GetTileRef(mouseWorld);

            return(true);
        }
コード例 #10
0
 public override void Render()
 {
     base.Render();
     if (ongrid)
     {
         var position  = CluwneLib.ScreenToWorld(new Vector2i(0, 0)); //Find world coordinates closest to screen origin
         var gridstart = CluwneLib.WorldToScreen(new Vector2(         //Find snap grid closest to screen origin and convert back to screen coords
                                                     (float)Math.Round((position.X / snapsize), MidpointRounding.AwayFromZero) * snapsize,
                                                     (float)Math.Round((position.Y / snapsize), MidpointRounding.AwayFromZero) * snapsize));
         for (float a = gridstart.X; a < CluwneLib.Window.Viewport.Size.X; a += snapsize * 32) //Iterate through screen creating gridlines
         {
             CluwneLib.drawLine(a, 0, CluwneLib.Window.Viewport.Size.Y, 90, 0.5f, Color4.Blue);
         }
         for (float a = gridstart.Y; a < CluwneLib.Window.Viewport.Size.Y; a += snapsize * 32)
         {
             CluwneLib.drawLine(0, a, CluwneLib.Window.Viewport.Size.X, 0, 0.5f, Color4.Blue);
         }
     }
 }
コード例 #11
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);
            currentTile = currentMap.GetDefaultGrid().GetTile(mouseWorld);

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            if (!RangeCheck())
            {
                return(false);
            }

            return(true);
        }
コード例 #12
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            currentTile = currentMap.GetDefaultGrid().GetTile(mouseWorld);

            if (!RangeCheck())
            {
                return(false);
            }

            var manager = IoCManager.Resolve <IClientEntityManager>();

            IOrderedEnumerable <IEntity> snapToEntities =
                from IEntity entity in manager.GetEntitiesInRange(mouseWorld, snapToRange)
                where entity.Prototype == pManager.CurrentPrototype
                orderby
                    (entity.GetComponent <ITransformComponent>(
                        ).Position - mouseWorld).LengthSquared
                ascending
                select entity;

            if (snapToEntities.Any())
            {
                IEntity closestEntity = snapToEntities.First();
                if (closestEntity.TryGetComponent <ISpriteRenderableComponent>(out var component))
                {
                    var closestSprite = component.GetCurrentSprite();
                    var closestBounds = closestSprite.GetLocalBounds();

                    var closestRect =
                        Box2.FromDimensions(
                            closestEntity.GetComponent <ITransformComponent>().Position.X - closestBounds.Width / 2f,
                            closestEntity.GetComponent <ITransformComponent>().Position.Y - closestBounds.Height / 2f,
                            closestBounds.Width, closestBounds.Height);

                    var sides = new Vector2[]
                    {
                        new Vector2(closestRect.Left + (closestRect.Width / 2f), closestRect.Top - closestBounds.Height / 2f),
                        new Vector2(closestRect.Left + (closestRect.Width / 2f), closestRect.Bottom + closestBounds.Height / 2f),
                        new Vector2(closestRect.Left - closestBounds.Width / 2f, closestRect.Top + (closestRect.Height / 2f)),
                        new Vector2(closestRect.Right + closestBounds.Width / 2f, closestRect.Top + (closestRect.Height / 2f))
                    };

                    Vector2 closestSide =
                        (from Vector2 side in sides orderby(side - mouseWorld).LengthSquared ascending select side).First();

                    mouseWorld  = closestSide;
                    mouseScreen = (Vector2i)CluwneLib.WorldToScreen(mouseWorld);
                }
            }

            if (CheckCollision())
            {
                return(false);
            }
            return(true);
        }
コード例 #13
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSpriteKey);

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            var bounds     = spriteToDraw.GetLocalBounds();
            var spriteSize = CluwneLib.PixelToTile(new Vector2f(bounds.Width, bounds.Height));

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            currentTile = currentMap.GetTileRef(mouseWorld);

            if (!currentTile.Tile.TileDef.IsWall)
            {
                return(false);
            }

            var rangeSquared = pManager.CurrentPermission.Range * pManager.CurrentPermission.Range;

            if (rangeSquared > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <ITransformComponent>()
                     .Position - mouseWorld).LengthSquared() > rangeSquared)
                {
                    return(false);
                }
            }

            var nodes = new List <Vector2f>();

            if (pManager.CurrentPrototype.MountingPoints != null)
            {
                nodes.AddRange(
                    pManager.CurrentPrototype.MountingPoints.Select(
                        current => new Vector2f(mouseWorld.X, currentTile.Y + current)));
            }
            else
            {
                nodes.Add(new Vector2f(mouseWorld.X, currentTile.Y + 0.5f));
                nodes.Add(new Vector2f(mouseWorld.X, currentTile.Y + 1.0f));
                nodes.Add(new Vector2f(mouseWorld.X, currentTile.Y + 1.5f));
            }

            Vector2f closestNode = (from Vector2f node in nodes
                                    orderby(node - mouseWorld).LengthSquared() ascending
                                    select node).First();

            mouseWorld = closestNode + new Vector2f(pManager.CurrentPrototype.PlacementOffset.X,
                                                    pManager.CurrentPrototype.PlacementOffset.Y);
            mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();

            var range = pManager.CurrentPermission.Range;

            if (range > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <ITransformComponent>()
                     .Position - mouseWorld).LengthSquared() > range * range)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #14
0
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSpriteKey);
            var spriteBounds = spriteToDraw.GetLocalBounds();

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            currentTile = currentMap.GetTileRef(mouseWorld);

            //Align to similar if nearby found else free
            if (currentTile.Tile.TileDef.IsWall)
            {
                return(false); //HANDLE CURSOR OUTSIDE MAP
            }
            var rangeSquared = pManager.CurrentPermission.Range * pManager.CurrentPermission.Range;

            if (rangeSquared > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <TransformComponent>(ComponentFamily.Transform)
                     .Position - mouseWorld).LengthSquared() > rangeSquared)
                {
                    return(false);
                }
            }

            var manager = IoCManager.Resolve <IClientEntityManager>();

            IOrderedEnumerable <IEntity> snapToEntities =
                from IEntity entity in manager.GetEntitiesInRange(mouseWorld, snapToRange)
                where entity.Prototype == pManager.CurrentPrototype
                orderby
                    (entity.GetComponent <TransformComponent>(
                        ComponentFamily.Transform).Position - mouseWorld).LengthSquared()
                ascending
                select entity;

            if (snapToEntities.Any())
            {
                IEntity closestEntity       = snapToEntities.First();
                ComponentReplyMessage reply = closestEntity.SendMessage(this, ComponentFamily.Renderable,
                                                                        ComponentMessageType.GetSprite);

                //if(replies.Any(x => x.messageType == SS13_Shared.GO.ComponentMessageType.CurrentSprite))
                //{
                //    Sprite closestSprite = (Sprite)replies.Find(x => x.messageType == SS13_Shared.GO.ComponentMessageType.CurrentSprite).paramsList[0]; //This is safer but slower.

                if (reply.MessageType == ComponentMessageType.CurrentSprite)
                {
                    var closestSprite = (Sprite)reply.ParamsList[0]; //This is faster but kinda unsafe.
                    var closestBounds = closestSprite.GetLocalBounds();

                    var closestRect =
                        new FloatRect(
                            closestEntity.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.X - closestBounds.Width / 2f,
                            closestEntity.GetComponent <TransformComponent>(ComponentFamily.Transform).Position.Y - closestBounds.Height / 2f,
                            closestBounds.Width, closestBounds.Height);

                    var sides = new List <Vector2f>
                    {
                        new Vector2f(closestRect.Left + (closestRect.Width / 2f), closestRect.Top - closestBounds.Height / 2f),
                        new Vector2f(closestRect.Left + (closestRect.Width / 2f), closestRect.Bottom() + closestBounds.Height / 2f),
                        new Vector2f(closestRect.Left - closestBounds.Width / 2f, closestRect.Top + (closestRect.Height / 2f)),
                        new Vector2f(closestRect.Right() + closestBounds.Width / 2f, closestRect.Top + (closestRect.Height / 2f))
                    };

                    Vector2f closestSide =
                        (from Vector2f side in sides orderby(side - mouseWorld).LengthSquared() ascending select side).First();

                    mouseWorld  = closestSide;
                    mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();
                }
            }

            FloatRect spriteRectWorld = new FloatRect(mouseWorld.X - (spriteBounds.Width / 2f), mouseWorld.Y - (spriteBounds.Height / 2f),
                                                      spriteBounds.Width, spriteBounds.Height);

            if (pManager.CollisionManager.IsColliding(spriteRectWorld))
            {
                return(false);
            }
            return(true);
        }
コード例 #15
0
ファイル: AlignWall.cs プロジェクト: rouge/space-station-14
        public override bool Update(Vector2i mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSpriteKey);

            mouseScreen = mouseS;
            mouseWorld  = CluwneLib.ScreenToWorld(mouseScreen);

            var bounds          = spriteToDraw.GetLocalBounds();
            var spriteSize      = CluwneLib.PixelToTile(new Vector2f(bounds.Width, bounds.Height));
            var spriteRectWorld = new FloatRect(mouseWorld.X - (spriteSize.X / 2f),
                                                mouseWorld.Y - (spriteSize.Y / 2f),
                                                spriteSize.X, spriteSize.Y);

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            //CollisionManager collisionMgr = (CollisionManager)ServiceManager.Singleton.GetService(ClientServiceType.CollisionManager);
            //if (collisionMgr.IsColliding(spriteRectWorld, true)) validPosition = false;

            currentTile = currentMap.GetTileRef(mouseWorld);

            if (!currentTile.Tile.TileDef.IsWall)
            {
                return(false);
            }

            var rangeSquared = pManager.CurrentPermission.Range * pManager.CurrentPermission.Range;

            if (rangeSquared > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <TransformComponent>(ComponentFamily.Transform)
                     .Position - mouseWorld).LengthSquared() > rangeSquared)
                {
                    return(false);
                }
            }

            var nodes = new List <Vector2f>();

            if (pManager.CurrentTemplate.MountingPoints != null)
            {
                nodes.AddRange(
                    pManager.CurrentTemplate.MountingPoints.Select(
                        current => new Vector2f(mouseWorld.X, currentTile.Y + current)));
            }
            else
            {
                nodes.Add(new Vector2f(mouseWorld.X, currentTile.Y + 0.5f));
                nodes.Add(new Vector2f(mouseWorld.X, currentTile.Y + 1.0f));
                nodes.Add(new Vector2f(mouseWorld.X, currentTile.Y + 1.5f));
            }

            Vector2f closestNode = (from Vector2f node in nodes
                                    orderby(node - mouseWorld).LengthSquared() ascending
                                    select node).First();

            mouseWorld = closestNode + new Vector2f(pManager.CurrentTemplate.PlacementOffset.Key,
                                                    pManager.CurrentTemplate.PlacementOffset.Value);
            mouseScreen = CluwneLib.WorldToScreen(mouseWorld).Round();

            var range = pManager.CurrentPermission.Range;

            if (range > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <TransformComponent>(ComponentFamily.Transform)
                     .Position - mouseWorld).LengthSquared() > range * range)
                {
                    return(false);
                }
            }

            return(true);
        }