示例#1
0
 private static void HandleMouseDown(SceneView view, int id, int button)
 {
     SceneViewMotion.s_CurrentState = SceneViewMotion.MotionState.kInactive;
     if (Tools.viewToolActive)
     {
         ViewTool viewTool = Tools.viewTool;
         if (Tools.s_LockedViewTool != viewTool)
         {
             Event current = Event.current;
             GUIUtility.hotControl         = id;
             Tools.s_LockedViewTool        = viewTool;
             SceneViewMotion.s_StartZoom   = view.size;
             SceneViewMotion.s_ZoomSpeed   = Mathf.Max(Mathf.Abs(SceneViewMotion.s_StartZoom), 0.3f);
             SceneViewMotion.s_TotalMotion = 0f;
             if (view)
             {
                 view.Focus();
             }
             if (Toolbar.get)
             {
                 Toolbar.get.Repaint();
             }
             EditorGUIUtility.SetWantsMouseJumping(1);
             current.Use();
             SceneViewMotion.s_CurrentState = SceneViewMotion.MotionState.kActive;
             GUIUtility.ExitGUI();
         }
     }
 }
 private static void HandleMouseDown(SceneView view, int id, int button)
 {
     s_Dragged = false;
     if (Tools.viewToolActive)
     {
         UnityEditor.ViewTool viewTool = Tools.viewTool;
         if (Tools.s_LockedViewTool != viewTool)
         {
             Event current = Event.current;
             GUIUtility.hotControl  = id;
             Tools.s_LockedViewTool = viewTool;
             s_StartZoom            = view.size;
             s_ZoomSpeed            = Mathf.Max(Mathf.Abs(s_StartZoom), 0.3f);
             s_TotalMotion          = 0f;
             if (view != null)
             {
                 view.Focus();
             }
             if (Toolbar.get != null)
             {
                 Toolbar.get.Repaint();
             }
             EditorGUIUtility.SetWantsMouseJumping(1);
             current.Use();
             GUIUtility.ExitGUI();
         }
     }
 }
        private static void HandleMouseDown(SceneView view, int id, int button)
        {
            Event evt = Event.current;

            // Set up zoom parameters
            s_StartZoom   = view.size;
            s_ZoomSpeed   = Mathf.Max(Mathf.Abs(s_StartZoom), .3f);
            s_TotalMotion = 0;

            if (view)
            {
                view.Focus();
            }

            if (Toolbar.get)
            {
                Toolbar.get.Repaint();
            }
            EditorGUIUtility.SetWantsMouseJumping(1);
            s_ActiveSceneView = s_CurrentSceneView;

            if (Tools.s_LockedViewTool == ViewTool.None && Tools.current == Tool.View)
            {
                bool controlKeyOnMac = (evt.control && Application.platform == RuntimePlatform.OSXEditor);
                bool actionKey       = EditorGUI.actionKey;
                bool noModifiers     = (!actionKey && !controlKeyOnMac && !evt.alt);
                if (evt.button == 0 && noModifiers)
                {
                    TemporaryPan(new ShortcutArguments()
                    {
                        stage = ShortcutStage.Begin
                    });
                }
            }
        }
        private static void HandleMouseDown(SceneView view, int id, int button)
        {
            SceneViewMotion.s_Dragged = false;
            if (!Tools.viewToolActive)
            {
                return;
            }
            ViewTool viewTool = Tools.viewTool;

            if (Tools.s_LockedViewTool == viewTool)
            {
                return;
            }
            Event current = Event.current;

            GUIUtility.hotControl         = id;
            Tools.s_LockedViewTool        = viewTool;
            SceneViewMotion.s_StartZoom   = view.size;
            SceneViewMotion.s_ZoomSpeed   = Mathf.Max(Mathf.Abs(SceneViewMotion.s_StartZoom), 0.3f);
            SceneViewMotion.s_TotalMotion = 0.0f;
            if ((bool)((Object)view))
            {
                view.Focus();
            }
            if ((bool)((Object)Toolbar.get))
            {
                Toolbar.get.Repaint();
            }
            EditorGUIUtility.SetWantsMouseJumping(1);
            current.Use();
            GUIUtility.ExitGUI();
        }
