Exemple #1
0
    private TestCubeQuadObject CreateObject()
    {
        float randomCenterX = Random.Range(21, 370);
        float randomCenterY = Random.Range(21, 370);
        float randomExtents = Random.Range(0.3f, 2);


        AABB2D bounds = new AABB2D(new Vector2(randomCenterX, randomCenterY), new Vector2(randomExtents, randomExtents));

        GameObject         gObj    = GameObject.CreatePrimitive(PrimitiveType.Cube);
        TestCubeQuadObject qObject = gObj.AddComponent <TestCubeQuadObject>();

        qObject.UniqueID          = idCreator.NextID;
        qObject.Bounds            = bounds;
        gObj.name                 = "Cube " + qObject.UniqueID;
        gObj.transform.localScale = new Vector3(bounds.Size.x, 1, bounds.Size.y);
        gObj.transform.position   = new Vector3(bounds.Center.x, 0, bounds.Center.y);

        //qObject.OnEnterView();

        return(qObject);
    }
Exemple #2
0
    private void OnGUI()
    {
        Random.InitState((int)System.DateTime.Now.Ticks);

        if (GUILayout.Button("CLICK"))
        {
            LogUtil.Trace("SSSSSSSS");
            for (int i = 0; i < 10; ++i)
            {
                TestCubeQuadObject quadObject = CreateObject();
                float value = Random.Range(0.0f, 1.0f);
                if (value > 0.5f)
                {
                    quadObject.IsBoundsChangeable = true;
                    quadObject.RandomMove();
                }
                tree.InsertObject(quadObject);
            }
        }

        if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
        {
            isMouseDown = true;
        }
        if (isMouseDown)
        {
            Vector3 wPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            showBounds = new AABB2D(new Vector2(wPosition.x, wPosition.z), new Vector2(50, 50));

            List <IQuadObject> list1 = ListPool <IQuadObject> .Get();

            if (selectedObjects != null)
            {
                list1.AddRange(selectedObjects);
            }

            tempObjects.Clear();
            tree.QueryIntersectsObjects(showBounds, ref tempObjects);
            List <IQuadObject> list2 = ListPool <IQuadObject> .Get();

            list2.AddRange(tempObjects);

            var dis1 = list1.Except(list2).ToArray();
            foreach (var obj in dis1)
            {
                obj.OnExitView();
            }

            var dis2 = list2.Except(list1).ToArray();
            foreach (var obj in dis2)
            {
                obj.OnEnterView();
            }

            selectedObjects.Clear();
            selectedObjects.AddRange(tempObjects);

            ListPool <IQuadObject> .Release(list1);

            ListPool <IQuadObject> .Release(list2);
        }
        if (isMouseDown && Event.current.type == EventType.MouseUp)
        {
            isMouseDown = false;
        }

        if (Input.GetKeyUp(KeyCode.Delete))
        {
            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo, float.MaxValue))
            {
                var qObject = hitInfo.collider.gameObject.GetComponent <TestCubeQuadObject>();
                if (qObject != null)
                {
                    tree.RemoveObject(qObject);

                    Destroy(qObject.gameObject);
                }
            }
        }
    }