Пример #1
0
    public void PlaceNewRoad(Node startingNode = null)
    {
        var placeholder = GenerateNodePlaceholder();

        if (startingNode == null)
        {
            roadPlacingStatus = RoadPlacingStatus.PlacingStartingNode;
            startNodeTemp = null;
        }
        else
        {
            roadPlacingStatus = RoadPlacingStatus.PlacingEndingNode;
            startNodeTemp = startingNode.gameObject;
        }

        placer.PlaceObject(placeholder, PlacedNodeCallback, typeof(Node));
    }
Пример #2
0
    void PlacedNodeCallback(bool success, GameObject obj, bool placedWhileSnapped)
    {
        if (!success)
            return;

        switch (roadPlacingStatus)
        {
            case RoadPlacingStatus.PlacingStartingNode:
            {
                startNodeTemp = obj;

                var placeholder = GenerateNodePlaceholder();
                roadPlacingStatus = RoadPlacingStatus.PlacingEndingNode;
                placer.PlaceObject(placeholder, PlacedNodeCallback, typeof(Node));

                break;
            }
            case RoadPlacingStatus.PlacingEndingNode:
            {
                // when using existing node to start or snapped to ending node, skip node creation
                // if either node contains a node component, then we don't need to create a new one

                // swap startingNodeTemp/obj with real node
                GameObject n1, n2;

                if (startNodeTemp.GetComponent<Node>() == null)
                {
                    n1 = CreateNode(startNodeTemp.transform.position);
                    Destroy(startNodeTemp);
                }
                else
                {
                    n1 = startNodeTemp;
                }

                if (obj.GetComponent<Node>() == null)
                {
                    n2 = CreateNode(obj.transform.position);
                    Destroy(obj);
                }
                else
                {
                    n2 = obj;
                }

                startNodeTemp = null;

                // todo: create road
                var roadObj = new GameObject();
                var roadCom = roadObj.AddComponent<Road>();
                roadCom.SetNodes(n1.GetComponent<Node>(), n2.GetComponent<Node>());

                nodesWithNewRoads.Add(n1.GetComponent<Node>());
                nodesWithNewRoads.Add(n2.GetComponent<Node>());

                roadPlacingStatus = RoadPlacingStatus.NotPlacing;
                break;
            }
            case RoadPlacingStatus.NotPlacing:
            {
                Debug.LogError("Road Callback called while not placing any node");
                break;
            }
        }

        CleanUpNodesWithNewRoads();
    }
Пример #3
0
    // Use this for initialization
    void Start()
    {
        placer = FindObjectOfType<ObjectPlacer>();

        roadPlacingStatus = RoadPlacingStatus.NotPlacing;

        nodesWithNewRoads = new List<Node>();
    }