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); }
// 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); }
// 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); } }
// 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)); }
void RemoveFromManager() { PolygonManager.Remove(this); }
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); }