/// <summary> /// checks resources for the building and if the unit is places subscribe it to the map and create a new instance of the building to place another one. /// </summary> /// <param name="wh"></param> /// <param name="Position"></param> internal void Build(WorldHandler wh, Vector2 Position) { Wallet wallet = resources.Withdraw(SelectedBuild.Cost); if (SelectedBuild.worldComponent == null) { SelectedBuild.Subscribe((IBuildingObserver)this); } if (wallet != null) { if (wh.Place(SelectedBuild, Position)) { SelectedBuild.UpdatePosition(Game.GraphicsDevice, Position); SelectedBuild.PlacedTile(Game.GraphicsDevice); toBuild.Add(SelectedBuild); if (SelectedUnits != null) { foreach (IUnit unit in SelectedUnits) { if (unit is Civilian) { ((Civilian)unit).Build(SelectedBuild, world); ((Civilian)unit).QueueBuild(SelectedBuild); } } } } else { resources.Deposit(wallet); } } SelectBuild(SelectedBuild.NewInstace(SelectedBuild.block.texture, Position, SelectedBuild.Icon)); }
private void SetUpGame() { WinValue = 0; if (world != null) { world.ResetWorld(Game); } //Create a new world else { world = new WorldHandler(Game, "TempWorld"); } //318,98 - Temp spawn point until I randomize it Vector2 startPoint = new Vector2(318, 98); collision = new CollisionHandler(Game, world); world.AddCollision(collision); //Probably could be moved to a save file to setup templates for start #region Resource Setup //Initialize the new wallet to start with....this can probably be moved to a file Wallet startingResources = new Wallet(new Dictionary <IResource, float>() { { new Wood(), 500 }, { new Steel(), 500 }, { new Money(), 500 }, { new Likes(), 500 }, { new Iron(), 500 }, { new Energy(), 500 } }); #endregion #region util setup if (newGame) { //creates a new input handler instance input = InputDefinitions.CreateInput(Game); cam = new Camera(Game, input, world, startPoint); } #endregion projectileManager = new ProjectileManager(Game, cam, collision); #region componenets //Game components cc = new CommandComponent(Game, startingResources, world); process = new CommandProccesor(Game, new List <IUnit>(), world, input, cc, cam); overlay = new Overlay(Game, input, world, process); #endregion //Wave handler wave = new WaveManager(Game, world, projectileManager); //Adds a unit to start #region startUnits List <IUnit> units = new List <IUnit>(); units.Add(new Civilian("Base unit", new Vector2(1, 1), 100, 100, startPoint + new Vector2(4, 5), BaseUnitState.Idle, TextureValue.Civilian, TextureValue.Civilian, 1, projectileManager, cc.TeamStats).AddQueueables()); world.AddMob(units[0]); ((BasicUnit)units[0]).SetTeam(1); #endregion #region buildingPlacement #region Allies //Center Center center = new Center(TextureValue.Center, startPoint, TextureValue.CenterIcon, projectileManager, cc.TeamStats); center.AddQueueables(); center.SetTeam(cc.Team); center.SetSpawn(startPoint + center.Size + new Vector2(0, 1)); center.PlacedTile(GraphicsDevice); world.Place(center, startPoint); center.Subscribe((IBuildingObserver)cc); center.Damage(-5000); #endregion #region Enemies //Portal startPoint = new Vector2(82, 190); for (int i = 0; i < 3; i++) { Portal portal = new Portal(TextureValue.Portal, startPoint, TextureValue.Portal, projectileManager, wave.TeamStats, wave); startPoint += new Vector2(i * 8, 0); portal.SetTeam(cc.Team + 1); portal.SetSpawn(startPoint + portal.Size + new Vector2(0, 1)); portal.PlacedTile(GraphicsDevice); world.Place(portal, startPoint); portal.Subscribe((IBuildingObserver)cc); } #endregion #endregion CommandButton exit = new CommandButton(GraphicsDevice, new ExitGameCommand(), new Vector2(GraphicsDevice.Viewport.Width - 50, 0), TextureValue.None, new Point(50, 30)); exit.Scale = 1; exit.color = Color.SlateGray; exit.Text = "Exit"; exit.Draw(GraphicsDevice); overlay.AddComponent(exit); //Initializer overlay.Initialize(); newGame = false; }