Exemplo n.º 1
0
    public Player()
    {
        ScreenX = Game.Resolution.X / 2 - Width / 2;
        ScreenY = 0;
        Offset  = 64;

        WalkState = WSTATE.STANDING;
        JumpState = JSTATE.STANDING;

        Current = Standing;
    }
Exemplo n.º 2
0
    public void Input(List <List <int> > tiles)
    {
        if (Engine.GetKeyHeld(Key.A))
        {
            WalkState = WSTATE.LEFT;
        }
        else if (Engine.GetKeyHeld(Key.D))
        {
            WalkState = WSTATE.RIGHT;
        }
        else
        {
            WalkState = WSTATE.STANDING;
        }
        if (Engine.GetKeyHeld(Key.W) && JumpState == JSTATE.STANDING)
        {
            JumpState = JSTATE.JUMPING;
        }

        Velocities();

        bool cx = false;
        bool cy = false;

        //Collision
        for (int y = 0; y < tiles.Count; y++)
        {
            for (int x = 0; x < tiles[y].Count; x++)
            {
                Bounds2 tBounds;
                if (tiles[y][x] != GameScreen.AIR)
                {
                    tBounds = new Bounds2(((x - GrassBiome.LEVELONEWIDTH / 2) * GrassBiome.TILESIZE) - (Offset + VelocityX), y * GrassBiome.TILESIZE, GrassBiome.TILESIZE, GrassBiome.TILESIZE);
                    if (GetBounds().Overlaps(tBounds))
                    {
                        cx = true;
                    }

                    tBounds = new Bounds2(((x - GrassBiome.LEVELONEWIDTH / 2) * GrassBiome.TILESIZE) - (Offset), (y * GrassBiome.TILESIZE), GrassBiome.TILESIZE, GrassBiome.TILESIZE);
                    Bounds2 pBounds = new Bounds2(ScreenX + 7, ScreenY + VelocityY, Width, Height);
                    if (pBounds.Overlaps(tBounds))
                    {
                        cy = true;
                    }
                    tBounds = new Bounds2(((x - GrassBiome.LEVELONEWIDTH / 2) * GrassBiome.TILESIZE) - (Offset), y * GrassBiome.TILESIZE, GrassBiome.TILESIZE, GrassBiome.TILESIZE);
                    float dx = VelocityX / Math.Abs(VelocityX);

                    float dy = VelocityY / Math.Abs(VelocityY);
                    if (GetBounds().Overlaps(tBounds))
                    {
                        tBounds = new Bounds2(((x - GrassBiome.LEVELONEWIDTH / 2) * GrassBiome.TILESIZE) - (Offset), y * GrassBiome.TILESIZE, GrassBiome.TILESIZE, GrassBiome.TILESIZE);
                        while (GetBounds().Overlaps(tBounds))
                        {
                            ScreenY -= 1;
                        }
                    }
                }
            }
        }

        if (cx)
        {
            VelocityX = 0;
            WalkState = WSTATE.STANDING;
            Current   = Standing;
        }
        if (cy)
        {
            Current   = Standing;
            VelocityY = 0;
            JumpState = JSTATE.STANDING;
        }
        else if (JumpState == JSTATE.STANDING)
        {
            JumpState = JSTATE.FALLING;
        }
    }
Exemplo n.º 3
0
 public void SetJState(JSTATE state)
 {
     JumpState = state;
 }
Exemplo n.º 4
0
    private void Velocities()
    {
        switch (WalkState)
        {
        case WSTATE.LEFT:
            if (VelocityX - ACCELX >= -MAXVELX)
            {
                VelocityX -= ACCELX;
            }
            else
            {
                VelocityX = -MAXVELX;
            }
            break;

        case WSTATE.RIGHT:


            if (VelocityX + ACCELX <= MAXVELX)
            {
                VelocityX += ACCELX;
            }
            else
            {
                VelocityX = MAXVELX;
            }
            break;

        case WSTATE.STANDING:
            VelocityX = 0;
            Current   = Standing;
            break;
        }

        switch (JumpState)
        {
        case JSTATE.STANDING:
            VelocityY = 0;
            break;

        case JSTATE.JUMPING:
            if (VelocityY - JUMP >= -MAXJUMPVEL)
            {
                VelocityY -= JUMP;
            }
            else
            {
                JumpState = JSTATE.FALLING;
            }
            break;

        case JSTATE.FALLING:
            if (VelocityY + GRAV <= MAXGRAVVEL)
            {
                VelocityY += GRAV;
            }
            else
            {
                VelocityY = MAXGRAVVEL;
            }
            break;
        }
    }