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(); } } }
/// <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); } }