public void Reset(Player player)
 {
     rageMode = false;
     rageMeter = 0;
     beating = false;
     coverEyes = false;
     bag = false;
     player.spine.anim("sc_dummy", 0, false);
 }
 public void Draw(SpriteBatch spriteBatch, Player spieler)
 {
     for (int i = 0; i < tilesCount; i++)
     {
         if (!texture[i].IsDisposed)
         {
             spriteBatch.Draw(texture[i], new Vector2(position.X + (i * 3840), position.Y), Color.White);
         }
     }
 }
 public override void Update(GraphicsDeviceManager graphics, Player spieler, Map karte)
 {
     viewport.Y = 0;
     viewport.X = 0;
     UpdateTransformation(graphics); //Abgekapselt damit Camera für Menü ohne Spieler verwendbar ist.
 }
 public void Reset(GameTime gameTime, Player player)
 {
     Sound.Stop("ashbrett_breath");
     Sound.Stop("sweetcheeks_enrage");
     if (spieler.lifes != 0)
     {
         foreach (Enemy enemy2 in karte.enemies)
         {
             enemy2.Reset();
         }
         karte.Reset();
         spieler.Reset();
         hero.Reset();
         princess.Reset(player);
     }
     princess.ResetRage(gameTime);
 }
 public void StartReset(GameTime gameTime, Player player)
 {
     Sound.Stop("ashbrett_breath");
     Sound.Stop("sweetcheeks_enrage");
     if (spieler.lifes != 0)
     {
         foreach (Enemy enemy2 in karte.enemies)
         {
             enemy2.StartReset();
             enemy2.Save();
         }
         karte.StartReset();
         karte.Save();
         spieler.StartReset();
         spieler.Save((int)spieler.position.X);
         hero.StartReset();
         hero.Save();
         princess.StartReset(player);
         princess.Save();
     }
     princess.ResetRage(gameTime);
 }
 public void Update(GameTime gameTime, Player player, Map map)
 {
     spine.skeleton.X = player.position.X;
     spine.skeleton.Y = player.position.Y;
     if (bag)
     {
         ResetRage(gameTime);
     }
     else if (!beating && !coverEyes)
     {
         player.spine.animationState.ClearTrack(2);
     }
     if (beating)
     {
         if (Game1.time.TotalMilliseconds > beatingTimer + (spine.skeleton.Data.FindAnimation("cloud").Duration * 1000)) //Kloppwolke zu Ende?
         {
             beating = false;
             rageMode = false;
             player.spine.Clear(2);
             rageMeter = 0;
             rageTimer = Game1.time.TotalMilliseconds;
             //spine.animationState.ClearTrack(0);
         }
     }
     else if (coverEyes)
     {
         if (Game1.time.TotalMilliseconds > (coverTimer + (float)coverTime)) //CoverEyes beenden?
         {
             coverEyes = false;
             rageMode = false;
             player.spine.Clear(2);
             rageMeter = 0;
             rageTimer = Game1.time.TotalMilliseconds;
         }
     }
     if (rageMode)
     {
         rageMeter += 100 / ((float)enrageSpeed * 60); //RageUp
         if (Game1.input.rechts)
         {
             if (pressedLeft)
             {
                 rageMeter -= unrageSpeed; //RageDown
                 pressedLeft = false;
             }
         }
         else if (Game1.input.links)
         {
             if (!pressedLeft)
             {
             rageMeter -= unrageSpeed; //RageDown
             pressedLeft = true;
             }
         }
         if (rageMeter > rageLimit && !coverEyes && !beating) //Enrage?!?
         {
             if (!player.fall && !player.jump)
             {
                 player.spine.Clear(2);
                 randomNumber = randomGen.Next(0, 100); //Augen zu halten vs hart aufs Maul!
                 if (randomNumber <= 50)
                 {
                     beating = true;
                     beatingTimer = Game1.time.TotalMilliseconds;
                     int tempFlipState;
                     if (spine.skeleton.FlipX)
                     {
                         tempFlipState = 1;
                     }
                     else
                     {
                         tempFlipState = 2;
                     }
                     spine.anim("cloud", tempFlipState, false);
                     //ENRAAAAAGGGGEEEE!!!!!!!!!!!!!!!!!
                 }
                 else
                 {
                     coverEyes = true;
                     player.spine.anim("sc_cover_eyes", 0, true);
                     coverTimer = Game1.time.TotalMilliseconds;
                     //Deine Mudda enraged!
                 }
             }
         }
         if (rageMeter <= 0)
         {
             Sound.Stop("sweetcheeks_enrage");
             rageMode = false;
             player.spine.Clear(2);
             rageMeter = 0;
         }
     }
     else if (Game1.time.TotalMilliseconds > (rageTimer + (float)rageWarmup)) //RageWarmup
     {
         if (player.CollisionCheckedVector(0, 1, map.blocks, map).X == 0) //Nur auf dem Boden enragen
         {
             rageTimer = Game1.time.TotalMilliseconds;
             randomNumber = randomGen.Next(0, 100);
             if (randomNumber <= rageChance)
             {
                 //Teste Enrage-Bedingungen
                 Sound.Play("sweetcheeks_enrage");
                 rageMode = true;
                 player.spine.anim("sc_escape", 0, true);
             }
         }
         else
         {
             rageTimer = Game1.time.TotalMilliseconds - ((float)rageWarmup * 0.2f); //Wenn Spieler wieder auf den Boden kommt nach kurzer Zeit enragen
         }
     }
 }
        public virtual void Update(GraphicsDeviceManager graphics, Player spieler, Map karte)
        {
            //Kamera an Spieler anpassen 
            int leftspace = Convert.ToInt32((double)Game1.luaInstance["cameraLeftspace"]);
            int rightspace = Convert.ToInt32((double)Game1.luaInstance["cameraRightspace"]);
            int bottomspace = Convert.ToInt32((double)Game1.luaInstance["cameraBottomspace"]);
            int topspace = Convert.ToInt32((double)Game1.luaInstance["cameraTopspace"]);
            int maxbewegung = Convert.ToInt32((double)Game1.luaInstance["cameraMaxBewegung"]);
            int bewegungsteps = Convert.ToInt32((double)Game1.luaInstance["cameraBewegungSteps"]);
            if (Game1.input.camR)
            {
                if (camerabewegung < maxbewegung)
                    camerabewegung += bewegungsteps;
            }
            else if (Game1.input.camL)
            {
                if (camerabewegung > -maxbewegung)
                    camerabewegung -= bewegungsteps;
            }
            else if(camerabewegung != 0)
            {
                if (camerabewegung > 0)
                    camerabewegung -= bewegungsteps;
                else
                    camerabewegung += bewegungsteps;

            }

            if (viewport.X + leftspace > spieler.position.X) //Scrolling nach links
            {
                viewport.X = (int)spieler.position.X - leftspace;
            }
            else if (viewport.X + viewport.Width - rightspace < spieler.position.X) //Scrolling nach rechts
            {
                viewport.X = (int)spieler.position.X - (viewport.Width - rightspace);
            }
            if (viewport.X < 0) //Linker Maprand
            {
                viewport.X = 0;
            }
            else if (viewport.X > karte.size.X - viewport.Width) //Rechter Maprand
            {
                viewport.X = (int)karte.size.X - viewport.Width;
            }
            if (viewport.X + camerabewegung > 0 && viewport.X + camerabewegung < karte.size.X - viewport.Width)
                viewport.X += camerabewegung;
            else if (viewport.X + camerabewegung > karte.size.X-viewport.Width) //Rechter Maprand
                viewport.X = (int)karte.size.X - viewport.Width;
            else if(viewport.X + camerabewegung < 0)
                viewport.X = 0;
            if (viewport.Y + topspace > spieler.position.Y) //Scrolling nach oben
            {
                viewport.Y = (int)spieler.position.Y - topspace;
            }
            else if (viewport.Y + viewport.Height - bottomspace < spieler.position.Y) //Scrolling nach unten
            {
                viewport.Y = (int)spieler.position.Y - (viewport.Height - bottomspace);
            }
            if (viewport.Y < 0) //Oberer Maprand
            {
                viewport.Y = 0;
            }
            else if (viewport.Y > karte.size.Y - viewport.Height) //Unterer Maprand
            {
                viewport.Y = (int)karte.size.Y - viewport.Height;
            }
            UpdateTransformation(graphics); //Abgekapselt damit Camera für Menü ohne Spieler verwendbar ist.
        }
 public void Generate(Player spieler,Hero hero)
 {
     //generiere Das Level (erzeuge neue Objekte in der List) anhand der Levelmap
     int moving_last = 0;
     int break_x_last = 0;
     int break_x_anzahl = 0;
     int break_y_last = 0;
     int break_y_anzahl = 0;
     int moving_anzahl = 0;
     for (int i = 0; i < levelMap.Width; i++)
     {
         for (int t = 0; t < levelMap.Height; t++)
         {
             string type = "";
             if (pixelRGBA[i, t, 3] == 0)
             {
             }
             else
             {
                 String color = pixelRGBA[i, t, 0] + "," + pixelRGBA[i, t, 1] + "," + pixelRGBA[i, t, 2];
                 if (pixelRGBA[i, t, 1] == 255 && pixelRGBA[i, t, 2] == 255)
                 {
                     kipoints.Add(new KIPoint(new Vector2(i * 48, t * 48), pixelRGBA[i, t, 0]));
                 }
                 switch (color)
                 {
                     case "255,100,255":
                         spieler.spine.skeleton.X = i*48;
                         spieler.spine.skeleton.Y = t * 48;
                         spieler.position.Y = spieler.spine.skeleton.Y;
                         spieler.position.X = spieler.spine.skeleton.X;
                         spieler.cbox.Update(spieler.position);
                         spieler.checkpoint = spieler.position;
                         break;
                     case "255,115,255":
                         hero.spine.skeleton.X = i * 48;
                         hero.spine.skeleton.Y = t * 48;
                         hero.position.Y = hero.spine.skeleton.Y;
                         hero.position.X = hero.spine.skeleton.X;
                         hero.cbox.Update(hero.position);
                         hero.checkpoint = hero.position;
                         break;
                     case "147,17,126":
                         type = "checkpoint";
                         checkpoints.Add(new Checkpoint(i * 48, false));
                         break;
                     case "39,118,33":
                         type = "moving";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         if (moving_last + 1 != i)
                         {
                             moving_anzahl++;
                         }
                         moving_last = i;
                         break;
                     case "119,0,255":
                         type = "breakable";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         if (break_x_last + 1 != i)
                         {
                             break_x_anzahl++;
                         }
                         break_x_last = i;
                         break;
                     case "119,20,255":
                         type = "breakable_verticale";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         if (break_y_last + 1 != t)
                         {
                             break_y_anzahl++;
                         }
                         break_y_last = t;
                         break;
                     case "180,165,0":
                         type = "movingend";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         break;
                     case "104,60,17":
                         type = "underground_earth";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         break;
                     case "0,255,0":
                         type = "ground_grass";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         break;
                     case "0,0,255":
                         type = "water";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         break;
                     case "0,0,0":
                         type = "hase";
                         enemies.Add(new Bunny(new Vector2(i * 48, t * 48), 1,true));
                         break;
                     case "255,255,0":
                         type = "zeit";
                         items.Add(new Item(new Vector2(i * 48, t * 48 -96 +48), type));
                         break;
                     case "180,150,140":
                         type = "bag";
                         items.Add(new Item(new Vector2(i * 48, t * 48 -96+48), type));
                         break;
                     case "171,140,188":
                         type = "herz";
                         items.Add(new Item(new Vector2(i * 48, t * 48 - 96 + 48), type));
                         break;
                     case "255,200,200":
                         type = "monkey";
                         items.Add(new Item(new Vector2(i * 48, t * 48 - 96 + 48), type));
                         break;
                     case "50,50,50":
                         type = "monkey";
                         enemies.Add(new Monkey(new Vector2(i * 48, t * 48), 2, true));
                         break;
                     case "255,255,100":
                         type = "banana";
                         items.Add(new Item(new Vector2(i * 48, t * 48 - 96 + 48), type));
                         break;
                     case "255,0,0":
                         type = "trigger";
                         Block b = new Block(new Vector2(i * 48, t * 48), type);
                         blocks.Add(b);
                         triggers.Add(new Trigger(new Vector2(i * 48, t * 48),b));
                         break;
                     case "153,0,0":
                         type = "triggerend";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         break;
                     case "155,0,0":
                         type = "triggerdoor";
                         blocks.Add(new Block(new Vector2(i * 48, t * 48), type));
                         break;
                 }
             }
         }
     }
     for (int i = 0; i < moving_anzahl; i++)
     {
         mblocks.Add(new MovingBlock(blocks));
     }
     int id = 0;
     for (int i = 0; i < break_x_anzahl; i++)
     {
         breakblocks.Add(new Breakable(blocks,false,id));
         id++;
     }
     for (int i = 0; i < break_y_anzahl; i++)
     {
         breakblocks.Add(new Breakable(blocks, true, id));
         id++;
     }
     checkpoints.Add(new Checkpoint((int)size.X - 100, true)); //Ende
     for (int i = 0; i < triggers.Count(); ++i)
     {
         Trigger trigger = triggers.ElementAt(i);
         trigger.Check(blocks);
     }
     Save();
 }