Example #1
0
 public Level(SerializationInfo info, StreamingContext context)
 {
     mLevelTitle          = (string)info.GetValue("mLevelTitle", typeof(string));
     mLevelStory          = (string)info.GetValue("mLevelStory", typeof(string));
     mLumberjacks         = (ActorBatch)info.GetValue("mLumberjacks", typeof(ActorBatch));
     mDoubleAxeKillers    = (ActorBatch)info.GetValue("mDoubleAxeKillers", typeof(ActorBatch));
     mSilverback          = (Silverback)info.GetValue("mSilverback", typeof(Silverback));
     mBaboonBatch         = (ActorBatch)info.GetValue("mBaboonBatch", typeof(ActorBatch));
     mCapuchinBatch       = (ActorBatch)info.GetValue("mCapuchinBatch", typeof(ActorBatch));
     mChimpanezzeBatch    = (ActorBatch)info.GetValue("mChimpanezzeBatch", typeof(ActorBatch));
     mGibbonBatch         = (ActorBatch)info.GetValue("mGibbonBatch", typeof(ActorBatch));
     mOrangutanBatch      = (ActorBatch)info.GetValue("mOrangutanBatch", typeof(ActorBatch));
     mSilverbackBatch     = (ActorBatch)info.GetValue("mSilverbackBatch", typeof(ActorBatch));
     mSilverbackMesh      = (Mesh)info.GetValue("mSilverbackMesh", typeof(Mesh));
     mBaboonMesh          = (Mesh)info.GetValue("mBaboonMesh", typeof(Mesh));
     mCapuchinMesh        = (Mesh)info.GetValue("mCapuchinMesh", typeof(Mesh));
     mOrangUtanMesh       = (Mesh)info.GetValue("mOrangUtanMesh", typeof(Mesh));
     mGibbonMesh          = (Mesh)info.GetValue("mGibbonMesh", typeof(Mesh));
     mChimpanezzeMesh     = (Mesh)info.GetValue("mChimpanezzeMesh", typeof(Mesh));
     mHutMesh             = (Mesh)info.GetValue("mHutMesh", typeof(Mesh));
     mLumberjackMesh      = (Mesh)info.GetValue("mLumberjackMesh", typeof(Mesh));
     mDoubleAxeKillerMesh = (Mesh)info.GetValue("mDoubleAxeKillerMesh", typeof(Mesh));
     mAxeMesh             = (Mesh)info.GetValue("mAxeMesh", typeof(Mesh));
     mHuts     = (List <Hut>)info.GetValue("mHuts", typeof(List <Hut>));
     mEditMode = (bool)info.GetValue("mEditMode", typeof(bool));
 }
Example #2
0
        public OrangUtan(Mesh m, Terrain terrain, Silverback silverBack, Scene scene, ref Random rand)
        {
            IsApe = true;

            HP        = 150;
            mMaxHP    = HP;
            mDamage   = 6;
            mRange    = 2;
            mCoolDown = 1200;
            IsAlive   = true;
            IsHealer  = false;
            Actor     = new Actor(m, this);
            Actor.mAnimator.SetStandardAnimation("idle");
            mRandom                 = rand;
            mIsAttacking            = false;
            mHasAttacked            = false;
            mScene                  = scene;
            mQuadTree               = scene.mQuadTree;
            mTimeElapsed            = 0;
            mInRangeActors          = new List <Actor>();
            mSilverback             = silverBack;
            mTerrain                = terrain;
            Actor.ModelMatrix       = Matrix.CreateTranslation(GenerateSilverbackVector());
            mTargetPosition         = new Vector3(0.0f);
            mDirection              = new Vector2(0.0f);
            mLastSilverbackLocation = mSilverback.Actor.ModelMatrix.Translation;
            IsMoving                = false;
        }
        public DoubleAxeKiller(Mesh m, Terrain terrain, QuadTree <Actor> quadTree, Vector3 hutPosition, float innerRange, float outerRange, Scene scene, Silverback silver)
        {
            IsApe       = false;
            mSilverback = silver;

            mQuadTree = quadTree;
            IsAlive   = true;
            HP        = 250;
            mMaxHP    = HP;
            mDamage   = 12;
            mCoolDown = 1000;
            mRange    = 8;
            mView     = 8;
            Actor     = new Actor(m, this);
            Actor.mAnimator.SetStandardAnimation("idle");
            mTerrain          = terrain;
            mIsAttacked       = false;
            IsHealer          = false;
            mTimeHighlighted  = 0;
            mHutPosition      = hutPosition;
            mInnerRange       = innerRange;
            mOuterRange       = outerRange;
            mScene            = scene;
            Actor.ModelMatrix = Matrix.CreateTranslation(GetOffsetInRange(innerRange, outerRange) + hutPosition);

            // Lets check if we can spawn there
            while (true)
            {
                var nearby = mQuadTree.QueryRectangle(Actor.mBoundingRectangle.GetAxisAlignedRectangle(1));

                bool collides = false;

                foreach (var actor in nearby)
                {
                    if (actor.mBoundingRectangle.IntersectsRectangle(Actor.mBoundingRectangle, true))
                    {
                        collides = true;
                    }
                }

                if (!collides)
                {
                    break;
                }
                else
                {
                    Actor.ModelMatrix = Matrix.CreateTranslation(GetOffsetInRange(innerRange, outerRange) + hutPosition);
                }
            }

            mHasAttacked = false;
            IsMoving     = false;
        }
