private void HandleStartPlacement(MsgPlacement msg)
        {
            CurrentPermission = new PlacementInformation
            {
                Range  = msg.Range,
                IsTile = msg.IsTile,
            };

            CurrentPermission.EntityType      = msg.ObjType; // tile or ent type
            CurrentPermission.PlacementOption = msg.AlignOption;

            BeginPlacing(CurrentPermission);
        }
        //Holds build permissions for all mobs. A list of mobs and the objects they're allowed to request and how. One permission per mob.

        #region IPlacementManager Members


        /// <summary>
        ///  Handles placement related client messages.
        /// </summary>
        public void HandleNetMessage(MsgPlacement msg)
        {
            switch (msg.PlaceType)
            {
            case PlacementManagerMessage.StartPlacement:
                break;

            case PlacementManagerMessage.CancelPlacement:
                break;

            case PlacementManagerMessage.RequestPlacement:
                HandlePlacementRequest(msg);
                break;
            }
        }
        /// <summary>
        ///  Handles placement related client messages.
        /// </summary>
        public void HandleNetMessage(MsgPlacement msg)
        {
            if (AllowPlacementFunc != null && !AllowPlacementFunc(msg))
            {
                return;
            }

            switch (msg.PlaceType)
            {
            case PlacementManagerMessage.StartPlacement:
                break;

            case PlacementManagerMessage.CancelPlacement:
                break;

            case PlacementManagerMessage.RequestPlacement:
                HandlePlacementRequest(msg);
                break;

            case PlacementManagerMessage.RequestEntRemove:
                HandleEntRemoveReq(msg.EntityUid);
                break;
            }
        }
        public void HandlePlacementRequest(MsgPlacement msg)
        {
            var alignRcv = msg.Align;
            var isTile   = msg.IsTile;
            var mapMgr   = (MapManager)IoCManager.Resolve <IMapManager>();

            ushort tileType           = 0;
            var    entityTemplateName = "";

            if (isTile)
            {
                tileType = msg.TileType;
            }
            else
            {
                entityTemplateName = msg.EntityTemplateName;
            }

            float xRcv   = msg.XRcv;
            float yRcv   = msg.YRcv;
            var   dirRcv = msg.DirRcv;

            IPlayerSession session = IoCManager.Resolve <IPlayerManager>().GetSessionById(msg.MsgChannel.NetworkId);

            if (session.attachedEntity == null)
            {
                return; //Don't accept placement requests from nobodys
            }
            PlacementInformation permission = GetPermission(session.attachedEntity.Uid, alignRcv);

            float    a       = (float)Math.Floor(xRcv);
            float    b       = (float)Math.Floor(yRcv);
            Vector2f tilePos = new Vector2f(a, b);

            if (permission != null || true)
            //isAdmin) Temporarily disable actual permission check / admin check. REENABLE LATER
            {
                if (permission != null)
                {
                    if (permission.Uses > 0)
                    {
                        permission.Uses--;
                        if (permission.Uses <= 0)
                        {
                            BuildPermissions.Remove(permission);
                            SendPlacementCancel(session.attachedEntity);
                        }
                    }
                    else
                    {
                        BuildPermissions.Remove(permission);
                        SendPlacementCancel(session.attachedEntity);
                        return;
                    }
                }

                if (!isTile)
                {
                    var     manager = IoCManager.Resolve <IServerEntityManager>();
                    IEntity created = manager.SpawnEntityAt(entityTemplateName, new Vector2f(xRcv, yRcv));
                    if (created != null)
                    {
                        created.GetComponent <ITransformComponent>().Position =
                            new Vector2f(xRcv, yRcv);
                        if (created.TryGetComponent <IDirectionComponent>(out var component))
                        {
                            component.Direction = dirRcv;
                        }
                    }
                }
                else
                {
                    mapMgr.Tiles[tilePos] = new Tile(tileType);
                }
            }

            /*
             * else //They are not allowed to request this. Send 'PlacementFailed'. TBA
             * {
             *  Logger.Log("Invalid placement request: "
             + IoCManager.Resolve<IPlayerManager>().GetSessionByConnection(msg.SenderConnection).name +
             +                 " - " +
             +                 IoCManager.Resolve<IPlayerManager>().GetSessionByConnection(msg.SenderConnection).
             +                     attachedEntity.Uid.ToString() +
             +                 " - " + alignRcv.ToString());
             +
             +  SendPlacementCancel(
             +      IoCManager.Resolve<IPlayerManager>().GetSessionByConnection(msg.SenderConnection).attachedEntity);
             + }
             */
        }
Esempio n. 5
0
        public void HandlePlacementRequest(MsgPlacement msg)
        {
            var alignRcv = msg.Align;
            var isTile   = msg.IsTile;

            ushort tileType           = 0;
            var    entityTemplateName = "";

            if (isTile)
            {
                tileType = msg.TileType;
            }
            else
            {
                entityTemplateName = msg.EntityTemplateName;
            }

            var dirRcv = msg.DirRcv;

            var session   = _playerManager.GetSessionByChannel(msg.MsgChannel);
            var plyEntity = session.AttachedEntity;

            // Don't have an entity, don't get to place.
            if (plyEntity == null)
            {
                return;
            }

            //TODO: Distance check, so you can't place things off of screen.

            var coordinates = msg.GridCoordinates;


            /* TODO: Redesign permission system, or document what this is supposed to be doing
             * var permission = GetPermission(session.attachedEntity.Uid, alignRcv);
             * if (permission == null)
             *  return;
             *
             * if (permission.Uses > 0)
             * {
             *  permission.Uses--;
             *  if (permission.Uses <= 0)
             *  {
             *      BuildPermissions.Remove(permission);
             *      SendPlacementCancel(session.attachedEntity);
             *  }
             * }
             * else
             * {
             *  BuildPermissions.Remove(permission);
             *  SendPlacementCancel(session.attachedEntity);
             *  return;
             * }
             */
            if (!isTile)
            {
                var created = _entityManager.SpawnEntity(entityTemplateName, coordinates);

                created.Transform.LocalRotation = dirRcv.ToAngle();
            }
            else
            {
                var mapCoords = coordinates.ToMap(_mapManager);
                PlaceNewTile(tileType, mapCoords.MapId, mapCoords.Position);
            }
        }
