public override void ReplaceInstance(Instance instance) { base.ReplaceInstance(instance); MoveableNode node = instance as MoveableNode; if (pillarState != null) { pillarState.instance = node.Pillar; if (pillarState.instance == null) { pillarState = null; } } }
public override Instance Clone(InstanceState instanceState, ref Matrix4x4 matrix4x, float deltaHeight, float deltaAngle, Vector3 center, bool followTerrain, Dictionary <ushort, ushort> clonedNodes, Action action) { NodeState state = instanceState as NodeState; 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; if (NetManager.instance.CreateNode(out ushort clone, ref SimulationManager.instance.m_randomizer, state.Info.Prefab as NetInfo, newPosition, SimulationManager.instance.m_currentBuildIndex)) { SimulationManager.instance.m_currentBuildIndex++; InstanceID cloneID = default; cloneID.NetNode = clone; nodeBuffer[clone].m_flags = state.flags; nodeBuffer[clone].CalculateNode(clone); nodeBuffer[clone].Info.m_netAI.GetNodeBuilding(clone, ref nodeBuffer[clone], out BuildingInfo newBuilding, out float heightOffset); nodeBuffer[clone].UpdateBuilding(clone, newBuilding, heightOffset); cloneInstance = new MoveableNode(cloneID); if (((NetNode)data).m_building > 0) { buildingBuffer[((NetNode)(cloneInstance.data)).m_building].m_flags = buildingBuffer[((NetNode)data).m_building].m_flags; } } return(cloneInstance); }
public override Instance Clone(InstanceState instanceState, Dictionary <ushort, ushort> clonedNodes) { NodeState state = instanceState as NodeState; MoveableNode cloneInstance = null; if (NetManager.instance.CreateNode(out ushort clone, ref SimulationManager.instance.m_randomizer, state.Info.Prefab as NetInfo, state.position, SimulationManager.instance.m_currentBuildIndex)) { SimulationManager.instance.m_currentBuildIndex++; InstanceID cloneID = default; cloneID.NetNode = clone; cloneInstance = new MoveableNode(cloneID); nodeBuffer[clone].m_flags = state.flags; // TODO: Clone pillar instead? nodeBuffer[clone].Info.m_netAI.GetNodeBuilding(clone, ref nodeBuffer[clone], out BuildingInfo newBuilding, out float heightOffset); nodeBuffer[clone].UpdateBuilding(clone, newBuilding, heightOffset); } return(cloneInstance); }