override public void destroy() { base.destroy(); mRect2.destroy(); mRect2 = null; if (box != null) { box.destroy(); box = null; } mHitBoxManager.destroy(); mHitBoxManager = null; }
void Awake() { manager = GameObject.FindGameObjectWithTag ("GameController").GetComponent<gameController>(); controllerInput = GetComponent<XboxControls> (); Box = GetComponentInChildren<hitBox>(); Slam = GetComponentInChildren<slam> (); manager.players.Add (this); animator = GetComponentInChildren<Animator> (); spinning = GetComponentInChildren<fastHammerPhysics> (); rigidBody = GetComponent<RigidBodyControls> (); gravityValue = rigidBody.gravity; if (manager.settings != null) { lives = manager.settings.lives; } healthMax = health; stunParticles = transform.FindChild ("stun").gameObject; manager.alivePlayers.Add (this); soundEffect = GetComponent<playerSFX> (); myAudio = GetComponent<AudioSource> (); }
public void addBox(hitBox box) { base.add(box); Debug.Log("He agregado un box al manager"); }
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(); }