Beispiel #1
0
    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>());
            }
        }
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
 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>();
             }
         }
     }
 }
Beispiel #4
0
 protected override void TerrainHit(TerrainPiece other)
 {
     base.TerrainHit(other);
 }
Beispiel #5
0
 public void interpretExitingCurrentTerrainTrigger(Collider2D col, TerrainPiece newTerrain)
 {
     currentTerrain = null;
     playerMovement.CurrentTerrain = new TerrainPiece();
 }
Beispiel #6
0
 public void interpretEnteringCurrentTerrainTrigger(Collider2D col, TerrainPiece newTerrain)
 {
     currentTerrain = newTerrain;
     playerMovement.CurrentTerrain = currentTerrain;
     currentColliderBoundingBox    = new ColliderBoundingBox(currentTerrain.gameObject);
 }
Beispiel #7
0
 protected virtual void TerrainHit(TerrainPiece other)
 {
 }
Beispiel #8
0
 private void GenerateTerrain()
 {
     data = new TerrainPiece(transform.position, radius, variation, Random.seed, resolution);
     GenerateMesh();
 }