/// <summary> /// Holder oversikt over hvilke knapper som er trykket, og hvorvidt spilleren er blokkert /// </summary> /// <param name="inputService">Inputservice som holder oversikt over input</param> public void walk(IManageInput inputService) { /* Hvis "walking" animasjonen ikke er aktiv, og AnimationState ikke er "walking" * aktiveres "walking" animasjonen, og bytter AnimationState til "walking" */ if (animationPlayer.CurrentAnimation != "walking" && AnimationState != "walking") { animationPlayer.TransitionToAnimation("battleBlockWalk", 0.2f); AnimationState = "walking"; } /* Hvis AnimationState er "walking" * (Man kan ikke bruke currentanimation, fordi han skal bevege seg mens han er i overgang mellom to animasjoner)*/ if (AnimationState == "walking") { //Start gålyden _audioManager.PlayLoop("walk"); //Hvis man både holder nede venstre og høyre, stå stille if (inputService.KeyIsDown(Keys.Right) && inputService.KeyIsDown(Keys.Left)) { idle(); } //Hvis man holder nede høyreknappen, og man ikke er blokkert fra høyre else if (inputService.KeyIsDown(Keys.Right) && !BlockedRight) { //Ikke snu karakteren, beveg han mot høyre _destinationRectangle.X += _xSpeed; Flipped = false; } //Hvis man holder nede venstreknappen, og man ikke er blokkert fra venstre else if (inputService.KeyIsDown(Keys.Left) && !BlockedLeft) { //Snu karakteren og beveg han mot venstre _destinationRectangle.X -= _xSpeed; Flipped = true; } //Hvis man både holder nede opp og ned, stå stille if (inputService.KeyIsDown(Keys.Up) && inputService.KeyIsDown(Keys.Down)) { idle(); } //Hvis man holder nede opp, og man ikke er blokkert fra venstre else if (inputService.KeyIsDown(Keys.Up) && !BlockedTop) { _destinationRectangle.Y -= _xSpeed; } //Hvis man holder nede ned, og man ikke er blokkert fra venstre else if (inputService.KeyIsDown(Keys.Down) && !BlockedBottom) { _destinationRectangle.Y += _xSpeed; } //Flytter hitboxen til samme sted som spilleren _footBox.Y = ((int)(_destinationRectangle.Y + footBoxYOffset)); _footBox.X = (int)(_destinationRectangle.X - footBoxXOffset); TargetBox.X = (int)(_footBox.X - targetBoxXDif / 2); TargetBox.Y = (int)_footBox.Y - targetBoxYDif / 2; healthbar.setPosition(_footBox); } }
public void Update(IManageInput inputService) { if(inputService.KeyWasPressedThisFrame(Keys.P)) levelUp(); //setter layerdepth til bunnen av spilleren setLayerDepth(_footBox.Bottom); //Øker hastigheten til walk-animasjonen if (animationPlayer.CurrentAnimation == "battleBlockWalk") animationPlayer.PlaySpeedMultiplier = 1.4f; else animationPlayer.PlaySpeedMultiplier = 1f; //Hvis spilleren ikke går, stopp gålyden if (AnimationState != "walking") _audioManager.StopLoop("walk"); //Hvis spilleren ikke angriper if (AnimationState != "slashing") { //SJekk hvilke knapper som blir trykket og aktiver funksjonene if (inputService.KeyIsDown(Keys.Space)) { attackSlash(); } else if (inputService.KeyIsDown(Keys.LeftShift)) { block(); } //Hvis én av piltastene er nede, aktiver walk else if (inputService.KeyIsDown(Keys.Left) || inputService.KeyIsDown(Keys.Down) || inputService.KeyIsDown(Keys.Up) || inputService.KeyIsDown(Keys.Right)) { walk(inputService); } //Hvis ingenting blir trykket, stå stille else { idle(); } } //Hvis spilleren angriper og er på slutten av animasjonen else if (animationPlayer.Transitioning == false && animationPlayer.CurrentKeyframeIndex > 0 && animationPlayer.CurrentKeyframeIndex == (animationPlayer.currentPlayingAnimation.Keyframes.Count() - 1)) { //Hvis det finnes en aktiv fiende if (activeEnemy != null) { //Hvis targetboksen er innenfor fiendens footbox, og spilleren ser mot fienden if (TargetBox.Intersects(activeEnemy.FootBox) && FacesTowards((float)activeEnemy.FootBox.Center.X)) { //Aktiver tilfeldig angrepslyd og gjør skade på fienden _audioManager.AddSound(Directory + "/attack" + rInt(1, 3)); activeEnemy.takeDamage(_damage); } } //Hvis det finnes steiner som kan treffes else if (StonesToMine != null) { //Sjekker om spillerens targetbox er innenfor en av steinene i listen, og om han står mot dem foreach (Stone stone in StonesToMine) { if (TargetBox.Intersects(stone.FootBox) && stone.endurance > 0 && FacesTowards(stone.FootBox.Center.X)) { //Aktiver tilfeldig "slå på stein"-lyd og gjør skade på steinen _audioManager.AddSound(Directory + "/clang" + rInt(1, 4)); stone.IsHit(); } } } idle(); } }