void OnDrawGizmos()
        {
            if (!Application.isPlaying)
            {
                Init();
            }

            Gizmos.DrawWireSphere(polygon.Center, gizmosSize);
            polygon.DrawEdges();

            Polygon fake = PolygonManager.Create2D(polygon);

            fake.Translate(debugMovement);
            Gizmos.color = Color.gray;
            // fake.DrawEdges();

            List <Collider2D> collisions = fake.CheckCollisionsAt(fake.Center, polygonMask).ToList();// PolygonManager.CheckCollisions(fake);

            collisions.Remove(GetComponent <CircleCollider2D>());
            for (int i = 0; i < collisions.Count; i++)
            {
                Polygon        obstacle   = new RegularPolygon((CircleCollider2D)collisions[i], vertices);
                List <Vector2> o_vertices = obstacle.VerticesInside(fake);

                Gizmos.color = Color.white;
                obstacle.DrawEdges();

                DrawDebugCollision(fake, obstacle);
                fake.ProcessCollision(polygon, obstacle);
                Gizmos.color = Color.yellow;
                fake.DrawEdges();
            }
        }
        Vector2 HandleCollisions(Polygon polygon, Vector2 direction)
        {
            Vector2 newPosition = direction * speed * Time.deltaTime;
            Polygon fake        = PolygonManager.Create2D(polygon);

            fake.Center = newPosition;

            List <Polygon> collisions = CollidingPolygons(fake);

            if (collisions == null || collisions.Count <= 0)
            {
                return(direction);
            }

            for (int i = 0; i < collisions.Count; i++)
            {
                if (fake.Intersects(collisions[i]))   // It may have been corrected
                {
                    fake.ProcessCollision(polygon, collisions[i]);
                }
            }

            Vector2 newDirection = -direction + new Vector2(Random.Range(-1, 1), Random.Range(-1, 1));

            return(newDirection.normalized);
        }
Beispiel #3
0
    // Use this for initialization
    public void Initialize()
    {
        //Debug.Log ("Spawned " + gameObject.transform.parent.name + " at " + gameObject.transform.position.ToString() + ".");

        script         = GameObject.FindWithTag("GameController").GetComponent <GameScript>();
        soundManager   = script.getSoundManager();
        polygonManager = script.getPolygonManager();
        gameObject.tag = "Polygon";

        foreach (AnimationState state in animation)
        {
            state.speed = 0.5f / 0.3f;           // animation length / desire length
        }

        foreach (AdjacentObject obj in adjacentObjects)
        {
            //Add parent rotation to the adjacent objs
            obj.incAngle(transform.parent.transform.eulerAngles.z);
        }

        if (countAdjacentPolygons() <= 1)
        {
            deletePolygon();
            return;
        }

        //if (GameObject.Find("container") != null)

        if (script.countPolygons() < 100)
        {
            spawnAdjacentObjects();
        }

        script.SendMessage("AddPolygon", this);
    }
Beispiel #4
0
 // Use this for initialization
 void Start()
 {
     gameCam = Camera.main;
     //scoreText = GameObject.Find("Score").GetComponent<UILabel>();
     polygonManager = GameObject.Find("PolygonManager").GetComponent <PolygonManager>();
     soundManager   = GameObject.Find("SoundManager").GetComponent <SoundManager>();
     //GameObject.Find("OptionsMenu").SetActiveRecursively(false);
     setupOptionsMenu();
     //background.active = true;
 }
        protected void DrawFakeSolution(Polygon original, Polygon obstacle, Vector2 offset)
        {
            Polygon fakeSolution = PolygonManager.Create2D(original);

            fakeSolution.Translate(offset);
            fakeSolution.DrawEdges();

            List <Vector2> remaining = fakeSolution.VerticesInside(obstacle);

            Gizmos.color = Color.black;
            foreach (Vector2 v in obstacle.IntersectionPoints(fakeSolution))
            {
                Gizmos.DrawWireSphere(v, gizmosSize / 2);
            }
            foreach (Vector2 v in remaining)
            {
                Gizmos.DrawWireSphere(v, gizmosSize / 2);
            }
        }
