Beispiel #1
0
 public override void update()
 {
     base.update();
     mMap.update();
     mAndy.update();
     //title.update();
     mHitBoxManager.update();
     mBigEnemy.update();
 }
Beispiel #2
0
    override public void update()
    {
        // Se guarda la posicion anterior del objecto.
        setOldYPosition();

        base.update();

        if (getState() == STATE_STAND)
        {
            setFriction(1);
            //TODO: REALIZAR EL BOUNDING BOX VERTICAL (ARRIBA Y ABAJO) DEL PERSONAJE PARA EL ESTADO GHOST.
            // TODO: EN EL ESTADO GHOST CAERA O VOLARA A OTRA DIRECCION? PLANTEAR TIMER.

            // En stand no deberia pasar nunca que quede metido en una pared.
            // Corregir la posicion del personaje si esta en una pared.
            if (isWallLeft(getX(), getY()))
            {
                // Reposicionar el personaje contra la pared utilizando el bounding box correspondiente.
                setX(((mLeftX + 1) * CTileMap.TILE_WIDTH) - X_OFFSET_BOUNDING_BOX);
            }
            if (isWallRight(getX(), getY()))
            {
                // Reposicionar el personaje contra la pared.
                setX((((mRightX) * CTileMap.TILE_WIDTH) - getWidth()) + X_OFFSET_BOUNDING_BOX);
            }


            // Si en el pixel de abajo del jugador no hay piso, caemos.

            if (!isFloor(getX(), getY() + 1))
            {
                setState(STATE_FALLING);
                return;
            }

            if (CKeyboard.firstPress(CKeyboard.UP))
            {
                setState(STATE_JUMPING);
                return;
            }

            if (CKeyboard.pressed(CKeyboard.LEFT) && !isWallLeft(getX() - 1, getY()))
            {
                setState(STATE_WALKING);
                return;
            }

            if (CKeyboard.pressed(CKeyboard.RIGHT) && !isWallRight(getX() + 1, getY()))
            {
                setState(STATE_WALKING);
                return;
            }
        }
        else if (getState() == STATE_WALKING)
        {
            if (isWallLeft(getX(), getY()))
            {
                // Reposicionar el personaje contra la pared.
                setX(((mLeftX + 1) * CTileMap.TILE_WIDTH) - X_OFFSET_BOUNDING_BOX);
            }
            if (isWallRight(getX(), getY()))
            {
                // Reposicionar el personaje contra la pared.
                setX((((mRightX) * CTileMap.TILE_WIDTH) - getWidth()) + X_OFFSET_BOUNDING_BOX);
            }

            //Barra espaciadora salta, first press por lo tanto solo cuando se presiona, si se mantiene presionado no salta.
            if (CKeyboard.firstPress(CKeyboard.UP))
            {
                setState(STATE_JUMPING);
                return;
            }

            // Si en el pixel de abajo del jugador no hay piso, caemos.
            if (!isFloor(getX(), getY() + 1))
            {
                setState(STATE_FALLING);
                return;
            }
            //En el caso que no nos movamos, vuelve al estado STAND.
            if (!(CKeyboard.pressed(CKeyboard.LEFT) || CKeyboard.pressed(CKeyboard.RIGHT)))
            {
                setState(STATE_STAND);
                return;
            }
            else
            {
                if (CKeyboard.pressed(CKeyboard.LEFT))
                {
                    // Chequear pared a la izquierda.
                    // Si hay pared a la izquierda vamos a stand.
                    if (isWallLeft(getX(), getY()))
                    {
                        // Reposicionar el personaje contra la pared.
                        //setX((((int) getX ()/CTileMap.TILE_WIDTH)+1)*CTileMap.TILE_WIDTH);
                        setX(((mLeftX + 1) * CTileMap.TILE_WIDTH) - X_OFFSET_BOUNDING_BOX);

                        // Carlos version.
                        //setX (getX()+CTileMap.TILE_WIDTH/(getWidth()-1));

                        setState(STATE_STAND);
                        return;
                    }
                    else
                    {
                        // No hay pared, se puede mover.
                        setVelX(-speed);
                        setFlip(true);
                    }
                }
                else
                {
                    // Chequear pared a la derecha.
                    // Si hay pared a la derecha vamos a stand.
                    if (isWallRight(getX(), getY()))
                    {
                        // Reposicionar el personaje contra la pared.
                        setX((((mRightX) * CTileMap.TILE_WIDTH) - getWidth()) + X_OFFSET_BOUNDING_BOX);

                        setState(STATE_STAND);
                        return;
                    }
                    else
                    {
                        // No hay pared, se puede mover.
                        setVelX(speed);
                        setFlip(false);
                    }
                }
            }
        }
        //En el caso que saltemos, debemos ajustar la posicion del personaje.
        else if (getState() == STATE_JUMPING)
        {
            controlMoveHorizontal();

            if (isFloor(getX(), getY() + 1))
            {
                setY(mDownY * CTileMap.TILE_HEIGHT - getHeight());
                setState(STATE_STAND);
                return;
            }
            // En el caso de el salto, cuando toque el techo, se usa el Y OFFSET para corregir la posicion a la posicion del gorro.
            if (isRoof(getX(), getY() - 1))
            {
                setY(((mUpY + 1) * CTileMap.TILE_HEIGHT) - Y_OFFSET_BOUNDING_BOX);
                setVelY(0);
                setState(STATE_HIT_ROOF);
                return;
            }
        }
        else if (getState() == STATE_FALLING)
        {
            controlMoveHorizontal();

            if (isFloor(getX(), getY() + 1))
            {
                setY(mDownY * CTileMap.TILE_HEIGHT - getHeight());
                setState(STATE_STAND);
                return;
            }
        }
        else if (getState() == STATE_HIT_ROOF)
        {
            if (getTimeState() > 0.02f * 5.0f)
            {
                setState(STATE_FALLING);
                return;
            }
        }
        // Chequear el paso entre pantallas.
        //controlRooms();
        if (getState() != STATE_GHOST)
        {
            if (currentEnergy < maxEnergy)
            {
                currentEnergy++;
            }
            if (CKeyboard.firstPress(CKeyboard.SPACE))
            {
                if (currentEnergy >= (maxEnergy / 5))
                {
                    currentEnergy = currentEnergy - (maxEnergy / 5);
                    setState(STATE_GHOST);
                    return;
                }
            }
        }
        if (getState() == STATE_GHOST)
        {
            setFriction(0.95f);
            if (currentEnergy == 0)
            {
                setState(STATE_STAND);
                return;
            }
            else
            {
                currentEnergy--;
                ghostMove();
            }
            if (CKeyboard.firstPress(CKeyboard.SPACE))
            {
                setState(STATE_STAND);
                return;
            }
        }
        if (CKeyboard.firstPress(CKeyboard.KEY_C))
        {
            if (getState() != STATE_GHOST)
            {
                if (getFlip())
                {
                    box = new hitBox(this, 30, 135, 5, (getHeight() / 2) - (135 / 2), 10, 60, hitBox.ALLYBOX);
                    mHitBoxManager.addBox(box);
                }
                else
                {
                    box = new hitBox(this, 30, 135, 5 + getWidth() - 38, (getHeight() / 2) - (135 / 2), 10, 60, hitBox.ALLYBOX);
                    mHitBoxManager.addBox(box);
                }
            }
        }

        /*if (box != null)
         * {
         *  box.update();
         * }*/
        mHitBoxManager.update();
    }