public bool AreFeetOnEatEdiblesGround()
 {
     foreach (Collider2D col in collsTouching[SideFeet])
     {
         BaseGround baseGround = col.GetComponent <BaseGround>();
         if (baseGround != null && baseGround.MayPlayerEatHere)
         {
             return(true); // This one's good!
         }
     }
     return(false); // Wow, nah, we're not touching any gem-friendly grounds.
 }
Esempio n. 2
0
    virtual protected void OnFeetLeaveCollidable(Collidable collidable)
    {
        timeLastGrounded = Time.time;
        // Left Ground?
        BaseGround ground = collidable as BaseGround;

        if (ground != null)
        {
            // Left respawn-friendly Ground, AND we can set GroundedRespawnPos??
            if (ground.IsPlayerRespawn && MaySetGroundedRespawnPos())
            {
                SetGroundedRespawnPos(ground);
            }
        }
    }
Esempio n. 3
0
    /// Intelligently sets what GroundedRespawnPos SHOULD be based on our position relative to this Ground. I.e. not on its edge, or in the air.
    private void SetGroundedRespawnPos(BaseGround ground)
    {
        Rect  gr      = ground.GetMyRect();
        float marginX = 2f;                                           // how much farther from the edge we wanna prevent spawning from.

        marginX = Mathf.Min(marginX, gr.width * 0.5f);                // limit marginX for small grounds/platforms.
        float posX = pos.x;
        float posY = gr.y + gr.height * 0.5f + Size.y * 0.5f + 0.01f; // top 'o the ground.

        posX = Mathf.Max(gr.x - gr.width * 0.5f + marginX, posX);
        posX = Mathf.Min(gr.x + gr.width * 0.5f - marginX, posX);

        GameManagers.Instance.DataManager.playerGroundedRespawnData = new PlayerData {
            pos       = new Vector2(posX, posY),
            type      = PlayerType(),
            dirFacing = DirFacing,
            rotation  = 0,
            vel       = Vector2.zero,
        };
    }
    //---------------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------------

    void SetLevelTerrain(List <PixelClass> pList, List <GroundTileScript> gtList)
    {
        if (pList.Count != gtList.Count || pList == null || gtList == null)
        {
            Debug.Log("ERROR: Discrepancy between lists p|gt " + pList.Count + " " + gtList.Count);
            return;
        }

        /* Layers for each tile type and their binary value:
         *  9  :  Clear/Objective/Base      512
         *  10 : FixedTerrain/Impassable    1024
         *  11 : Rough                      2048
         *  12 : Hazard                     4096
         */

        for (int i = 0; i < gtList.Count; i++)
        {
            switch (pList[i].colourCompare)
            {
            case PixelClass.pixelReader.BLACK:
                ImpassableGround impassableTile = new ImpassableGround();
                gtList[i].tileReference              = impassableTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.IMPASSABLE;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 10;

                break;

            case PixelClass.pixelReader.RED:
                HazardGround hazardTile = new HazardGround();
                gtList[i].tileReference              = hazardTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.HAZARD;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 12;

                break;

            case PixelClass.pixelReader.DARK_RED:
                HazardGround hazardTileBlocked = new HazardGround();
                gtList[i].tileReference              = hazardTileBlocked;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.HAZARD;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 12;

                break;

            case PixelClass.pixelReader.GREEN:
                ClearGround clearTile = new ClearGround();
                gtList[i].tileReference              = clearTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.CLEAR;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                break;

            case PixelClass.pixelReader.TEAL_GREEN:
                ClearGround clearTileBlocked = new ClearGround();
                gtList[i].tileReference              = clearTileBlocked;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.CLEAR;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                break;

            case PixelClass.pixelReader.BLUE:
                ObjectiveGround objectiveTile = new ObjectiveGround();
                gtList[i].tileReference              = objectiveTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.OBJECTIVE;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                break;

            case PixelClass.pixelReader.GREY:
                RoughGround roughTile = new RoughGround();
                gtList[i].tileReference              = roughTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.ROUGH;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 11;

                break;

            case PixelClass.pixelReader.DARK_GREY:
                RoughGround roughTileBlocked = new RoughGround();
                gtList[i].tileReference              = roughTileBlocked;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.hasBlockOnIt = true;
                gtList[i].tileReference.type         = GroundTile.GroundType.ROUGH;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 11;

                break;

            case PixelClass.pixelReader.MAGENTA:
                BaseGround baseTile = new BaseGround();
                gtList[i].tileReference              = baseTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.BASE;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                baseTilesList.Add(gtList[i]);
                // Maybe add baseTile to a list of base tiles, then return the 5th member (index [4]) to always find the center of the base prefab (which currently consists of 9 tiles).

                break;

            default:
                ClearGround defaultClearTile = new ClearGround();
                gtList[i].tileReference              = defaultClearTile;
                gtList[i].tileReference.tileID       = i;
                gtList[i].tileReference.type         = GroundTile.GroundType.CLEAR;
                gtList[i].tileReference.tileRenderer = gtList[i].gameObject.GetComponent <MeshRenderer>();
                gtList[i].gameObject.layer           = 9;

                Debug.Log("No usable info found, using default tile state");
                break;
            }
            //Debug.Log("Loading properties for individual tile: " + i);
            gtList[i].tileReference.LoadProperties();

            Vector3 wPosition = gtList[i].nodeReference.worldPosition;
            gtList[i].nodeReference.walkableNode = !(Physics.CheckSphere(wPosition, (displace - 1) / 2, unwalkableNode));

            //gtList[i].nodeReference.movementModifier = gtList[i].tileReference.tileMovementPenaltyForPF;  // deprecated

            if (gtList[i].tileReference.isWalkable | gtList[i].nodeReference.walkableNode)
            {
                Ray        ray = new Ray(gtList[i].transform.position + Vector3.up * 30, Vector3.down);
                RaycastHit hit;

                if (Physics.Raycast(ray, out hit, 100, traversableMask))
                {
                    traversableTilesDictionary.TryGetValue(hit.collider.gameObject.layer, out gtList[i].nodeReference.movementModifier);
                }
            }
        }
        Debug.Log("Level Terrain Set");
    }