Пример #1
0
    float Dist(TetherNode a, TetherNode b)
    {
        Vector3 posA = a.tetherObject.transform.position;
        Vector3 posB = b.tetherObject.transform.position;

        return((posA - posB).magnitude);
    }
Пример #2
0
    //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>();
    }
Пример #3
0
    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;
    }
Пример #4
0
    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);
        }
    }
Пример #5
0
    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);
    }
Пример #6
0
    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);
    }
Пример #7
0
 bool InRange(TetherNode a, TetherNode b)
 {
     return(Dist(a, b) < network.connectDist);
 }
Пример #8
0
 public TetherNode CreateNode()
 {
     tetherNode = new TetherNode(this);
     return(tetherNode);
 }
Пример #9
0
 public bool InRange(TetherNode a, TetherNode b)
 {
     return(Dist(a, b) < connectDist);
 }