Exemplo n.º 1
0
    void OnEnable()
    {
        width            = serializedObject.FindProperty("width");
        height           = serializedObject.FindProperty("height");
        chunkWidth       = serializedObject.FindProperty("chunkWidth");
        chunkHeight      = serializedObject.FindProperty("chunkHeight");
        otherPlatforms   = serializedObject.FindProperty("otherPlatforms");
        pathHeight       = serializedObject.FindProperty("pathHeight");
        pathThickness    = serializedObject.FindProperty("pathThickness");
        solutionDistance = serializedObject.FindProperty("solutionDistance");

        entryObjOffset = serializedObject.FindProperty("entryObjOffset");
        exitObjOffset  = serializedObject.FindProperty("exitObjOffset");

        scale             = serializedObject.FindProperty("scale");
        floorChance       = serializedObject.FindProperty("floorChance");
        backgroundChance  = serializedObject.FindProperty("backgroundChance");
        randomAtGameStart = serializedObject.FindProperty("randomAtGameStart");
        addBorder         = serializedObject.FindProperty("addBorder");
        updateColliders   = serializedObject.FindProperty("updateColliders");

        floorObjects      = serializedObject.FindProperty("floorObjects");
        ladderLayer       = serializedObject.FindProperty("ladderLayer");
        backgroundZOffset = serializedObject.FindProperty("backgroundZOffset");
        parallaxDistance  = serializedObject.FindProperty("parallaxDistance");


        randomPlatform           = (RandomPlatformer)serializedObject.targetObject;
        randomPlatform.wallLayer = randomPlatform.GetComponent <TileInfo>();
        if (randomPlatform.transform.childCount > 0)
        {
            randomPlatform.backgroundLayer = randomPlatform.transform.GetChild(0).GetComponent <TileInfo>();
        }

        tileTex = randomPlatform.GetComponent <MeshRenderer>().sharedMaterial.mainTexture;
    }
Exemplo n.º 2
0
    TileInfo CloneLayer(int newIndex, TileInfo layerToClone, bool fromEditor)
    {
//		GameObject result = (GameObject)Instantiate( layerToClone.gameObject );
//		if( fromEditor )
//			DestroyImmediate( result.GetComponent<PolygonCollider2D>() );
//		else
//			Destroy( result.GetComponent<PolygonCollider2D>() );

        GameObject result = new GameObject(layerToClone.name + "_" + newIndex);

//		result.hideFlags = HideFlags.HideInHierarchy;
        result.AddComponent <MeshFilter>().sharedMesh = new Mesh();
        result.AddComponent <MeshRenderer>().material = layerToClone.GetComponent <MeshRenderer>().sharedMaterial;
        TileInfo ti = result.AddComponent <TileInfo>();

        ti.collisions = (TileInfo.CollisionType[])wallLayer.collisions.Clone();

        ti.tileSize = wallLayer.tileSize;
        ti.spacing  = wallLayer.spacing;
        //result.GetComponent<TileInfo>().positionAtLastEdit = pos;
        ti.mapWidth          = chunkWidth;
        ti.mapHeight         = chunkHeight;
        ti.tiles             = new Tile[chunkWidth * chunkHeight];
        ti.autoTileData      = new List <Tile>(wallLayer.autoTileData);
        ti.autoTileEdgeMode  = new List <TileInfo.AutoTileEdgeMode>(wallLayer.autoTileEdgeMode);
        ti.autoTileLinkMask  = new List <int>(wallLayer.autoTileLinkMask);
        ti.autoTileNames     = new List <string>(wallLayer.autoTileNames);
        ti.autoTileType      = new List <TileInfo.AutoTileType>(wallLayer.autoTileType);
        ti.numberOfAutotiles = wallLayer.numberOfAutotiles;
        ti.showAutoTile      = new List <bool>(wallLayer.showAutoTile);

        ti.pixelColliders = layerToClone.pixelColliders;
        for (int i = 0; i < ti.tiles.Length; i++)
        {
            ti.tiles[i] = Tile.empty;
        }

        if (layerToClone.GetComponent <MeshCollider>() != null)
        {
            result.AddComponent <MeshCollider>().sharedMesh = new Mesh();
        }
        RandomPlatformer rp = CopyComponent <RandomPlatformer>(layerToClone.GetComponent <RandomPlatformer>(), result);

        if (layerToClone.GetComponent <TilePrefabs>() != null)
        {
            CopyComponent <TilePrefabs>(layerToClone.GetComponent <TilePrefabs>(), result);
        }
        rp.mainLayer         = mainLayer;
        rp.wallLayer         = ti;
        rp._backgroundLayers = null;
        rp._wallLayers       = null;
        rp.randomAtGameStart = false;
        Vector3 newPos = mainLayer.transform.position;

        if (newIndex >= 0)
        {
            int x = newIndex % width;
            int y = newIndex / width;
            newPos.x        += chunkWidth * x;
            newPos.y        += chunkHeight * y;
            ti.update3DWalls = layerToClone.update3DWalls;
        }
        else
        {
            //else is a background layer
            newPos    = layerToClone.transform.position;
            newPos.z += backgroundZOffset;
            result.transform.parent = layerToClone.transform;
            ti.update3DWalls        = layerToClone.update3DWalls;
            if (parallaxDistance != 0)
            {
                ParallaxBackground pb = result.AddComponent <ParallaxBackground>();
                pb.distance = parallaxDistance;
                pb.cam      = Camera.main;
                Vector2 midPoint = new Vector2((width * chunkWidth) / 2 - chunkWidth / 2, (height * chunkHeight) / 2 - chunkHeight / 2) + (Vector2)mainLayer.transform.position;
                float   ratio    = parallaxDistance / 10;
                pb.startPosition = new Vector3(newPos.x + ratio * (newPos.x - midPoint.x), newPos.y + ratio * (newPos.y - midPoint.y), parallaxDistance);
                if (FindObjectOfType <PixelPerfectCamera>() != null)
                {
                    pb.pixelSnap = true;
                }
            }
        }
        result.transform.position = newPos;

        MeshCollider mc = result.GetComponent <MeshCollider>();

        if (mc != null)
        {
            mc.sharedMesh = result.GetComponent <MeshFilter>().sharedMesh;
        }

        return(ti);
    }