Пример #1
0
    private void Init()
    {
        gates = new Dictionary <Vector3, GameObject>();
        gates.Add(Vector3.up, new GameObject("GateUp"));
        gates.Add(Vector3.down, new GameObject("GateDown"));
        gates.Add(Vector3.left, new GameObject("GateLeft"));
        gates.Add(Vector3.right, new GameObject("GateRight"));

        gateSizes = new Dictionary <Vector3, Vector2>();
        gateSizes.Add(Vector3.up, new Vector2(1f, gateThiccness));
        gateSizes.Add(Vector3.down, new Vector2(1f, gateThiccness));
        gateSizes.Add(Vector3.left, new Vector2(gateThiccness, 1f));
        gateSizes.Add(Vector3.right, new Vector2(gateThiccness, 1f));

        int i = 0;

        foreach (KeyValuePair <Vector3, GameObject> gate in gates)
        {
            gate.Value.layer            = LayerUtilities.LayerNumber(gateLayer);
            gate.Value.transform.parent = transform;
            BoxCollider2D collider = gate.Value.AddComponent <BoxCollider2D>();
            collider.size = gateSizes[gate.Key];
            gate.Value.AddComponent <Tilemap>();
            gate.Value.AddComponent <TilemapRenderer>();
            gate.Value.GetComponent <Tilemap>().tileAnchor = new Vector3(0, 0, 0);
            i++;
        }
    }
Пример #2
0
    public void UpdatePalettes(string paletteName = "")
    {
        if (!paletteName.Equals(""))
        {
            paletteTypes[paletteName]++;
            if (paletteTypes[paletteName] > PaletteType.Danger)
            {
                paletteTypes[paletteName] = PaletteType.Collidable;
            }
        }

        TilemapCollider2D  collider;
        PlatformEffector2D effector;

        foreach (KeyValuePair <string, PaletteType> entry in paletteTypes)
        {
            collider = tilemaps[entry.Key].gameObject.GetComponent <TilemapCollider2D>();
            effector = tilemaps[entry.Key].gameObject.GetComponent <PlatformEffector2D>();
            if (entry.Value == PaletteType.Collidable)
            {
                int[] layers = { 8, 9, 14 };
                tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers);
                tilemaps[entry.Key].GetComponent <CompositeCollider2D>().isTrigger   = false;
                tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(SafeCollidableLayer);
                SwitchTilePhysicsShape(entry.Key, "full");
                collider.enabled    = true;
                effector.surfaceArc = 360f;
            }
            else if (entry.Value == PaletteType.Noncollidable)
            {
                collider.enabled = false;
            }
            else if (entry.Value == PaletteType.Semisolid)
            {
                int[] layers = { 8, 9 };
                tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers);
                effector.surfaceArc = 1f;
                collider.enabled    = true;
                tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(SemisolidCollidableLayer);
                SwitchTilePhysicsShape(entry.Key, "semisolid");
            }
            else if (entry.Value == PaletteType.IdolFilter)
            {
                int[] layers = { 9, 14 };
                tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers);
                tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(IdolFilterLayer);
                SwitchTilePhysicsShape(entry.Key, "full");
                effector.surfaceArc = 360f;
            }
            else if (entry.Value == PaletteType.Danger)
            {
                int[] layers = { 8, 9, 14 };
                tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers);
                tilemaps[entry.Key].GetComponent <CompositeCollider2D>().isTrigger   = true;
                tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(DangerCollidableLayer);
                SwitchTilePhysicsShape(entry.Key, "outline");
            }
        }
    }
Пример #3
0
        public void FillLayerSelector(List <IILayer> previoslySelected)
        {
            layerTreeView.Nodes.Clear();
            List <IILayer> rootLayers = LayerUtilities.RootLayers();

            for (int i = 0; i < rootLayers.Count; i++)
            {
                IILayer  layer     = rootLayers[i];
                TreeNode layerNode = layerTreeView.Nodes.Add(layer.Name);

                if (previoslySelected != null && previoslySelected.Contains(layer))
                {
                    layerNode.Checked = true;
                }

                BuildLayerTreeRecusively(layer, i, layerTreeView.Nodes);
            }
        }