示例#5
0
        private static void HandleMouseDown(SceneView view, int id, int button)
        {
            s_CurrentState = MotionState.kInactive;

            if (Tools.viewToolActive)
            {
                ViewTool wantedViewTool = Tools.viewTool;

                // Check if we want to lock a view tool
                if (Tools.s_LockedViewTool != wantedViewTool)
                {
                    Event evt = Event.current;

                    // Set the hotcontrol and then lock the viewTool (important to set the hotControl AFTER the Tools.viewTool has been evaluated)
                    GUIUtility.hotControl  = id;
                    Tools.s_LockedViewTool = wantedViewTool;

                    // Set up zoom parameters
                    s_StartZoom   = view.size;
                    s_ZoomSpeed   = Mathf.Max(Mathf.Abs(s_StartZoom), .3f);
                    s_TotalMotion = 0;

                    if (view)
                    {
                        view.Focus();
                    }

                    if (Toolbar.get)
                    {
                        Toolbar.get.Repaint();
                    }
                    EditorGUIUtility.SetWantsMouseJumping(1);

                    evt.Use();

                    // we're not dragging yet, but enter this state so we can cleanup correctly
                    s_CurrentState = MotionState.kActive;

                    // This prevents camera from moving back on mousedown... find out why... and write a comment
                    GUIUtility.ExitGUI();
                }
            }
        }
 private static void HandleMouseDown(SceneView view, int id, int button)
 {
   SceneViewMotion.s_Dragged = false;
   if (!Tools.viewToolActive)
     return;
   ViewTool viewTool = Tools.viewTool;
   if (Tools.s_LockedViewTool == viewTool)
     return;
   Event current = Event.current;
   GUIUtility.hotControl = id;
   Tools.s_LockedViewTool = viewTool;
   SceneViewMotion.s_StartZoom = view.size;
   SceneViewMotion.s_ZoomSpeed = Mathf.Max(Mathf.Abs(SceneViewMotion.s_StartZoom), 0.3f);
   SceneViewMotion.s_TotalMotion = 0.0f;
   if ((bool) ((Object) view))
     view.Focus();
   if ((bool) ((Object) Toolbar.get))
     Toolbar.get.Repaint();
   EditorGUIUtility.SetWantsMouseJumping(1);
   current.Use();
   GUIUtility.ExitGUI();
 }
 private static void HandleMouseDown(SceneView view, int id, int button)
 {
     s_Dragged = false;
     if (Tools.viewToolActive)
     {
         ViewTool viewTool = Tools.viewTool;
         if (Tools.s_LockedViewTool != viewTool)
         {
             Event current = Event.current;
             GUIUtility.hotControl = id;
             Tools.s_LockedViewTool = viewTool;
             s_StartZoom = view.size;
             s_ZoomSpeed = Mathf.Max(Mathf.Abs(s_StartZoom), 0.3f);
             s_TotalMotion = 0f;
             if (view != null)
             {
                 view.Focus();
             }
             if (Toolbar.get != null)
             {
                 Toolbar.get.Repaint();
             }
             EditorGUIUtility.SetWantsMouseJumping(1);
             current.Use();
             GUIUtility.ExitGUI();
         }
     }
 }
