private void ReloadPage(bool force = false) { _cpuedit = true; if (cbHouse.SelectedIndex == -1) { cbHouse.SelectedIndex = 0; } if (cbScenario.SelectedIndex == -1) { cbScenario.SelectedIndex = 0; } if (!force && _house == cbHouse.SelectedIndex && _scenario == cbScenario.SelectedIndex) { return; } _house = cbHouse.SelectedIndex; _scenario = cbScenario.SelectedIndex; CampaignMissionData data = _uibWorkingCopy.Houses[_house].Missions[_scenario]; cRegionPanel.Direction1 = (int)data.Unconfirmed_Direction1; cRegionPanel.Direction2 = (int)data.Unconfirmed_Direction2; cCommonPanel.RegionAnim_House1 = (int)data.RegionAnim_House1; cCommonPanel.RegionAnim_House2 = (int)data.RegionAnim_House2; cCommonPanel.RegionAnim_House3 = (int)data.RegionAnim_House3; cCommonPanel.EnemyHouse = (int)data.ScoreEnemyHouse; cRegionPanel.MissionFile1 = data.MissionFile1; cRegionPanel.MissionFile2 = data.MissionFile2; cCommonPanel.SFX1 = data.SFX1; cCommonPanel.SFX2 = data.SFX2; cCommonPanel.SFX3 = data.SFX3; cCommonPanel.Theme = data.Theme; cRegionPanel.RegionID1 = data.RegionID1; cRegionPanel.RegionID2 = data.RegionID2; byte[] atr = data.RegionsAwardedToAtreides; byte[] har = data.RegionsAwardedToHarkonnen; byte[] ord = data.RegionsAwardedToOrdos; cCommonPanel.RegionToAtreides1 = atr[0]; cCommonPanel.RegionToAtreides2 = atr[1]; cCommonPanel.RegionToAtreides3 = atr[2]; cCommonPanel.RegionToHarkonnen1 = har[0]; cCommonPanel.RegionToHarkonnen2 = har[1]; cCommonPanel.RegionToHarkonnen3 = har[2]; cCommonPanel.RegionToOrdos1 = ord[0]; cCommonPanel.RegionToOrdos2 = ord[1]; cCommonPanel.RegionToOrdos3 = ord[2]; cCommonPanel.ScoreMultiplier = data.ScoreMultiplier; cRegionPanel.Icon1X = data.Region1IconX; cRegionPanel.Icon1Y = data.Region1IconY; cRegionPanel.Icon2X = data.Region2IconX; cRegionPanel.Icon2Y = data.Region2IconY; // enable / disable region fields cRegionPanel.UpdateR1(); cRegionPanel.UpdateR2(); _cpuedit = false; }
private void Simulate(AnimStage stage = AnimStage.BEFORE_ANIM, bool icons = false) { try { // get regions RegionPolygonBinFile bin = new RegionPolygonBinFile(); bin.ReadFromFile(@"assets\map\points.bin"); Bitmap bmp = new Bitmap(pbPreview.Width, pbPreview.Height); House[] regionOwners = new House[bin.Polygons.Count]; _uibWorkingCopy.GetRegionOwnership(ref regionOwners, (House)_house, _scenario, stage); // paint regions using (Graphics g = Graphics.FromImage(bmp)) { g.DrawImage(new Bitmap(@"assets\map\dunemap2.png"), pbPreview.DisplayRectangle); for (int r = 0; r < bin.Polygons.Count; r++) { RegionPolygonData data = bin.Polygons[r]; Point[] pts = new Point[data.Polygon.Length]; for (int i = 0; i < pts.Length; i++) { pts[i] = data.Polygon[i].ToPoint(); } int owner = (int)regionOwners[r]; if (owner == owner.Clamp(0, 2)) { using (Brush brush = new HatchBrush(HatchStyle.Percent50, Color.FromArgb(0xCF, _houseColors[owner]), Color.Transparent)) { g.FillPolygon(brush, pts); } } using (Pen pen = new Pen(Color.FromArgb(0x7F, Color.Black))) { g.DrawPolygon(pen, pts); } if (icons) { CampaignMissionData currData = _uibWorkingCopy.Houses[_house].Missions[_scenario]; Size sz = new Size(72, 70); if (currData.RegionID1 == r + 1 || currData.RegionID2 == r + 1) { using (Pen pen = new Pen(Color.Blue, 2)) { g.DrawPolygon(pen, pts); } } using (Pen pen = new Pen(Color.DarkBlue)) { using (Brush brush = new SolidBrush(Color.DarkBlue)) { if (currData.RegionID1 > 0) { Point pt = currData.Region1IconPosition.ToPoint(); g.DrawRectangle(pen, new Rectangle(pt, sz)); g.DrawString(currData.MissionFile1, DefaultFont, brush, pt.X + 10, pt.Y + 10); } if (currData.RegionID2 > 0) { Point pt = currData.Region2IconPosition.ToPoint(); g.DrawRectangle(pen, new Rectangle(pt, sz)); g.DrawString(currData.MissionFile2, DefaultFont, brush, pt.X + 10, pt.Y + 10); } } } } using (Brush brush = new SolidBrush(Color.White)) { g.DrawString("{0}, {1}".F(cbHouse.Text, cbScenario.Text), DefaultFont, brush, new Point(5, 5)); } } } pbPreview.Image?.Dispose(); pbPreview.Image = bmp; } catch { } }
public void GetRegionOwnership(ref House[] regionOwners, House playerHouse, int scenario, AnimStage stage) { for (int i = 0; i < regionOwners.Length; i++) { regionOwners[i] = (House)0xFF; } for (int scen = 0; scen < scenario; scen++) { CampaignMissionData data = Houses[(int)playerHouse].Missions[scen]; House[] animOrder = new House[] { data.RegionAnim_House1, data.RegionAnim_House2, data.RegionAnim_House3 }; for (int h = 0; h < animOrder.Length; h++) { if (scen < scenario - 1 || (int)stage > h) { House ihouse = animOrder[h]; if (playerHouse == ihouse) { if (data.RegionID1 > 0 && data.RegionID1 <= regionOwners.Length) { regionOwners[data.RegionID1 - 1] = ihouse; } if (data.RegionID2 > 0 && data.RegionID2 <= regionOwners.Length) { regionOwners[data.RegionID2 - 1] = ihouse; } } switch (ihouse) { case House.ATREIDES: foreach (int r in data.RegionsAwardedToAtreides) { if (r > 0 && r <= regionOwners.Length) { regionOwners[r - 1] = ihouse; } } break; case House.HARKONNEN: foreach (int r in data.RegionsAwardedToHarkonnen) { if (r > 0 && r <= regionOwners.Length) { regionOwners[r - 1] = ihouse; } } break; case House.ORDOS: foreach (int r in data.RegionsAwardedToOrdos) { if (r > 0 && r <= regionOwners.Length) { regionOwners[r - 1] = ihouse; } } break; } } } } }