private void OnTriggerExit2D(Collider2D col) { beAwareOfChildColliders = false; if (col.gameObject.GetComponent <TerrainPiece>() != null) { if (collidingPieces > this.gameObject.GetComponentsInChildren <BoxCollider2D>().Length) { collidingPieces = this.gameObject.GetComponentsInChildren <BoxCollider2D>().Length; } if (collidingPieces > 0) { collidingPieces--; } if (collidingPieces == 0) { TerrainPiece currentTerrain = col.gameObject.GetComponent <TerrainPiece>(); if (currentTerrain != null && currentTerrain.receiver) { currentTerrain.TeleporterOnFreeze = false; } determiningCollisions.interpretExitingCurrentTerrainTrigger(col, col.gameObject.GetComponent <TerrainPiece>()); } } }
private GameObject GenerateFragment(PSPolygon polygon) { TerrainPiece piece = Instantiate(terrainPieceTemplate, gameObject.transform.position, gameObject.transform.rotation); var poly = new Polygon(); poly.Add(TerrainMesh.createContour(polygon.points)); var quality = new QualityOptions(); quality.MinimumAngle = 36; quality.MaximumAngle = 91; var imesh = poly.Triangulate(quality); List <Vector2> vertices = new List <Vector2>(); List <int> triangles = new List <int>(); getTriangles(imesh, ref vertices, ref triangles); var polygonBoundsCenter = polygon.Bounds.center; var doNotWrapUV = polygonBoundsCenter.x < 0 && polygonBoundsCenter.y < 0; var floorEdges = getFloorEdges(polygon); var uvs = vertices.Select(v => getUV(v, doNotWrapUV)).ToArray(); var uv2s = vertices.Select(v => getUV2(v, doNotWrapUV, floorEdges)).ToArray(); UpdateMesh( piece.GetComponent <MeshFilter>(), vertices.Select(v => (Vector3)v), uvs, uv2s, vertices.Select(p => (Color32)terrainTintColor(p, doNotWrapUV)), triangles); UpdateMesh( piece.background, vertices.Select(v => (Vector3)v), uvs, uv2s, vertices.Select(p => (Color32)backgroundTintColor(p, doNotWrapUV)), triangles); PolygonCollider2D collider = piece.gameObject.AddComponent <PolygonCollider2D>(); collider.SetPath(0, polygon.points); piece.terrainMesh = this; piece.doNotWrapUV = doNotWrapUV; piece.floorEdges = floorEdges; piece.gameObject.SetActive(true); return(piece.gameObject); }
private void Update() { if (sisterTeleport == null) { foreach (GameObject possibleSisterTeleporter in GameObject.FindGameObjectsWithTag("Environment")) { TerrainPiece sisterBeingChecked = possibleSisterTeleporter.GetComponent <TerrainPiece>(); if (sisterBeingChecked != null && sisterBeingChecked.teleporterGroup == teleporterGroup && sisterBeingChecked.gameObject != this.gameObject && (sisterBeingChecked.sender || sisterBeingChecked.receiver)) { sisterTeleport = sisterBeingChecked.GetComponent <TerrainPiece>(); } } } }
protected override void TerrainHit(TerrainPiece other) { base.TerrainHit(other); }
public void interpretExitingCurrentTerrainTrigger(Collider2D col, TerrainPiece newTerrain) { currentTerrain = null; playerMovement.CurrentTerrain = new TerrainPiece(); }
public void interpretEnteringCurrentTerrainTrigger(Collider2D col, TerrainPiece newTerrain) { currentTerrain = newTerrain; playerMovement.CurrentTerrain = currentTerrain; currentColliderBoundingBox = new ColliderBoundingBox(currentTerrain.gameObject); }
protected virtual void TerrainHit(TerrainPiece other) { }
private void GenerateTerrain() { data = new TerrainPiece(transform.position, radius, variation, Random.seed, resolution); GenerateMesh(); }