private void OnNewBurntTreesReported(object sender, BurntTreesEventArgs e) { var handler = sender as FireHandler; if (handler == null) { Debug.LogError("New Burnt Trees reported not handling event from FireHandler?"); return; } var treeData = _handlersToTreeData[handler]; var treeNodes = new List <TreeNode>(); var resolution = treeData.Terrain.terrainData.heightmapResolution - TerrainUtils.UnityTextureBorder; foreach (var burntTreePos in e.BurntTrees) { var localSpace = burntTreePos; var worldSpace = new Vector3(localSpace.x * resolution, 0, localSpace.y * resolution); var terrainPosition = treeData.Terrain.transform.position; var offsetPosition = worldSpace + terrainPosition; bool foundAny = FindAllTreeInstancesAroundPosition(offsetPosition, SelectionRange * 2, treeData.Terrain, ref treeNodes, false); } ToggleTreeNodes(treeNodes, IndexOfBurningPrototype, treeData.Terrain); }
private void ComputeStepFrame() { int prevTex = _currTex; _currTex = (_currTex + 1) % NumTex; Shader.SetInt("TexRes", TexResolution); Shader.SetBuffer(_mainKernel, "BurntTrees", _burntTreeBuffer); Shader.SetTexture(_mainKernel, "Prev", myRt[prevTex]); Shader.SetInt("RandOffset", (int)(Time.timeSinceLevelLoad * 100)); Shader.SetInt("WindDirDegrees", WindDir); Shader.SetInt("WindSpeed", WindSpeed); Shader.SetInt("NaturalFireSpreadSpeed", NaturalFireSpreadSpeed); Shader.SetTexture(_mainKernel, "Result", myRt[_currTex]); Shader.Dispatch(_mainKernel, TexResolution / 8, TexResolution / 8, 1); //Array.Clear(_burntTreeArray, 0, _burntTreeArray.Length); _burntTreeBuffer.GetData(_burntTreeArray); //_reusableEventArgs.BurntTrees.Clear(); BurntTreesEventArgs eventArgs = null; for (var index = 0; index < _burntTreeArray.Length; index++) { var item = _burntTreeArray[index]; // zeroed value is not interesting if (item == Vector2Int.zero) { continue; } // non-zero values we don't know yet are, though if (!_knownBurnedIndices.Contains(index)) { _knownBurnedIndices.Add(index); if (eventArgs == null) { eventArgs = new BurntTreesEventArgs(); } Vector2 pos = new Vector2((index % TexResolution) / (float)TexResolution, (index / (float)TexResolution) / TexResolution); eventArgs.BurntTrees.Add(pos); } } if (eventArgs != null) { OnBurntTreesAdded(eventArgs); } _lastUpdate -= StepTime; }
protected virtual void OnBurntTreesAdded(BurntTreesEventArgs e) { BurntTreesAdded?.Invoke(this, e); }