Exemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        foreach (var i in segments)
        {
            Debug.DrawLine(i.start, i.end);
        }
        if (Input.GetMouseButtonDown(0))
        {
            var item = Instantiate(redX);
            objs.Add(item);
            Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            item.transform.position = pos;
            baseShape.Add(pos);
        }
        if (Input.GetMouseButtonDown(1))
        {
            var item = Instantiate(blueX);
            objs.Add(item);
            Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            item.transform.position = pos;
            notShape.Add(pos);
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            bool none;
            var  retr = CSGshape.not(new CSGshape(baseShape), new CSGshape(notShape), false, out none);
            foreach (var i in objs)
            {
                Destroy(i);
            }
            baseShape.Clear();
            notShape.Clear();
            segments.Clear();
            foreach (var j in retr)
            {
                foreach (var i in j.externalHull.segments)
                {
                    var item = Instantiate(redX);
                    objs.Add(item);
                    item.transform.position = i.start;
                    baseShape.Add(i.start);
                    segments.Add(i);
                    //Debug.DrawLine(i.start,i.end);

                    /*item = Instantiate(redX);
                     * item.transform.position = i.end;
                     * baseShape.Add(i.end);*/
                }
            }
        }
    }
Exemplo n.º 2
0
    private void ShapeOp(CSGshape other, bool isNot)
    {
        List <CollisionHull> hulls = new List <CollisionHull>();
        bool isShapeUsedUp         = false;

        foreach (var coll in colliders)
        {
            if (!isShapeUsedUp || isNot == false)
            {
                var result = CSGshape.not(coll.externalHull, other, isNot, out isShapeUsedUp, coll.holes);
                hulls.AddRange(result);
            }
        }
        if (!isShapeUsedUp && !isNot)
        {
            var foo = new CollisionHull();
            foo.externalHull = other;
            hulls.Add(foo);
        }
        colliders = hulls;
    }
Exemplo n.º 3
0
 // Update is called once per frame
 void Update()
 {
     Draw();
     if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
     {
         try
         {
             doNotRender.Clear();
             Vector2                 center     = Camera.main.ScreenToWorldPoint(Input.mousePosition);
             List <Vector2[]>        newShapes  = new List <Vector2[]>();
             List <List <CSGshape> > shapeHoles = new List <List <CSGshape> >();
             List <Vector2>          square     = getCircle(center, 1, 20);
             //List<CollisionHull> shapesSoFar = new List<CollisionHull>();//#garbagelife
             //Debug.Log("shapesofarleng:" + shapesSoFar.Count);
             bool isShapesUsedUp = false;                //prevents applying positive and to multiple
             for (int path = 0; path < baseCollider.pathCount; path++)
             {
                 if (!isShapesUsedUp || Input.GetMouseButtonDown(0))
                 {
                     var b = new CSGshape(new List <Vector2>(baseCollider.GetPath(path)));
                     //List<Vector2> square = getCircle();//getSquare(center);
                     {
                         var retr = CSGshape.not(b, new CSGshape(square), Input.GetMouseButtonDown(0), out isShapesUsedUp, null);
                         //retr = CSGshape.prune(shapesSoFar,retr);
                         //shapesSoFar.AddRange(retr);
                         foreach (var returnVal in retr)
                         {
                             newShapes.Add(collisionHullToVector2(returnVal.externalHull));
                             doNotRender.Add(false);
                             if (returnVal.holes != null)
                             {
                                 newShapes.AddRange(returnVal.holes.Select(a => collisionHullToVector2(a)));
                                 for (var i = 0; i < returnVal.holes.Count; i++)
                                 {
                                     doNotRender.Add(true);
                                 }
                             }
                             //shapeHoles.Add(returnVal.holes);
                         }
                     }
                 }
                 else
                 {
                     newShapes.Add(baseCollider.GetPath(path));
                     doNotRender.Add(false);
                 }
             }
             if (!isShapesUsedUp && Input.GetMouseButtonDown(1))
             {
                 newShapes.Add(square.ToArray());
                 doNotRender.Add(false);
             }
             if (newShapes.Count != doNotRender.Count)
             {
                 throw new Exception("F**K");
             }
             baseCollider.pathCount = newShapes.Count();
             int counter = 0;
             foreach (var i in newShapes)
             {
                 baseCollider.SetPath(counter, i);
                 counter++;
             }
         }
         catch (NotImplementedException e)//(Exception e)
         {
             //Debug.Log("EXCEPTION:" + e.ToString());
         }
     }
 }