Beispiel #6
0
    // Use this for initialization
    void Start()
    {
        if (Wrapper.isEuclidean)
        {
            mid      = mainTile.transform.position;
            size     = mainTile.GetComponent <MeshRenderer>().bounds.size.x;
            halfSize = size / 2f;
            for (int i = 0; i < 8; i++)
            {
                GameObject tile0 = Instantiate(mainTile);
                tile0.name = "Tile " + i;
                tile0.transform.position = mainTile.transform.position + xCoords[i] * size * Vector3.right + yCoords[i] * size * Vector3.forward;
                tiles[i] = tile0;
                if (!Wrapper.isTorus && i != 0 && i != 4)
                {
                    tile0.transform.localScale = new Vector3(-tile0.transform.localScale.x, tile0.transform.localScale.y, tile0.transform.localScale.z);
                }
                GameObject player0 = Instantiate(mainPlayer);
                player0.name = "Player " + i;
                player0.GetComponent <PlayerController>().isMoved = false;
                player0.transform.position = mainTile.transform.position + xCoords[i] * size * Vector3.right + yCoords[i] * size * Vector3.forward;
                player0.GetComponent <TrailRenderer>().Clear();
                players[i] = player0;
            }
            tiles[8]   = mainTile;
            players[8] = mainPlayer;

            playerOnTorus = Instantiate(mainPlayer);
            playerOnTorus.GetComponent <Rigidbody>().useGravity = false;
            Destroy(playerOnTorus.GetComponent <PlayerController>());
            playerOnTorus.transform.position = TorusScript.toTorus(mainPlayer.transform.position - tiles[8].transform.position, new Vector2(size, size)) + TorusScript.torus.transform.position;
            playerOnTorus.GetComponent <TrailRenderer>().Clear();
        }
        else
        {
            mainTile.SetActive(false);
            int p = 4;
            int q = 6;
            pb       = new PolygonManager(p, q, mat);
            position = Vector3.zero;
        }
    }
        /// <summary>
        /// Calculates the intersection point of the line AB with a Collider.
        /// </summary>
        /// <param name="collider"></param>
        /// <param name="pointA">First point.</param>
        /// <param name="pointB">Second point.</param>
        /// <returns>The intersection points of a line with the edges of a collider.</returns>
        public static List <Vector2> IntersectionPoints(Collider2D collider, Line2D line)
        {
            Polygon polygon = PolygonManager.Create2D(collider);

            return(polygon.IntersectionPoints(line));
        }
        /// <summary>
        /// Calculates the intersection point of the segment AB with a Collider.
        /// </summary>
        /// <param name="collider"></param>
        /// <param name="pointA">First point.</param>
        /// <param name="pointB">Second point.</param>
        /// <returns>The intersection points of a segment with the edges of a collider.</returns>
        public static List <Vector2> IntersectionPoints(Collider2D collider, Segment2D segment)
        {
            Polygon polygon = PolygonManager.Create2D(collider);

            return(polygon.IntersectionPoints(segment));
        }
Beispiel #9
0
 void RemoveFromManager()
 {
     PolygonManager.Remove(this);
 }
