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)); }
/// <summary> /// Adds an actor to the scene. /// </summary> /// <param name="actor"> The actor which you want to add to the scene</param> public void Add(Actor actor) { // Search for the ActorBatch var actorBatch = mActorBatches.Find(ele => ele.mMesh == actor.mMesh); // If there is no ActorBatch which already uses the mesh of the Actor we // need to create a new ActorBatch and add it to mActorBatches if (actorBatch == null) { actorBatch = new ActorBatch(actor.mMesh); mActorBatches.Add(actorBatch); } actorBatch.Add(actor); }
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 void RemoveActor(ActorBatch actorbatch, Actor actor) { actorbatch.mActors.Remove(actor); }
public void LoadContent(GraphicsDeviceManager deviceManager, ContentManager contentManager, int windowWidth, int windowHeight) { mScreenWidth = windowWidth; mScreenHeight = windowHeight; //Load SoundEffects mClickSound = contentManager.Load <SoundEffect>("Audio/click2"); mGraphicsDevice = deviceManager.GraphicsDevice; mPauseScreen = new PauseScreen(this); mWinScreen = new WinScreen(this); mLoseScreen = new LoseScreen(this); mGameScreen = new GameScreen(mLevelPath); ScreenManager.Add(mGameScreen); mTotalCunter = mGameScreen.mLevel.mSpawnablePrimatesCount; mSpriteBatch = new SpriteBatch(mGraphicsDevice); // Load font var font = contentManager.Load <SpriteFont>("Font"); var subHeaderFont = contentManager.Load <SpriteFont>("SubHeaderFont"); IsVisible = true; // Instantiate a new menu mMenuList = new List <UIv2.Menu>(); mButtonTexture = UIv2.Menu.CreateTexture2D(mGraphicsDevice, 200, 30, pixel => Color.Black); var textureTransparent = UIv2.Menu.CreateTexture2D(mGraphicsDevice, 10, 10, pixel => Color.Transparent); //Highlighted Button mHighlightedButtonTexture = UIv2.Menu.CreateTexture2D(mGraphicsDevice, 200, 30, pixel => Color.Orange); var menu = new UIv2.Menu(mGraphicsDevice, 0, 95, 100, 5); menu.WithBackground(UIv2.Menu.CreateTexture2D(deviceManager.GraphicsDevice, windowWidth, 200, pixel => new Color(0.0f, 0.0f, 0.0f, 0.15f)), 0, 0, 100, 100); mMenuList.Add(menu); mCounterMenu = new UIv2.Menu(mGraphicsDevice, 40, 15, 20, 4); mCounterMenu.WithBackground(UIv2.Menu.CreateTexture2D(deviceManager.GraphicsDevice, windowWidth, 200, pixel => new Color(0.0f, 0.0f, 0.0f, 0.15f)), 0, 0, 100, 100); mCounterMenu.NonSolid(); mMenuList.Add(mCounterMenu); var counterLabel = new UIv2.Components.Label(mGraphicsDevice, 0, 0, 100, 100, "Available apes to spawn: " + mGameScreen.mLevel.mSpawnablePrimatesCount, font, Color.White); counterLabel.AddTo(mCounterMenu); var pauseButton = new UIv2.Components.Button(mGraphicsDevice, 90, 0, 7, 100, mButtonTexture, "Pause", font, Color.White); pauseButton.AddTo(menu); pauseButton.AddListener(MouseButtons.Left, InputState.Pressed, () => { SoundManager.AddSound(mClickSound); ScreenManager.Add(mPauseScreen); mGameScreen.mCameraHandler.Lock(); IsVisible = false; mWasVisible = false; mGameScreen.IsVisible = false; }); mHPLabel = new UIv2.Components.Label(mGraphicsDevice, 0, 0, 45, 100, "HP: ", font, Color.White); mHPLabel.AddTo(menu); mTimeLabel = new UIv2.Components.Label(mGraphicsDevice, 0, 0, 10, 100, "", font, Color.White); mTimeLabel.AddTo(menu); var levelLabel = new UIv2.Components.Label(mGraphicsDevice, 10, 0, 7, 100, "Level: Tutorial", font, Color.White); levelLabel.AddTo(menu); for (var i = 0; i < 0; i++) { var morang = new OrangUtan(mGameScreen.mLevel.mOrangUtanMesh, mGameScreen.mLevel.mTerrain, mGameScreen.mLevel.mSilverback, mGameScreen.mLevel, ref mRandom); //morang.mScene = mGameScreen.mLevel; mGameScreen.mLevel.Add(morang); } // Create selection button for Baboon mApe1Button = new UIv2.Components.Button(mGraphicsDevice, 30, 0, 7, 100, mButtonTexture, "Orang", font, Color.White); mApe1Button.AddTo(menu); mApe1Button.AddListener(MouseButtons.Left, InputState.Pressed, () => { SoundManager.AddSound(mClickSound); if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { if (mGameScreen.mLevel.mOrangutanBatch.mActors.Count > 0) { UnHiglightSelectedActorBatch(); mActorBatch = mGameScreen.mLevel.mOrangutanBatch; mHighlitedButton = mApe1Button; HighlightSelectedActorBatch(); } } else if (mGameScreen.mLevel.mSpawnablePrimatesCount > 0) { mGameScreen.mLevel.mSpawnablePrimatesCount--; mOrangCounter++; counterLabel.Text = "Available apes to spawn: " + mGameScreen.mLevel.mSpawnablePrimatesCount; var morang = new OrangUtan(mGameScreen.mLevel.mOrangUtanMesh, mGameScreen.mLevel.mTerrain, mGameScreen.mLevel.mSilverback, mGameScreen.mLevel, ref mRandom); //morang.mScene = mGameScreen.mLevel; mGameScreen.mLevel.Add(morang); LumberChoice.AddApe(2); } if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { mCounterMenu.mIsVisible = false; DisableUnusedApeSelectorButtons(); } }); // Create selection button for Capuchin mApe2Button = new UIv2.Components.Button(mGraphicsDevice, 41, 0, 7, 100, mButtonTexture, "Capuchin", font, Color.White); mApe2Button.AddTo(menu); mApe2Button.AddListener(MouseButtons.Left, InputState.Pressed, () => { SoundManager.AddSound(mClickSound); if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { if (mGameScreen.mLevel.mCapuchinBatch.mActors.Count > 0) { UnHiglightSelectedActorBatch(); mActorBatch = mGameScreen.mLevel.mCapuchinBatch; mHighlitedButton = mApe2Button; HighlightSelectedActorBatch(); } } else if (mGameScreen.mLevel.mSpawnablePrimatesCount > 0) { mCapuchinCounter++; counterLabel.Text = "Available apes to spawn: " + mGameScreen.mLevel.mSpawnablePrimatesCount; mGameScreen.mLevel.mSpawnablePrimatesCount--; var mcapuchin = new Capuchin(mGameScreen.mLevel.mCapuchinMesh, mGameScreen.mLevel.mTerrain, mGameScreen.mLevel.mSilverback, mGameScreen.mLevel, ref mRandom); mGameScreen.mLevel.Add(mcapuchin); LumberChoice.AddApe(3); } if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { mCounterMenu.mIsVisible = false; DisableUnusedApeSelectorButtons(); } }); // Create selection button for Chimpaneeze mApe3Button = new UIv2.Components.Button(mGraphicsDevice, 52, 0, 7, 100, mButtonTexture, "Chimp", font, Color.White); mApe3Button.AddTo(menu); mApe3Button.AddListener(MouseButtons.Left, InputState.Pressed, () => { SoundManager.AddSound(mClickSound); if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { if (mGameScreen.mLevel.mChimpanezzeBatch.mActors.Count > 0) { UnHiglightSelectedActorBatch(); mActorBatch = mGameScreen.mLevel.mChimpanezzeBatch; mHighlitedButton = mApe3Button; HighlightSelectedActorBatch(); } } else if (mGameScreen.mLevel.mSpawnablePrimatesCount > 0) { mChimpCounter++; mGameScreen.mLevel.mSpawnablePrimatesCount--; counterLabel.Text = "Available apes to spawn: " + mGameScreen.mLevel.mSpawnablePrimatesCount; var mchimpanezee = new Chimpanezee(mGameScreen.mLevel.mChimpanezzeMesh, mGameScreen.mLevel.mTerrain, mGameScreen.mLevel.mSilverback, mGameScreen.mLevel, ref mRandom); mGameScreen.mLevel.Add(mchimpanezee); LumberChoice.AddApe(1); } if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { mCounterMenu.mIsVisible = false; DisableUnusedApeSelectorButtons(); } } ); // Create selection button for Gibbon mApe4Button = new UIv2.Components.Button(mGraphicsDevice, 63, 0, 7, 100, mButtonTexture, "Gibbon", font, Color.White); mApe4Button.AddTo(menu); mApe4Button.AddListener(MouseButtons.Left, InputState.Pressed, () => { SoundManager.AddSound(mClickSound); if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { if (mGameScreen.mLevel.mGibbonBatch.mActors.Count > 0) { UnHiglightSelectedActorBatch(); mActorBatch = mGameScreen.mLevel.mGibbonBatch; mHighlitedButton = mApe4Button; HighlightSelectedActorBatch(); } } else if (mGameScreen.mLevel.mSpawnablePrimatesCount > 0) { mGibbonCounter++; mGameScreen.mLevel.mSpawnablePrimatesCount--; counterLabel.Text = "Available apes to spawn: " + mGameScreen.mLevel.mSpawnablePrimatesCount; var mgibbon = new Gibbon(mGameScreen.mLevel.mGibbonMesh, mGameScreen.mLevel.mTerrain, mGameScreen.mLevel.mSilverback, mGameScreen.mLevel, ref mRandom); mGameScreen.mLevel.Add(mgibbon); LumberChoice.AddApe(4); } if (mGameScreen.mLevel.mSpawnablePrimatesCount == 0) { mCounterMenu.mIsVisible = false; DisableUnusedApeSelectorButtons(); } }); // Display the level text before the level starts if (mGameScreen.mLevel.mLevelStory != null) { mGameScreen.mCameraHandler.Lock(); var textMenu = new UIv2.Menu(mGraphicsDevice, 5, 5, 90, 90); textMenu.WithBackground(UIv2.Menu.CreateTexture2D(deviceManager.GraphicsDevice, 50, 30, pixel => new Color(0.0f, 0.0f, 0.0f, 0.15f)), 5, 5, 90, 90); var heading = new UIv2.Components.Label(mGraphicsDevice, 5, 5, 90, 15, mGameScreen.mLevel.mLevelTitle, subHeaderFont, Color.DarkSlateGray); heading.FontType = FontManager.FontType.Subheading; heading.AddTo(textMenu); var textLabel = new UIv2.Components.Label(mGraphicsDevice, 25, 28, 50, 35, mGameScreen.mLevel.mLevelStory, font, Color.White); textLabel.DisableAutobreak(); textLabel.AddTo(textMenu); mContinueLabel = new UIv2.Components.Label(mGraphicsDevice, 25, 80, 50, 10, "Press the left mouse button to continue", font, Color.White); mContinueLabel.AddTo(textMenu); var textButton = new UIv2.Components.Button(mGraphicsDevice, 0, 0, 100, 100, textureTransparent, "", font, Color.White); textButton.AddTo(textMenu); textButton.AddListener(MouseButtons.Left, InputState.Pressed, () => { menu.mIsVisible = true; mCounterMenu.mIsVisible = true; textMenu.mIsVisible = false; mGameScreen.mCameraHandler.Unlock(); }); mMenuList.Add(textMenu); menu.mIsVisible = false; mCounterMenu.mIsVisible = false; } mMenuList.Add(menu); }