// 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); }
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); } }