public void Update(ContentManager Content, Map map, Camera camera)
 {
     //Position = Viewportposition - (Position wenn am Ende am Maprand * Positionsfaktor abhängig von Viewportposition/letzte Mapposition)
     position.X = camera.viewport.X - ((size.X - camera.viewport.Width) * (camera.viewport.X / (map.size.X - camera.viewport.Width)));
     position.Y = camera.viewport.Y - ((size.Y - camera.viewport.Height) * (camera.viewport.Y / (map.size.Y - camera.viewport.Height))) + additionalHeight;
     //TextureManager(Content, camera);
 }
        public void Update(Map karte, GameTime gameTime, Camera camera)
        {
            luaTop = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Top"]);
            luaBottom = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Bottom"]);
            luaAmount = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Amount"]);
            luaChaos = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Chaos"]);
            luaType = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Type"]);
            luaWind = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Wind"]);
            luaSizeMin = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "SizeMin"]);
            luaSizeMax = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "SizeMax"]);
            size.X = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Width"]);
            size.Y = Convert.ToInt32((double)Game1.luaInstance["cloudPlane" + number.ToString() + "Height"]);

            position.X = camera.viewport.X - ((size.X - camera.viewport.Width) * (camera.viewport.X / (karte.size.X - camera.viewport.Width)));
            position.Y = camera.viewport.Y - ((size.Y - camera.viewport.Height) * (camera.viewport.Y / (karte.size.Y - camera.viewport.Height)));

            //Spawntimer
            if (Game1.time.TotalMilliseconds > spawnTimer + ((100000 - (float)luaAmount) * ((100 - (float)luaChaos) / 100)))
            {
                spawnTimer = Game1.time.TotalMilliseconds;
                SpawnCloud(karte, camera);
            }

            //Wolken updaten
            for (int i = 0; i < clouds.Count(); i++)
            {
                Cloud cloud = clouds.ElementAt(i);
                cloud.Update(luaWind);
                if (cloud.position.X < -cloud.cuttexture.Width)
                {
                    clouds.Remove(cloud);
                }
            }
        }
 public void Draw(GameTime gameTime, Camera camera)
 {
     //Wird im Hauptgame ausgeführt und malt den Spieler mit der entsprechenden Animation
     if (start)
     {
         spine.Draw(gameTime, camera, position);
     }
 }
        public void UpdateDraw(int state, SpriteBatch spriteBatch, GameTime gameTime, Camera camera)
        {
            //----------------------------------------------------------------------
            //----------------------------------------Update
            //----------------------------------------------------------------------
            camera.UpdateTransformation(Game1.graphics);

            //----------------------------------------------------------------------
            //----------------------------------------Draw
            //----------------------------------------------------------------------
            //--------------------Draw to renderBackground--------------------
            Game1.graphics.GraphicsDevice.SetRenderTarget(renderBackground);
            Game1.graphics.GraphicsDevice.Clear(Color.Transparent);
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.viewportTransform);
                spriteBatch.Draw(bg_texture, Vector2.Zero, Color.White);
                spriteBatch.Draw(logo_texture, Vector2.Zero, Color.White);
            spriteBatch.End();

            //--------------------Draw to renderTiles--------------------
            Game1.graphics.GraphicsDevice.SetRenderTarget(renderTiles);
            Game1.graphics.GraphicsDevice.Clear(Color.Transparent);
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.viewportTransform);
                for (int i = 0; i <= state; i++)
                {
                    spriteBatch.Draw(tile[i], new Vector2(1920 / 2 - tile[0].Width / 2, 1080 - tile[0].Height - 10), Color.White);
                }
            spriteBatch.End();

            //--------------------Draw to renderScreen--------------------
            Game1.graphics.GraphicsDevice.SetRenderTarget(renderScreen);
            Game1.graphics.GraphicsDevice.Clear(Color.Transparent);
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
                spriteBatch.Draw(renderBackground, Vector2.Zero, Color.White);
                spriteBatch.Draw(renderTiles, Vector2.Zero, Color.White);
                spriteBatch.Draw(overlay_texture, Vector2.Zero, Color.White);
            spriteBatch.End();

            //--------------------Draw to Screen--------------------
            Game1.graphics.GraphicsDevice.SetRenderTarget(null);
            Game1.graphics.GraphicsDevice.Clear(Color.Black);
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.screenTransform);
                spriteBatch.Draw(renderScreen, Vector2.Zero, Color.White);
            spriteBatch.End();
            if (Game1.input.screenshot && Game1.CanTakeScreenshots)
                Game1.TakeScreenshot(renderScreen);
        }
 public void TextureManager(ContentManager Content, Camera camera)
 {
     //Lade Textur, einmal ausgeführt
     for (int i = 0; i < tilesCount; i++)
     {
         if (camera.viewport.X + camera.viewport.Width >= position.X + (i * 3840) && camera.viewport.X <= position.X + (i * 3840) + texture[i].Width)
         {
             if (texture[i].IsDisposed)
             {
                 texture[i] = Content.Load<Texture2D>("sprites/Level_" + Game1.level + "/Planes/" + textureName + "_" + (i + 1));
             }
         }
         else if (!texture[i].IsDisposed)
         {
             texture[i].Dispose();
         }
     }
 }
 public void Load(ContentManager Content)
 {
     camera = new Camera();
     character.Load(Content, Game1.graphics, "bonepuker", 1.5f, 0.5f);
     renderScreen = new RenderTarget2D(Game1.graphics.GraphicsDevice, 1920, 1080);
     renderSpine = new RenderTarget2D(Game1.graphics.GraphicsDevice, 1920, 1080);
     renderMenu = new RenderTarget2D(Game1.graphics.GraphicsDevice, 1920, 1080);
     renderTitle = new RenderTarget2D(Game1.graphics.GraphicsDevice, 1920, 1080);
     bg_texture = Content.Load<Texture2D>("sprites/menu/background");
     logo_texture = Content.Load<Texture2D>("sprites/menu/logo");
     credit_texture = Content.Load<Texture2D>("sprites/menu/credits");
     overlay_texture = Content.Load<Texture2D>("sprites/menu/overlay");
     controls_texture = Content.Load<Texture2D>("sprites/menu/controls");
     gameover_texture = Content.Load<Texture2D>("sprites/menu/gameover");
     levelend_texture = Content.Load<Texture2D>("sprites/menu/levelend");
     mainMenu = new SubMenu(3, "main", new Vector2(-650, 100), 150);
     mainMenu.Load(Content);
         mainMenu.buttons.Add(new Button("start", new Rectangle(0, 0, 150, 175), 4));
         mainMenu.buttons.Add(new Button("options", new Rectangle(0, 175, 150, 215), 4));
         mainMenu.buttons.Add(new Button("exit", new Rectangle(0, 390, 150, 250), 4));
         startMenu = new SubMenu(3, "start", new Vector2(-300, 160), 180);
     startMenu.Load(Content);
     startMenu.buttons.Add(new Button("continue", new Rectangle(0, 0, 140, 150), 3));
     startMenu.buttons.Add(new Button("newgame", new Rectangle(0, 150, 140, 140), 3));
     startMenu.buttons.Add(new Button("newgame", new Rectangle(0, 290, 140, 110), 3));
         optionMenu = new SubMenu(4, "option", new Vector2(-300, 160), 160);
     optionMenu.Load(Content);
     optionMenu.buttons.Add(new Button("fullscreen", new Rectangle(0, 0, 122, 95), 3));
     optionMenu.buttons.Add(new Button("stretch", new Rectangle(0, 95, 122, 110), 3));
     optionMenu.buttons.Add(new Button("sound", new Rectangle(0, 207, 122, 135), 3));
     optionMenu.buttons.Add(new Button("exit", new Rectangle(0, 346, 122, 90), 3));
     mainMenu.visible = true;
     Sound.Load(Content);
     Cutscene.Load(Content);
     if (Game1.sound && startScreen)
     {
         Sound.startMusicInstance.Play();
     }
     if (startScreen)
     {
         Cutscene.Play("start");
     }
 }
 public void Load(ContentManager Content, string textureName, Map karte, Camera camera)
 {
     cloudTexture = Content.Load<Texture2D>("sprites/Level_1/Planes/" + textureName);
     spawnTimer = 0;
     for (int i = 0; i <= size.X / luaWind; i++)
     {
         if (spawnTimer > (((100000 - (float)luaAmount) * ((100 - (float)luaChaos) / 100)) / 30))
         {
             spawnTimer = 0;
             SpawnCloud(karte, camera);
         }
         //Wolken updaten
         for (int t = 0; t < clouds.Count(); t++)
         {
             Cloud cloud = clouds.ElementAt(t);
             cloud.Update(luaWind);
             if (cloud.position.X < -cloud.cuttexture.Width)
             {
                 clouds.Remove(cloud);
             }
         }
         spawnTimer++;
     }
 }
 public virtual void Draw(SpriteBatch spriteBatch, GameTime gameTime, Camera camera)
 {
     spine.Draw(gameTime, camera, position);
 }
 public void Draw(GameTime gameTime, Camera camera)
 {
     spine.Draw(gameTime, camera, position);
 }
 public void Draw(GameTime gameTime, Camera camera)
 {
     spine.Draw(gameTime, camera, new Vector2(spine.skeleton.x, spine.skeleton.y));
 }
 public void Draw(SpriteBatch spriteBatch,GameTime gameTime,Camera camera, Color color)
 {
     for (int i = 0; i < blocks.Count(); ++i)
     { 
         Block block = blocks.ElementAt(i);
         if (Game1.debug)
             spriteBatch.Draw(mapTexture, block.position, block.cuttexture, color, 0, Vector2.Zero, 1, SpriteEffects.None, 1.0f);
     }
     for (int i = 0; i < items.Count(); ++i)
     { 
         Item item = items.ElementAt(i);
         spriteBatch.Draw(itemTexture, item.position, item.cuttexture, color, 0, Vector2.Zero, 1, SpriteEffects.None, 0.9f);
     }
     for (int i = 0; i < triggers.Count(); ++i)
     {
         Trigger trigger = triggers.ElementAt(i);
         Vector2 tvector = trigger.position;
         tvector.X -= 40;
         tvector.Y += 20;
         if (trigger.typ == 2)
         {
             Vector2 dvector = trigger.wallposition;
             if (Game1.level == 3)
             {
                 if (trigger.doorframe < 10)
                 {
                     dvector.Y += 100;
                     dvector.X -= 50;
                     spriteBatch.Draw(doorTexture, dvector, new Rectangle(0, 0, 106, 409), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                 }
                 else if (trigger.doorframe >= 10&&trigger.doorframe < 20)
                 {
                     dvector.Y += 90;
                     dvector.X -= 320;
                     spriteBatch.Draw(doorTexture, dvector, new Rectangle(106, 0, 376, 409), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                 }
                 else
                 {
                     dvector.Y += 120;
                     dvector.X -= 370;
                     spriteBatch.Draw(doorTexture, dvector, new Rectangle(484, 0, 416, 409), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                 }
             }
             else if (Game1.level == 4)
             {
                 if (i == 0)
                 {
                     if (trigger.doorframe < 10)
                     {
                         dvector.Y -= 500;
                         dvector.X -= 50;
                         spriteBatch.Draw(doorTexture, dvector, new Rectangle(0, 0, 106, 540), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                     }
                     else if (trigger.doorframe >= 10 && trigger.doorframe < 20)
                     {
                         dvector.Y -= 500;
                         dvector.X -= 320;
                         spriteBatch.Draw(doorTexture, dvector, new Rectangle(106, 0, 376, 540), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                     }
                     else
                     {
                         dvector.Y -= 500;
                         dvector.X -= 370;
                         spriteBatch.Draw(doorTexture, dvector, new Rectangle(484, 0, 416, 540), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                     }
                 }
                 else if (i == 1)
                 {
                     if (trigger.doorframe < 10)
                     {
                         dvector.Y -= 500;
                         dvector.X -= 100;
                         spriteBatch.Draw(doorTexture, dvector, new Rectangle(896, 0, 896 + 251, 540), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                     }
                     else if (trigger.doorframe >= 10 && trigger.doorframe < 20)
                     {
                         dvector.Y -= 490;
                         dvector.X -= 480;
                         spriteBatch.Draw(doorTexture, dvector, new Rectangle(896 + 251, 0, 896 + 580, 540), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                     }
                     else
                     {
                         dvector.Y -= 470;
                         dvector.X -= 570;
                         spriteBatch.Draw(doorTexture, dvector, new Rectangle(896 + 831, 0, 896 + 647, 540), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
                     }
                 }
             }
         }
         if (trigger.active)
         {
             spriteBatch.Draw(triggerTexture, tvector, new Rectangle(147, 0, 147, 60), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             if (trigger.typ == 1)
                 spriteBatch.Draw(wallTexture, trigger.wallposition, new Rectangle(0, 0, 48, trigger.wallY), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
         }
         else
             spriteBatch.Draw(triggerTexture, tvector, new Rectangle(0, 0, 147, 60), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
     }
     for (int i = 0; i < objects.Count(); ++i)
     {
         Obj obj = objects.ElementAt(i);
         if (obj.type == 1)
             spriteBatch.Draw(objectTexture, obj.position, new Rectangle(0, 0, 96, 96), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
         else if (obj.type == 2)
             spriteBatch.Draw(objectTexture, obj.position, new Rectangle(96, 0, 96, 96), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
         else if (obj.type == 3)
         {  
             if(obj.stone)
                 spriteBatch.Draw(objectTexture, obj.position, new Rectangle(96 * 2, 0, 96, 96), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             else
                 spriteBatch.Draw(objectTexture, obj.position, new Rectangle(96 * 3, 0, 96, 96), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
         }
         else if (obj.type == 4)
             spriteBatch.Draw(objectTexture, obj.position, new Rectangle(93*3, 0, 144, 96), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
     }
     for (int i = 0; i < mblocks.Count(); ++i)
     {
         MovingBlock mblock = mblocks.ElementAt(i);
         spriteBatch.Draw(bewegendTexture, new Vector2(mblock.cbox.X,mblock.cbox.Y-24),color);
     }
     for (int i = 0; i < breakblocks.Count(); ++i)
     {
         Breakable breakblock = breakblocks.ElementAt(i);
         if (Game1.level == 3)
         {
             if (breakblock.id == 0)
             {
                 spriteBatch.Draw(breakTexture, new Vector2(breakblock.cbox.X - 127, breakblock.cbox.Y - 20), new Rectangle(0, 0, 332, 372), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             }
             else if (breakblock.id == 1 )
             {
                 spriteBatch.Draw(breakTexture, new Vector2(breakblock.cbox.X - 70, breakblock.cbox.Y-27), new Rectangle(332 * 1, 0, 332, 372), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             }
             else if (breakblock.id == 2)
             {
                 spriteBatch.Draw(breakTexture, new Vector2(breakblock.cbox.X - 10, breakblock.cbox.Y-24), new Rectangle(332 * 2, 0, 332, 372), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             }
             else if (breakblock.id == 3)
             {
                 spriteBatch.Draw(breakTexture, new Vector2(breakblock.cbox.X - 20, breakblock.cbox.Y-65), new Rectangle(332 * 3, 0, 332, 372), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             }
         }
         else if (Game1.level == 4)
         {
             if (breakblock.id == 0)
             {
                 spriteBatch.Draw(breakTexture, new Vector2(breakblock.cbox.X - 60, breakblock.cbox.Y - 35), new Rectangle(0, 0, 389, 377), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             }
             else if (breakblock.id == 1)
             {
                 spriteBatch.Draw(breakTexture, new Vector2(breakblock.cbox.X - 315, breakblock.cbox.Y - 35), new Rectangle(389, 0, 389, 377), color, 0, Vector2.Zero, 1, SpriteEffects.None, 0f);
             }
         }
     }
 }
 public void Draw(GameTime gameTime, Camera camera,Vector2 position)
 {
     //Player -> Drawposition
     skeleton.X = position.X - camera.viewport.X;
     skeleton.Y = position.Y - camera.viewport.Y;
     //----------Spine----------
     animationState.Update(gameTime.ElapsedGameTime.Milliseconds / 1000f);
     animationState.Apply(skeleton);
     skeleton.UpdateWorldTransform();
     skeletonRenderer.Begin();
     skeletonRenderer.Draw(skeleton);
     skeletonRenderer.End();
     //Player -> Worldposition
     skeleton.X = position.X;
     skeleton.Y = position.Y;
 }
 public void Draw(SpriteBatch spriteBatch, GameTime gameTime, Camera camera)
 {
     spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.viewportTransform);
     for (int i = 0; i < buttons.Count(); ++i)
     {
         Button button = buttons.ElementAt(i);
         button.Draw(spriteBatch, new Vector2((Game1.resolution.X / 2) + offset.X, (Game1.resolution.Y / 2) - (((optionCount - 1) * optionSpace) / 2) + (i * optionSpace) + offset.Y), button_texture); 
     }
     spriteBatch.End();
 }
 public void SpawnCloud(Map karte, Camera camera)
 {
     //Entscheiden ob Wolke gespawned werden soll
     testSpawn = randomNumber.Next(0, 100);
     if (testSpawn >= luaChaos)
     {
         //Wolkentyp bestimmen
         testType = randomNumber.Next(0, 10);
         int type = 1;
         if (testType < luaType)
         {
             type = 2;
         }
         //Wolkenposition bestimmen
         testPosition = randomNumber.Next(0, 100);
         int spawnPosition = ((int)((luaBottom - luaTop) * ((float)testPosition / 100))) + luaTop;
         //Wolke erstellen
         testSize = randomNumber.Next(luaSizeMin, luaSizeMax);
         clouds.Add(new Cloud(type, new Vector2(size.X, spawnPosition), (float)testSize / 100));
     }
 }