Пример #1
0
        private void CreateNavMesh()
        {
            MsgGetTerrainEntity getTerrainMsg = ObjectPool.Aquire <MsgGetTerrainEntity>();

            getTerrainMsg.UniqueTarget = this.Game.TerrainID;
            this.Game.SendMessage(getTerrainMsg);

            if (getTerrainMsg.TerrainEntity == null)
            {
                throw new Exception("The terrain must be initialized before a NavMesh can be generated");
            }

            this.terrain = getTerrainMsg.TerrainEntity;

            this.terrainComp = this.terrain.GetComponentByType(ComponentType.TerrainComponent) as TerrainComponent;

            meshGenerator.GenerateNavMesh(this.terrain);

            if (meshGenerator.MeshGenerated)
            {
                meshChunks = meshGenerator.chunkDictionary;
                meshGenerator.nodeDictionary.Clear();
                meshGenerator.nodeDictionary = null;

                foreach (NavMeshChunk chunk in meshChunks.Values)
                {
                    chunk.UpdateAABB();
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Send a message directly to an Entity through this method.
        /// </summary>
        /// <param name="message">Message to send</param>
        /// <returns>Returns true if message was handled</returns>
        public override bool ExecuteMessage(IMessage message)
        {
            if (message.UniqueTarget != this.parentEntity.UniqueID)
            {
                return(false);
            }

            switch (message.Type)
            {
            case MessageType.GetTerrainHeightAtXZ:
            {
                MsgGetTerrainHeight getHeightMsg = message as MsgGetTerrainHeight;
                message.TypeCheck(getHeightMsg);

                getHeightMsg.PositionAboveTerrain = IsAboveTerrain(getHeightMsg.XPos, getHeightMsg.ZPos);

                if (getHeightMsg.PositionAboveTerrain)
                {
                    getHeightMsg.OutHeight = GetTerrainHeight(getHeightMsg.XPos, getHeightMsg.ZPos);
                }
            }
                return(true);

            case MessageType.GetTerrainEntity:
            {
                MsgGetTerrainEntity getTerrainMsg = message as MsgGetTerrainEntity;
                message.TypeCheck(getTerrainMsg);

                getTerrainMsg.TerrainEntity = this.parentEntity;
            }
                return(true);

            case MessageType.ToggleTerrainDisplayBoundingBoxes:
            {
                MsgToggleDisplayBoundingBoxes msgDisplayBoxes = message as MsgToggleDisplayBoundingBoxes;
                message.TypeCheck(msgDisplayBoxes);

                // Toggle display of bounding boxes
                displayBoundingBoxes = !displayBoundingBoxes;
            }
                return(true);

            case MessageType.GetTerrainProperties:
            {
                MsgGetTerrainProperties msgTerrain = message as MsgGetTerrainProperties;
                message.TypeCheck(msgTerrain);

                msgTerrain.HeightMap         = this.heightMap;
                msgTerrain.MinHeight         = this.MinimumHeight;
                msgTerrain.MaxHeight         = this.MaximumHeight;
                msgTerrain.TerrainScale      = this.ScaleFactor;
                msgTerrain.ElevationStrength = this.ElevationStrength;
                msgTerrain.Size = this.size;
            }
                return(true);

            default:
                return(false);
            }
        }