private MainViewModel BuildMainDataContext() { var width = Properties.Settings.Default.EcosystemWidth; var height = Properties.Settings.Default.EcosystemHeight; // the event aggregator might be used by view models to inform of changes var eventaggregator = new EventAggregator(); var habitats = new Habitat[width, height]; var habitatViewModels = new List<List<HabitatViewModel>>(); for (var x = 0; x < width; x++) { habitatViewModels.Add(new List<HabitatViewModel>()); for (var y = 0; y < height; y++) { // initially set each habitat to have an unknown environment and no organism var environment = new Environment(Terrain.Unknown, false); var environmentViewModel = new EnvironmentViewModel(environment, eventaggregator); var organismViewModel = new OrganismViewModel(null, eventaggregator); var habitat = new Habitat(environment, null); var habitatViewModel = new HabitatViewModel(habitat, environmentViewModel, organismViewModel, eventaggregator); habitats[x, y] = habitat; habitatViewModels[x].Add(habitatViewModel); } } var ecosystem = new Ecosystem(habitats, new Dictionary<Organism, Habitat>()); var ecosystemViewModel = new EcosystemViewModel(ecosystem, habitatViewModels, eventaggregator); this.InitialiseTerrain(ecosystem); var initialOrganismCoordinates = this.InitialiseOrganisms(ecosystem); // TODO: do this in InitialiseOrganisms // boshed together so the organisms are visible before ecosystem is switched on the first time foreach (var organismCoordinate in initialOrganismCoordinates) { habitatViewModels[organismCoordinate.X][organismCoordinate.Y].RefreshOrganismViewModel(); } // TODO: setting up the summary view after organisms initialised... how to handle this nicely var organismViewModels = habitatViewModels.SelectMany(habitatViewModel => habitatViewModel) .Select(habitatViewModel => habitatViewModel.OrganismViewModel) .Where(organismViewModel => organismViewModel.HasOrganism).ToList(); var organismSummaryViewModel = new OrganismSummaryViewModel(ecosystem, organismViewModels, eventaggregator); var main = new Main(ecosystem); var mainViewModel = new MainViewModel(main, ecosystemViewModel, organismSummaryViewModel, eventaggregator); return mainViewModel; }
private IEnumerable<Coordinates> InitialiseOrganisms(Ecosystem ecosystem) { var waffleCoords = new Coordinates(2, 2); var wilberCoords = new Coordinates(2, 7); var lottyCoords = new Coordinates(7, 2); var louiseCoords = new Coordinates(7, 7); // place some organisms in the ecosystem ecosystem.AddOrganism(new Organism("Waffle", Color.White, true), waffleCoords); ecosystem.AddOrganism(new Organism("Wilber", Color.Black, true), wilberCoords); ecosystem.AddOrganism(new Organism("Lotty", Color.Lime, true), lottyCoords); ecosystem.AddOrganism(new Organism("Dr. Louise", Color.Orange, true), louiseCoords); return new List<Coordinates> { waffleCoords, wilberCoords, lottyCoords, louiseCoords }; }
private void InitialiseTerrain(Ecosystem ecosystem) { // apply a terrain for every habitat for (var x = 0; x < ecosystem.Width; x++) { for (var y = 0; y < ecosystem.Height; y++) { //ecosystem.SetTerrain(new Coordinates(x, y), Terrain.Something); } } ecosystem.Habitats[0, 0].HasNutrient = true; // custom obstructed habitats (will make a square shapen with an entrance - a pen?) ecosystem.Habitats[1, 1].SetObstructed(true); ecosystem.Habitats[1, 2].SetObstructed(true); ecosystem.Habitats[1, 3].SetObstructed(true); ecosystem.Habitats[1, 4].SetObstructed(true); ecosystem.Habitats[1, 5].SetObstructed(true); ecosystem.Habitats[1, 6].SetObstructed(true); ecosystem.Habitats[1, 7].SetObstructed(true); ecosystem.Habitats[1, 8].SetObstructed(true); ecosystem.Habitats[2, 1].SetObstructed(true); ecosystem.Habitats[3, 1].SetObstructed(true); ecosystem.Habitats[4, 1].SetObstructed(true); ecosystem.Habitats[5, 1].SetObstructed(true); ecosystem.Habitats[6, 1].SetObstructed(true); ecosystem.Habitats[7, 1].SetObstructed(true); ecosystem.Habitats[2, 8].SetObstructed(true); ecosystem.Habitats[3, 8].SetObstructed(true); ecosystem.Habitats[4, 8].SetObstructed(true); ecosystem.Habitats[5, 8].SetObstructed(true); ecosystem.Habitats[6, 8].SetObstructed(true); ecosystem.Habitats[7, 8].SetObstructed(true); ecosystem.Habitats[8, 1].SetObstructed(true); ecosystem.Habitats[8, 2].SetObstructed(true); ecosystem.Habitats[8, 3].SetObstructed(true); ecosystem.Habitats[8, 6].SetObstructed(true); ecosystem.Habitats[8, 7].SetObstructed(true); ecosystem.Habitats[8, 8].SetObstructed(true); }