Example #4
0
 public Hut(SerializationInfo info, StreamingContext context)
 {
     mNumLumberjacks        = (int)info.GetValue("mNumLumberjacks", typeof(int));
     mSpawned               = (bool)info.GetValue("mSpawned", typeof(bool));
     mScene                 = (Scene)info.GetValue("mScene", typeof(Scene));
     mLumberjackMesh        = (Mesh)info.GetValue("mLumberjackMesh", typeof(Mesh));
     mDoubleAxeKillerMesh   = (Mesh)info.GetValue("mDoubleAxeKillerMesh", typeof(Mesh));
     mAxeMesh               = (Mesh)info.GetValue("mAxeMesh", typeof(Mesh));
     mSilverback            = (Silverback)info.GetValue("mSilverback", typeof(Silverback));
     mDistanceSilverbackHut = (float)info.GetValue("mDistanceSilverbackHut", typeof(float));
     mWasInInnerRange       = (bool)info.GetValue("mWasInInnerRange", typeof(bool));
     mLumberjacks           = (List <Lumberjack.Lumberjack>)info.GetValue("mLumberjacks", typeof(List <Lumberjack.Lumberjack>));
     mDoubleAxeKillers      = (List <DoubleAxeKiller>)info.GetValue("mDoubleAxeKillers", typeof(List <DoubleAxeKiller>));
     HP              = (int)info.GetValue("HP", typeof(int));
     IsAlive         = (bool)info.GetValue("IsAlive", typeof(bool));
     Actor           = (Actor)info.GetValue("Actor", typeof(Actor));
     Name            = (string)info.GetValue("Name", typeof(string));
     HasSoundEmitter = (bool)info.GetValue("HasSoundEmitter", typeof(bool));
 }
Example #5
0
        public Hut(Mesh hut, Mesh lumberjack, Mesh doubleAxeKiller, Mesh axeMesh, Silverback silverback, Scene scene, int hp, float innerRange, float outerRange, bool techdemo)
        {
            mTechDemo = techdemo;
            mId       = mAmount++;

            // HP of the hut are equal to the number of the lumberjacks that were spawned at this hut.
            // Each time one of the spawned lumberjacks dies, the hut loses 1 HP.
            // The number of lumberjacks that a hut can spawn should be dynamic based on the level (different levels could allow the player
            // to have a different number of apes to summon)
            HP                   = hp;
            mSpawned             = false;
            mSilverback          = silverback;
            mLumberjackMesh      = lumberjack;
            mDoubleAxeKillerMesh = doubleAxeKiller;
            mAxeMesh             = axeMesh;
            mScene               = scene;
            Actor                = new Actor(hut, this);

            mInnerRange = innerRange;
            mOuterRange = outerRange;

            mLumberjacks      = new List <Lumberjack.Lumberjack>();
            mDoubleAxeKillers = new List <DoubleAxeKiller>();
        }