Esempio n. 6
0
        public void HandlePlacementRequest(MsgPlacement msg)
        {
            var alignRcv = msg.Align;
            var isTile   = msg.IsTile;

            ushort tileType           = 0;
            var    entityTemplateName = "";

            if (isTile)
            {
                tileType = msg.TileType;
            }
            else
            {
                entityTemplateName = msg.EntityTemplateName;
            }

            var xValue = msg.XValue;
            var yValue = msg.YValue;
            var dirRcv = msg.DirRcv;

            var session   = _playerManager.GetSessionByChannel(msg.MsgChannel);
            var plyEntity = session.AttachedEntity;

            // Don't have an entity, don't get to place.
            if (plyEntity == null)
            {
                return;
            }

            // get the MapID the player is on
            var plyTransform = plyEntity.GetComponent <ITransformComponent>();
            var mapIndex     = plyTransform.MapID;

            // no building in null space!
            if (mapIndex == MapId.Nullspace)
            {
                return;
            }

            //TODO: Distance check, so you can't place things off of screen.

            // get the grid under the worldCoords.

            var grid        = _mapManager.GetMap(mapIndex).GetGrid(plyTransform.GridID);
            var coordinates = new GridLocalCoordinates(xValue, yValue, grid);


            /* TODO: Redesign permission system, or document what this is supposed to be doing
             * var permission = GetPermission(session.attachedEntity.Uid, alignRcv);
             * if (permission == null)
             *  return;
             *
             * if (permission.Uses > 0)
             * {
             *  permission.Uses--;
             *  if (permission.Uses <= 0)
             *  {
             *      BuildPermissions.Remove(permission);
             *      SendPlacementCancel(session.attachedEntity);
             *  }
             * }
             * else
             * {
             *  BuildPermissions.Remove(permission);
             *  SendPlacementCancel(session.attachedEntity);
             *  return;
             * }
             */
            if (!isTile)
            {
                if (!_entityManager.TrySpawnEntityAt(entityTemplateName, coordinates, out IEntity created))
                {
                    return;
                }

                var transform = created.GetComponent <TransformComponent>();
                transform.WorldPosition = new Vector2(xValue, yValue);
                if (created.TryGetComponent <TransformComponent>(out var component))
                {
                    component.LocalRotation = dirRcv.ToAngle();
                }
            }
            else
            {
                coordinates.Grid.SetTile(coordinates, new Tile(tileType));
            }
        }
Esempio n. 7
0
        public void HandlePlacementRequest(MsgPlacement msg)
        {
            var alignRcv = msg.Align;
            var isTile   = msg.IsTile;
            var mapMgr   = IoCManager.Resolve <IMapManager>();

            ushort tileType           = 0;
            var    entityTemplateName = "";

            if (isTile)
            {
                tileType = msg.TileType;
            }
            else
            {
                entityTemplateName = msg.EntityTemplateName;
            }

            float xRcv   = msg.XRcv;
            float yRcv   = msg.YRcv;
            var   dirRcv = msg.DirRcv;

            IPlayerSession session = IoCManager.Resolve <IPlayerManager>().GetSessionById(msg.MsgChannel.NetworkId);

            if (session.attachedEntity == null)
            {
                return; //Don't accept placement requests from nobodys
            }
            PlacementInformation permission = GetPermission(session.attachedEntity.Uid, alignRcv);

            float   a       = (float)Math.Floor(xRcv);
            float   b       = (float)Math.Floor(yRcv);
            Vector2 tilePos = new Vector2(a, b);

            if (permission != null || true)
            //isAdmin) Temporarily disable actual permission check / admin check. REENABLE LATER
            {
                if (permission != null)
                {
                    if (permission.Uses > 0)
                    {
                        permission.Uses--;
                        if (permission.Uses <= 0)
                        {
                            BuildPermissions.Remove(permission);
                            SendPlacementCancel(session.attachedEntity);
                        }
                    }
                    else
                    {
                        BuildPermissions.Remove(permission);
                        SendPlacementCancel(session.attachedEntity);
                        return;
                    }
                }

                if (!isTile)
                {
                    var manager = IoCManager.Resolve <IServerEntityManager>();
                    if (manager.TrySpawnEntityAt(entityTemplateName, new Vector2(xRcv, yRcv), out IEntity created))
                    {
                        created.GetComponent <TransformComponent>().Position =
                            new Vector2(xRcv, yRcv);
                        if (created.TryGetComponent <TransformComponent>(out var component))
                        {
                            component.Rotation = dirRcv.ToAngle();
                        }
                    }
                }
                else
                {
                    mapMgr.GetGrid(mapMgr.DefaultGridId).SetTile(tilePos, new Tile(tileType));
                }
            }
        }