Esempio n. 1
0
    public override void CollectObservations()
    {
        foreach (var ap in allPosition)
        {
            AddVectorObs(ap);
        }

        AddVectorObs(_target.transform.localPosition);

        AddVectorObs(intelPointNb.GetComponent <Rigidbody>().velocity);
        AddVectorObs(ip);
    }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        tp = _target.GetComponent <Rigidbody>().position;
        ip = intelPoint.position;
        //print("ip is" + ip);

        //youwenti
        for (int i = 0; i < allPosition.Count; i++)
        {
            deltaPosition.Add(ip - allPosition[i]);
            // print(deltaPosition[i]);
        }

        dir = tp - ip;

        // add force for intelligent part
        intelPointNb.GetComponent <Rigidbody>().AddForce(dir * moveSpeed, ForceMode.Force);

        if (intelPointNb.GetComponent <Rigidbody>().velocity.sqrMagnitude > 25f) // slow it down
        {
            intelPointNb.GetComponent <Rigidbody>().velocity = intelPointNb.GetComponent <Rigidbody>().velocity *0.6f;
        }


        //add linked force for non - intelligent part
        //for (int i = 0; i < allPosition.Count; i++)
        //{
        //    if (deltaPosition[i].magnitude > originaldeltaPosition[i].magnitude) //p1-p0>0
        //    {
        //        var dirr = deltaPosition[i].normalized;
        //        var deltap = deltaPosition[i] - originaldeltaPosition[i]; //deltap = p1-p0
        //        nointelPointNb[i].GetComponent<Rigidbody>().AddForce((noin_moveSpeed * deltap.magnitude) * dirr, ForceMode.Force);
        //    }
        //    else
        //    {
        //        nointelPointNb[i].GetComponent<Rigidbody>().velocity = 0.1f * nointelPointNb[i].GetComponent<Rigidbody>().velocity;
        //        print("stay"); //速度减慢趋于静止
        //    }

        //}

        //store previousposition information
        previousip = ip;
    }
Esempio n. 3
0
    // Start is called before the first frame update
    void Start()
    {
        nointelPointNb = allPointObj.GetComponentsInChildren <NodePoint>();

        foreach (var n in nointelPointNb)
        {
            n.position = n.transform.localPosition;
            allPosition.Add(n.position);
            //print(n.position);
        }

        ip                    = intelPoint.transform.localPosition;
        tp                    = _target.GetComponent <Rigidbody>().position;
        dir                   = tp - ip;
        intelPointNb          = intelPoint.GetComponent <NodePoint>();
        originaldeltaPosition = deltaPosition;
    }
Esempio n. 4
0
    public override void InitializeAgent()
    {
        nointelPointNb = allPointObj.GetComponentsInChildren <NodePoint>();

        foreach (var n in nointelPointNb)
        {
            n.position = n.transform.localPosition;
            allPosition.Add(n.position);
            //print(n.position);
        }

        ip                    = intelPoint.position;
        tp                    = _target.GetComponent <Rigidbody>().position;
        dir                   = tp - ip;
        intelPointNb          = intelPoint.GetComponent <NodePoint>();
        originaldeltaPosition = deltaPosition;
        SetReward(0.005f);
    }
Esempio n. 5
0
    // Update is called once per frame
    void Update()
    {
        if (controls.TrackCreating.Start.triggered)
        {
            inMenu = !inMenu;
            if (inMenu)
            {
                FindObjectOfType <TrackUIManager>().ShowMenu();
            }
            else
            {
                FindObjectOfType <TrackUIManager>().HideMenu();
            }
        }

        if (!inMenu)
        {
            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible   = false;
            //adds a new road segment
            if (controls.TrackCreating.PlaceNode.triggered && !MovingObject)
            {
                AddPoint();
                //addNode = false;
                AS.PlayOneShot(placeNode);
            }

            //zooms in and out
            if (controls.TrackCreating.Zoom.triggered)
            {
                int value = (int)controls.TrackCreating.Zoom.ReadValue <float>();
                if ((int)ZoomLevel + value <= 4 && (int)ZoomLevel + value >= 1)
                {
                    ZoomLevel = ZoomLevel + value;
                    Zoom();
                }
            }


            //finds out if we're hovering over a node
            Ray ray = Camera.main.ScreenPointToRay(cursorPosition);
            ray.origin = new Vector3(RoundTo(ray.origin.x, (15f / 4) * (int)gridSize), RoundTo(ray.origin.y, 1), RoundTo(ray.origin.z, (15f / 4) * (int)gridSize));
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100f, nodeLayer))
            {
                NodePoint p = hit.collider.gameObject.GetComponent <NodePoint>();

                if (!p.LockedNode)
                {
                    //if we select the node to move it
                    if (controls.TrackCreating.Drag.triggered && !p.isSelected)
                    {
                        p.Select(true);
                        MovingObject = p.gameObject;
                    }
                    //when we deselect a node
                    else if (controls.TrackCreating.Drag.triggered && p.isSelected)
                    {
                        p.Select(false);
                        MovingObject = null;
                    }
                }

                //rotating the nodes around
                if (controls.TrackCreating.RotateRight.triggered)
                {
                    NodeManager.instance.Rotate(p.GetComponent <NodePoint>(), true);
                }

                if (controls.TrackCreating.RotateLeft.triggered)
                {
                    NodeManager.instance.Rotate(p.GetComponent <NodePoint>(), false);
                }

                if (controls.TrackCreating.Delete.triggered)
                {
                    NodeManager.instance.RemoveNode(p.GetComponent <NodePoint>());
                    AS.PlayOneShot(deleteNode);
                }
            }

            //moving a nodes position
            if (MovingObject)
            {
                Vector3 newPos = Camera.main.ScreenToWorldPoint((Vector3)cursorPosition + new Vector3(0, 0, Camera.main.transform.position.y - 1));
                newPos = new Vector3(RoundTo(newPos.x, (15f / 4) * (int)gridSize), RoundTo(newPos.y, 1), RoundTo(newPos.z, (15f / 4) * (int)gridSize));
                //MovingObject.transform.position = newPos;
                NodeManager.instance.UpdateNode(MovingObject.GetComponent <NodePoint>(), newPos);
            }

            if (controls.TrackCreating.TempReorder.triggered)
            {
                if (MovingObject)
                {
                    NodeManager.instance.ReOrder(MovingObject.GetComponent <NodePoint>(), (int)controls.TrackCreating.TempReorder.ReadValue <float>());
                }
            }

            if (controls.TrackCreating.ToogleLoop.triggered)
            {
                TG.ToggleLoop();
            }
        }
        else
        {
            //we're in the menu
            Cursor.lockState = CursorLockMode.None;
            Cursor.visible   = true;
        }
    }