float Dist(TetherNode a, TetherNode b) { Vector3 posA = a.tetherObject.transform.position; Vector3 posB = b.tetherObject.transform.position; return((posA - posB).magnitude); }
//bool: has supplier //float: x pos //float: y pos //float: z pos //float: supplier x pos (if has supplier) //float: supplier y pos (if has supplier) //float: supplier z pos (if has supplier) //bool: is supplier protected override void ReadData(BinaryReader reader) { Dictionary <Vector3, TetherNode> nodesMap = new Dictionary <Vector3, TetherNode>(); int numTethers = reader.ReadInt32(); Debug.Log("NUM TETHERS: " + numTethers); NodeData[] nodeData = new NodeData[numTethers]; for (int i = 0; i < numTethers; i++) { NodeData data; bool hasSupplier = reader.ReadBoolean(); float x = reader.ReadSingle(); float y = reader.ReadSingle(); float z = reader.ReadSingle(); data.pos = new Vector3(x, y, z); Debug.Log(data.pos); if (hasSupplier) { x = reader.ReadSingle(); y = reader.ReadSingle(); z = reader.ReadSingle(); data.supplierPos = new Vector3(x, y, z); data.hasSupplier = true; } else { data.supplierPos = Vector3.zero; data.hasSupplier = false; } TetherNode node = new TetherNode(null); node.loaded = false; node.tetherPos = data.pos; node.isSupplier = reader.ReadBoolean(); nodesMap.Add(data.pos, node); nodeData[i] = data; } List <TetherNode> loadedNodes = new List <TetherNode>(); foreach (NodeData data in nodeData) { nodesMap.TryGetValue(data.pos, out TetherNode node); if (data.hasSupplier) { nodesMap.TryGetValue(data.supplierPos, out TetherNode supplierNode); if (node != null && supplierNode != null) { node.supplier = supplierNode; } } loadedNodes.Add(node); } Debug.Log(loadedNodes.Count); tetherNetwork.unloadedNodes = loadedNodes; tetherNetwork.loadedNodes = new List <TetherNode>(); }
public void PlaceTether(Vector3 position, bool makeSupplier) { GameObject tetherObject = Instantiate(tetherPrefab, position, Quaternion.identity); TetherNode node = tetherObject.GetComponent <Tether>().CreateNode(); node.isSupplier = makeSupplier; loadedNodes.Add(node); updated = true; }
void AttemptConnection() { TetherNode closest = FindNearestNodeWithOxygen(!hasOxygen); if (closest != null && !supplies.Contains(closest)) { if (supplier != null) { supplier.supplies.Remove(this); } supplier = closest; supplierObject = closest.tetherObject; closest.supplies.Add(this); tetherObject.MakeConnection(closest.tetherObject, network.connectionPrefab); } }
private void WriteNode(TetherNode node, BinaryWriter writer) { writer.Write(node.supplier != null); Vector3 position = node.GetPos(); writer.Write(position.x); writer.Write(position.y); writer.Write(position.z); if (node.supplier != null) { Vector3 connectedPos = node.supplier.GetPos(); writer.Write(connectedPos.x); writer.Write(connectedPos.y); writer.Write(connectedPos.z); } writer.Write(node.isSupplier); }
TetherNode FindNearestNodeWithOxygen(bool oxygen) { TetherNode closest = null; float minDist = -1; foreach (TetherNode tether in network.loadedNodes) { if (tether != this && InRange(tether, this) && tether.hasOxygen == oxygen) { float dist = Dist(tether, this); if (minDist == -1 || dist < minDist) { minDist = dist; closest = tether; } } } return(closest); }
bool InRange(TetherNode a, TetherNode b) { return(Dist(a, b) < network.connectDist); }
public TetherNode CreateNode() { tetherNode = new TetherNode(this); return(tetherNode); }
public bool InRange(TetherNode a, TetherNode b) { return(Dist(a, b) < connectDist); }