void setStates() { if (inputKeeper != null && canChangeState) { if (inputKeeper.isButtonPressed("Mira") && player.GetComponent <PlayerMovements> ().onGround&& usable) { actualState = lanternState.InHand; } if (inputKeeper.isButtonPressed("Mira") && !player.GetComponent <PlayerMovements> ().onGround) { actualState = lanternState.NotUsed; } if (inputKeeper.isButtonUp("PickLantern") && (actualState == lanternState.Left || actualState == lanternState.TurnedOff)) { actualState = lanternState.NotUsed; } //questo controllo va prima di quando si setta a Left o TurnedOff, per evitare che nel setStates venga prima messo a Left e, subito dopo, a Falling, //così da perdere ciò che si fa nell'update del Left if (canFall) { if (actualState == lanternState.TurnedOff || actualState == lanternState.Left) { if (!graphicLantern.groundCheck() && graphicLantern.LanternOnPlayerPosition) { actualState = lanternState.Falling; } } } //questo controllo va prima di quando si setta a Left, per evitare che nel setStates venga prima messo a Left e, subito dopo, a TurnedOff, //così da perdere ciò che si fa nell'update del Left if (actualState == lanternState.Left && touchedByEnemy) { actualState = lanternState.TurnedOff; } /* * if (actualState == lanternState.InHand && inputKeeper.isButtonUp("Mira") && collidingBadWall) { * actualState = lanternState.NotUsed; * } */ if (actualState == lanternState.InHand && inputKeeper.isButtonUp("Mira")) { actualState = lanternState.Left; } if (actualState == lanternState.Left && collidingBadWall) { actualState = lanternState.NotUsed; collidingBadWall = false; } } }
//--------------------UPDATE--------------------------- //qui va inserita la logica del tool, usata nell'update... protected override void useTool() { if (inputKeeper != null && inputKeeper.isButtonUp("GlassModifier") && glassesManager.isGlassModifiable()) { glassesManager.callGlassModifier(); } if (actualState != lanternState.Left) { if (!glassesManager.getActualGlass().rotateWithLantern) { graphicLantern.resetCircleAngle(); } if (!glassesManager.getActualGlass().canBeModified) { graphicLantern.resetTempProjectionAngle(); } } //DEBUG if (Input.GetKeyUp(KeyCode.G)) { enemyTouchLantern(true); } setStates(); if (actualState == lanternState.InHand) { //AZIONI DA FARE APPENA PRESA IN MANO if (previousState != actualState) { deleteInstantiatedPrefab(); if (previousState != lanternState.NotUsed) { callParticles(); } graphicLantern.setSuperSortingLayer(); graphicLantern.switchOnLantern(); graphicLantern.switchSupport(false); graphicLantern.takeLantern(); if (!collidingBadWall) { graphicLantern.setLeftLanternRaySrites(false); } else { graphicLantern.setBadRaySprites(true); } deleteInstantiatedPrefab(); audioHandler.playClipByName("Accensione"); audioHandler.playClipByName("Mira"); //returnParticles.activeParticles(graphicLantern.getLanternPosition()); } if (!collidingBadWall) { graphicLantern.setLeftLanternRaySrites(false); } else { graphicLantern.setBadRaySprites(true); } //AZIONI CHE VENGONO FATTE SEMPRE CON LA LANTERNA IN MANO //importante aggiornare le sprites solo se la lanterna è in mano, per ora non cambia niente, ma secondo me è meglio farlo così, poi vediamo if (glassesManager.isThereAUsableGlass()) { graphicLantern.glassSpriteUpdate(); } graphicLantern.normalMovementsUnderMouse(); graphicLantern.setNormalFakeProjectionSprite(); //if (glassesManager.getActualGlass().rotateWithLantern) // graphicLantern.rotateCircle(); touchedByEnemy = false; } if (actualState == lanternState.NotUsed) { //AZIONI DA FARE APPENA LA LANTERNA SCOMPARE (NOT ON GROUND oppure TASTO SINISTRO) if (previousState != actualState) { audioHandler.playClipByName("Spegnimento"); if (previousState != lanternState.InHand) { callParticles(); } graphicLantern.switchOffLantern(); } } if (actualState == lanternState.Left) { //AZIONI DA FARE APPENA LA LANTERNA E' LASCIATA A TERRA if (previousState != actualState) { graphicLantern.switchSupport(); graphicLantern.leaveLantern(); graphicLantern.changeAlphaFakeProjectionSprite(0.0f); graphicLantern.setLeftLanternRaySrites(); instantiatePrefab(); graphicLantern.putLanternOnPlayer(); audioHandler.playClipByName("ApparizioneProiezione"); } } if (actualState == lanternState.TurnedOff) { //AZIONI DA FARE APPENA LA LANTERNA VIENE TOCCATA DA UN NEMICO if (previousState != actualState) { graphicLantern.switchOffRay(); enemyTouchLantern(false); audioHandler.playClipByName("Spegnimento"); } } if (actualState == lanternState.Falling) { if (previousState != actualState) { graphicLantern.switchOffRay(); graphicLantern.addRigidbody(); turnedOffTime = Time.time; if (previousState != lanternState.TurnedOff) { audioHandler.playClipByName("Spegnimento"); } //audioHandler.playClipByName("FallingLantern"); } //dopo un po' che la lanterna sta cadendo, mi torna in mano, come NotUsed if (Mathf.Abs(Time.time - turnedOffTime) > timeReturnFalling) { callParticles(); actualState = lanternState.NotUsed; } } if (actualState != lanternState.Falling) { if (previousState != actualState) { graphicLantern.removeRigidbody(); } } if (actualState != lanternState.InHand) { if (previousState == lanternState.InHand) { graphicLantern.setSuperSortingLayer(false); audioHandler.stopClipByName("Mira"); } } if (actualState != lanternState.Left) { if (previousState == lanternState.Left && lastInstatiatePosition != null) { graphicLantern.instantiateClouds(lastInstatiatePosition); } } //aggiorno il previousState con quello attuale, al prossimo frame servirà per i controlli previousState = actualState; updateLeftLantern(); handleCanChangeState(); }