Example #6
0
        public void LoadContent(GraphicsDeviceManager deviceManager,
                                ContentManager contentManager,
                                int windowWidth,
                                int windowHeight)
        {
            var currentDirectoryPath = Directory.GetCurrentDirectory();

            Directory.SetCurrentDirectory("../../../../Content");

            var graphicsDevice = deviceManager.GraphicsDevice;

            // Create a new content manager so we can unload all its content later
            mContentManager = new ContentManager(contentManager.ServiceProvider, contentManager.RootDirectory);


            mSpriteBatch = new SpriteBatch(graphicsDevice);

            var font        = mContentManager.Load <SpriteFont>("Font");
            var modelLoader = new ModelLoader(graphicsDevice);

            var texture2D = UIv2.Menu.CreateTexture2D(graphicsDevice,
                                                      50,
                                                      30,
                                                      pixel => Color.Black);

            mMenu = new UIv2.Menu(graphicsDevice, 0, 0, 100, 4);
            mMenu.NonSolid();
            mLabel = new UIv2.Components.Label(graphicsDevice, 0, 0, 25, 100, "", font, Color.Orange);
            mLabel.AddTo(mMenu);

            var backButton = new UIv2.Components.Button(graphicsDevice, 90, 0, 10, 100, texture2D, "Back", font, Color.White);

            backButton.AddTo(mMenu);

            backButton.AddListener(MouseButtons.Left, InputState.Pressed, () =>
            {
                ScreenManager.Remove(this);
                IsVisible = false;
            });

            mRenderTarget = new RenderTarget(graphicsDevice,
                                             Options.ResolutionWidth,
                                             Options.ResolutionHeight,
                                             1);
            mMasterRenderer = new MasterRenderer(graphicsDevice, mContentManager)
            {
                DebugMode = false
            };

            mCamera = new Camera(farPlane: Options.ViewingDistance,
                                 nearPlane: 0.5f,
                                 thirdPerson: true,
                                 location: new Vector3(0.0f, 0.0f, -110.0f));
            mCameraHandler = new CameraHandler(mCamera, 4.0f, 2.0f, .3f);

            mScene = new Scene();

            var staticObjectsRectangles = new List <CollisionRectangle>();

            mScene.mQuadTree = new QuadTree <Actor>(new Rectangle(-128, -128, 256, 256), 4, 10);

            mScene.mTerrain = new Terrain(mContentManager,
                                          graphicsDevice,
                                          "Terrain/level1 heightmap.png",
                                          "Terrain/techdemoTexture.png");
            mScene.Add(mScene.mTerrain);

            var obstacleMesh = modelLoader.LoadMesh("Mesh/beerbottle2.obj");

            var random = new Random();

            for (var i = 0; i < ObstacleCount; i++)
            {
                var x = (2.0f * (float)random.NextDouble() - 1.0f) * ObstacleRadius;
                var z = (2.0f * (float)random.NextDouble() - 1.0f) * ObstacleRadius;

                var vector = new Vector3(x, 0.0f, z) + new Vector3(20.0f, 0.0f, -100.0f);

                vector.Y = mScene.mTerrain.GetHeight(vector);

                var actor = new Actor(obstacleMesh)
                {
                    ModelMatrix = Matrix.CreateTranslation(vector)
                };

                mScene.Add(actor);
                mScene.mQuadTree.Insert(actor, actor.mBoundingRectangle.GetAxisAlignedRectangle(1));
                staticObjectsRectangles.Add(actor.mBoundingRectangle);
            }

            mScene.mVisibilityGraph = new Pathfinding.VisibilityGraph(staticObjectsRectangles, new Rectangle(-128, -128, 256, 256), 0.0f, false);

            var hutMesh = modelLoader.LoadMesh("Mesh/spawningcabin_scaled 0.015.fbx");

            var lumberjackMesh = modelLoader.LoadMesh("Mesh/lumberjack_minimal_noanimation.obj");

            var doubleAxeKillerMesh = modelLoader.LoadMesh("Mesh/lumberjack_distance_idle.fbx");

            modelLoader.LoadAnimation(doubleAxeKillerMesh, "Mesh/lumberjack_distance_walk.fbx");
            modelLoader.LoadAnimation(doubleAxeKillerMesh, "Mesh/lumberjack_distance_hit.fbx");
            modelLoader.LoadAnimation(doubleAxeKillerMesh, "Mesh/lumberjack_distance_run.fbx");

            var axeMesh = modelLoader.LoadMesh("Mesh/axe.fbx");

            var silverbackMesh = modelLoader.LoadMesh("Mesh/gorilla_idle.fbx");

            modelLoader.LoadAnimation(silverbackMesh, "Mesh/gorilla_walking.fbx");
            modelLoader.LoadAnimation(silverbackMesh, "Mesh/gorilla_smash.fbx");

            var capuchinMesh = modelLoader.LoadMesh("Mesh/kapuziner_idle.fbx");

            modelLoader.LoadAnimation(capuchinMesh, "Mesh/kapuziner_walk.fbx");
            modelLoader.LoadAnimation(capuchinMesh, "Mesh/kapuziner_heal.fbx");

            mSilverback = new Silverback(new Vector3(0.0f, 0.0f, -110.0f), new Vector2(0.0f), silverbackMesh);
            mScene.Add(mSilverback);

            var otherSilverback = new Silverback(new Vector3(0.0f, 0.0f, -110.0f), new Vector2(0.0f), silverbackMesh);

            mSubApe = new Capuchin(capuchinMesh, mScene.mTerrain, otherSilverback, mScene, ref random);
            mScene.Add(mSubApe);

            var hut = new Hut(hutMesh, lumberjackMesh, doubleAxeKillerMesh, axeMesh, mSilverback, mScene, 1000, 100.0f, 110.0f, true);

            mScene.Add(hut);

            mScene.mPostProcessing.mBloom.Activated = false;
            mScene.mPostProcessing.mFxaa.Activated  = false;
            mScene.mSky.Light.mShadow.mActivated    = false;

            mCamera.UpdatePerspective();

            Directory.SetCurrentDirectory(currentDirectoryPath);
        }