Beispiel #10
0
 void RegisterToManager()
 {
     PolygonManager.Register(this);
 }
        protected override void startDemo(bool isRestore)
        {
            if (!isRestore)
            {
                getMap().MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(51.403186, -0.126446), 10));
            }

            // Shared object managers - used to support multiple layer types on the map simultaneously
            MarkerManager        markerManager        = new MarkerManager(getMap());
            GroundOverlayManager groundOverlayManager = new GroundOverlayManager(getMap());
            PolygonManager       polygonManager       = new PolygonManager(getMap());
            PolylineManager      polylineManager      = new PolylineManager(getMap());

            // Add clustering
            mClusterManager = new ClusterManager(this, getMap(), markerManager);
            getMap().SetOnCameraIdleListener(mClusterManager);

            try
            {
                readClusterItems();
            }
            catch (JSONException e)
            {
                Toast.MakeText(this, "Problem reading list of markers.", ToastLength.Long).Show();
                e.PrintStackTrace();
            }

            // Add GeoJSON from resource
            try
            {
                var geoJsonOnFeatureClickListener = new GeoJsonOnFeatureClickListener(this);

                // GeoJSON polyline
                GeoJsonLayer geoJsonLineLayer = new GeoJsonLayer(getMap(), Resource.Raw.south_london_line_geojson, this, markerManager, polygonManager, polylineManager, groundOverlayManager);
                // Make the line red
                GeoJsonLineStringStyle geoJsonLineStringStyle = new GeoJsonLineStringStyle();
                geoJsonLineStringStyle.Color = Color.Red;
                foreach (GeoJsonFeature f in geoJsonLineLayer.Features.ToEnumerable())
                {
                    f.LineStringStyle = geoJsonLineStringStyle;
                }
                geoJsonLineLayer.AddLayerToMap();
                geoJsonLineLayer.SetOnFeatureClickListener(geoJsonOnFeatureClickListener);

                // GeoJSON polygon
                GeoJsonLayer geoJsonPolygonLayer = new GeoJsonLayer(getMap(), Resource.Raw.south_london_square_geojson, this, markerManager, polygonManager, polylineManager, groundOverlayManager);
                // Fill it with red
                GeoJsonPolygonStyle geoJsonPolygonStyle = new GeoJsonPolygonStyle();
                geoJsonPolygonStyle.FillColor = Color.Red;
                foreach (GeoJsonFeature f in geoJsonPolygonLayer.Features.ToEnumerable())
                {
                    f.PolygonStyle = geoJsonPolygonStyle;
                }
                geoJsonPolygonLayer.AddLayerToMap();
                geoJsonPolygonLayer.SetOnFeatureClickListener(geoJsonOnFeatureClickListener);
            }
            catch (Java.IO.IOException)
            {
                Log.Error(TAG, "GeoJSON file could not be read");
            }
            catch (JSONException)
            {
                Log.Error(TAG, "GeoJSON file could not be converted to a JSONObject");
            }

            // Add KMLs from resources
            KmlLayer kmlPolylineLayer;
            KmlLayer kmlPolygonLayer;

            try
            {
                var kmlLayerOnFeatureClickListener = new KmlLayerOnFeatureClickListener(this);

                // KML Polyline
                kmlPolylineLayer = new KmlLayer(getMap(), Resource.Raw.south_london_line_kml, this, markerManager, polygonManager, polylineManager, groundOverlayManager, null);
                kmlPolylineLayer.AddLayerToMap();
                kmlPolylineLayer.SetOnFeatureClickListener(kmlLayerOnFeatureClickListener);

                // KML Polygon
                kmlPolygonLayer = new KmlLayer(getMap(), Resource.Raw.south_london_square_kml, this, markerManager, polygonManager, polylineManager, groundOverlayManager, null);
                kmlPolygonLayer.AddLayerToMap();
                kmlPolygonLayer.SetOnFeatureClickListener(kmlLayerOnFeatureClickListener);
            }
            catch (XmlPullParserException e)
            {
                e.PrintStackTrace();
            }
            catch (Java.IO.IOException e)
            {
                e.PrintStackTrace();
            }

            // Unclustered marker - instead of adding to the map directly, use the MarkerManager
            MarkerManager.Collection markerCollection = markerManager.NewCollection();
            markerCollection.AddMarker(new MarkerOptions()
                                       .SetPosition(new LatLng(51.150000, -0.150032))
                                       .SetIcon(BitmapDescriptorFactory.DefaultMarker(BitmapDescriptorFactory.HueAzure))
                                       .SetTitle("Unclustered marker"));
            markerCollection.SetOnMarkerClickListener(this);
        }