/// <summary> /// Respawns the human into a specified quarter. /// </summary> /// <param name="targetQuarter">The destination quarter</param> public void RespawnInto(TownQuarter targetQuarter) { Position.Quarter.BeLeftBy(this); Position = new PositionInTown(targetQuarter, targetQuarter.GetRandomSquare(fillType => fillType == MapFillType.Road, point => point != targetQuarter.FlagPoint).ToVector2() * TownQuarter.SquareWidth); Position.Quarter.BeEnteredBy(this); health = 100; tasks.Clear(); }
/// <summary> /// Creates a new guard for this human. /// </summary> /// <param name="targetQuarter">Quarted that has to be guarded</param> /// <returns>The guard</returns> public Human CreateAllyGuard(TownQuarter targetQuarter) { PositionInTown pos = new PositionInTown(targetQuarter, targetQuarter.GetRandomSquare(x => x == MapFillType.Road).ToVector2() * TownQuarter.SquareWidth); Human guard = new Human(game, Content.AllyHumanModel, pos, 0, game.Drawer.WorldTransformMatrix); foreach (Human enemy in enemies) { guard.AddEnemy(enemy); } foreach (Human friend in friends) { guard.AddFriend(friend); } foreach (Human has in hasMeAsEnemy) { has.AddEnemy(guard); } guard.AddTask(new InfinityWalkingTask(guard, targetQuarter.GetRandomWalkingWaypoints())); foreach (GunType gt in game.GuardDefaultGuns) { guard.AddTool(new Gun(gt, gt.DefaultBulletCount, guard, game)); } return(guard); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { if (running) { using (Loading loadingForm = new Loading()) { GameTime gameTime = new GameTime(TimeSpan.Zero, TimeSpan.Zero); loadingForm.Show(); loadingForm.SetLabel("Loading graphics device tools..."); spriteBatch = new SpriteBatch(GraphicsDevice); loadingForm.SetLabel("Loading content..."); contentRepository.LoadContent(); loadingForm.SetLabel("Loading gun types..."); LoadGunTypes(); player = new Player(this); opponent = new Opponent(this); town = new Town(this, loadingForm); loadingForm.SetLabel("Loading player..."); loadingForm.SetValue(0); Point playerPoint = town.CurrentQuarter.GetRandomSquare(s => s == MapFillType.Sidewalk); PositionInTown playerPosition = new PositionInTown(town.CurrentQuarter, playerPoint.ToVector2() * TownQuarter.SquareWidth + Vector2.One * 0.5f * TownQuarter.SquareWidth); player.Load(contentRepository.Player, playerPosition, MathHelper.PiOver2, drawer.WorldTransformMatrix); town.CurrentQuarter.SpaceGrid.AddObject(player); town.CurrentQuarter.SetOwner(player, gameTime); player.AddEnemy(opponent); loadingForm.SetLabel("Loading opponent..."); loadingForm.SetValue(0); TownQuarter oppQuarter = (from q in town.Quarters where q != town.CurrentQuarter orderby random.Next() select q).First(); Point oppPoint = oppQuarter.GetRandomSquare(s => s == MapFillType.Sidewalk); PositionInTown oppPosition = new PositionInTown(oppQuarter, oppPoint.ToVector2() * TownQuarter.SquareWidth); opponent.Load(contentRepository.Opponent, oppPosition, 0, drawer.WorldTransformMatrix); oppQuarter.BeEnteredBy(opponent); oppQuarter.SetOwner(opponent, gameTime); opponent.AddEnemy(player); Components.Add(town); BulletVisualisation.Texture = Content.Load <Texture2D>("Textures/white"); backgroundSound = Content.Load <SoundEffect>("Sounds/background").CreateInstance(); loadingForm.SetLabel("Cleaning memory..."); loadingForm.SetValue(0); GC.Collect(); loadingForm.SetValue(100); loadingForm.SetLabel("Content loaded. Get ready to play!"); loadingForm.SetValue(100); loadingForm.Close(); backgroundSound.IsLooped = true; backgroundSound.Play(); drawer.ShowMessage(new GameTime(), String.Format("Wellcome in the game. You're in {0}.", player.Position.Quarter.Name)); } if (settings.Fullscreen) { graphics.ToggleFullScreen(); } } }