示例#8
0
    // Use this for initialization
    void Start()
    {
        goalMag   = goal;
        endRange  = range;
        zMag      = level;
        heightMag = height;

        formMag       = form;
        obsMultiplier = obs;

        colors    = new Color[4];
        colors[0] = Color.green;
        colors[1] = Color.cyan;
        colors[2] = Color.yellow;
        colors[3] = Color.magenta;

        string json = "";

        using (StreamReader r = new StreamReader(problem))
        {
            json = r.ReadToEnd();
            // List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
        }
        Input2 input = JsonConvert.DeserializeObject <Input2>(json);

        map = CreateMap();
        Vector2[] boundaryPolygon = new Vector2[input.boundary_polygon.Length];
        for (int i = 0; i < input.boundary_polygon.Length; i++)
        {
            boundaryPolygon[i] = new Vector2(input.boundary_polygon[i][0], input.boundary_polygon[i][1]);
        }
        map.boundaryPolygon = boundaryPolygon;

        Triangulator boundarytr = new Triangulator(boundaryPolygon);

        int[] boundaryindices = boundarytr.Triangulate();

        // Create the Vector3 vertices
        Vector3[] boundaryvertices = new Vector3[boundaryPolygon.Length];
        for (int i = 0; i < boundaryvertices.Length; i++)
        {
            boundaryvertices[i] = new Vector3(boundaryPolygon[i].x, boundaryPolygon[i].y, 0.01f);
        }
        // Create the mesh
        Mesh boundarymsh = new Mesh();

        boundarymsh.vertices  = boundaryvertices;
        boundarymsh.triangles = boundaryindices;
        boundarymsh.RecalculateNormals();
        boundarymsh.RecalculateBounds();

        GameObject boundaryobj = new GameObject();

        // Set up game object with mesh;
        boundaryobj.AddComponent(typeof(MeshRenderer));
        MeshFilter filter = boundaryobj.AddComponent(typeof(MeshFilter)) as MeshFilter;

        filter.mesh = boundarymsh;

        boundaryobj.transform.parent = camera.transform;
        boundaryobj.GetComponent <MeshRenderer>().material.SetColor("_Color", Color.cyan);
        BoxCollider boxCollider = boundaryobj.AddComponent <BoxCollider>();

        boxCollider.size   = new Vector3(400, 400, 10);
        boxCollider.center = new Vector3(0, 0, 5);

        int polygonCnt = 0;

        numberofGuards = 0;
        Debug.Log(input.a_max);
        //Debug.Log(input.polygon["polygon0"] is JArray);

        //gets length to intialize each array (I know this is incredibly bad practice, but won't be too taxing in the end)
        int polycount = 0;

        this.itemcount = 0;
        foreach (var pair in input.polygon)
        {
            if (pair.Key.StartsWith("polygon"))
            {
                polycount++;
            }
            else if (pair.Key.StartsWith("start_pos"))
            {
                numberofGuards++;
            }
            else if (pair.Key.StartsWith("item_"))
            {
                itemcount++;
            }
        }

        Vector2[][] inputPolygon = new Vector2[polycount][];
        //gets each polygon opject
        Debug.Log(input.polygon);
        //float[][] buildingpivots = new float[polycount][];

        foreach (var pair in input.polygon)     //need to add rotation to json
        {
            if (pair.Key.StartsWith("polygon")) //checks if name is polygon
            {
                Debug.Log(pair.Key);
                buildingRotations.Add(new Quaternion(0, 0, 0, 0));

                float[][] polygon = pair.Value.ToObject <float[][]>();       //extracts float object

                buildingObjects.Add(GeneratePolygonMesh(polygon, Color.gray));

                Vector2[] vertices2D = new Vector2[polygon.Length];
                for (int i = 0; i < polygon.Length; i++)
                {
                    vertices2D[i] = new Vector2(polygon[i][0], polygon[i][1]);      //puts float value to vertex
                }
                inputPolygon[polygonCnt++] = vertices2D;

                var tmp = new Vector3(0F, 0F, 0F);
                for (int i = 0; i < polygon.Length; i++)
                {
                    tmp[0] += polygon[i][0];
                    tmp[1] += polygon[i][1];
                    tmp[2] += polygon[i][2];
                }
                tmp[0] /= polygon.Length;
                tmp[1] /= polygon.Length;
                tmp[2] /= polygon.Length;
                buildingPivots.Add(tmp);
            }
        }
        buildingRotations.Add(new Quaternion(0, 0, 0, 0));
        buildingObjects.Add(boundaryobj);
        buildingPivots.Add(new Vector3(50, 50, 5));

        // Create packageObject
        foreach (var pair in input.polygon)   //need to add rotation to json
        {
            if (pair.Key.EndsWith("package")) //checks if name is polygon
            {
                Debug.Log(pair.Key);
                float[][] package = pair.Value.ToObject <float[][]>();       //extracts float object

                packageObject = GeneratePolygonMesh(package, Color.white);
                packageObject.GetComponent <MeshRenderer>().material = newMaterialRef;
                break;
            }
        }

        foreach (var pair in input.polygon) //need to add rotation to json
        {
            if (pair.Key.EndsWith("_rot"))
            {
                var buildnum = pair.Key;
                int objnum   = Int32.Parse(buildnum.Substring(4, 1));
                Debug.Log("hyperderp");
                Debug.Log(buildnum);
                Debug.Log(transform.position);
                float[] rot = pair.Value.ToObject <float[]>();
                buildingRotations[objnum] = Quaternion.Euler(rot[0], rot[1], rot[2]);
                buildingObjects[objnum].transform.rotation = Quaternion.Euler(rot[0], rot[1], rot[2]);
                Debug.Log(transform.position);

                //buildingObjects[objnum].transform.Rotate(new Vector3(rot[0], rot[1], rot[2]), Space.Self);

                /*buildingObjects[objnum].transform.RotateAround(buildingPivots[objnum], transform.right, rot[0]);
                 *
                 * buildingObjects[objnum].transform.RotateAround(buildingPivots[objnum], transform.forward, rot[1]);
                 * buildingObjects[objnum].transform.RotateAround(buildingPivots[objnum], transform.up, rot[2]);*/
            }
        }
        map.polygons = inputPolygon;

        //buildingObjects[0].transform.Rotate(new Vector3(45F, 0F, 0F)); //pivot over x, y, z

        //get start positions of guards. Assumes:
        //Number of guards = number of start pos
        //Guard start & end pos arrive in same order
        //Can throw this into above forloop later (but it's nice to have seperate)
        float[][] start_positions = new float[numberofGuards][];
        int       grdID           = 0;

        foreach (var pair in input.polygon)
        {
            if (pair.Key.StartsWith("start_pos"))
            {
                //               Debug.Log(pair.Key + " Number of Guards: " + grdID);
                var start_pos = pair.Value.ToObject <float[]>();
                start_positions[grdID] = start_pos;
                grdID++;
            }
        }

        float[][] end_positions = new float[numberofGuards][];
        grdID = 0;
        foreach (var pair in input.polygon)
        {
            if (pair.Key.StartsWith("goal_pos"))
            {
                //              Debug.Log(pair.Key + " Number of Guards: " + grdID);
                var end_pos = pair.Value.ToObject <float[]>();
                end_positions[grdID] = end_pos;
                grdID++;
            }
        }
        foreach (var pair in input.polygon)
        {
            if (pair.Key.StartsWith("package_waypoints"))
            {
                //              Debug.Log(pair.Key + " Number of Guards: " + grdID);
                float[][] waypoints = pair.Value.ToObject <float[][]>();
                foreach (float[] waypoint in waypoints)
                {
                    Vector3 w = new Vector3(waypoint[0], waypoint[1], waypoint[2]);
                    packageWaypoints.Add(w);
                    formation_sizes.Add(waypoint[3]);
                    Debug.Log("Waypoint: " + w);
                }
            }
        }
        drone_offset_positions[0] = new Vector3(-formation_sizes[currentCheckpoint] / 2, -formation_sizes[currentCheckpoint] / 2, -1);
        drone_offset_positions[1] = new Vector3(formation_sizes[currentCheckpoint] / 2, -formation_sizes[currentCheckpoint] / 2, -1);
        drone_offset_positions[2] = new Vector3(formation_sizes[currentCheckpoint] / 2, formation_sizes[currentCheckpoint] / 2, -1);
        drone_offset_positions[3] = new Vector3(-formation_sizes[currentCheckpoint] / 2, formation_sizes[currentCheckpoint] / 2, -1);



        float[][] items = new float[itemcount][];
        grdID = 0;
        foreach (var pair in input.polygon)
        {
            if (pair.Key.StartsWith("item_"))
            {
                //               Debug.Log(pair.Key + " Number of Guards: " + grdID);
                var item_pos = pair.Value.ToObject <float[]>();
                items[grdID] = item_pos;
                grdID++;
            }
        }
        map.items = items;
        map.seen  = new float[items.Length][];
        foreach (var pair in input.polygon)
        {
            if (pair.Key.StartsWith("sensor_range"))
            {
                map.sensor_range = pair.Value.ToObject <float>();
                break;
            }
        }

        //Create players

        this.point = new Point[numberofGuards];
        for (int i = 0; i < numberofGuards; i++)
        {
            Debug.Log("Guard Number: " + i);
            point[i]      = CreateAI();
            point[i].name = ("Guard" + i);
            //point[i].useSaved = useSaved;

            //point[i].startPos = input.start_pos; //need to update for multiple
            point[i].startPos           = start_positions[i];
            point[i].transform.position = new Vector3(start_positions[i][0], start_positions[i][1], start_positions[i][2]);
            //point[i].goalPos = end_positions[i];
            Vector3 goalV = drone_offset_positions[i] + packageWaypoints[currentCheckpoint];

            point[i].goalPos  = new float[] { goalV.x, goalV.y, goalV.z };
            point[i].startVel = input.start_vel;
            point[i].goalVel  = input.goal_vel;

            point[i].MAX_SPEED  = input.v_max;
            point[i].MAX_ACCEL  = input.a_max;
            point[i].MAX_OMEGA  = input.omega_max;
            point[i].MAX_PHI    = input.phi_max;
            point[i].L_CAR      = input.L_car;
            point[i].K_FRICTION = input.k_friction;
            point[i].guardID    = i;

            point[i].polygons = inputPolygon;

            point[i].startVel        = input.start_vel;
            point[i].goalVel         = input.goal_vel;
            point[i].boundaryPolygon = boundaryPolygon;
            point[i].Kp = Kp;
            point[i].Ki = Ki;
            point[i].Kd = Kd;

            Vector3 pos      = point[i].transform.position;
            Vector3 vClosest = new Vector3(100, 100, 100);
            for (int j = 0; j < buildingObjects.Count; j++)
            {
                Vector3 v = buildingObjects[j].GetComponent <BoxCollider>().ClosestPointOnBounds(pos);
                if (Vector3.Distance(v, pos) < Vector3.Distance(vClosest, pos))
                {
                    vClosest = v;
                }
            }
            point[i].closestBuildingPoint = vClosest;
        }
        for (int i = 0; i < numberofGuards; i++)
        {
            for (int j = 0; j < numberofGuards; j++)
            {
                if (j != i)
                {
                    var x = point[j].goalPos[0] - point[i].goalPos[0];
                    var y = point[j].goalPos[1] - point[i].goalPos[1];
                    point[i].formation.Add(new Vector2(x, y));
                }
            }
        }
        packagePos   = findPackage();
        packageSpeed = packagePos;
        // Power of Cheetah

        //Cheetah.instance.CreateOrLoad(problem, boundaryPolygon, inputPolygon);

        if (UnityEditor.SceneView.sceneViews.Count > 0)
        {
            UnityEditor.SceneView sceneView = (UnityEditor.SceneView)UnityEditor.SceneView.sceneViews[0];
            sceneView.Focus();
        }
        Debug.Break();
    }