Beispiel #1
0
    void Start()
    {
        //cambia dimensione camera ortografica in base alla dimensione dello schermo in modo da mostrare l'intera board
        camera.orthographicSize = Screen.height * 800 / 1920;


        gm    = this;
        lives = maxLives;
        numberFluxesDepleteded = 0;
        levelCompleted         = false;

        SaveManager.Instance().SaveLastScene(SceneManager.GetActiveScene().name);

        MapUtility.LowerPins = new List <Pin>();
        MapUtility.UpperPins = new List <Pin>();
        MapUtility.Holes     = new List <Hole>();
        MapUtility.Bridges   = new List <Bridge>();

        MapUtility.IsChipWiring = false;

        var lowPins   = MapUtility.GetAllObjectsOnlyInScene().Where(x => x.name.Contains("LPin")).OrderBy(pin => pin.name).ToList();
        var upperPins = MapUtility.GetAllObjectsOnlyInScene().Where(x => x.name.Contains("UPin")).OrderBy(pin => pin.name).ToList();
        var holes     = MapUtility.GetAllObjectsOnlyInScene().Where(x => x.name.Contains("Hole")).OrderBy(hole => hole.name).ToList();
        var bridges   = MapUtility.GetAllObjectsOnlyInScene().Where(x => x.name.Contains("Bridge")).ToList();

        MapUtility.collisionMapBaseSetup();

        //per ogni lowPin trovato, creo un'istanza di Pin
        var pinIndex = 0;

        foreach (var pin in lowPins)
        {
            var attachmentPosition = pin.transform.GetChild(0).position;
            var attachmentRotation = pin.transform.GetChild(0).rotation;
            var attachment         = new Tuple <Vector3, Quaternion>(attachmentPosition, attachmentRotation);

            var pinInstance = new Pin()
            {
                IsConnected     = false,
                Type            = PinType.Lower,
                Instance        = pin,
                AttachmentPoint = attachment,
                Index           = pinIndex
            };
            MapUtility.setCollisionMap(attachmentPosition.x, attachmentPosition.z, CollisionEntity.getFullCollisionEntity());
            MapUtility.LowerPins.Add(pinInstance);
            pinIndex++;
        }

        //per ogni upperPin trovato, creo un'istanza di Pin
        pinIndex = 0;
        foreach (var pin in upperPins)
        {
            var attachmentPosition = pin.transform.GetChild(0).position;
            var attachmentRotation = pin.transform.GetChild(0).rotation;
            var attachment         = new Tuple <Vector3, Quaternion>(attachmentPosition, attachmentRotation);

            var spawnPointPosition = new Vector3(attachmentPosition.x, attachmentPosition.y, attachmentPosition.z - 950);
            var fluxSpawnPoint     = new Tuple <Vector3, Quaternion>(spawnPointPosition, attachmentRotation);

            var pinInstance = new Pin()
            {
                IsConnected     = false,
                Type            = PinType.Upper,
                Instance        = pin,
                FluxSpawnPoint  = fluxSpawnPoint,
                AttachmentPoint = attachment,
                Index           = pinIndex
            };
            MapUtility.setCollisionMap(attachmentPosition.x, attachmentPosition.z, CollisionEntity.getFullCollisionEntity());
            MapUtility.UpperPins.Add(pinInstance);
            pinIndex++;
        }

        idleFluxes      = new List <Flux>();
        depletingFluxes = new List <Flux>();

        //salva i buchi trovati nella scena
        foreach (var hole in holes)
        {
            var holeInstance = new Hole()
            {
                IsConnected = false,
                Instance    = hole
            };

            MapUtility.Holes.Add(holeInstance);
            MapUtility.setCollisionMap(hole.transform.position.x, hole.transform.position.z, holeInstance);
        }

        //salva i ponti trovati nella scena
        foreach (var bridge in bridges)
        {
            var bridgeInstance = new Bridge();
            MapUtility.Bridges.Add(bridgeInstance);
            MapUtility.setCollisionMap(bridge.transform.position.x, bridge.transform.position.z, bridgeInstance);
        }
        //flag per prevenire lo spawn dei flussi, == true nei tutorial
        if (!preventFluxSpawning)
        {
            //il livello 7 prevede la possibilità di spawnare due flussi contemporaneamente su due pin diversi
            if (SceneManager.GetActiveScene().name == "Level 7")
            {
                StartCoroutine(spawnRandomFluxesForeverWithDoubleFlux());
            }
            else
            {
                StartCoroutine(spawnRandomFluxesForever());
            }
        }

        MapUtility.GamePaused = false;
    }