Example #7
0
        public Level(ContentManager contentManager, SoundManager soundManager, GraphicsDevice device, bool editMode) : base()
        {
            mContentManager = contentManager;
            mSoundManager   = soundManager;
            mDevice         = device;
            mEditMode       = editMode;

            var currentDirectoryPath = Directory.GetCurrentDirectory();

            if (!currentDirectoryPath.EndsWith("Content") && !currentDirectoryPath.EndsWith("Content/") &&
                !currentDirectoryPath.EndsWith("Content\\"))
            {
                Directory.SetCurrentDirectory("../../../../Content");
            }

            mModelLoader = new ModelLoader(device);
            mQuadTree    = new QuadTree <Actor>(new Rectangle(-128, -128, 256, 256), 4, 7);
            // Load silverback
            mSilverback           = new Silverback(new Vector3(0.0f), new Vector2(0.0f), mModelLoader.LoadMesh("Mesh/gorilla_idle.fbx"));
            mSilverback.mQuadTree = mQuadTree;

            mHutMesh    = mModelLoader.LoadMesh("Mesh/spawningcabin_scaled 0.015.fbx");
            mHuts       = new List <Hut>();
            Hut.mAmount = 0;

            mGlobalSoundSourceBuffer    = new AudioBuffer("Audio/ForestSoundMono.wav");
            mGlobalSoundSource          = new AudioSource(mGlobalSoundSourceBuffer);
            mGlobalSoundSource.Relative = true;

            mSoundManager.AddSound(mGlobalSoundSource);

            mInitialSilverbackLocation = new Vector3(0.0f);

            if (!mEditMode)
            {
                mSilverback.Actor.mAnimator.SetStandardAnimation("idle");
                mModelLoader.LoadAnimation(mSilverback.Actor.mMesh, "Mesh/gorilla_walking.fbx");
                mModelLoader.LoadAnimation(mSilverback.Actor.mMesh, "Mesh/gorilla_smash.fbx");
                Add(mSilverback);
                mQuadTree.Insert(mSilverback.Actor, mSilverback.Actor.mBoundingRectangle.GetAxisAlignedRectangle(1));

                // Load all the other meshes
                // Load Lumberjack mesh
                mLumberjackMesh = mModelLoader.LoadMesh("Mesh/lumberjack_idle.fbx");
                mModelLoader.LoadAnimation(mLumberjackMesh, "Mesh/lumberjack_walk.fbx");
                mModelLoader.LoadAnimation(mLumberjackMesh, "Mesh/lumberjack_hit.fbx");
                mModelLoader.LoadAnimation(mLumberjackMesh, "Mesh/lumberjack_run.fbx");

                mLumberjacks = new ActorBatch(mLumberjackMesh, true);
                mActorBatches.Add(mLumberjacks);

                // Load DoubleAxeKiller mesh
                mDoubleAxeKillerMesh = mModelLoader.LoadMesh("Mesh/lumberjack_distance_idle.fbx");
                mModelLoader.LoadAnimation(mDoubleAxeKillerMesh, "Mesh/lumberjack_distance_walk.fbx");
                mModelLoader.LoadAnimation(mDoubleAxeKillerMesh, "Mesh/lumberjack_distance_hit.fbx");
                mModelLoader.LoadAnimation(mDoubleAxeKillerMesh, "Mesh/lumberjack_distance_run.fbx");

                mDoubleAxeKillers = new ActorBatch(mDoubleAxeKillerMesh, true);
                mActorBatches.Add(mDoubleAxeKillers);

                // Load Baboon Mesh
                mBaboonMesh = mModelLoader.LoadMesh("Mesh/gibbon_idle.fbx");
                mModelLoader.LoadAnimation(mBaboonMesh, "Mesh/gibbon_walk.fbx");
                mModelLoader.LoadAnimation(mBaboonMesh, "Mesh/gibbon_singing.fbx");

                mBaboonBatch = new ActorBatch(mBaboonMesh, true);
                mActorBatches.Add(mBaboonBatch);

                // Load Capuchin Mesh
                mCapuchinMesh = mModelLoader.LoadMesh("Mesh/kapuziner_idle.fbx");
                mModelLoader.LoadAnimation(mCapuchinMesh, "Mesh/kapuziner_walk.fbx");
                mModelLoader.LoadAnimation(mCapuchinMesh, "Mesh/kapuziner_heal.fbx");

                mCapuchinBatch = new ActorBatch(mCapuchinMesh, true);
                mActorBatches.Add(mCapuchinBatch);

                // Load Chimpanezze Mesh
                mChimpanezzeMesh = mModelLoader.LoadMesh("Mesh/chimp_idle.fbx");
                mModelLoader.LoadAnimation(mChimpanezzeMesh, "Mesh/chimp_walk.fbx");
                mModelLoader.LoadAnimation(mChimpanezzeMesh, "Mesh/chimp_attack.fbx");

                mChimpanezzeBatch = new ActorBatch(mChimpanezzeMesh, true);
                mActorBatches.Add(mChimpanezzeBatch);

                // Load Gibbon Mesh
                mGibbonMesh = mModelLoader.LoadMesh("Mesh/Gibbon_idle.fbx");
                mModelLoader.LoadAnimation(mGibbonMesh, "Mesh/Gibbon_walk.fbx");
                mModelLoader.LoadAnimation(mGibbonMesh, "Mesh/Gibbon_singing.fbx");

                mGibbonBatch = new ActorBatch(mGibbonMesh, true);
                mActorBatches.Add(mGibbonBatch);


                // Load Orang Utan Mesh
                mOrangUtanMesh = mModelLoader.LoadMesh("Mesh/orangutan_idle.fbx");
                mModelLoader.LoadAnimation(mOrangUtanMesh, "Mesh/orangutan_walk.fbx");
                mModelLoader.LoadAnimation(mOrangUtanMesh, "Mesh/orangutan_throw.fbx");

                mOrangutanBatch = new ActorBatch(mOrangUtanMesh, true);
                mActorBatches.Add(mOrangutanBatch);

                mAxeMesh = mModelLoader.LoadMesh("Mesh/axe.fbx");
            }

            mPostProcessing.mBloom.Activated = Options.Bloom;
            mPostProcessing.mBloom.mPasses   = Options.BloomPasses;

            mPostProcessing.mFxaa.Activated = Options.Fxaa;

            mSky.Light.mShadow.mActivated  = Options.Shadows;
            mSky.Light.mShadow.mDistance   = Options.ShadowDistance;
            mSky.Light.mShadow.mNumSamples = Options.ShadowSamples;
            mSky.Light.mShadow.mBias       = Options.ShadowBias;

            Directory.SetCurrentDirectory(currentDirectoryPath);
        }
        public static string ReinitialseSavegame(ref HudScreen hudScreen)
        {
            if (!File.Exists(PauseScreen.GetSavedGamesPath() + "\\Camera.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\CapuchinPositions.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\ChimpPositions.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\GibbonPositions.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\HudScreen.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\Huts.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\Level.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\OrangPositions.xml") ||
                !File.Exists(PauseScreen.GetSavedGamesPath() + "\\Silverback.xml"))
            {
                return("There are missing files");
            }

            var serializer = new XmlSerializer(typeof(Camera));

            using (var fs = File.OpenRead(GetSavedGamesPath() + "\\Camera.xml"))
            {
                Camera camera = null;
                try
                {
                    camera = (Camera)serializer.Deserialize(fs);
                }
                catch (Exception ex)
                {
                    return(ex.ToString());
                }

                hudScreen.mGameScreen.mCamera = camera;
                hudScreen.mGameScreen.mCameraHandler.mCamera = camera;
                fs.Close();
            }

            serializer = new XmlSerializer(typeof(Level), new XmlRootAttribute("Level"));

            using (var fs = File.OpenRead(GetSavedGamesPath() + "\\Level.xml"))
            {
                Level level = null;
                try
                {
                    level = (Level)serializer.Deserialize(fs);
                }
                catch (Exception ex)
                {
                    return(ex.ToString());
                }
                hudScreen.mGameScreen.mLevel.Dispose();
                hudScreen.mGameScreen.mLevel = level;
                hudScreen.mGameScreen.mLevel?.Load(level?.mLevelFilename);
                fs.Close();
            }

            if (hudScreen.mGameScreen.mLevel != null)
            {
                var oldSilverback = hudScreen.mGameScreen.mLevel.mSilverback;
            }

            serializer = new XmlSerializer(typeof(Silverback));

            using (var fs = File.OpenRead(PauseScreen.GetSavedGamesPath() + "\\Silverback.xml"))
            {
                Silverback silverback = null;
                try
                {
                    silverback = (Silverback)serializer.Deserialize(fs);
                }
                catch (Exception ex)
                {
                    return(ex.ToString());
                }

                if (hudScreen.mGameScreen.mLevel != null)
                {
                    if (silverback != null)
                    {
                        hudScreen.mGameScreen.mLevel.mSilverback.HP = silverback.HP;
                    }
                }
                fs.Close();
            }

            serializer = new XmlSerializer(typeof(List <Matrix>));

            using (var fs = File.OpenRead(PauseScreen.GetSavedGamesPath() + "\\CapuchinPositions.xml"))
            {
                var positions = new List <Matrix>();
                try
                {
                    positions = (List <Matrix>)serializer.Deserialize(fs);


                    var rand = new Random();

                    foreach (var matrix in positions)
                    {
                        if (hudScreen.mGameScreen.mLevel != null)
                        {
                            var mcapuchin = new Capuchin(hudScreen.mGameScreen.mLevel.mCapuchinMesh,
                                                         hudScreen.mGameScreen.mLevel.mTerrain,
                                                         hudScreen.mGameScreen.mLevel.mSilverback,
                                                         hudScreen.mGameScreen.mLevel,
                                                         ref rand);
                            mcapuchin.Actor.ModelMatrix = matrix;
                            hudScreen.mGameScreen.mLevel.Add(mcapuchin);
                        }

                        LumberChoice.AddApe(3);
                    }
                }
                catch (Exception)
                {
                    // ignored
                }

                fs.Close();
            }

            using (var fs = File.OpenRead(PauseScreen.GetSavedGamesPath() + "\\GibbonPositions.xml"))
            {
                var positions = new List <Matrix>();
                try
                {
                    positions = (List <Matrix>)serializer.Deserialize(fs);


                    var rand = new Random();

                    foreach (var matrix in positions)
                    {
                        if (hudScreen.mGameScreen.mLevel != null)
                        {
                            var gibbon = new Gibbon(hudScreen.mGameScreen.mLevel.mGibbonMesh,
                                                    hudScreen.mGameScreen.mLevel.mTerrain,
                                                    hudScreen.mGameScreen.mLevel.mSilverback,
                                                    hudScreen.mGameScreen.mLevel,
                                                    ref rand);
                            gibbon.Actor.ModelMatrix = matrix;
                            hudScreen.mGameScreen.mLevel.Add(gibbon);
                        }

                        LumberChoice.AddApe(4);
                    }
                }
                catch (Exception)
                {
                    // ignored
                }

                fs.Close();
            }

            using (var fs = File.OpenRead(PauseScreen.GetSavedGamesPath() + "\\ChimpPositions.xml"))
            {
                var positions = new List <Matrix>();
                try
                {
                    positions = (List <Matrix>)serializer.Deserialize(fs);


                    var rand = new Random();

                    foreach (var matrix in positions)
                    {
                        if (hudScreen.mGameScreen.mLevel != null)
                        {
                            var chimp = new Chimpanezee(hudScreen.mGameScreen.mLevel.mChimpanezzeMesh,
                                                        hudScreen.mGameScreen.mLevel.mTerrain,
                                                        hudScreen.mGameScreen.mLevel.mSilverback,
                                                        hudScreen.mGameScreen.mLevel,
                                                        ref rand);
                            chimp.Actor.ModelMatrix = matrix;
                            hudScreen.mGameScreen.mLevel.Add(chimp);
                        }
                        LumberChoice.AddApe(1);
                    }
                }
                catch (Exception)
                {
                    // ignored
                }

                fs.Close();
            }

            using (var fs = File.OpenRead(PauseScreen.GetSavedGamesPath() + "\\OrangPositions.xml"))
            {
                var positions = new List <Matrix>();
                try
                {
                    positions = (List <Matrix>)serializer.Deserialize(fs);


                    var rand = new Random();

                    foreach (var matrix in positions)
                    {
                        if (hudScreen.mGameScreen.mLevel != null)
                        {
                            var orang = new OrangUtan(hudScreen.mGameScreen.mLevel.mOrangUtanMesh,
                                                      hudScreen.mGameScreen.mLevel.mTerrain,
                                                      hudScreen.mGameScreen.mLevel.mSilverback,
                                                      hudScreen.mGameScreen.mLevel,
                                                      ref rand);
                            orang.Actor.ModelMatrix = matrix;
                            hudScreen.mGameScreen.mLevel.Add(orang);
                        }

                        LumberChoice.AddApe(2);
                    }
                }
                catch (Exception)
                {
                    // ignored
                }

                fs.Close();
            }


            serializer = new XmlSerializer(typeof(List <Hut>));

            using (var fs = File.OpenRead(PauseScreen.GetSavedGamesPath() + "\\Huts.xml"))
            {
                try
                {
                    Hut.mAmount = 0;
                    var huts = (List <Hut>)serializer.Deserialize(fs) ?? new List <Hut>();
                    if (hudScreen.mGameScreen.mLevel != null)
                    {
                        // hudScreen.mGameScreen.mLevel.mHuts = hudScreen.mGameScreen.mLevel.mHuts.Except(huts).ToList();
                        if (hudScreen.mGameScreen.mLevel != null)
                        {
                            // Remove dead huts from ...mLevel.mHuts

                            var tmpHuts = new List <Hut>();

                            // Yeah this is bad
                            foreach (var h in huts)
                            {
                                foreach (var hut in hudScreen.mGameScreen.mLevel.mHuts)
                                {
                                    if (h.mId == hut.mId)
                                    {
                                        tmpHuts.Add(hut);
                                    }
                                }
                            }

                            hudScreen.mGameScreen.mLevel.mHuts.Clear();
                            hudScreen.mGameScreen.mLevel.mHuts.AddRange(tmpHuts);

                            var screen        = hudScreen;
                            var hutActorBatch = hudScreen.mGameScreen.mLevel.mActorBatches.Find(ele =>
                                                                                                ele.mMesh == screen.mGameScreen.mLevel.mHutMesh);

                            var tmpActors = new List <Actor>();

                            foreach (var actor in hutActorBatch.mActors)
                            {
                                foreach (var hut in hudScreen.mGameScreen.mLevel.mHuts)
                                {
                                    if (hut.Actor == actor)
                                    {
                                        tmpActors.Add(actor);
                                    }
                                }
                            }

                            hutActorBatch.mActors.Clear();
                            hutActorBatch.mActors.AddRange(tmpActors);


                            var i = 0;
                            foreach (var hut in hudScreen.mGameScreen.mLevel.mHuts)
                            {
                                // var contains = false;
                                // foreach (var h in huts)
                                // {
                                //     if (h.mId == hut.mId)
                                //     {
                                //         contains = true;
                                //     }
                                // }
                                //
                                // if (!contains)
                                // {
                                //     hudScreen.mGameScreen.mLevel.mHuts.Remove(hut);
                                //     continue;
                                // }

                                hut.mSilverback          = hudScreen.mGameScreen.mLevel.mSilverback;
                                hut.mAxeMesh             = hudScreen.mGameScreen.mLevel.mAxeMesh;
                                hut.mDoubleAxeKillerMesh = hudScreen.mGameScreen.mLevel.mDoubleAxeKillerMesh;
                                hut.mScene          = hudScreen.mGameScreen.mLevel;
                                hut.mLumberjackMesh = hudScreen.mGameScreen.mLevel.mLumberjackMesh;
                                hut.HP = huts[i++].HP;
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    // ignored
                }

                fs.Close();
            }
            Hut.mAmount = 0;

            return("");
        }