public override Instance Clone(InstanceState instanceState, ref Matrix4x4 matrix4x, float deltaHeight, float deltaAngle, Vector3 center, bool followTerrain, Dictionary <ushort, ushort> clonedNodes) { TreeState state = instanceState as TreeState; Vector3 newPosition = matrix4x.MultiplyPoint(state.position - center); newPosition.y = state.position.y + deltaHeight; if (followTerrain) { newPosition.y = newPosition.y + TerrainManager.instance.SampleOriginalRawHeightSmooth(newPosition) - state.terrainHeight; } Instance cloneInstance = null; TreeInstance[] buffer = TreeManager.instance.m_trees.m_buffer; if (TreeManager.instance.CreateTree(out uint clone, ref SimulationManager.instance.m_randomizer, state.info as TreeInfo, newPosition, state.single)) { InstanceID cloneID = default(InstanceID); cloneID.Tree = clone; cloneInstance = new MoveableTree(cloneID); } return(cloneInstance); }
public override Instance Clone(InstanceState instanceState, Dictionary <ushort, ushort> clonedNodes) { TreeState state = instanceState as TreeState; Instance cloneInstance = null; if (TreeManager.instance.CreateTree(out uint clone, ref SimulationManager.instance.m_randomizer, state.info as TreeInfo, state.position, state.single)) { InstanceID cloneID = default(InstanceID); cloneID.Tree = clone; cloneInstance = new MoveableTree(cloneID); } return(cloneInstance); }
public override Instance Clone(InstanceState instanceState, Dictionary <ushort, ushort> clonedNodes) { TreeState state = instanceState as TreeState; Instance cloneInstance = null; TreeInstance[] buffer = TreeManager.instance.m_trees.m_buffer; if (TreeManager.instance.CreateTree(out uint clone, ref SimulationManager.instance.m_randomizer, state.Info.Prefab as TreeInfo, state.position, state.single)) { InstanceID cloneID = default; cloneID.Tree = clone; cloneInstance = new MoveableTree(cloneID); buffer[clone].FixedHeight = state.fixedHeight; } return(cloneInstance); }