예제 #1
0
    // Se llama desde CPlayerBullet cuando una bala nos toca.
    public void hit()
    {
        setDead(true);

        int t = 0;

        // Si es un asteroide grande, se crean asteroides medianos.
        if (getType() == TYPE_BIG)
        {
            t = TYPE_MEDIUM;
        }
        // Si el asteroide es mediano, se crean asteroides chicos.
        else if (getType() == TYPE_MEDIUM)
        {
            t = TYPE_SMALL;
        }

        // Si el asteroide es chico, se saltea esta parte.
        // No se crean asteroides.
        if (getType() != TYPE_SMALL)
        {
            for (int i = 0; i < 2; i++)
            {
                // Crear los asteroides: se le pasa como parámetro el tipo y color (el color es el mismo).
                CAsteroid asteroid = new CAsteroid(t, mColor);
                asteroid.setXY(getX(), getY());
                asteroid.setVelX(CMath.randomFloatBetween(-500, 500));
                asteroid.setVelY(CMath.randomFloatBetween(-500, 500));
                CEnemyManager.inst().add(asteroid);
            }
        }

        CExplosion explosion = new CExplosion();

        explosion.setXY(getX(), getY());
        CParticleManager.inst().add(explosion);
    }
예제 #2
0
    override public void update()
    {
        int tileWidth  = CGame.inst().getMap().getTileWidth();
        int tileHeight = CGame.inst().getMap().getTileHeight();

        //Debug.Log (getState ());

        // Guardar la posicion anterior del objeto.
        setOldYPosition();

        base.update();

        if (getState() == STATE_STAND)
        {
            /*
             *
             * // En stand no deberia pasar nunca que quede metido en una pared.
             * // Si estamos en una pared, corregirnos.
             * if (isWallLeft (getX (), getY ())) {
             *      // Reposicionar el personaje contra la pared.
             *      setX ((mLeftX + 1) * tileWidth);
             * }
             * if (isWallRight (getX (), getY ())) {
             *      // Reposicionar el personaje contra la pared.
             *      setX (((mRightX) * tileWidth) - getWidth ());
             * }
             *
             * // Si en el pixel de abajo del jugador no hay piso, caemos.
             * if (!isFloor (getX (), getY () + 1)) {
             *      setState (STATE_FALLING);
             *      return;
             * }
             *
             * if (!isWallRight (getX () + 1, getY ()))
             * {
             *      setVelX (400);
             *      setState (STATE_WALKING);
             *      return;
             * }
             *
             * if (!isWallLeft (getX () - 1, getY ()))
             * {
             *      setVelX (-400);
             *      setState (STATE_WALKING);
             *      return;
             * }
             *
             */
        }
        else if (getState() == STATE_WALKING)
        {
            if (isWallLeft(getX(), getY()))
            {
                // Reposicionar el personaje contra la pared.
                setX((mLeftX + 1) * tileWidth);

                setVelX(getVelX() * -1);
            }
            if (isWallRight(getX(), getY()))
            {
                // Reposicionar el personaje contra la pared.
                setX(((mRightX) * tileWidth) - getWidth());
                setVelX(getVelX() * -1);
            }

            // Si en el pixel de abajo del jugador no hay piso, caemos.
            if (!isFloor(getX(), getY() + 1))
            {
                setState(STATE_FALLING);
                return;
            }

            if (getVelX() < 0)
            {
                // 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 ()/tileWidth)+1)*tileWidth);
                    setX((mLeftX + 1) * tileWidth);

                    setVelX(getVelX() * -1);

                    return;
                }
                else
                {
                    // No hay pared, se puede mover.
                    setVelX(-400);
                    setFlip(true);

                    if (getType() == TYPE_DONT_FALL)
                    {
                        checkPoints(getX(), getY() + 1);
                        if (mTileDownLeft)
                        {
                            setVelX(getVelX() * -1);
                        }
                    }
                }
            }
            else if (getVelX() > 0)
            {
                // 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) * tileWidth) - getWidth());

                    setVelX(getVelX() * -1);
                    return;
                }
                else
                {
                    // No hay pared, se puede mover.
                    setVelX(400);
                    setFlip(false);

                    if (getType() == TYPE_DONT_FALL)
                    {
                        checkPoints(getX(), getY() + 1);
                        if (mTileDownRight)
                        {
                            setVelX(getVelX() * -1);
                        }
                    }
                }
            }
        }
        else if (getState() == STATE_FALLING)
        {
            controlMoveHorizontal();

            if (isFloor(getX(), getY() + 1))
            {
                setY(mDownY * tileHeight - getHeight());
                setState(STATE_STAND);
                return;
            }
        }

        // Spark emmiter.
        if (CMath.randomIntBetween(1, 50) == 1)
        {
            CSpark  spark = new CSpark();
            CVector pos   = new CVector(getX() + getWidth() / 2, getY() + getHeight() / 2);
            spark.setPos(pos + new CVector(CMath.randomIntBetween(-10, 10), CMath.randomIntBetween(-10, 10)));
            CParticleManager.inst().add(spark);
        }
    }