Пример #4
0
    void FixedUpdate()
    {
        if (isCarried)
        {
            collisionDownLayer = collisionUpLayer;
            gameObject.layer   = LayerUtilities.LayerNumber(carriedIdolLayer);
        }
        else
        {
            collisionDownLayer = layer;
            gameObject.layer   = LayerUtilities.LayerNumber(idolLayer);
        }

        speedStretchX = m_Rigidbody.velocity.x * Time.fixedDeltaTime;
        speedStretchY = m_Rigidbody.velocity.y * Time.fixedDeltaTime;
        if (speedStretchY > -0.05f)
        {
            speedStretchY = -0.05f;
        }
        collisionDownEnter = collisionDown;
        collisionDown      = CollisionUtilities.GetCollision(this.gameObject,
                                                             Vector3.down * -speedStretchY + Vector3.right * speedStretchX,
                                                             new Vector2(0.25f, 0.6f), collisionDownLayer, true) ||
                             (m_Velocity.y > yVelocityBuffer && yVelocityBuffer <= 0f && !isCarried);
        collisionDownEnter = collisionDown != collisionDownEnter;

        speedStretchY = m_Rigidbody.velocity.y * Time.fixedDeltaTime;
        if (speedStretchY < 0.05f)
        {
            speedStretchY = 0.05f;
        }
        collisionUpEnter = collisionUp;
        collisionUp      = CollisionUtilities.GetCollision(this.gameObject,
                                                           Vector3.up * (m_boxCollider.size.y / 2f + 0.05f), new Vector2(0.25f, (speedStretchY + 0.05f) * 2f), collisionUpLayer, true);
        collisionUpEnter = collisionUp != collisionUpEnter;

        collisionLeft = CollisionUtilities.GetCollision(this.gameObject,
                                                        Vector3.left * (m_boxCollider.size.x / 2f) + Vector3.down * 0.05f, new Vector2(0.1f, 0.5f), collisionUpLayer);

        collisionRight = CollisionUtilities.GetCollision(this.gameObject,
                                                         Vector3.right * (m_boxCollider.size.x / 2f) + Vector3.down * 0.05f, new Vector2(0.1f, 0.5f), collisionUpLayer);

        collisionDanger = CollisionUtilities.GetCollision(this.gameObject,
                                                          Vector3.zero, new Vector2(0.3f, 0.6f), dangerLayer);

        collisionCarryPlayer = CollisionUtilities.GetCollisionDistance(player.gameObject,
                                                                       Vector2.zero, Vector2.up, carryHeight + 0.6f, player.GetCollisionUpLayer());

        collisionCarry = CollisionUtilities.GetCollisionDistance(player.gameObject,
                                                                 new Vector2(m_Rigidbody.position.x - playerRigidbody.position.x, 0f),
                                                                 Vector2.up, carryHeight + 0.6f, collisionUpLayer);

        collisionTeleport = CollisionUtilities.GetCollision(this.gameObject,
                                                            Vector3.up * 0.35f + Vector3.left * 0.225f, new Vector2(0.15f, 1.1f), collisionUpLayer) &&
                            CollisionUtilities.GetCollision(this.gameObject,
                                                            Vector3.up * 0.35f + Vector3.right * 0.225f, new Vector2(0.15f, 1.1f), collisionUpLayer);

        float n; if (teleportRechargeTimer < 0)

        {
            n = 0;
        }
        else
        {
            n = teleportRechargeTimer;                                                 /////
        }
        CollisionUtilities.GetCollision(this.gameObject,
                                        Vector3.right * 0.5f, new Vector2(0.1f, n * 3f), layer, true);

        teleportTimer         -= Time.fixedDeltaTime;
        teleportRechargeTimer -= Time.fixedDeltaTime;
        rechargeIndicator.SetFill(teleportRechargeTimer / teleportRechargeDuration);
        yVelocityBuffer = m_Velocity.y;
    }
