public FrustumCalculation(ComputeShader shader, TerrainBuilder t) { tBuilder = t; calcShader = shader; //setup frustumKernel = calcShader.FindKernel("FrustumCulling"); //test //plane.GetComponent<Renderer>().sharedMaterial.mainTexture = frustumTexture; }
private void generateSurroundingTerrain() { TerrainBuilderReturnPacket terrainPacket = TerrainBuilder.generateTerrain_titleVer(Constants.roomWidthHeight, Constants.numOfVertsPerEdge); Mesh[,] terrainMeshes = terrainPacket.getTerrainMeshes(); // Mesh[,] terrainMeshes = TerrainBuilder.sliceHeightArrayIntoMultipleMeshes(terrainPacket.getHeightArray(), Constants.roomWidthHeight, Constants.numOfVertsPerEdge); int numOfRooms_horizontal = terrainMeshes.GetLength(0); int numOfRooms_vertical = terrainMeshes.GetLength(1); Color32[] terrainColors = persistentData.getTerrainColors(); Texture2D terrainTexture = new Texture2D(4, 1); terrainTexture.wrapMode = TextureWrapMode.Clamp; terrainTexture.filterMode = FilterMode.Point; terrainMaterial.mainTexture = terrainTexture; terrainTexture.SetPixel(0, 0, terrainColors[0]); terrainTexture.SetPixel(1, 0, terrainColors[1]); terrainTexture.SetPixel(2, 0, terrainColors[2]); terrainTexture.SetPixel(3, 0, terrainColors[3]); terrainTexture.Apply(); waterPlane.GetComponent <Renderer>().material.SetColor("_Color", new Color32(terrainColors[0].r, terrainColors[0].g, terrainColors[0].b, 64)); byte fogInc = 153; float fogScale = 0.4f; RenderSettings.fogColor = new Color32((byte)(terrainColors[2].r * fogScale + fogInc), (byte)(terrainColors[2].g * fogScale + fogInc), (byte)(terrainColors[2].b * fogScale + fogInc), 255); // Instantiate the 3D terrain meshes: GameObject newTerrainParent = new GameObject("Empty"); for (int indexX = 0; indexX < numOfRooms_horizontal; indexX++) { for (int indexY = 0; indexY < numOfRooms_vertical; indexY++) { GameObject newTerrain = new GameObject("Empty"); newTerrain.AddComponent <MeshFilter>(); newTerrain.AddComponent <MeshRenderer>(); newTerrain.GetComponent <MeshRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; newTerrain.GetComponent <MeshFilter>().mesh = terrainMeshes[indexX, indexY]; newTerrain.GetComponent <Renderer>().material = terrainMaterial; newTerrain.GetComponent <Transform>().position = new Vector3(((indexX * Constants.roomWidthHeight) - 1.5f * Constants.roomWidthHeight), 0, ((-indexY * Constants.roomWidthHeight) + 3.5f * Constants.roomWidthHeight)); newTerrain.GetComponent <Transform>().parent = newTerrainParent.GetComponent <Transform>(); } } newTerrainParent.GetComponent <Transform>().localScale = new Vector3(100f, 100f, 100f); newTerrainParent.GetComponent <Transform>().eulerAngles = new Vector3(2.3f, 0f, 0f); newTerrainParent.GetComponent <Transform>().position = new Vector3(0f, -223f, 0f); }
/*private void OnDrawGizmos() { * Gizmos.color = Color.green; * Gizmos.DrawWireCube(instanceBound.center, instanceBound.size); * }*/ public void BuildTerrainTool() { terrainBuilder = new TerrainBuilder(heightMap, terrainHeight, terrainMat); GameObject terrain = GameObject.Find("terrain"); if (terrain) { DestroyImmediate(terrain); } terrainBuilder.BuildTerrain(transform); }
public override void OnInspectorGUI() { DrawDefaultInspector(); TerrainBuilder myScript = (TerrainBuilder)target; if (GUILayout.Button("Build Object")) { myScript.BuildTerrain(); } }
private static void ThreadFunction_Demo(object parentClass) { PersistentData dataClass = ((PersistentData)parentClass); TerrainBuilderReturnPacket terrainPacket_thread = TerrainBuilder.generateTerrain_DemoVer(Constants.roomWidthHeight, Constants.numOfVertsPerEdge); bool[,] boolArray_noNoise = terrainPacket_thread.getBoolArray_noNoise(); Color32[] minimapColorArray = MinimapBaseColorMaker.convertBoolArrayToMinimapColorArray(boolArray_noNoise, boolArray_noNoise.GetLength(0), boolArray_noNoise.GetLength(1)); dataClass.setLoadingData(terrainPacket_thread, minimapColorArray); }
private void CalculateGridSize() { if (terrainPrefab.Count > 0) { TerrainBuilder terrainBuilder = terrainPrefab[0].GetComponent <TerrainBuilder>(); MeshRenderer terrainMesh = terrainBuilder.transform.Find("Terrains").GetChild(0).GetComponent <MeshRenderer>(); gridSize = new Vector2(terrainMesh.bounds.size.x, terrainMesh.bounds.size.z); //offsetX = Mathf.RoundToInt(terrainBuilder.index_offset - (terrainBuilder.activate_size * 0.5f) ); offsetX = terrainBuilder.index_offset; } }
public CompleteWorld GenerateWorldTerrain() { var world = new CompleteWorld(); var terrain = world.Terrain; terrain.Init(); var terrainbuilder = new TerrainBuilder(); terrainbuilder.Init(terrain); terrainbuilder.DiamondAlgoritm(); return(world); }
static void Main(string[] args) { Terrain terrain = new Terrain(8); terrain.Init(); TerrainBuilder builder = new TerrainBuilder(); builder.Init(terrain); builder.DiamondAlgoritm(); var encoder = new ImageEncoder(); // encoder.Encode(terrain); encoder.Decode(terrain, "C:\\TEST.png"); }
// Use this for initialization void Start() { UI = GameObject.Find("Canvas"); Camera.main.GetComponent <CameraController>().keepTransform = this.transform; Camera.main.GetComponent <CameraController>().seekKeep = true; tb = GameObject.Find("Terrain").GetComponent <TerrainBuilder>(); try{ statTracker = GameObject.FindGameObjectWithTag("stat_tracker").GetComponent <StatTracker>(); } catch {} escButton = GameObject.Find("Quit"); escButton.SetActive(false); resourceIndicator = UI.transform.Find("Info_Panel/Resources").GetComponent <Text>(); spawnCountIndicator = UI.transform.Find("Info_Panel/Unit_Cap_Control/Respawn").GetComponent <Text>(); spawnTimerIndicator = UI.transform.Find("Info_Panel/Unit_Cap_Control/SpawnCountdown").GetComponent <Text>(); unitPanel[0] = UI.transform.Find("Unit_Panel/Unit0").GetComponent <Button>(); unitPanel[1] = UI.transform.Find("Unit_Panel/Unit0_0").GetComponent <Button>(); unitPanel[2] = UI.transform.Find("Unit_Panel/Unit0_1").GetComponent <Button>(); }
public TerrainBuilder AssignSRandomTerrain() { float noiseValue = Mathf.PerlinNoise(_line_index * slopeRate + perlin_offsetX, perlin_offsetY); TerrainBuilder newTerrain = IdentifyTerrainPiece(noiseValue); //If terrainholder reach its maximum capacity if (_terrainsHolder.Count > maxTerrainCapacity) { TerrainBuilder eraseTerrain = _terrainsHolder.Dequeue(); eraseTerrain.OnTerrainDestroy(); gridMap.RemoveAt(0); PoolManager.instance.Destroy(eraseTerrain.gameObject); } return(newTerrain); }
void Awake() { //GenMathData(); sizeBuffer = new ComputeBuffer(6, sizeof(float)); float[] sizeBufferData = new float[6]; sizeBuffer.SetData(sizeBufferData); Shader.SetGlobalBuffer("sizeBuffer", sizeBuffer); //地形 terrainBuilder = new TerrainBuilder(heightMap, terrainHeight, terrainMat); GameObject terrain = GameObject.Find("terrain"); if (!terrain) { terrainBuilder.BuildTerrain(transform); } //视锥体 frustumCalc = new FrustumCalculation(calcShader, terrainBuilder); //草叶 grassGen = new GrassGenerator(grassDensityMap, grassAmountPerTile, pregenerateGrassAmount, grassMaterial, TerrainBuilder.PATCH_SIZE); grassMesh = grassGen.generateGrassTile(); grassGen.PregenerateGrassInfo(); //terrain data buffer Texture terrainTex = terrainBuilder.GetTerrainHeightTexture(); Texture densityTex = grassGen.GetTerrainDensityTexture(); Shader.SetGlobalTexture("terrainHeightTex", terrainTex); frustumCalc.SetTextureFromGlobal("terrainHeightTex"); grassMaterial.SetTexture("terrainDensityTex", densityTex); Shader.SetGlobalFloat("terrainHeight", terrainHeight); frustumCalc.SetFloat("terrainHeight", terrainHeight); grassMaterial.SetInt("grassAmountPerTile", grassAmountPerTile); grassMaterial.SetInt("pregenerateGrassAmount", pregenerateGrassAmount); argsBuffer = new ComputeBuffer(1, sizeof(uint) * 5, ComputeBufferType.IndirectArguments); counterBuffer = new ComputeBuffer(1, sizeof(uint), ComputeBufferType.Counter); SetShadowTexture(); }
protected virtual void Start() { keep = GameObject.FindObjectOfType <KeepManager>(); anim = transform.GetComponentInChildren <AnimationController>(); tb = GameObject.Find("Terrain").GetComponent <TerrainBuilder>(); try{ statTracker = GameObject.FindGameObjectWithTag("stat_tracker").GetComponent <StatTracker>(); } catch {} maxHealth = health; pathRefreshRate = 5f; GameObject globalNav = GameObject.FindGameObjectWithTag("global_nav"); if (globalNav != null) { navigationController = globalNav.GetComponent <NavigationController>(); } canvas = GameObject.Find("Canvas").GetComponent <Canvas>(); healthBar = Instantiate(sliderPrefab, transform.position, Quaternion.Euler(0, 0, 0)) as Slider; healthBar.transform.SetParent(canvas.transform, false); setRails(false); stateDelegate = IdleState; }
private TerrainBuilder InstantiateTerrain(int object_id) { GameObject createdObject = PoolManager.instance.ReuseObject(object_id); createdObject.SetActive(true); createdObject.transform.SetParent(_terainholder.transform); createdObject.transform.localPosition = new Vector3(0, 0, _line_index); createdObject.SetActive(true); TerrainBuilder terrainBuilder = createdObject.GetComponent <TerrainBuilder>(); terrainBuilder.SetUp(); terrainBuilder.GenerateObstacle(); _terrainsHolder.Enqueue(terrainBuilder); gridMap.Add(terrainBuilder.grids); _line_index++; return(createdObject.GetComponent <TerrainBuilder>()); }
public void GeneratePoolingObject() { if (themeSTP == null) { Debug.LogError("ThemeSTP not assign"); return; } //All type of terrain; int poolNum = 18; foreach (GameObject t_prefab in themeSTP.terrainPrefab) { TerrainBuilder tBuilder = t_prefab.GetComponent <TerrainBuilder>(); PoolManager.instance.CreatePool(t_prefab, tBuilder.terrain_stp._id, poolNum); } //Other object (Vehicle, Obstacle, Units) foreach (STPObject t_object in themeSTP.stpObjectHolder) { PoolManager.instance.CreatePool(t_object.prefab, t_object._id, t_object.poolingNum); } }
public TerrainApplication() { SocketMessageTypes = new List <SocketMessageTypeBase>(); SocketMessageTypes.Add(TerrainCommunication); Builder = new TerrainBuilder(); }
private Traffic GetTerrain_CMD(string args) { ResponseType responseType = ResponseType.Failed; int seed = 0; int width = 0; int height = 0; IModule module = null; List <GradientPresets.GradientKeyData> gradient = new List <GradientPresets.GradientKeyData>(); MapData mdata; MessageTypes type = MessageTypes.None; string[] TextureFiles = new string[0]; string message = string.Empty; if (_server.WorldLoaded) { if (_server.Users.SessionKeyExists(args)) { string user = _server.Users.GetConnectedUser(args).Name; TerrainBuilder builder = _server.Worlds.CurrentWorld.Terrain; responseType = ResponseType.Successfull; seed = builder.Seed; width = builder.Width; height = builder.Height; module = builder.NoiseModule; gradient = new List <GradientPresets.GradientKeyData>(builder.GradientPreset); TextureFiles = new List <string>(GradientCreator.TextureFiles.Keys).ToArray(); message = "success"; // make sure images are cleared. They will be sent seperatly. for (int i = 0; i < gradient.Count; i++) { gradient[i].images.Clear(); } mdata = new MapData(responseType, seed, width, height, gradient, TextureFiles, message); string sendStr = JsonConvert.SerializeObject(mdata); string moduleStr = JsonConvert.SerializeObject(module, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }); _server.SockServ.Send(user, "setterrainmodule", moduleStr); _server.SockServ.Send(user, "setterraindata", sendStr); System.Threading.ManualResetEvent reset = new System.Threading.ManualResetEvent(false); foreach (string imageName in GradientCreator.TextureFiles.Keys) { //reset.WaitOne(1); Color[] image = ColorConvert.LibColList(GradientCreator.TextureFiles[imageName]); ImageFileData imageStruct = new ImageFileData(imageName, image); string imageStr = JsonConvert.SerializeObject(imageStruct); _server.SockServ.Send(user, "setimage", imageStr); //Logger.Log("sent image: {0}", imageName); } message = "success"; type = MessageTypes.Success; return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message)))); } else { message = "Invalid session key"; type = MessageTypes.Not_Logged_in; return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message)))); } } message = "World not loaded"; type = MessageTypes.World_Not_Loaded; return(new Traffic("message", JsonConvert.SerializeObject(new Message("_server_", type, message)))); }
void Start() { selection = GameObject.FindGameObjectWithTag("Player").GetComponent <KeepManager>(); tb = GameObject.Find("Terrain").GetComponent <TerrainBuilder> (); StartCoroutine(generateNavMap()); }