123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- using UnityEngine;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- namespace TerrainComposer2
- {
- public class TC_LayerGroup : TC_ItemBehaviour
- {
- [NonSerialized] public TC_NodeGroup maskNodeGroup;
- [NonSerialized] public TC_LayerGroupResult groupResult;
-
- public bool doNormalize;
- public float placeLimit = 0.5f;
- public Vector2 nodePos;
- public float seed = 0;
- public int placed;
- // Compute height, trees and objects
- public ComputeBuffer ComputeSingle(ref ComputeBuffer totalBuffer, float seedParent, bool first = false)
- {
- if (!groupResult.active) return null;
- TC_Compute compute = TC_Compute.instance;
- float seedTotal = seed + seedParent;
-
- totalBuffer = groupResult.ComputeSingle(seedTotal, first);
- // Debug.Log("layerMaskBuffer " + layerMaskBuffer == null);
- ComputeBuffer maskBuffer = null;
- if (maskNodeGroup.active) maskBuffer = maskNodeGroup.ComputeValue(seedTotal);
- if (maskBuffer != null)
- {
- TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtPreview_LayerGroup");
- if (method != Method.Lerp || first)
- {
- if (outputId == TC.heightOutput) compute.RunComputeMethod(null, null, totalBuffer, ref maskBuffer, 0, rtPreview);
- else compute.RunItemComputeMask(this, ref rtPreview, groupResult.rtDisplay, ref totalBuffer, ref maskBuffer);
- }
- rtDisplay = rtPreview;
- }
- else
- {
- if (outputId == TC.heightOutput || level == 0 || groupResult.totalActive == 1) rtDisplay = groupResult.rtDisplay;
- else rtDisplay = rtPreview;
- }
- if (totalBuffer == null) TC_Reporter.Log("Layer buffer null");
- else
- {
- if (isPortalCount > 0 && outputId == TC.heightOutput) TC_Compute.instance.MakePortalBuffer(this, totalBuffer, method == Method.Lerp ? maskBuffer : null);
- }
- return maskBuffer;
- }
- // Compute Color, splat and grass
- public bool ComputeMulti(ref RenderTexture[] renderTextures, ref ComputeBuffer maskBuffer, float seedParent, bool first = false)
- {
- TC_Compute compute = TC_Compute.instance;
- float totalSeed = seed + seedParent;
- bool computed = groupResult.ComputeMulti(ref renderTextures, totalSeed, doNormalize, first);
- if (maskNodeGroup.active) maskBuffer = maskNodeGroup.ComputeValue(totalSeed);
- if (maskBuffer != null)
- {
- TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtPreview_LayerGroup_" + TC.outputNames[outputId]);
- if (method != Method.Lerp || first)
- {
- if (outputId == TC.colorOutput) compute.RunComputeColorMethod(this, ref renderTextures[0], maskBuffer, groupResult.rtDisplay);
- else compute.RunComputeMultiMethod(this, doNormalize, ref renderTextures, maskBuffer, groupResult.rtDisplay);
- }
- rtDisplay = rtPreview;
- }
- else rtDisplay = groupResult.rtDisplay;
-
- return computed;
- }
- public void ResetPlaced()
- {
- groupResult.ResetPlaced();
- }
- public int CalcPlaced()
- {
- placed = groupResult.CalcPlaced();
- return placed;
- }
-
- public void LinkClone(TC_LayerGroup layerGroupS)
- {
- preview = layerGroupS.preview;
- maskNodeGroup.LinkClone(layerGroupS.maskNodeGroup);
- groupResult.LinkClone(layerGroupS.groupResult);
- }
- public override void SetLockChildrenPosition(bool lockPos)
- {
- lockPosParent = lockPos;
- groupResult.SetLockChildrenPosition(lockPosParent || lockPosChildren);
- maskNodeGroup.SetLockChildrenPosition(lockPosParent || lockPosChildren);
- }
- public override void UpdateTransforms()
- {
- ct.Copy(this);
- groupResult.UpdateTransforms();
- }
- public override void SetFirstLoad(bool active)
- {
- base.SetFirstLoad(active);
- maskNodeGroup.SetFirstLoad(active);
- groupResult.SetFirstLoad(active);
- }
- public void ResetObjects()
- {
- groupResult.ResetObjects();
- }
- public override void GetItems(bool refresh, bool rebuildGlobalLists, bool resetTextures)
- {
- bool newBounds = true;
- active = visible;
- if (resetTextures) DisposeTextures();
-
- maskNodeGroup = GetGroup<TC_NodeGroup>(0, refresh, resetTextures);
- if (maskNodeGroup == null) active = false;
- else
- {
- maskNodeGroup.type = NodeGroupType.Mask;
- if (maskNodeGroup.active)
- {
- if (newBounds) bounds = maskNodeGroup.bounds;
- else bounds.Encapsulate(maskNodeGroup.bounds);
- }
- }
- if (t.childCount <= 1) active = false;
- else
- {
- Transform child = t.GetChild(1);
- groupResult = child.GetComponent<TC_LayerGroupResult>();
- if (groupResult == null)
- {
- TC.MoveToDustbin(child);
- active = false;
- }
- else
- {
- groupResult.SetParameters(this, 1);
- groupResult.GetItems(refresh, rebuildGlobalLists, resetTextures);
- if (!groupResult.active) active = false;
- }
- }
- }
- public override void ChangeYPosition(float y)
- {
- if (groupResult != null) groupResult.ChangeYPosition(y);
- }
- public override bool ContainsCollisionNode()
- {
- if (groupResult != null) return groupResult.ContainsCollisionNode();
- return false;
- }
- public int ExecuteCommand(string[] arg)
- {
- if (arg == null) return -1;
- if (arg.Length == 0) return -1;
- int returnValue = -1;
-
- if (arg[0] == "LayerGroup" || arg[0] == "All")
- {
- }
-
- if (arg[0] != "LayerGroup")
- {
- if (arg.Length <= 1) return -1;
- if (groupResult != null) returnValue = groupResult.ExecuteCommand(arg);
- }
- return returnValue;
- }
- }
- }
|