Пример #5
0
    private void LoadTiles()
    {
        Tile   tile;
        Sprite tileSprite;

        char[] splitter = { '/', '\\' };

        string[] fileArray;

        string[] splitFileName;
        string   fileName;

        for (int i = 0; i < tileTypes.Length; i++)
        {
            fileArray = Directory.GetFiles(Application.dataPath + "/Resources/Tiles/" + tileTypes[i], "*.png", SearchOption.AllDirectories);

            for (int j = 0; j < fileArray.Length; j++)
            {
                splitFileName = fileArray[j].Split(splitter);
                fileName      = splitFileName[splitFileName.Length - 1].Split('.')[0];
                tileSprite    = Resources.Load <Sprite>("Tiles/" + tileTypes[i] + "/" + fileName);
                string tempName     = tileSprite.name;
                float  spriteWidth  = tileSprite.rect.width;
                float  spriteHeight = tileSprite.rect.height;
                tileSprite = Sprite.Create(tileSprite.texture, tileSprite.rect,
                                           new Vector2(((tileSprite.pivot.x + ((spriteWidth % 200 == 0) ? -50 : 0)) / spriteWidth),
                                                       ((tileSprite.pivot.y + ((spriteHeight % 200 == 0) ? -50 : 0)) / spriteHeight)));
                tileSprite.name = tempName;

                tileSprite.OverridePhysicsShape(TilePicker.GeneratePhysicsShape(tileSizes[tileTypes[i]], tileSprite, "full"));
                tile        = ScriptableObject.CreateInstance("Tile") as Tile;
                tile.sprite = Instantiate(tileSprite);
                loadedTilesFull.Add(fileName, Instantiate(tile));

                tileSprite.OverridePhysicsShape(TilePicker.GeneratePhysicsShape(tileSizes[tileTypes[i]], tileSprite, "semisolid"));
                tile        = ScriptableObject.CreateInstance("Tile") as Tile;
                tile.sprite = Instantiate(tileSprite);
                loadedTilesSemisolid.Add(fileName, Instantiate(tile));

                tileSprite.OverridePhysicsShape(TilePicker.GeneratePhysicsShape(tileSizes[tileTypes[i]], tileSprite, "outline"));
                tile        = ScriptableObject.CreateInstance("Tile") as Tile;
                tile.sprite = Instantiate(tileSprite);
                loadedTilesOutline.Add(fileName, Instantiate(tile));
            }
        }

        tileNames = new List <string>(loadedTilesFull.Keys);

        GameObject tilemap = new GameObject();

        tilemap.layer = LayerUtilities.LayerNumber(SafeCollidableLayer);
        tilemap.AddComponent <Tilemap>();
        tilemap.AddComponent <TilemapRenderer>();
        tilemap.AddComponent <TilemapCollider2D>();
        tilemap.AddComponent <CompositeCollider2D>();
        tilemap.AddComponent <PlatformEffector2D>();

        tilemap.GetComponent <TilemapCollider2D>().usedByComposite  = true;
        tilemap.GetComponent <PlatformEffector2D>().surfaceArc      = 360f;
        tilemap.GetComponent <CompositeCollider2D>().usedByEffector = true;
        tilemap.GetComponent <CompositeCollider2D>().geometryType   = CompositeCollider2D.GeometryType.Polygons;
        tilemap.GetComponent <Rigidbody2D>().isKinematic            = true;

        GameObject currentMap;

        player.transform.position = Vector3.zero;
        layers.Add("Player", player);
        for (int i = 0; i < tileTypes.Length; i++)
        {
            currentMap      = Instantiate(tilemap, transform);
            currentMap.name = tileTypes[i];
            currentMap.transform.position = Vector3.forward * (i + 1) + new Vector3(-0.5f, -0.5f, 0);
            tilemaps.Add(tileTypes[i], currentMap.GetComponent <Tilemap>());
            layers.Add(tileTypes[i], currentMap);
            //tilemapPhysicsShapes.Add(tileTypes[i], "full");
            paletteTypes.Add(tileTypes[i], PaletteType.Collidable);
            tiles.Add(tileTypes[i], new List <Vector3Int>());
        }
        Destroy(tilemap);
    }