From 75a4344296c784607e986fd60e2c83c1facdbc15 Mon Sep 17 00:00:00 2001 From: tomwendel Date: Fri, 29 Apr 2016 23:20:14 +0200 Subject: [PATCH] Release 1.7.2 --- .../Properties/AssemblyInfo.cs | 6 +- AntMe.sln | 6 + AntMe/AntMe.csproj | 7 + AntMe/Main.Designer.cs | 16 +- AntMe/Main.cs | 78 +- AntMe/Main.de.resx | 61 +- AntMe/Main.resx | 213 +- AntMe/PluginManager.cs | 677 ++-- AntMe/Plugins.Designer.cs | 26 +- AntMe/Plugins.cs | 6 +- AntMe/Plugins.resx | 264 +- AntMe/Properties/AssemblyInfo.cs | 6 +- AntMe/Properties/Resources.Designer.cs | 2 +- AntMe/Properties/Resources.resx | 2 +- AntMe/Resource.Designer.cs | 9 + AntMe/Resource.de.resx | 3 + AntMe/Resource.resx | 3 + DemoAmeisen/DemoAmeisen.csproj | 1 + DemoAmeisen/KreisAmeisen.cs | 638 ++-- DemoAmeisen/Properties/AssemblyInfo.cs | 6 +- GdiPlusPlugin/GdiPlusPlugin.csproj | 1 + GdiPlusPlugin/Properties/AssemblyInfo.cs | 6 +- PlayerManagement/AntMe.snk | Bin 0 -> 596 bytes PlayerManagement/AntProperties.Designer.cs | 553 ++++ PlayerManagement/AntProperties.cs | 126 + PlayerManagement/AntProperties.de.resx | 303 ++ PlayerManagement/AntProperties.resx | 1667 ++++++++++ PlayerManagement/CreateForm.Designer.cs | 191 ++ PlayerManagement/CreateForm.cs | 110 + PlayerManagement/CreateForm.de.resx | 167 + PlayerManagement/CreateForm.resx | 493 +++ PlayerManagement/EnglishCSharpGenerator.cs | 30 + PlayerManagement/EnglishVBGenerator.cs | 30 + PlayerManagement/GeneratorFiles.Designer.cs | 280 ++ PlayerManagement/GeneratorFiles.resx | 157 + PlayerManagement/GermanCSharpGenerator.cs | 30 + PlayerManagement/GermanVBGenerator.cs | 30 + PlayerManagement/IGenerator.cs | 16 + PlayerManagement/PlayerManagement.csproj | 227 ++ PlayerManagement/PlayerSelector.Designer.cs | 226 ++ PlayerManagement/PlayerSelector.cs | 162 + PlayerManagement/PlayerSelector.de.resx | 363 +++ PlayerManagement/PlayerSelector.resx | 645 ++++ PlayerManagement/PlayerStore.cs | 183 ++ PlayerManagement/PlayerStoreConfiguration.cs | 26 + PlayerManagement/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 133 + PlayerManagement/Properties/Resources.resx | 142 + PlayerManagement/Resource.Designer.cs | 189 ++ PlayerManagement/Resource.de.Designer.cs | 0 PlayerManagement/Resource.de.resx | 180 ++ PlayerManagement/Resource.resx | 180 ++ PlayerManagement/Resources/add.png | Bin 0 -> 251 bytes PlayerManagement/Resources/class_de.txt | 111 + PlayerManagement/Resources/class_en.txt | 111 + PlayerManagement/Resources/class_vb_de.txt | 92 + PlayerManagement/Resources/class_vb_en.txt | 92 + .../Resources/colony_nonstatic_32x32.png | Bin 0 -> 2141 bytes PlayerManagement/Resources/delete_16x16.png | Bin 0 -> 1397 bytes PlayerManagement/Resources/load_16x16.png | Bin 0 -> 474 bytes PlayerManagement/Resources/project.txt | 63 + PlayerManagement/Resources/project_vb.txt | 85 + PlayerManagement/Resources/properties.txt | 36 + .../Resources/properties_16x16.png | Bin 0 -> 342 bytes PlayerManagement/Resources/properties_vb.txt | 35 + PlayerManagement/Resources/security_32x32.png | Bin 0 -> 882 bytes PlayerManagement/Resources/solution.txt | 22 + PlayerManagement/Resources/solution_vb.txt | 22 + PlayerManagement/Resources/toddler.png | Bin 0 -> 12705 bytes PlayerManagement/Resources/user.txt | 13 + PlayerManagement/Resources/user_vb.txt | 13 + PlayerManagement/RightsRequest.Designer.cs | 214 ++ PlayerManagement/RightsRequest.cs | 289 ++ PlayerManagement/RightsRequest.de.resx | 208 ++ PlayerManagement/RightsRequest.resx | 627 ++++ PlayerManagement/Store.cs | 11 + PlayerManagement/VsGenerator.cs | 145 + Setup/Product.wxs | 10 +- Setup/Setup.wixproj | 8 + SharedComponents/Properties/AssemblyInfo.cs | 6 +- SimulationCore/Properties/AssemblyInfo.cs | 6 +- SimulationCore/Simulation/AiAnalysis.cs | 2 +- .../Simulation/PlayerInfoFilename.cs | 23 +- SimulationCore/SimulationCore.csproj | 1 + SimulationPlugin/Challenge.cs | 18 + SimulationPlugin/ChallengeButton.Designer.cs | 106 + SimulationPlugin/ChallengeButton.cs | 19 + SimulationPlugin/ChallengeButton.resx | 120 + .../ChallengesControl.Designer.cs | 186 ++ SimulationPlugin/ChallengesControl.cs | 34 + SimulationPlugin/ChallengesControl.resx | 120 + SimulationPlugin/ChallengesPlugin.cs | 88 + SimulationPlugin/ChallengesSettings.cs | 19 + SimulationPlugin/FreeGameControl.Designer.cs | 804 +++++ SimulationPlugin/FreeGameControl.cs | 420 +++ SimulationPlugin/FreeGameControl.de.resx | 905 ++++++ SimulationPlugin/FreeGameControl.resx | 2773 +++++++++++++++++ SimulationPlugin/FreeGamePlugin.cs | 204 ++ SimulationPlugin/FreeGameSetup.cs | 96 + SimulationPlugin/PlayerItem.cs | 2 +- SimulationPlugin/Properties/AssemblyInfo.cs | 6 +- .../Properties/Resources.Designer.cs | 18 +- SimulationPlugin/Properties/Resources.resx | 41 +- SimulationPlugin/Resource.Designer.cs | 110 +- SimulationPlugin/Resource.de.resx | 87 +- SimulationPlugin/Resource.resx | 87 +- SimulationPlugin/Resources/star1.png | Bin 0 -> 719 bytes SimulationPlugin/Resources/star2.png | Bin 0 -> 900 bytes SimulationPlugin/SimulationPlugin.csproj | 109 +- SimulationPlugin/SimulationProperties.cs | 158 +- .../XnaPlugin/InstructionPanel.Designer.cs | 137 + XnaPlugin/XnaPlugin/InstructionPanel.af.resx | 768 +++++ XnaPlugin/XnaPlugin/InstructionPanel.cs | 19 + XnaPlugin/XnaPlugin/InstructionPanel.de.resx | 792 +++++ XnaPlugin/XnaPlugin/InstructionPanel.resx | 1065 +++++++ XnaPlugin/XnaPlugin/Plugin.cs | 10 +- .../XnaPlugin/Properties/AssemblyInfo.cs | 6 +- XnaPlugin/XnaPlugin/RenderWindow.cs | 42 +- XnaPlugin/XnaPlugin/Strings.Designer.cs | 333 ++ XnaPlugin/XnaPlugin/Strings.de.Designer.cs | 0 XnaPlugin/XnaPlugin/Strings.de.resx | 247 ++ XnaPlugin/XnaPlugin/Strings.resx | 247 ++ XnaPlugin/XnaPlugin/XnaPlugin.csproj | 39 +- 123 files changed, 20145 insertions(+), 1247 deletions(-) create mode 100644 PlayerManagement/AntMe.snk create mode 100644 PlayerManagement/AntProperties.Designer.cs create mode 100644 PlayerManagement/AntProperties.cs create mode 100644 PlayerManagement/AntProperties.de.resx create mode 100644 PlayerManagement/AntProperties.resx create mode 100644 PlayerManagement/CreateForm.Designer.cs create mode 100644 PlayerManagement/CreateForm.cs create mode 100644 PlayerManagement/CreateForm.de.resx create mode 100644 PlayerManagement/CreateForm.resx create mode 100644 PlayerManagement/EnglishCSharpGenerator.cs create mode 100644 PlayerManagement/EnglishVBGenerator.cs create mode 100644 PlayerManagement/GeneratorFiles.Designer.cs create mode 100644 PlayerManagement/GeneratorFiles.resx create mode 100644 PlayerManagement/GermanCSharpGenerator.cs create mode 100644 PlayerManagement/GermanVBGenerator.cs create mode 100644 PlayerManagement/IGenerator.cs create mode 100644 PlayerManagement/PlayerManagement.csproj create mode 100644 PlayerManagement/PlayerSelector.Designer.cs create mode 100644 PlayerManagement/PlayerSelector.cs create mode 100644 PlayerManagement/PlayerSelector.de.resx create mode 100644 PlayerManagement/PlayerSelector.resx create mode 100644 PlayerManagement/PlayerStore.cs create mode 100644 PlayerManagement/PlayerStoreConfiguration.cs create mode 100644 PlayerManagement/Properties/AssemblyInfo.cs create mode 100644 PlayerManagement/Properties/Resources.Designer.cs create mode 100644 PlayerManagement/Properties/Resources.resx create mode 100644 PlayerManagement/Resource.Designer.cs create mode 100644 PlayerManagement/Resource.de.Designer.cs create mode 100644 PlayerManagement/Resource.de.resx create mode 100644 PlayerManagement/Resource.resx create mode 100644 PlayerManagement/Resources/add.png create mode 100644 PlayerManagement/Resources/class_de.txt create mode 100644 PlayerManagement/Resources/class_en.txt create mode 100644 PlayerManagement/Resources/class_vb_de.txt create mode 100644 PlayerManagement/Resources/class_vb_en.txt create mode 100644 PlayerManagement/Resources/colony_nonstatic_32x32.png create mode 100644 PlayerManagement/Resources/delete_16x16.png create mode 100644 PlayerManagement/Resources/load_16x16.png create mode 100644 PlayerManagement/Resources/project.txt create mode 100644 PlayerManagement/Resources/project_vb.txt create mode 100644 PlayerManagement/Resources/properties.txt create mode 100644 PlayerManagement/Resources/properties_16x16.png create mode 100644 PlayerManagement/Resources/properties_vb.txt create mode 100644 PlayerManagement/Resources/security_32x32.png create mode 100644 PlayerManagement/Resources/solution.txt create mode 100644 PlayerManagement/Resources/solution_vb.txt create mode 100644 PlayerManagement/Resources/toddler.png create mode 100644 PlayerManagement/Resources/user.txt create mode 100644 PlayerManagement/Resources/user_vb.txt create mode 100644 PlayerManagement/RightsRequest.Designer.cs create mode 100644 PlayerManagement/RightsRequest.cs create mode 100644 PlayerManagement/RightsRequest.de.resx create mode 100644 PlayerManagement/RightsRequest.resx create mode 100644 PlayerManagement/Store.cs create mode 100644 PlayerManagement/VsGenerator.cs create mode 100644 SimulationPlugin/Challenge.cs create mode 100644 SimulationPlugin/ChallengeButton.Designer.cs create mode 100644 SimulationPlugin/ChallengeButton.cs create mode 100644 SimulationPlugin/ChallengeButton.resx create mode 100644 SimulationPlugin/ChallengesControl.Designer.cs create mode 100644 SimulationPlugin/ChallengesControl.cs create mode 100644 SimulationPlugin/ChallengesControl.resx create mode 100644 SimulationPlugin/ChallengesPlugin.cs create mode 100644 SimulationPlugin/ChallengesSettings.cs create mode 100644 SimulationPlugin/FreeGameControl.Designer.cs create mode 100644 SimulationPlugin/FreeGameControl.cs create mode 100644 SimulationPlugin/FreeGameControl.de.resx create mode 100644 SimulationPlugin/FreeGameControl.resx create mode 100644 SimulationPlugin/FreeGamePlugin.cs create mode 100644 SimulationPlugin/FreeGameSetup.cs create mode 100644 SimulationPlugin/Resources/star1.png create mode 100644 SimulationPlugin/Resources/star2.png create mode 100644 XnaPlugin/XnaPlugin/InstructionPanel.Designer.cs create mode 100644 XnaPlugin/XnaPlugin/InstructionPanel.af.resx create mode 100644 XnaPlugin/XnaPlugin/InstructionPanel.cs create mode 100644 XnaPlugin/XnaPlugin/InstructionPanel.de.resx create mode 100644 XnaPlugin/XnaPlugin/InstructionPanel.resx create mode 100644 XnaPlugin/XnaPlugin/Strings.Designer.cs create mode 100644 XnaPlugin/XnaPlugin/Strings.de.Designer.cs create mode 100644 XnaPlugin/XnaPlugin/Strings.de.resx create mode 100644 XnaPlugin/XnaPlugin/Strings.resx diff --git a/AntMe.Online.Client/Properties/AssemblyInfo.cs b/AntMe.Online.Client/Properties/AssemblyInfo.cs index dc8156a..04b8804 100644 --- a/AntMe.Online.Client/Properties/AssemblyInfo.cs +++ b/AntMe.Online.Client/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly: AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.1.6")] -[assembly: AssemblyFileVersion("1.7.1.6")] +[assembly: AssemblyVersion("1.7.2.23")] +[assembly: AssemblyFileVersion("1.7.2.23")] diff --git a/AntMe.sln b/AntMe.sln index 011722b..3cc119c 100644 --- a/AntMe.sln +++ b/AntMe.sln @@ -23,6 +23,8 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup", "Setup\Setup.wixpro EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XnaPluginContent", "XnaPlugin\XnaPluginContent\XnaPluginContent.contentproj", "{B09C7823-AFF3-45A4-AAAC-88821B464DEC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlayerManagement", "PlayerManagement\PlayerManagement.csproj", "{5D566A2A-C112-4543-95EA-F3E81A53CDE9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 @@ -67,6 +69,10 @@ Global {EC7AA916-0218-436F-B4DC-510BDB769260}.Release|x86.Build.0 = Release|x86 {B09C7823-AFF3-45A4-AAAC-88821B464DEC}.Debug|x86.ActiveCfg = Debug|x86 {B09C7823-AFF3-45A4-AAAC-88821B464DEC}.Release|x86.ActiveCfg = Release|x86 + {5D566A2A-C112-4543-95EA-F3E81A53CDE9}.Debug|x86.ActiveCfg = Debug|x86 + {5D566A2A-C112-4543-95EA-F3E81A53CDE9}.Debug|x86.Build.0 = Debug|x86 + {5D566A2A-C112-4543-95EA-F3E81A53CDE9}.Release|x86.ActiveCfg = Release|x86 + {5D566A2A-C112-4543-95EA-F3E81A53CDE9}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AntMe/AntMe.csproj b/AntMe/AntMe.csproj index 3eefaa4..24e1f38 100644 --- a/AntMe/AntMe.csproj +++ b/AntMe/AntMe.csproj @@ -271,10 +271,17 @@ {43e44b6c-78f6-4515-88f2-c238b51886c5} AntMe.Online.Client + False + + + {5d566a2a-c112-4543-95ea-f3e81a53cde9} + PlayerManagement + False {415F50C3-BD70-4634-B1F7-A15B42F0B0C6} SharedComponents + False diff --git a/AntMe/Main.Designer.cs b/AntMe/Main.Designer.cs index 294252f..85f311e 100644 --- a/AntMe/Main.Designer.cs +++ b/AntMe/Main.Designer.cs @@ -70,7 +70,7 @@ private void InitializeComponent() this.pauseToolItem = new System.Windows.Forms.ToolStripButton(); this.group1ToolItem = new System.Windows.Forms.ToolStripSeparator(); this.sourceLabelToolItem = new System.Windows.Forms.ToolStripLabel(); - this.producerComboBoxToolItem = new System.Windows.Forms.ToolStripComboBox(); + this.producerButton = new System.Windows.Forms.ToolStripDropDownButton(); this.group2ToolItem = new System.Windows.Forms.ToolStripSeparator(); this.speedLabelToolItem = new System.Windows.Forms.ToolStripLabel(); this.speedDropDownToolItem = new System.Windows.Forms.ToolStripDropDownButton(); @@ -354,7 +354,7 @@ private void InitializeComponent() this.pauseToolItem, this.group1ToolItem, this.sourceLabelToolItem, - this.producerComboBoxToolItem, + this.producerButton, this.group2ToolItem, this.speedLabelToolItem, this.speedDropDownToolItem, @@ -399,12 +399,12 @@ private void InitializeComponent() resources.ApplyResources(this.sourceLabelToolItem, "sourceLabelToolItem"); this.sourceLabelToolItem.Name = "sourceLabelToolItem"; // - // producerComboBoxToolItem + // producerButton // - resources.ApplyResources(this.producerComboBoxToolItem, "producerComboBoxToolItem"); - this.producerComboBoxToolItem.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.producerComboBoxToolItem.Name = "producerComboBoxToolItem"; - this.producerComboBoxToolItem.SelectedIndexChanged += new System.EventHandler(this.combo_producer); + resources.ApplyResources(this.producerButton, "producerButton"); + this.producerButton.AutoToolTip = false; + this.producerButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.producerButton.Name = "producerButton"; // // group2ToolItem // @@ -621,7 +621,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripSeparator group2MenuItem; private System.Windows.Forms.ToolStripMenuItem infoBoxMenuItem; private WebBrowserEx infoWebBrowser; - private System.Windows.Forms.ToolStripComboBox producerComboBoxToolItem; private System.Windows.Forms.ToolStripLabel sourceLabelToolItem; private System.Windows.Forms.ToolStripSeparator group1ToolItem; private System.Windows.Forms.Timer timer; @@ -664,5 +663,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem logoutButton; private System.Windows.Forms.ToolStripButton loginButton; private System.Windows.Forms.ToolStripButton versionButton; + private System.Windows.Forms.ToolStripDropDownButton producerButton; } } \ No newline at end of file diff --git a/AntMe/Main.cs b/AntMe/Main.cs index e3d48e6..b30ecbb 100644 --- a/AntMe/Main.cs +++ b/AntMe/Main.cs @@ -3,6 +3,7 @@ using System.IO; using System.Threading; using System.Windows.Forms; +using System.Linq; using AntMe.Gui.Properties; using AntMe.SharedComponents.Plugin; @@ -11,6 +12,7 @@ using System.Diagnostics; using System.Drawing; using System.Threading.Tasks; +using AntMe.PlayerManagement; namespace AntMe.Gui { @@ -51,6 +53,14 @@ public Main(string[] parameter) break; } + // Load Player + Task t = new Task(() => { PlayerStore.Instance.ToString(); }); + t.Start(); + + // Prüfe auf Updates + t = new Task(BackgroundUpdateCheck); + t.Start(); + // Load welcomepage try { @@ -99,10 +109,6 @@ public Main(string[] parameter) } initPhase = false; - - // Prüfe auf Updates - Task t = new Task(BackgroundUpdateCheck); - t.Start(); } #endregion @@ -158,30 +164,42 @@ private void updatePanel() speedDropDownToolItem.Text = Resource.MainSpeedMaximal; } - // producer-list - List producerList = new List(manager.ProducerPlugins); - for (int i = 0; i < producerComboBoxToolItem.Items.Count; i++) + // Producer List (Button-Based) + List remove = new List(); + foreach (ToolStripItem item in producerButton.DropDownItems) { - PluginItem item = (PluginItem)producerComboBoxToolItem.Items[i]; - if (!producerList.Contains(item)) - { - producerComboBoxToolItem.Items.Remove(item); - i--; - } + if (!manager.ProducerPlugins.Any(p => p == item.Tag)) + remove.Add(item); } - foreach (PluginItem item in producerList) + foreach (var item in remove) { - if (!producerComboBoxToolItem.Items.Contains(item)) + producerButton.DropDownItems.Remove(item); + } + + foreach (var item in manager.ProducerPlugins) + { + if (producerButton.DropDownItems.Find(item.Guid.ToString(), false).Count() == 0) { - producerComboBoxToolItem.Items.Add(item); + var menuItem = new ToolStripMenuItem() + { + Text = item.Name, + Name = item.Guid.ToString(), + Tag = item + }; + + menuItem.Click += button_producer; + + producerButton.DropDownItems.Add(menuItem); } } // manage tabs if (activeProducer != manager.ActiveProducerPlugin) { - // Update Combobox - producerComboBoxToolItem.SelectedItem = manager.ActiveProducerPlugin; + bool isSelected = tabControl.SelectedIndex == 1; + + // Update Mode Display + producerButton.Text = (manager.ActiveProducerPlugin == null ? Resource.MainNoModeSelected : manager.ActiveProducerPlugin.Name); // remove old tab if (activeProducer != null) @@ -202,6 +220,7 @@ private void updatePanel() page.Controls.Add(manager.ActiveProducerPlugin.Producer.Control); tabControl.TabPages.Insert(1, page); manager.ActiveProducerPlugin.Producer.Control.Dock = DockStyle.Fill; + if (isSelected) tabControl.SelectedIndex = 1; } activeProducer = manager.ActiveProducerPlugin; } @@ -417,6 +436,7 @@ private void button_plugins(object sender, EventArgs e) ignoreTimerEvents = true; Plugins pluginForm = new Plugins(manager); pluginForm.ShowDialog(this); + manager.SaveSettings(); ignoreTimerEvents = false; updatePanel(); } @@ -582,27 +602,17 @@ private void button_switchAutoupdate(object sender, EventArgs e) } } - #endregion - - #region combos - - private void combo_producer(object sender, EventArgs e) + private void button_producer(object sender, EventArgs e) { if (ignoreTimerEvents) - { return; - } ignoreTimerEvents = true; - if (producerComboBoxToolItem.SelectedItem != null) - { - PluginItem plugin = (PluginItem)producerComboBoxToolItem.SelectedItem; - manager.ActivateProducer(plugin.Guid); - } - else - { - manager.ActivateProducer(new Guid()); - } + + ToolStripMenuItem menuItem = sender as ToolStripMenuItem; + PluginItem plugin = menuItem.Tag as PluginItem; + manager.ActivateProducer(plugin.Guid); + updatePanel(); ignoreTimerEvents = false; } diff --git a/AntMe/Main.de.resx b/AntMe/Main.de.resx index 74a6f91..0b85a0a 100644 --- a/AntMe/Main.de.resx +++ b/AntMe/Main.de.resx @@ -118,21 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 76, 20 - - - Programm - - - 90, 20 - - - Einstellungen - - - Hilfe - 125, 22 @@ -154,6 +139,12 @@ Schließen + + 76, 20 + + + Programm + 161, 22 @@ -163,12 +154,6 @@ Geschwindigkeit - - 161, 22 - - - Sprache - 118, 22 @@ -181,12 +166,24 @@ Englisch + + 161, 22 + + + Sprache + 161, 22 Updates suchen + + 90, 20 + + + Einstellungen + 185, 22 @@ -211,14 +208,32 @@ Ãœber AntMe!... + + Hilfe + Stopp - 44, 22 + 47, 22 - Quelle: + Modus: + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + 97, 22 diff --git a/AntMe/Main.resx b/AntMe/Main.resx index 2cac64b..7b0da2c 100644 --- a/AntMe/Main.resx +++ b/AntMe/Main.resx @@ -145,6 +145,9 @@ About... + + 153, 22 + 3 @@ -171,6 +174,9 @@ settingsMenuItem + + versionButton + Settings @@ -210,6 +216,9 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + startMenuItem + System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -240,8 +249,14 @@ Pause + + 0 + - AntMe.Gui.WebBrowserEx, AntMe, Version=1.7.0.325, Culture=neutral, PublicKeyToken=a423eba442ea5664 + AntMe.Gui.WebBrowserEx, AntMe, Version=1.7.1.331, Culture=neutral, PublicKeyToken=a423eba442ea5664 + + + producerButton 42, 22 @@ -258,14 +273,11 @@ logoutButton - - infoBoxMenuItem - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Stop + + speedMenuItem 153, 22 @@ -285,8 +297,11 @@ [speed] - - 100 fps + + speed100fpmMenuItem + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 @@ -300,9 +315,6 @@ 0 - - 153, 22 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -315,12 +327,6 @@ False - - TextBeforeImage - - - Class-Description - MiddleLeft @@ -349,7 +355,7 @@ 116, 22 - 46, 22 + 41, 22 fpsBarItem @@ -366,6 +372,9 @@ System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Speed + 23, 22 @@ -375,9 +384,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -402,8 +408,8 @@ Login with your AntMe! Online Account - - 153, 22 + + 80 fps speed8fpmToolItem @@ -426,8 +432,8 @@ Logout - - 153, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 153, 22 @@ -450,9 +456,6 @@ 181, 22 - - System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 932, 723 @@ -465,8 +468,8 @@ 181, 22 - - Speed + + 153, 22 153, 22 @@ -480,6 +483,9 @@ False + + 13, 22 + 22,5 fps (150%) @@ -501,12 +507,12 @@ CenterScreen + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 2 - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - False @@ -555,14 +561,17 @@ speedMaxMenuItem + + Magenta + classDescriptionMenuItem 23, 22 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 100 fps System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -571,7 +580,7 @@ AntMe! Tutorials - Source: + Mode: 23, 22 @@ -582,9 +591,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 105, 22 - fasterToolItem @@ -597,14 +603,14 @@ speed30fpmMenuItem - - 50 fps + + Class-Description Start - - 23, 22 + + 0 @@ -4642,11 +4648,8 @@ 30 fps (200%) - - producerComboBoxToolItem - - - 20, 20 + + False 116, 22 @@ -4654,8 +4657,8 @@ speedLabelToolItem - - 100 fps + + infoBoxMenuItem System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -4687,15 +4690,36 @@ Fill + + System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStrip1 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAgNJREFUOE+lkutLk2EYxvePhJaHShFBUTEPiCieQOmDiEZgrEbpYGiCQxkqA80I + RUkUEZ0YRMS+DDI70MkTmzJnDc8iU8QT2mAEItnle90wHwTDyBduXnie5/rd133Q4ZKfAJqHFs9E08A8 + zD1emDpmYXjqRlnTFIrMk8iuGkNaxWekGEaQrHecBfw+/vPXODw6hj9whN2fh/Bt/8LSRgA3cxr/DeBZ + 9kvmTNMoHGNbIrYN+3Aj23IxgJkpds0doP3VstgmsNexhutZ9QrAms8T0zYzU5xXM46kcjsmvfvoeL2i + AeoUgA07T8yaaZuZKab1rzN74jgys1YB2O2gmBZzH49LODXrrJlnzEzxe9cOLH1ziMioVgCOiuIFX0CE + Q+/WYf+yieiCFrRp9tkwxnP7Kt5MbKGm6wfC000KwDlTXNLgEvHMkh+Db32o7fYivtQm1l9+3IBOp5P7 + yjYPwlKNCsAluWudxgvtknb5t9oWcL/VLU2Mvd2JFq3uqs7vAtE/ceNayiMF4KiYMSjmY2O7B4Ua+NaD + YQGEJumRbvyG1IcfBHI12aAAXM8R57aIWTNrLLY4tfNPiCvpR1SeVeu6WWzHFD6THSDwFMDdpmUG62NJ + PKM4Or9ZxBxb8H8l7g5CEu8pAOfM3WanSeeS8CFHxW4zM2umbWamOCShXAH+/wNOANABIDUxWnDPAAAA + AElFTkSuQmCC + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Maximum + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tabControl @@ -4705,8 +4729,8 @@ Start - - 80 fps + + $this stateLabelBarItem @@ -4717,11 +4741,14 @@ System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Stop + 23, 22 - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + [stepcounter] TextBeforeImage @@ -4750,10 +4777,10 @@ 181, 22 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 50 fps - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -4771,8 +4798,8 @@ 61, 20 - - 0 + + 4, 22 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -4780,8 +4807,8 @@ menuStrip - - 153, 22 + + 102, 6 Login @@ -4813,6 +4840,9 @@ 924, 22 + + 100 fps + onlineButton @@ -4858,18 +4888,12 @@ Magenta - - 102, 6 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 105, 22 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - pluginSettingsMenuItem @@ -4894,9 +4918,6 @@ tutorialsMenuItem - - 200, 25 - Magenta @@ -4918,12 +4939,15 @@ Magenta + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23, 22 + 8 fps - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Faster @@ -4951,8 +4975,8 @@ statusStrip1 - - speedMenuItem + + 105, 22 0 @@ -4966,8 +4990,8 @@ Welcome - - speed100fpmMenuItem + + 153, 22 speed50fpmMenuItem @@ -4975,14 +4999,11 @@ $this - - 4, 22 - [fps] - - startMenuItem + + TextBeforeImage websiteMenuItem @@ -5002,14 +5023,11 @@ forumMenuItem - - versionButton - - - $this + + Speed: - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 20, 20 924, 25 @@ -5026,14 +5044,17 @@ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - False + + 153, 22 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 stepCounterBarItem - - Speed: + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 96, 22 @@ -5047,9 +5068,6 @@ False - - [stepcounter] - Help @@ -5059,6 +5077,9 @@ True + + de + 0, 24 diff --git a/AntMe/PluginManager.cs b/AntMe/PluginManager.cs index 0d7117d..9ded869 100644 --- a/AntMe/PluginManager.cs +++ b/AntMe/PluginManager.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Security; using System.Threading; @@ -11,12 +12,14 @@ using AntMe.SharedComponents.Plugin; using AntMe.SharedComponents.States; -namespace AntMe.Gui { +namespace AntMe.Gui +{ /// /// Manager for all plugins and host for central game-loop /// /// Tom Wendel (tom@antme.net) - internal sealed class PluginManager { + internal sealed class PluginManager + { #region Constants private const int FRAMERATE_SPAN = 10; @@ -55,11 +58,15 @@ internal sealed class PluginManager { Environment.SpecialFolder.ApplicationData) + Resources.ConfiguationPath; + private readonly DirectoryInfo applicationPath; + private readonly DirectoryInfo pluginPath; + #endregion #region Constructor - public PluginManager() { + public PluginManager() + { producerList = new Dictionary(); consumerList = new Dictionary(); activeConsumers = new Dictionary(); @@ -70,6 +77,9 @@ public PluginManager() { // Default Speed SetSpeedLimit(true, 15.0f); + + applicationPath = new FileInfo(Assembly.GetEntryAssembly().Location).Directory; + pluginPath = applicationPath.GetDirectories(Resources.PluginSearchFolder).FirstOrDefault(); } #endregion @@ -79,29 +89,40 @@ public PluginManager() { /// /// Search in default folders for a new plugin. /// - public void SearchForPlugins() { + public void SearchForPlugins() + { + // List dlls from Exe-Path + List files = new List(); + files.AddRange(applicationPath.GetFiles(Resources.PluginSearchFilter)); - string path = Directory.GetCurrentDirectory(); + // List dlls from "plugin"-Folder + if (pluginPath != null) files.AddRange(pluginPath.GetFiles(Resources.PluginSearchFilter)); - // List all potential files - List files = new List(); - files.AddRange(Directory.GetFiles(path, Resources.PluginSearchFilter)); - if (Directory.Exists(path + Resources.PluginSearchFolder)) { - files.AddRange(Directory.GetFiles(path + Resources.PluginSearchFolder, Resources.PluginSearchFilter)); - } - - // Enumerate all found files - for (int i = 0; i < files.Count; i++) { + // Load root Plugins + for (int i = 0; i < files.Count; i++) CheckForPlugin(files[i]); - } // Check known Plugins - for (int i = 0; i < config.knownPluginFiles.Count; i++) { - if (!files.Contains(config.knownPluginFiles[i])) { - if (!CheckForPlugin(config.knownPluginFiles[i])) { - config.knownPluginFiles.RemoveAt(i); - i--; - } + foreach (var knownFile in config.knownPluginFiles.ToArray()) + { + FileInfo external = new FileInfo(knownFile); + + // Skip some files + if (!external.Exists || + files.Contains(external) || + external.Directory.FullName.ToLower().Equals(applicationPath.FullName.ToLower()) || + (pluginPath != null && external.Directory.FullName.ToLower().Equals(pluginPath.FullName.ToLower()))) + { + // Drop from list + config.knownPluginFiles.Remove(knownFile); + continue; + } + + // Try to load + if (!CheckForPlugin(external)) + { + config.knownPluginFiles.Remove(knownFile); + continue; } } } @@ -109,50 +130,64 @@ public void SearchForPlugins() { /// /// Checks a single file for a new plugin. /// - /// filename + /// filename /// true, if there are valid plugins inside - public bool CheckForPlugin(string filename) { - try { - FileInfo info = new FileInfo(filename); - Assembly assembly = Assembly.LoadFile(info.FullName); - if (addPlugin(assembly)) { - if (!config.knownPluginFiles.Contains(info.FullName)) { - config.knownPluginFiles.Add(info.FullName); + public bool CheckForPlugin(FileInfo file) + { + try + { + Assembly assembly = Assembly.LoadFile(file.FullName); + if (addPlugin(assembly)) + { + if ( + !file.Directory.FullName.ToLower().Equals(applicationPath.FullName.ToLower()) && + !file.Directory.FullName.ToLower().Equals(pluginPath.FullName.ToLower()) && + !config.knownPluginFiles.Contains(file.FullName.ToLower())) + { + config.knownPluginFiles.Add(file.FullName.ToLower()); } + return true; } } - catch (FileLoadException ex) { + catch (FileLoadException ex) + { // Problems to open the file exceptions.Add(ex); } - catch (BadImageFormatException ex) { + catch (BadImageFormatException ex) + { // There is a wrong fileformat exceptions.Add(ex); } - catch (SecurityException ex) { + catch (SecurityException ex) + { // no accessrights exceptions.Add(ex); } - catch (MissingMethodException ex) { + catch (MissingMethodException ex) + { // problems with plugin exceptions.Add(ex); } - catch (TargetInvocationException ex) { + catch (TargetInvocationException ex) + { // missing references exceptions.Add( new Exception( - string.Format(Resource.PluginManagerMissingReferences, filename), + string.Format(Resource.PluginManagerMissingReferences, file), ex)); } - catch (ReflectionTypeLoadException ex) { + catch (ReflectionTypeLoadException ex) + { // missing references exceptions.Add( new Exception( - string.Format(Resource.PluginManagerMissingReferences, filename), + string.Format(Resource.PluginManagerMissingReferences, file), ex)); } - catch (Exception ex) { + catch (Exception ex) + { // unknown exception exceptions.Add(ex); } @@ -164,34 +199,40 @@ public bool CheckForPlugin(string filename) { /// /// assembly to search in /// true, if there are valid plugins inside - private bool addPlugin(Assembly assembly) { + private bool addPlugin(Assembly assembly) + { bool hit = false; // Get all includes Types - foreach (Type type in assembly.GetExportedTypes()) { + foreach (Type type in assembly.GetExportedTypes()) + { // Find the attribute List readCustomStates = new List(); List writeCustomStates = new List(); - foreach (CustomAttributeData customAttribute in CustomAttributeData.GetCustomAttributes(type)) { + foreach (CustomAttributeData customAttribute in CustomAttributeData.GetCustomAttributes(type)) + { string name; string dataType; string description; - switch (customAttribute.Constructor.ReflectedType.FullName) { + switch (customAttribute.Constructor.ReflectedType.FullName) + { case "AntMe.SharedComponents.Plugin.ReadCustomStateAttribute": name = string.Empty; dataType = string.Empty; description = string.Empty; - foreach (CustomAttributeNamedArgument argument in customAttribute.NamedArguments) { - switch (argument.MemberInfo.Name) { + foreach (CustomAttributeNamedArgument argument in customAttribute.NamedArguments) + { + switch (argument.MemberInfo.Name) + { case "Name": - name = (string) argument.TypedValue.Value; + name = (string)argument.TypedValue.Value; break; case "Type": - dataType = (string) argument.TypedValue.Value; + dataType = (string)argument.TypedValue.Value; break; case "Description": - description = (string) argument.TypedValue.Value; + description = (string)argument.TypedValue.Value; break; } } @@ -201,16 +242,18 @@ private bool addPlugin(Assembly assembly) { name = string.Empty; dataType = string.Empty; description = string.Empty; - foreach (CustomAttributeNamedArgument argument in customAttribute.NamedArguments) { - switch (argument.MemberInfo.Name) { + foreach (CustomAttributeNamedArgument argument in customAttribute.NamedArguments) + { + switch (argument.MemberInfo.Name) + { case "Name": - name = (string) argument.TypedValue.Value; + name = (string)argument.TypedValue.Value; break; case "Type": - dataType = (string) argument.TypedValue.Value; + dataType = (string)argument.TypedValue.Value; break; case "Description": - description = (string) argument.TypedValue.Value; + description = (string)argument.TypedValue.Value; break; } } @@ -220,19 +263,23 @@ private bool addPlugin(Assembly assembly) { } // If type has an attribute, search for the interfaces - foreach (Type plugin in type.GetInterfaces()) { + foreach (Type plugin in type.GetInterfaces()) + { // Producer found - if (plugin == typeof (IProducerPlugin)) { + if (plugin == typeof(IProducerPlugin)) + { // Create an instance of plugin and add to list PluginItem item = null; - try { + try + { IProducerPlugin producerPlugin = - (IProducerPlugin) Activator.CreateInstance(type, false); + (IProducerPlugin)Activator.CreateInstance(type, false); item = new PluginItem(producerPlugin, writeCustomStates.ToArray(), readCustomStates.ToArray()); hit = true; } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -243,8 +290,10 @@ private bool addPlugin(Assembly assembly) { } // Warnings, of there is another Version of that plugin - if (item != null && producerList.ContainsKey(item.Guid)) { - if (producerList[item.Guid].Version > item.Version) { + if (item != null && producerList.ContainsKey(item.Guid)) + { + if (producerList[item.Guid].Version > item.Version) + { exceptions.Add( new Exception( string.Format( @@ -253,7 +302,8 @@ private bool addPlugin(Assembly assembly) { item.Version))); item = null; } - else if (producerList[item.Guid].Version < item.Version) { + else if (producerList[item.Guid].Version < item.Version) + { exceptions.Add( new Exception( string.Format( @@ -263,30 +313,36 @@ private bool addPlugin(Assembly assembly) { DeactivateProducer(item.Guid); producerList.Remove(item.Guid); } - else { + else + { // Samle plugin still loaded item = null; } } // add to list - if (item != null) { + if (item != null) + { // Check, if plugin is preselected or saved as selected producerList.Add(item.Guid, item); if (config.selectedPlugins.Contains(item.Guid) || (!config.loaded && - type.GetCustomAttributes(typeof (PreselectedAttribute), false).Length > 0)) { + type.GetCustomAttributes(typeof(PreselectedAttribute), false).Length > 0)) + { ActivateProducer(item.Guid); } // Load Settings - if (File.Exists(configPath + item.Guid + Resources.PluginSettingsFileExtension)) { - try { + if (File.Exists(configPath + item.Guid + Resources.PluginSettingsFileExtension)) + { + try + { item.Producer.Settings = File.ReadAllBytes( configPath + item.Guid + Resources.PluginSettingsFileExtension); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -300,17 +356,20 @@ private bool addPlugin(Assembly assembly) { } // Consumer found - else if (plugin == typeof (IConsumerPlugin)) { + else if (plugin == typeof(IConsumerPlugin)) + { // Create an instance of plugin and add to list PluginItem item = null; - try { + try + { IConsumerPlugin consumerPlugin = - (IConsumerPlugin) Activator.CreateInstance(type, false); + (IConsumerPlugin)Activator.CreateInstance(type, false); item = new PluginItem(consumerPlugin, writeCustomStates.ToArray(), readCustomStates.ToArray()); hit = true; } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -321,8 +380,10 @@ private bool addPlugin(Assembly assembly) { } // Warnings, of there is another Version of that plugin - if (item != null && consumerList.ContainsKey(item.Guid)) { - if (consumerList[item.Guid].Version > item.Version) { + if (item != null && consumerList.ContainsKey(item.Guid)) + { + if (consumerList[item.Guid].Version > item.Version) + { exceptions.Add( new Exception( string.Format( @@ -331,7 +392,8 @@ private bool addPlugin(Assembly assembly) { item.Version))); item = null; } - else if (consumerList[item.Guid].Version < item.Version) { + else if (consumerList[item.Guid].Version < item.Version) + { exceptions.Add( new Exception( string.Format( @@ -341,31 +403,37 @@ private bool addPlugin(Assembly assembly) { DeactivateConsumer(item.Guid); consumerList.Remove(item.Guid); } - else { + else + { // Same plugin still loaded item = null; } } // add to list - if (item != null) { + if (item != null) + { consumerList.Add(item.Guid, item); // Check, if plugin is preselected or saved as selected if (config.selectedPlugins.Contains(item.Guid) || (!config.loaded && - type.GetCustomAttributes(typeof (PreselectedAttribute), false).Length > 0)) { + type.GetCustomAttributes(typeof(PreselectedAttribute), false).Length > 0)) + { ActivateConsumer(item.Guid); } // Load Settings - if (File.Exists(configPath + item.Guid + Resources.PluginSettingsFileExtension)) { - try { + if (File.Exists(configPath + item.Guid + Resources.PluginSettingsFileExtension)) + { + try + { item.Consumer.Settings = File.ReadAllBytes( configPath + item.Guid + Resources.PluginSettingsFileExtension); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -389,8 +457,10 @@ private bool addPlugin(Assembly assembly) { /// /// Gives a list of available producer-plugins. /// - public PluginItem[] ProducerPlugins { - get { + public PluginItem[] ProducerPlugins + { + get + { PluginItem[] plugins = new PluginItem[producerList.Count]; producerList.Values.CopyTo(plugins, 0); return plugins; @@ -400,8 +470,10 @@ public PluginItem[] ProducerPlugins { /// /// Gives a list of available consumer-plugins. /// - public PluginItem[] ConsumerPlugins { - get { + public PluginItem[] ConsumerPlugins + { + get + { PluginItem[] plugins = new PluginItem[consumerList.Count]; consumerList.Values.CopyTo(plugins, 0); return plugins; @@ -411,8 +483,10 @@ public PluginItem[] ConsumerPlugins { /// /// Gives a list of activated consumer-plugins. /// - public PluginItem[] ActiveConsumerPlugins { - get { + public PluginItem[] ActiveConsumerPlugins + { + get + { PluginItem[] plugins = new PluginItem[activeConsumers.Count]; activeConsumers.Values.CopyTo(plugins, 0); return plugins; @@ -422,62 +496,75 @@ public PluginItem[] ActiveConsumerPlugins { /// /// Returns a list of exceptions that happened during the last call /// - public List Exceptions { + public List Exceptions + { get { return exceptions; } } /// /// Gives the active producer-plugin or null, if no plugin is active. /// - public PluginItem ActiveProducerPlugin { + public PluginItem ActiveProducerPlugin + { get { return activeProducer; } } /// /// Is manager ready to start. /// - public bool CanStart { + public bool CanStart + { get { return (State == PluginState.Ready || State == PluginState.Paused); } } /// /// Is manger ready for pause-mode. /// - public bool CanPause { + public bool CanPause + { get { return (State == PluginState.Running || State == PluginState.Ready); } } /// /// Is manager still running and can stop. /// - public bool CanStop { + public bool CanStop + { get { return (State == PluginState.Running || State == PluginState.Paused); } } /// /// Returns the current state of this manager. /// - public PluginState State { - get { - if (!ignoreStateupdate) { + public PluginState State + { + get + { + if (!ignoreStateupdate) + { PluginState output = PluginState.NotReady; // capture producerstate - if (activeProducer != null) { + if (activeProducer != null) + { output = activeProducer.Producer.State; } // check for changes - switch (output) { + switch (output) + { case PluginState.NotReady: case PluginState.Ready: if (lastState == PluginState.Running || - lastState == PluginState.Paused) { + lastState == PluginState.Paused) + { // Producer switched from running/paused to notReady or ready // All running consumer have to stop - foreach (PluginItem item in activeConsumers.Values) { + foreach (PluginItem item in activeConsumers.Values) + { if (item.Consumer.State == PluginState.Running || - item.Consumer.State == PluginState.Paused) { + item.Consumer.State == PluginState.Paused) + { item.Consumer.Stop(); } } @@ -486,12 +573,15 @@ public PluginState State { case PluginState.Running: if (lastState == PluginState.NotReady || lastState == PluginState.Ready || - lastState == PluginState.Paused) { + lastState == PluginState.Paused) + { // Producer switched from somewhere to running // All ready or paused consumer have to start - foreach (PluginItem item in activeConsumers.Values) { + foreach (PluginItem item in activeConsumers.Values) + { if (item.Consumer.State == PluginState.Paused || - item.Consumer.State == PluginState.Ready) { + item.Consumer.State == PluginState.Ready) + { item.Consumer.Start(); } } @@ -499,12 +589,15 @@ public PluginState State { break; case PluginState.Paused: if (lastState == PluginState.Running || - lastState == PluginState.Ready) { + lastState == PluginState.Ready) + { // Producer switched to pause-mode // All ready or running consumer have to pause - foreach (PluginItem item in activeConsumers.Values) { + foreach (PluginItem item in activeConsumers.Values) + { if (item.Consumer.State == PluginState.Running || - item.Consumer.State == PluginState.Ready) { + item.Consumer.State == PluginState.Ready) + { item.Consumer.Pause(); } } @@ -513,7 +606,8 @@ public PluginState State { } // Start requestLoop, if needed - if ((output == PluginState.Running || output == PluginState.Paused) && requestThread == null) { + if ((output == PluginState.Running || output == PluginState.Paused) && requestThread == null) + { requestThread = new Thread(requestLoop); requestThread.IsBackground = true; requestThread.Priority = ThreadPriority.Normal; @@ -524,7 +618,8 @@ public PluginState State { lastState = output; return output; } - else { + else + { return lastState; } } @@ -533,9 +628,12 @@ public PluginState State { /// /// Gives the number of current simulation-round. /// - public int CurrentRound { - get { - if (lastSimulationState != null) { + public int CurrentRound + { + get + { + if (lastSimulationState != null) + { return lastSimulationState.CurrentRound; } return 0; @@ -545,9 +643,12 @@ public int CurrentRound { /// /// Gives the number of total rounds for the current simulation. /// - public int TotalRounds { - get { - if (lastSimulationState != null) { + public int TotalRounds + { + get + { + if (lastSimulationState != null) + { return Math.Max(lastSimulationState.CurrentRound, lastSimulationState.TotalRounds); } return 0; @@ -557,12 +658,16 @@ public int TotalRounds { /// /// Gives the current frame-rate for this simulation. /// - public float FrameRate { - get { + public float FrameRate + { + get + { // calculate new average - if (frameRateInvalidate) { + if (frameRateInvalidate) + { frameRateAverage = 0; - for (int i = 0; i < FRAMERATE_SPAN; i++) { + for (int i = 0; i < FRAMERATE_SPAN; i++) + { frameRateAverage += frameRateHistory[i]; } frameRateAverage /= FRAMERATE_SPAN; @@ -572,19 +677,23 @@ public float FrameRate { // deliver return frameRateAverage; } - private set { + private set + { // write new value in ringbuffer frameRateInvalidate = true; - frameRateHistory[frameRatePosition++%FRAMERATE_SPAN] = value; + frameRateHistory[frameRatePosition++ % FRAMERATE_SPAN] = value; } } /// /// Gives the current frame-rate-limit, if limiter is enabled. /// - public float FrameLimit { - get { - if (FrameLimiterEnabled) { + public float FrameLimit + { + get + { + if (FrameLimiterEnabled) + { return frameLimit; } return 0.0f; @@ -594,14 +703,16 @@ public float FrameLimit { /// /// Gives the state of the frame-rate-limiter. /// - public bool FrameLimiterEnabled { + public bool FrameLimiterEnabled + { get { return speedLimiter; } } /// /// Gives the current configuration. /// - public Configuration Configuration { + public Configuration Configuration + { get { return config; } } @@ -613,15 +724,19 @@ public Configuration Configuration { /// drops a consumer from active list. /// /// guid of plugin to drop - public void DeactivateConsumer(Guid guid) { + public void DeactivateConsumer(Guid guid) + { // Check, if plugin exists - if (!consumerList.ContainsKey(guid)) { + if (!consumerList.ContainsKey(guid)) + { throw new InvalidOperationException(Resource.PluginManagerDeactivateConsumerNotInList); } // Drop from active list - lock (activeConsumers) { - if (activeConsumers.ContainsKey(guid)) { + lock (activeConsumers) + { + if (activeConsumers.ContainsKey(guid)) + { PluginItem plugin = activeConsumers[guid]; activeConsumers.Remove(guid); @@ -629,7 +744,8 @@ public void DeactivateConsumer(Guid guid) { // Stop, if still running if (plugin.Consumer.State == PluginState.Running || - plugin.Consumer.State == PluginState.Paused) { + plugin.Consumer.State == PluginState.Paused) + { plugin.Consumer.Stop(); } } @@ -640,29 +756,36 @@ public void DeactivateConsumer(Guid guid) { /// Adds a plugin to active list /// /// guid of new plugin - public void ActivateConsumer(Guid guid) { + public void ActivateConsumer(Guid guid) + { // Check, if plugin exists - if (!consumerList.ContainsKey(guid)) { + if (!consumerList.ContainsKey(guid)) + { throw new InvalidOperationException(Resource.PluginManagerActivateConsumerNotInList); } // Add to list - lock (activeConsumers) { - if (!activeConsumers.ContainsKey(guid)) { + lock (activeConsumers) + { + if (!activeConsumers.ContainsKey(guid)) + { PluginItem plugin = consumerList[guid]; // Activate, if simulation still running - if (State == PluginState.Running) { + if (State == PluginState.Running) + { plugin.Consumer.Start(); } - else if (State == PluginState.Paused) { + else if (State == PluginState.Paused) + { plugin.Consumer.Pause(); } activeConsumers.Add(guid, plugin); // mark as selected in config - if (!config.selectedPlugins.Contains(guid)) { + if (!config.selectedPlugins.Contains(guid)) + { config.selectedPlugins.Add(guid); } } @@ -673,10 +796,12 @@ public void ActivateConsumer(Guid guid) { /// Deactivates the given producer /// /// guid of producer - public void DeactivateProducer(Guid guid) { + public void DeactivateProducer(Guid guid) + { ignoreStateupdate = true; - if (activeProducer != null && activeProducer.Guid == guid) { + if (activeProducer != null && activeProducer.Guid == guid) + { // unhook producer Stop(); activeProducer = null; @@ -689,24 +814,29 @@ public void DeactivateProducer(Guid guid) { /// Changes the active Producer /// /// guid of new producer - public void ActivateProducer(Guid guid) { + public void ActivateProducer(Guid guid) + { ignoreStateupdate = true; // check, if plugin with that guid exists - if (!producerList.ContainsKey(guid)) { + if (!producerList.ContainsKey(guid)) + { throw new InvalidOperationException(Resource.PluginManagerActivateProducerNotInList); } // check, if same plugin is still active - if (activeProducer == null || activeProducer.Guid != guid) { + if (activeProducer == null || activeProducer.Guid != guid) + { // unhook old producer - if (activeProducer != null) { + if (activeProducer != null) + { DeactivateProducer(activeProducer.Guid); } // hook the new one activeProducer = producerList[guid]; - if (!config.selectedPlugins.Contains(guid)) { + if (!config.selectedPlugins.Contains(guid)) + { config.selectedPlugins.Add(guid); } } @@ -716,14 +846,17 @@ public void ActivateProducer(Guid guid) { /// /// Starts the manager, of its ready /// - public void Start() { + public void Start() + { ignoreStateupdate = true; // Start the producer - lock (activeProducer) { + lock (activeProducer) + { if (activeProducer != null && (activeProducer.Producer.State == PluginState.Ready || - activeProducer.Producer.State == PluginState.Paused)) { + activeProducer.Producer.State == PluginState.Paused)) + { activeProducer.Producer.Start(); } } @@ -734,14 +867,17 @@ public void Start() { /// /// pause the manager /// - public void Pause() { + public void Pause() + { ignoreStateupdate = true; // Suspend the producer - lock (activeProducer) { + lock (activeProducer) + { if (activeProducer != null && (activeProducer.Producer.State == PluginState.Running || - activeProducer.Producer.State == PluginState.Ready)) { + activeProducer.Producer.State == PluginState.Ready)) + { activeProducer.Producer.Pause(); } } @@ -752,13 +888,16 @@ public void Pause() { /// /// Stops the manager /// - public void Stop() { + public void Stop() + { ignoreStateupdate = true; - lock (activeProducer) { + lock (activeProducer) + { if (activeProducer != null && (activeProducer.Producer.State == PluginState.Running || - activeProducer.Producer.State == PluginState.Paused)) { + activeProducer.Producer.State == PluginState.Paused)) + { activeProducer.Producer.Stop(); } } @@ -769,25 +908,30 @@ public void Stop() { /// /// Loads the settings to configuration /// - public void LoadSettings() { + public void LoadSettings() + { ignoreStateupdate = true; // check, if configfile exists - if (File.Exists(configPath + Resources.GlobalSettingsFileName)) { + if (File.Exists(configPath + Resources.GlobalSettingsFileName)) + { // read configfile FileStream file = File.Open(configPath + Resources.GlobalSettingsFileName, FileMode.Open); - try { - XmlSerializer serializer = new XmlSerializer(typeof (Configuration)); - config = (Configuration) serializer.Deserialize(file); + try + { + XmlSerializer serializer = new XmlSerializer(typeof(Configuration)); + config = (Configuration)serializer.Deserialize(file); config.loaded = true; SetSpeedLimit(config.speedLimitEnabled, config.speedLimit); } - catch (Exception ex) { + catch (Exception ex) + { throw new Exception( Resource.PluginManagerSettingsLoadFailed, ex); } - finally { + finally + { file.Close(); } } @@ -797,13 +941,15 @@ public void LoadSettings() { /// /// Saves the settings of plugin-manager to configuration-file. /// - public void SaveSettings() { + public void SaveSettings() + { ignoreStateupdate = true; - if (!Directory.Exists(configPath)) { + if (!Directory.Exists(configPath)) + { Directory.CreateDirectory(configPath); } - XmlSerializer serializer = new XmlSerializer(typeof (Configuration)); + XmlSerializer serializer = new XmlSerializer(typeof(Configuration)); MemoryStream puffer = new MemoryStream(); serializer.Serialize(puffer, config); File.WriteAllBytes(configPath + Resources.GlobalSettingsFileName, puffer.ToArray()); @@ -811,14 +957,17 @@ public void SaveSettings() { // Save also plugin-Settings // Producer-Stuff - foreach (PluginItem plugin in producerList.Values) { - try { + foreach (PluginItem plugin in producerList.Values) + { + try + { byte[] temp = plugin.Producer.Settings; if (temp != null && temp.Length > 0) - File.WriteAllBytes(configPath + plugin.Guid + Resources.PluginSettingsFileExtension, + File.WriteAllBytes(configPath + plugin.Guid + Resources.PluginSettingsFileExtension, temp); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -828,14 +977,17 @@ public void SaveSettings() { } // Consumer-Stuff - foreach (PluginItem plugin in consumerList.Values) { - try { + foreach (PluginItem plugin in consumerList.Values) + { + try + { byte[] temp = plugin.Consumer.Settings; if (temp != null && temp.Length > 0) File.WriteAllBytes( configPath + plugin.Guid + Resources.PluginSettingsFileExtension, temp); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -849,15 +1001,20 @@ public void SaveSettings() { /// Sets the current visible plugin /// /// visible Plugin - public void SetVisiblePlugin(Guid guid) { + public void SetVisiblePlugin(Guid guid) + { ignoreStateupdate = true; // Set old plugin to invisible - if (visiblePlugin != null) { - if (visiblePlugin.IsConsumer) { - try { + if (visiblePlugin != null) + { + if (visiblePlugin.IsConsumer) + { + try + { visiblePlugin.Consumer.SetVisibility(false); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -867,11 +1024,14 @@ public void SetVisiblePlugin(Guid guid) { ex)); } } - else { - try { + else + { + try + { visiblePlugin.Producer.SetVisibility(false); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -884,12 +1044,15 @@ public void SetVisiblePlugin(Guid guid) { } // Set new plugin to visible - if (producerList.ContainsKey(guid)) { + if (producerList.ContainsKey(guid)) + { visiblePlugin = producerList[guid]; - try { + try + { visiblePlugin.Producer.SetVisibility(true); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -899,12 +1062,15 @@ public void SetVisiblePlugin(Guid guid) { ex)); } } - else if (consumerList.ContainsKey(guid)) { + else if (consumerList.ContainsKey(guid)) + { visiblePlugin = consumerList[guid]; - try { + try + { visiblePlugin.Consumer.SetVisibility(true); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -914,7 +1080,8 @@ public void SetVisiblePlugin(Guid guid) { ex)); } } - else { + else + { visiblePlugin = null; } ignoreStateupdate = false; @@ -925,22 +1092,26 @@ public void SetVisiblePlugin(Guid guid) { /// /// sets the limitation to enabled /// limits the speed to a specific frame-rate - public void SetSpeedLimit(bool enabled, float framesPerSecond) { - if (enabled) { + public void SetSpeedLimit(bool enabled, float framesPerSecond) + { + if (enabled) + { // Check for supported value - if (framesPerSecond <= 0.0f) { + if (framesPerSecond <= 0.0f) + { throw new ArgumentOutOfRangeException( "framesPerSecond", framesPerSecond, Resource.PluginManagerFrameRateTooLow); } frameLimit = framesPerSecond; - frameLimitMs = 1000/framesPerSecond; + frameLimitMs = 1000 / framesPerSecond; speedLimiter = true; config.speedLimit = frameLimit; config.speedLimitEnabled = true; } - else { + else + { frameLimit = 0.0f; frameLimitMs = 0.0f; speedLimiter = false; @@ -957,7 +1128,8 @@ public void SetSpeedLimit(bool enabled, float framesPerSecond) { /// /// The game-loop. Runs, until state is set to Ready or notReady /// - private void requestLoop() { + private void requestLoop() + { // Limiter- and frame-rate-handling Stopwatch watch = new Stopwatch(); @@ -967,10 +1139,12 @@ private void requestLoop() { // Mainloop while (activeProducer != null && (activeProducer.Producer.State == PluginState.Running || - activeProducer.Producer.State == PluginState.Paused)) { + activeProducer.Producer.State == PluginState.Paused)) + { // request Simulationstate, if loop is not paused - if (activeProducer != null && activeProducer.Producer.State == PluginState.Running) { + if (activeProducer != null && activeProducer.Producer.State == PluginState.Running) + { watch.Reset(); watch.Start(); @@ -978,16 +1152,22 @@ private void requestLoop() { SimulationState simulationState = new SimulationState(); // Request all consumers with CreateState-Method - lock (activeConsumers) { - foreach (PluginItem item in activeConsumers.Values) { - try { - lock (item) { - if (item.Consumer.State == PluginState.Running) { + lock (activeConsumers) + { + foreach (PluginItem item in activeConsumers.Values) + { + try + { + lock (item) + { + if (item.Consumer.State == PluginState.Running) + { item.Consumer.CreateState(ref simulationState); } } } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -1000,18 +1180,23 @@ private void requestLoop() { } // Break, if there was an interrupt - if (interrupt) { + if (interrupt) + { break; } // Request producers Simulationstate - lock (activeProducer) { - try { - if (activeProducer != null && activeProducer.Producer.State == PluginState.Running) { + lock (activeProducer) + { + try + { + if (activeProducer != null && activeProducer.Producer.State == PluginState.Running) + { activeProducer.Producer.CreateState(ref simulationState); } } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -1025,16 +1210,22 @@ private void requestLoop() { } // Request all consumers with CreatingState-Method - lock (activeConsumers) { - foreach (PluginItem item in activeConsumers.Values) { - try { - lock (item) { - if (item.Consumer.State == PluginState.Running) { + lock (activeConsumers) + { + foreach (PluginItem item in activeConsumers.Values) + { + try + { + lock (item) + { + if (item.Consumer.State == PluginState.Running) + { item.Consumer.CreatingState(ref simulationState); } } } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -1047,21 +1238,28 @@ private void requestLoop() { } // On interrupt stop loop - if (interrupt) { + if (interrupt) + { break; } // Request all consumers with CreatedState-Method and also check for interrupt-Request - lock (activeConsumers) { - foreach (PluginItem item in activeConsumers.Values) { - try { - lock (item) { - if (item.Consumer.State == PluginState.Running) { + lock (activeConsumers) + { + foreach (PluginItem item in activeConsumers.Values) + { + try + { + lock (item) + { + if (item.Consumer.State == PluginState.Running) + { item.Consumer.CreatedState(ref simulationState); } } } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -1074,17 +1272,21 @@ private void requestLoop() { } // On interrupt stop loop - if (interrupt) { + if (interrupt) + { break; } // Update UI - try { - if (activeProducer != null && activeProducer.Producer.State == PluginState.Running) { + try + { + if (activeProducer != null && activeProducer.Producer.State == PluginState.Running) + { context.Send(delegate { activeProducer.Producer.UpdateUI(simulationState); }, null); } } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -1096,14 +1298,18 @@ private void requestLoop() { break; } - foreach (PluginItem item in activeConsumers.Values) { - try { - if (item.Consumer.State == PluginState.Running) { + foreach (PluginItem item in activeConsumers.Values) + { + try + { + if (item.Consumer.State == PluginState.Running) + { context.Send(delegate { item.Consumer.UpdateUI(simulationState); }, null); interrupt |= item.Consumer.Interrupt; } } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( @@ -1115,7 +1321,8 @@ private void requestLoop() { } // On interrupt stop loop - if (interrupt) { + if (interrupt) + { break; } @@ -1123,26 +1330,32 @@ private void requestLoop() { lastSimulationState = simulationState; // Framelimiter - if (FrameLimiterEnabled) { - while (watch.ElapsedMilliseconds < frameLimitMs) { + if (FrameLimiterEnabled) + { + while (watch.ElapsedMilliseconds < frameLimitMs) + { Thread.Sleep(1); } } // calculation of frame-time - FrameRate = watch.ElapsedMilliseconds > 0 ? 1000/watch.ElapsedMilliseconds : 0; + FrameRate = watch.ElapsedMilliseconds > 0 ? 1000 / watch.ElapsedMilliseconds : 0; } - else { + else + { Thread.Sleep(20); } } - + // Interrupt - if (interrupt) { - try { + if (interrupt) + { + try + { context.Send(delegate { activeProducer.Producer.Stop(); }, null); } - catch (Exception ex) { + catch (Exception ex) + { exceptions.Add( new Exception( string.Format( diff --git a/AntMe/Plugins.Designer.cs b/AntMe/Plugins.Designer.cs index 2046bcf..8b6074b 100644 --- a/AntMe/Plugins.Designer.cs +++ b/AntMe/Plugins.Designer.cs @@ -29,9 +29,9 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Plugins)); this.pluginListView = new System.Windows.Forms.ListView(); - this.nameColumn = new System.Windows.Forms.ColumnHeader(); - this.versionColumn = new System.Windows.Forms.ColumnHeader(); - this.descriptionColumn = new System.Windows.Forms.ColumnHeader(); + this.nameColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.versionColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.descriptionColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.cancelButton = new System.Windows.Forms.Button(); this.addPluginButton = new System.Windows.Forms.Button(); this.descriptionLabel = new System.Windows.Forms.Label(); @@ -40,16 +40,12 @@ private void InitializeComponent() // // pluginListView // - this.pluginListView.AccessibleDescription = null; - this.pluginListView.AccessibleName = null; resources.ApplyResources(this.pluginListView, "pluginListView"); - this.pluginListView.BackgroundImage = null; this.pluginListView.CheckBoxes = true; this.pluginListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.nameColumn, this.versionColumn, this.descriptionColumn}); - this.pluginListView.Font = null; this.pluginListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] { ((System.Windows.Forms.ListViewGroup)(resources.GetObject("pluginListView.Groups"))), ((System.Windows.Forms.ListViewGroup)(resources.GetObject("pluginListView.Groups1")))}); @@ -74,32 +70,21 @@ private void InitializeComponent() // // cancelButton // - this.cancelButton.AccessibleDescription = null; - this.cancelButton.AccessibleName = null; resources.ApplyResources(this.cancelButton, "cancelButton"); - this.cancelButton.BackgroundImage = null; this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.cancelButton.Font = null; this.cancelButton.Name = "cancelButton"; this.cancelButton.UseVisualStyleBackColor = true; // // addPluginButton // - this.addPluginButton.AccessibleDescription = null; - this.addPluginButton.AccessibleName = null; resources.ApplyResources(this.addPluginButton, "addPluginButton"); - this.addPluginButton.BackgroundImage = null; - this.addPluginButton.Font = null; this.addPluginButton.Name = "addPluginButton"; this.addPluginButton.UseVisualStyleBackColor = true; this.addPluginButton.Click += new System.EventHandler(this.addPluginButton_Click); // // descriptionLabel // - this.descriptionLabel.AccessibleDescription = null; - this.descriptionLabel.AccessibleName = null; resources.ApplyResources(this.descriptionLabel, "descriptionLabel"); - this.descriptionLabel.Font = null; this.descriptionLabel.Name = "descriptionLabel"; // // openFileDialog @@ -111,18 +96,13 @@ private void InitializeComponent() // Plugins // this.AcceptButton = this.cancelButton; - this.AccessibleDescription = null; - this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackgroundImage = null; this.CancelButton = this.cancelButton; this.Controls.Add(this.descriptionLabel); this.Controls.Add(this.addPluginButton); this.Controls.Add(this.cancelButton); this.Controls.Add(this.pluginListView); - this.Font = null; - this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "Plugins"; diff --git a/AntMe/Plugins.cs b/AntMe/Plugins.cs index 98f7280..4097f44 100644 --- a/AntMe/Plugins.cs +++ b/AntMe/Plugins.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Windows.Forms; namespace AntMe.Gui { @@ -59,7 +60,9 @@ private void addPluginButton_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog(this) == DialogResult.OK) { try { foreach (string filename in openFileDialog.FileNames) { - manager.CheckForPlugin(filename); + + FileInfo fileInfo = new FileInfo(filename); + manager.CheckForPlugin(fileInfo); } if (manager.Exceptions.Count > 0) { ExceptionViewer problems = new ExceptionViewer(manager.Exceptions); @@ -67,6 +70,7 @@ private void addPluginButton_Click(object sender, EventArgs e) { manager.Exceptions.Clear(); } UpdateList(); + manager.SaveSettings(); } catch (Exception ex) { MessageBox.Show(this, ex.Message); diff --git a/AntMe/Plugins.resx b/AntMe/Plugins.resx index 902bcdd..fcd70b8 100644 --- a/AntMe/Plugins.resx +++ b/AntMe/Plugins.resx @@ -112,206 +112,206 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Plugins + + + Top, Bottom, Left, Right - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Name - - - 12, 12 + + + 134 - - 100, 23 + + Version - - descriptionColumn + + 71 - - 0 + + Description + + + 346 + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh + ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG + AwAAAAhQcm9kdWNlcgX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxBbGlnbm1lbnQB + AAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAACHByb2R1Y2VyCw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh + ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG + AwAAAAhDb25zdW1lcgX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxBbGlnbm1lbnQB + AAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAACGNvbnN1bWVyCw== + + + 2, 65 - - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 560, 299 - - - Top, Bottom, Left, Right + + 1 - - Name + + pluginListView - - openFileDialog + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 580, 430 + + $this - - AntMe! Plugins + + 3 Bottom, Right - - nameColumn - - - versionColumn + + 487, 369 75, 23 + + 3 + Close - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + cancelButton - - 2, 369 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - addPluginButton + + $this - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 2 - - This is a list of all the available plugins. Activate the ones you want to use with AntMe!. + + Bottom, Left - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 2, 369 - - 6, 13 + + 100, 23 - - Description + + 2 - - $this + + Load Plugin... - - Bottom, Left + + addPluginButton - - 2 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - + 1 - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Load Plugin... - - - 564, 394 + + 12, 12 525, 40 - - cancelButton - - - Version - - - AntMe-Plugins|*.dll + + 0 - - pluginListView + + This is a list of all the available plugins. Activate the ones you want to use with AntMe!. - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh - ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG - AwAAAAhQcm9kdWNlcgX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxBbGlnbm1lbnQB - AAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAACHByb2R1Y2VyCw== - + + descriptionLabel - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 346 + + $this - - 2 + + 0 - - 487, 369 + + 17, 17 + + + AntMe-Plugins|*.dll - - $this + + True + + + 6, 13 - - 134 + + 564, 394 - - 0 + + 580, 430 CenterParent - - descriptionLabel + + AntMe! Plugins - - $this + + nameColumn - - 3 + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh - ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG - AwAAAAhDb25zdW1lcgX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxBbGlnbm1lbnQB - AAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAACGNvbnN1bWVyCw== - + + versionColumn - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3 + + descriptionColumn - - 71 + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 560, 299 + + openFileDialog - - 1 + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Plugins + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - 17, 17 - \ No newline at end of file diff --git a/AntMe/Properties/AssemblyInfo.cs b/AntMe/Properties/AssemblyInfo.cs index e7a7081..6740573 100644 --- a/AntMe/Properties/AssemblyInfo.cs +++ b/AntMe/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly: AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly: AssemblyCulture("")] @@ -31,5 +31,5 @@ // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.7.1.331")] -[assembly: AssemblyFileVersion("1.7.1.331")] +[assembly: AssemblyVersion("1.7.2.337")] +[assembly: AssemblyFileVersion("1.7.2.337")] diff --git a/AntMe/Properties/Resources.Designer.cs b/AntMe/Properties/Resources.Designer.cs index 66a67fb..1dc228c 100644 --- a/AntMe/Properties/Resources.Designer.cs +++ b/AntMe/Properties/Resources.Designer.cs @@ -168,7 +168,7 @@ internal static string PluginSearchFilter { } /// - /// Looks up a localized string similar to \\plugins. + /// Looks up a localized string similar to plugins. /// internal static string PluginSearchFolder { get { diff --git a/AntMe/Properties/Resources.resx b/AntMe/Properties/Resources.resx index 0426194..942e3dd 100644 --- a/AntMe/Properties/Resources.resx +++ b/AntMe/Properties/Resources.resx @@ -122,7 +122,7 @@ ..\Resources\welcome.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - \\plugins + plugins Additional Plugin-path for autmated plugin-search (PluginManager.cs) diff --git a/AntMe/Resource.Designer.cs b/AntMe/Resource.Designer.cs index d9b4ce2..78e8b13 100644 --- a/AntMe/Resource.Designer.cs +++ b/AntMe/Resource.Designer.cs @@ -132,6 +132,15 @@ internal static string MainMessageBoxNoTutorialTitle { } } + /// + /// Looks up a localized string similar to No Mode selected. + /// + internal static string MainNoModeSelected { + get { + return ResourceManager.GetString("MainNoModeSelected", resourceCulture); + } + } + /// /// Looks up a localized string similar to Maximum. /// diff --git a/AntMe/Resource.de.resx b/AntMe/Resource.de.resx index 5d04509..f9ddca0 100644 --- a/AntMe/Resource.de.resx +++ b/AntMe/Resource.de.resx @@ -150,6 +150,9 @@ Tutorials Title of messagebox to inform about missing tutorials (Main.cs) + + KeinModus ausgewählt + Maximum string for maximal speed without limit (Main.cs) diff --git a/AntMe/Resource.resx b/AntMe/Resource.resx index 511e1ca..b1134d4 100644 --- a/AntMe/Resource.resx +++ b/AntMe/Resource.resx @@ -150,6 +150,9 @@ Tutorials Title of messagebox to inform about missing tutorials (Main.cs) + + No Mode selected + Maximum string for maximal speed without limit (Main.cs) diff --git a/DemoAmeisen/DemoAmeisen.csproj b/DemoAmeisen/DemoAmeisen.csproj index f67a540..971fac5 100644 --- a/DemoAmeisen/DemoAmeisen.csproj +++ b/DemoAmeisen/DemoAmeisen.csproj @@ -81,6 +81,7 @@ {35753E72-07F3-4F18-916C-479850EC375F} SimulationCore + False diff --git a/DemoAmeisen/KreisAmeisen.cs b/DemoAmeisen/KreisAmeisen.cs index 7605e5d..cac9871 100644 --- a/DemoAmeisen/KreisAmeisen.cs +++ b/DemoAmeisen/KreisAmeisen.cs @@ -1,319 +1,319 @@ -using System; -using System.Collections.Generic; - -using AntMe.Deutsch; - -namespace AntMe.Spieler.WolfgangGallo -{ - - [Spieler( - Volkname = "KreisAmeisen", - Vorname = "Wolfgang", - Nachname = "Gallo" - )] - - [Kaste( - Name = "Wächter", - GeschwindigkeitModifikator = -1, - DrehgeschwindigkeitModifikator = -1, - LastModifikator = -1, - ReichweiteModifikator = 1, - SichtweiteModifikator = -1, - EnergieModifikator = 2, - AngriffModifikator = 1 - )] - [Kaste( - Name = "Sammler", - GeschwindigkeitModifikator = 0, - DrehgeschwindigkeitModifikator = 0, - LastModifikator = 0, - ReichweiteModifikator = 0, - SichtweiteModifikator = 0, - EnergieModifikator = 0, - AngriffModifikator = 0 - )] - - public class KreisAmeise : Basisameise - { - - // Variablen die ein n-Eck beschreiben. - private static bool erzeugeWächter = true; - private bool aufEntfernungGehen = true; - private Zucker gemerkterZucker = null; - private bool imKreisGehen = false; - private int innenWinkel; - private int rückwärtsFaktor; - private int seitenLänge; - private int umkreisRadius; - - /// - /// Der Konstruktor. - /// - public KreisAmeise() - { - // TODO: reparieren - funktioniert so nämlich nicht mehr! - if (Kaste == "Wächter") - { - umkreisRadius = Zufall.Zahl(10, Sichtweite * 2); - rückwärtsFaktor = Zufall.Zahl(2) == 0 ? 1 : -1; - - // Der Kreis um den Zuckerhaufen wird durch ein n-Eck angenähert. - int n = umkreisRadius / 2; - seitenLänge = (int)(2 * umkreisRadius * Math.Sin(Math.PI / n)); - innenWinkel = 180 * (n - 2) / n; - } - } - - /// - /// Bestimmt den Typ einer neuen Ameise. - /// - /// Die Anzahl der von jedem Typ bereits vorhandenen - /// Ameisen. - /// Der Name des Typs der Ameise. - public override string BestimmeKaste(Dictionary anzahl) - { - if (erzeugeWächter) - { - erzeugeWächter = false; - return "Wächter"; - } - - erzeugeWächter = true; - return "Sammler"; - } - - #region Fortbewegung - - /// - /// Wird wiederholt aufgerufen, wenn der die Ameise nicht weiss wo sie - /// hingehen soll. - /// - public override void Wartet() - { - if (Kaste == "Wächter") - if (gemerkterZucker != null && aufEntfernungGehen) - { - // Bestimme die Entfernung zu der Kreisbahn. - int entfernung = - Koordinate.BestimmeEntfernung(this, gemerkterZucker) - umkreisRadius; - - // Gehe in Richtung Zucker bzw. vom Zucker weg auf die Kreisbahn. - if (entfernung > 0) - { - DreheZuZiel(gemerkterZucker); - GeheGeradeaus(entfernung); - } - else - { - DreheInRichtung - (Koordinate.BestimmeRichtung(this, gemerkterZucker) + 180); - GeheGeradeaus(-entfernung); - } - - aufEntfernungGehen = false; - imKreisGehen = true; - } - else if (gemerkterZucker != null && imKreisGehen) - { - // Bestimme die Richtung zum Zucker und zähle den halben Innenwinkel - // dazu. Das ergibt die Gehrichtung. - int richtung = Koordinate.BestimmeRichtung(this, gemerkterZucker) - + rückwärtsFaktor * innenWinkel / 2; - - DreheInRichtung(richtung); - GeheGeradeaus(seitenLänge); - } - else - GeheGeradeaus(); - else if (AktuelleLast > 0) - GeheZuBau(); - else if (gemerkterZucker != null) - GeheZuZiel(gemerkterZucker); - else - GeheGeradeaus(); - } - - /// - /// Wird einmal aufgerufen, wenn die Ameise ein Drittel ihrer maximalen - /// Reichweite überschritten hat. - /// - public override void WirdMüde() {} - - #endregion - #region Nahrung - - /// - /// Wird wiederholt aufgerufen, wenn die Ameise mindestens einen - /// Zuckerhaufen sieht. - /// - /// Der nächstgelegene Zuckerhaufen. - public override void Sieht(Zucker zucker) - { - SprüheMarkierung - (Koordinate.BestimmeRichtung(this, zucker), - Koordinate.BestimmeEntfernung(this, zucker)); - - if (Kaste == "Wächter") - { - if (gemerkterZucker == null) - { - // Dieser Aufruf ist nötig, damit in der nächsten Runde Wartet() - // aufgerufen wird. - BleibStehen(); - - gemerkterZucker = zucker; - aufEntfernungGehen = true; - } - } - else - { - if (gemerkterZucker == null) - gemerkterZucker = zucker; - - if (Ziel == null) - GeheZuZiel(zucker); - } - } - - /// - /// Wird wiederholt aufgerufen, wenn die Ameise mindstens ein - /// Obststück sieht. - /// - /// Das nächstgelegene Obststück. - public override void Sieht(Obst obst) {} - - /// - /// Wird einmal aufgerufen, wenn die Ameise einen Zuckerhaufen als Ziel - /// hat und bei diesem ankommt. - /// - /// Der Zuckerhaufen. - public override void ZielErreicht(Zucker zucker) - { - Nimm(zucker); - GeheZuBau(); - } - - /// - /// Wird einmal aufgerufen, wenn die Ameise ein Obststück als Ziel hat und - /// bei diesem ankommt. - /// - /// Das Obstück. - public override void ZielErreicht(Obst obst) {} - - #endregion - #region Kommunikation - - /// - /// Wird einmal aufgerufen, wenn die Ameise eine Markierung des selben - /// Volkes riecht. Einmal gerochene Markierungen werden nicht erneut - /// gerochen. - /// - /// Die nächste neue Markierung. - public override void RiechtFreund(Markierung markierung) - { - if (Kaste == "Wächter") - { - if (gemerkterZucker == null) - { - DreheInRichtung(markierung.Information); - GeheGeradeaus(); - } - } - else if (Ziel == null) - { - DreheInRichtung(markierung.Information); - GeheGeradeaus(); - } - } - - /// - /// Wird wiederholt aufgerufen, wenn die Ameise mindstens eine Ameise des - /// selben Volkes sieht. - /// - /// Die nächstgelegene befreundete Ameise. - public override void SiehtFreund(Ameise ameise) {} - - #endregion - #region Kampf - - /// - /// Wird wiederholt aufgerufen, wenn die Ameise mindestens einen Käfer - /// sieht. - /// - /// Der nächstgelegene Käfer. - public override void SiehtFeind(Wanze wanze) - { - if (Kaste == "Wächter" && gemerkterZucker != null) - GreifeAn(wanze); - } - - /// - /// Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Ameise eines - /// anderen Volkes sieht. - /// - /// Die nächstgelegen feindliche Ameise. - public override void SiehtFeind(Ameise ameise) - { - if (Kaste == "Wächter" && gemerkterZucker != null) - GreifeAn(ameise); - } - - /// - /// Wird wiederholt aufgerufen, wenn die Ameise von einem Käfer angegriffen - /// wird. - /// - /// Der angreifende Käfer. - public override void WirdAngegriffen(Wanze wanze) { } - - /// - /// Wird wiederholt aufgerufen in der die Ameise von einer Ameise eines - /// anderen Volkes Ameise angegriffen wird. - /// - /// Die angreifende feindliche Ameise. - public override void WirdAngegriffen(Ameise ameise) {} - - #endregion - #region Sonstiges - - /// - /// Wird einmal aufgerufen, wenn die Ameise gestorben ist. - /// - /// Die Todesart der Ameise - public override void IstGestorben(Todesart todesart) {} - - /// - /// Wird unabhängig von äußeren Umständen in jeder Runde aufgerufen. - /// - public override void Tick() - { - if (gemerkterZucker != null) - { - if (Ziel is Insekt) - { - int entfernung = Koordinate.BestimmeEntfernung(this, Ziel); - if (entfernung > Sichtweite * 3) - BleibStehen(); - } - - if (Kaste == "Wächter") - SprüheMarkierung - (Koordinate.BestimmeRichtung(this, gemerkterZucker), - Math.Min(Sichtweite, Koordinate.BestimmeEntfernung(this, gemerkterZucker))); - - if (gemerkterZucker.Menge <= 0) - { - gemerkterZucker = null; - if (Kaste == "Wächter") - { - imKreisGehen = false; - aufEntfernungGehen = false; - } - } - } - } - - #endregion - - } - -} \ No newline at end of file +//using System; +//using System.Collections.Generic; + +//using AntMe.Deutsch; + +//namespace AntMe.Spieler.WolfgangGallo +//{ + +// [Spieler( +// Volkname = "KreisAmeisen", +// Vorname = "Wolfgang", +// Nachname = "Gallo" +// )] + +// [Kaste( +// Name = "Wächter", +// GeschwindigkeitModifikator = -1, +// DrehgeschwindigkeitModifikator = -1, +// LastModifikator = -1, +// ReichweiteModifikator = 1, +// SichtweiteModifikator = -1, +// EnergieModifikator = 2, +// AngriffModifikator = 1 +// )] +// [Kaste( +// Name = "Sammler", +// GeschwindigkeitModifikator = 0, +// DrehgeschwindigkeitModifikator = 0, +// LastModifikator = 0, +// ReichweiteModifikator = 0, +// SichtweiteModifikator = 0, +// EnergieModifikator = 0, +// AngriffModifikator = 0 +// )] + +// public class KreisAmeise : Basisameise +// { + +// // Variablen die ein n-Eck beschreiben. +// private static bool erzeugeWächter = true; +// private bool aufEntfernungGehen = true; +// private Zucker gemerkterZucker = null; +// private bool imKreisGehen = false; +// private int innenWinkel; +// private int rückwärtsFaktor; +// private int seitenLänge; +// private int umkreisRadius; + +// /// +// /// Der Konstruktor. +// /// +// public KreisAmeise() +// { +// // TODO: reparieren - funktioniert so nämlich nicht mehr! +// if (Kaste == "Wächter") +// { +// umkreisRadius = Zufall.Zahl(10, Sichtweite * 2); +// rückwärtsFaktor = Zufall.Zahl(2) == 0 ? 1 : -1; + +// // Der Kreis um den Zuckerhaufen wird durch ein n-Eck angenähert. +// int n = umkreisRadius / 2; +// seitenLänge = (int)(2 * umkreisRadius * Math.Sin(Math.PI / n)); +// innenWinkel = 180 * (n - 2) / n; +// } +// } + +// /// +// /// Bestimmt den Typ einer neuen Ameise. +// /// +// /// Die Anzahl der von jedem Typ bereits vorhandenen +// /// Ameisen. +// /// Der Name des Typs der Ameise. +// public override string BestimmeKaste(Dictionary anzahl) +// { +// if (erzeugeWächter) +// { +// erzeugeWächter = false; +// return "Wächter"; +// } + +// erzeugeWächter = true; +// return "Sammler"; +// } + +// #region Fortbewegung + +// /// +// /// Wird wiederholt aufgerufen, wenn der die Ameise nicht weiss wo sie +// /// hingehen soll. +// /// +// public override void Wartet() +// { +// if (Kaste == "Wächter") +// if (gemerkterZucker != null && aufEntfernungGehen) +// { +// // Bestimme die Entfernung zu der Kreisbahn. +// int entfernung = +// Koordinate.BestimmeEntfernung(this, gemerkterZucker) - umkreisRadius; + +// // Gehe in Richtung Zucker bzw. vom Zucker weg auf die Kreisbahn. +// if (entfernung > 0) +// { +// DreheZuZiel(gemerkterZucker); +// GeheGeradeaus(entfernung); +// } +// else +// { +// DreheInRichtung +// (Koordinate.BestimmeRichtung(this, gemerkterZucker) + 180); +// GeheGeradeaus(-entfernung); +// } + +// aufEntfernungGehen = false; +// imKreisGehen = true; +// } +// else if (gemerkterZucker != null && imKreisGehen) +// { +// // Bestimme die Richtung zum Zucker und zähle den halben Innenwinkel +// // dazu. Das ergibt die Gehrichtung. +// int richtung = Koordinate.BestimmeRichtung(this, gemerkterZucker) +// + rückwärtsFaktor * innenWinkel / 2; + +// DreheInRichtung(richtung); +// GeheGeradeaus(seitenLänge); +// } +// else +// GeheGeradeaus(); +// else if (AktuelleLast > 0) +// GeheZuBau(); +// else if (gemerkterZucker != null) +// GeheZuZiel(gemerkterZucker); +// else +// GeheGeradeaus(); +// } + +// /// +// /// Wird einmal aufgerufen, wenn die Ameise ein Drittel ihrer maximalen +// /// Reichweite überschritten hat. +// /// +// public override void WirdMüde() {} + +// #endregion +// #region Nahrung + +// /// +// /// Wird wiederholt aufgerufen, wenn die Ameise mindestens einen +// /// Zuckerhaufen sieht. +// /// +// /// Der nächstgelegene Zuckerhaufen. +// public override void Sieht(Zucker zucker) +// { +// SprüheMarkierung +// (Koordinate.BestimmeRichtung(this, zucker), +// Koordinate.BestimmeEntfernung(this, zucker)); + +// if (Kaste == "Wächter") +// { +// if (gemerkterZucker == null) +// { +// // Dieser Aufruf ist nötig, damit in der nächsten Runde Wartet() +// // aufgerufen wird. +// BleibStehen(); + +// gemerkterZucker = zucker; +// aufEntfernungGehen = true; +// } +// } +// else +// { +// if (gemerkterZucker == null) +// gemerkterZucker = zucker; + +// if (Ziel == null) +// GeheZuZiel(zucker); +// } +// } + +// /// +// /// Wird wiederholt aufgerufen, wenn die Ameise mindstens ein +// /// Obststück sieht. +// /// +// /// Das nächstgelegene Obststück. +// public override void Sieht(Obst obst) {} + +// /// +// /// Wird einmal aufgerufen, wenn die Ameise einen Zuckerhaufen als Ziel +// /// hat und bei diesem ankommt. +// /// +// /// Der Zuckerhaufen. +// public override void ZielErreicht(Zucker zucker) +// { +// Nimm(zucker); +// GeheZuBau(); +// } + +// /// +// /// Wird einmal aufgerufen, wenn die Ameise ein Obststück als Ziel hat und +// /// bei diesem ankommt. +// /// +// /// Das Obstück. +// public override void ZielErreicht(Obst obst) {} + +// #endregion +// #region Kommunikation + +// /// +// /// Wird einmal aufgerufen, wenn die Ameise eine Markierung des selben +// /// Volkes riecht. Einmal gerochene Markierungen werden nicht erneut +// /// gerochen. +// /// +// /// Die nächste neue Markierung. +// public override void RiechtFreund(Markierung markierung) +// { +// if (Kaste == "Wächter") +// { +// if (gemerkterZucker == null) +// { +// DreheInRichtung(markierung.Information); +// GeheGeradeaus(); +// } +// } +// else if (Ziel == null) +// { +// DreheInRichtung(markierung.Information); +// GeheGeradeaus(); +// } +// } + +// /// +// /// Wird wiederholt aufgerufen, wenn die Ameise mindstens eine Ameise des +// /// selben Volkes sieht. +// /// +// /// Die nächstgelegene befreundete Ameise. +// public override void SiehtFreund(Ameise ameise) {} + +// #endregion +// #region Kampf + +// /// +// /// Wird wiederholt aufgerufen, wenn die Ameise mindestens einen Käfer +// /// sieht. +// /// +// /// Der nächstgelegene Käfer. +// public override void SiehtFeind(Wanze wanze) +// { +// if (Kaste == "Wächter" && gemerkterZucker != null) +// GreifeAn(wanze); +// } + +// /// +// /// Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Ameise eines +// /// anderen Volkes sieht. +// /// +// /// Die nächstgelegen feindliche Ameise. +// public override void SiehtFeind(Ameise ameise) +// { +// if (Kaste == "Wächter" && gemerkterZucker != null) +// GreifeAn(ameise); +// } + +// /// +// /// Wird wiederholt aufgerufen, wenn die Ameise von einem Käfer angegriffen +// /// wird. +// /// +// /// Der angreifende Käfer. +// public override void WirdAngegriffen(Wanze wanze) { } + +// /// +// /// Wird wiederholt aufgerufen in der die Ameise von einer Ameise eines +// /// anderen Volkes Ameise angegriffen wird. +// /// +// /// Die angreifende feindliche Ameise. +// public override void WirdAngegriffen(Ameise ameise) {} + +// #endregion +// #region Sonstiges + +// /// +// /// Wird einmal aufgerufen, wenn die Ameise gestorben ist. +// /// +// /// Die Todesart der Ameise +// public override void IstGestorben(Todesart todesart) {} + +// /// +// /// Wird unabhängig von äußeren Umständen in jeder Runde aufgerufen. +// /// +// public override void Tick() +// { +// if (gemerkterZucker != null) +// { +// if (Ziel is Insekt) +// { +// int entfernung = Koordinate.BestimmeEntfernung(this, Ziel); +// if (entfernung > Sichtweite * 3) +// BleibStehen(); +// } + +// if (Kaste == "Wächter") +// SprüheMarkierung +// (Koordinate.BestimmeRichtung(this, gemerkterZucker), +// Math.Min(Sichtweite, Koordinate.BestimmeEntfernung(this, gemerkterZucker))); + +// if (gemerkterZucker.Menge <= 0) +// { +// gemerkterZucker = null; +// if (Kaste == "Wächter") +// { +// imKreisGehen = false; +// aufEntfernungGehen = false; +// } +// } +// } +// } + +// #endregion + +// } + +//} \ No newline at end of file diff --git a/DemoAmeisen/Properties/AssemblyInfo.cs b/DemoAmeisen/Properties/AssemblyInfo.cs index 05dfaf8..3872191 100644 --- a/DemoAmeisen/Properties/AssemblyInfo.cs +++ b/DemoAmeisen/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly: AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.1.41")] -[assembly: AssemblyFileVersion("1.7.1.41")] +[assembly: AssemblyVersion("1.7.2.43")] +[assembly: AssemblyFileVersion("1.7.2.43")] diff --git a/GdiPlusPlugin/GdiPlusPlugin.csproj b/GdiPlusPlugin/GdiPlusPlugin.csproj index ce8d973..59f4404 100644 --- a/GdiPlusPlugin/GdiPlusPlugin.csproj +++ b/GdiPlusPlugin/GdiPlusPlugin.csproj @@ -120,6 +120,7 @@ {415F50C3-BD70-4634-B1F7-A15B42F0B0C6} SharedComponents + False diff --git a/GdiPlusPlugin/Properties/AssemblyInfo.cs b/GdiPlusPlugin/Properties/AssemblyInfo.cs index 060db4c..c163581 100644 --- a/GdiPlusPlugin/Properties/AssemblyInfo.cs +++ b/GdiPlusPlugin/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly: AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.1.93")] -[assembly: AssemblyFileVersion("1.7.1.93")] +[assembly: AssemblyVersion("1.7.2.93")] +[assembly: AssemblyFileVersion("1.7.2.93")] diff --git a/PlayerManagement/AntMe.snk b/PlayerManagement/AntMe.snk new file mode 100644 index 0000000000000000000000000000000000000000..cdd75a44803cf4c9f6794750dedaa1780a579872 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097Ds|87>(|JJSG3||h%Ssa{9QjsmNjxmo z-5;uSsxla^i0Or5w;5%5c1?T3uvX_xzfcPwik7r0WBOVR5sg-4NB|B)3c58i^qc-l z!=3SN>!iUZ!S0(j?Bwy@_;}5$ILTJVXX7+4wj+rZzUOzf&ufI`hKOQ?P@`cS0swk+XJXWr@VlgBU9WuK~ilXz8}@WavPcXxqd zMW?FNXC&&O+|ns! zsAr^QJ%|z5e-UmN`i-dxk@NrsY7-|V`lNS-vPCb0S>j)i+$}-)T@95LRWgBw`*RA4h269|<`3@np%G5jy z9o}*0q5bYOawt$tgr9m?aG<`c_}NreAPr>}1nA?FGPLp~C_L|??S^>X;q}I{Zl|s- z6~=sxagTmiw`v<-v)6vnvi(L&-V=@7D*Bc$8|<(dM)*RLfMU44MD4FkJdn&5D2i^$ zb45y{uma$*_CW&;Xw~x?1Ie_(3>nF3^X+bvJ0mPl89Z + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AntProperties)); + this.okButton = new System.Windows.Forms.Button(); + this.tabControl = new System.Windows.Forms.TabControl(); + this.common = new System.Windows.Forms.TabPage(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.klassennameTextBox = new System.Windows.Forms.TextBox(); + this.label28 = new System.Windows.Forms.Label(); + this.dateinameTextBox = new System.Windows.Forms.TextBox(); + this.statischLabel = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.debugLabel = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.datumLabel = new System.Windows.Forms.Label(); + this.dateigrößeLabel = new System.Windows.Forms.Label(); + this.spracheLabel = new System.Windows.Forms.Label(); + this.versionLabel = new System.Windows.Forms.Label(); + this.autorLabel = new System.Windows.Forms.Label(); + this.label27 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.kiNameLabel1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.castes = new System.Windows.Forms.TabPage(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.kiNameLabel2 = new System.Windows.Forms.Label(); + this.label29 = new System.Windows.Forms.Label(); + this.casteGroupBox = new System.Windows.Forms.GroupBox(); + this.rangeLabel = new System.Windows.Forms.Label(); + this.viewRangelabel = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.energyLabel = new System.Windows.Forms.Label(); + this.loadLabel = new System.Windows.Forms.Label(); + this.speedLabel = new System.Windows.Forms.Label(); + this.attackLabel = new System.Windows.Forms.Label(); + this.rotationSpeedLabel = new System.Windows.Forms.Label(); + this.casteNameLabel = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.castesListView = new System.Windows.Forms.ListView(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.security = new System.Windows.Forms.TabPage(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.zusatzinfosTextBox = new System.Windows.Forms.TextBox(); + this.kiNameLabel3 = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.rechteListView = new System.Windows.Forms.ListView(); + this.tabControl.SuspendLayout(); + this.common.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.castes.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.casteGroupBox.SuspendLayout(); + this.security.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + this.SuspendLayout(); + // + // okButton + // + resources.ApplyResources(this.okButton, "okButton"); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Name = "okButton"; + this.okButton.UseVisualStyleBackColor = true; + // + // tabControl + // + resources.ApplyResources(this.tabControl, "tabControl"); + this.tabControl.Controls.Add(this.common); + this.tabControl.Controls.Add(this.castes); + this.tabControl.Controls.Add(this.security); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + // + // common + // + resources.ApplyResources(this.common, "common"); + this.common.Controls.Add(this.pictureBox1); + this.common.Controls.Add(this.klassennameTextBox); + this.common.Controls.Add(this.label28); + this.common.Controls.Add(this.dateinameTextBox); + this.common.Controls.Add(this.statischLabel); + this.common.Controls.Add(this.label30); + this.common.Controls.Add(this.debugLabel); + this.common.Controls.Add(this.label4); + this.common.Controls.Add(this.datumLabel); + this.common.Controls.Add(this.dateigrößeLabel); + this.common.Controls.Add(this.spracheLabel); + this.common.Controls.Add(this.versionLabel); + this.common.Controls.Add(this.autorLabel); + this.common.Controls.Add(this.label27); + this.common.Controls.Add(this.label26); + this.common.Controls.Add(this.label25); + this.common.Controls.Add(this.label24); + this.common.Controls.Add(this.label23); + this.common.Controls.Add(this.label22); + this.common.Controls.Add(this.kiNameLabel1); + this.common.Controls.Add(this.label3); + this.common.Name = "common"; + this.common.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Image = global::AntMe.PlayerManagement.Properties.Resources.colony_nonstatic_32x32; + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // klassennameTextBox + // + resources.ApplyResources(this.klassennameTextBox, "klassennameTextBox"); + this.klassennameTextBox.Name = "klassennameTextBox"; + this.klassennameTextBox.ReadOnly = true; + // + // label28 + // + resources.ApplyResources(this.label28, "label28"); + this.label28.Name = "label28"; + // + // dateinameTextBox + // + resources.ApplyResources(this.dateinameTextBox, "dateinameTextBox"); + this.dateinameTextBox.Name = "dateinameTextBox"; + this.dateinameTextBox.ReadOnly = true; + // + // statischLabel + // + resources.ApplyResources(this.statischLabel, "statischLabel"); + this.statischLabel.Name = "statischLabel"; + // + // label30 + // + resources.ApplyResources(this.label30, "label30"); + this.label30.Name = "label30"; + // + // debugLabel + // + resources.ApplyResources(this.debugLabel, "debugLabel"); + this.debugLabel.Name = "debugLabel"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // datumLabel + // + resources.ApplyResources(this.datumLabel, "datumLabel"); + this.datumLabel.Name = "datumLabel"; + // + // dateigrößeLabel + // + resources.ApplyResources(this.dateigrößeLabel, "dateigrößeLabel"); + this.dateigrößeLabel.Name = "dateigrößeLabel"; + // + // spracheLabel + // + resources.ApplyResources(this.spracheLabel, "spracheLabel"); + this.spracheLabel.Name = "spracheLabel"; + // + // versionLabel + // + resources.ApplyResources(this.versionLabel, "versionLabel"); + this.versionLabel.Name = "versionLabel"; + // + // autorLabel + // + resources.ApplyResources(this.autorLabel, "autorLabel"); + this.autorLabel.Name = "autorLabel"; + // + // label27 + // + resources.ApplyResources(this.label27, "label27"); + this.label27.Name = "label27"; + // + // label26 + // + resources.ApplyResources(this.label26, "label26"); + this.label26.Name = "label26"; + // + // label25 + // + resources.ApplyResources(this.label25, "label25"); + this.label25.Name = "label25"; + // + // label24 + // + resources.ApplyResources(this.label24, "label24"); + this.label24.Name = "label24"; + // + // label23 + // + resources.ApplyResources(this.label23, "label23"); + this.label23.Name = "label23"; + // + // label22 + // + resources.ApplyResources(this.label22, "label22"); + this.label22.Name = "label22"; + // + // kiNameLabel1 + // + resources.ApplyResources(this.kiNameLabel1, "kiNameLabel1"); + this.kiNameLabel1.Name = "kiNameLabel1"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // castes + // + resources.ApplyResources(this.castes, "castes"); + this.castes.Controls.Add(this.pictureBox2); + this.castes.Controls.Add(this.kiNameLabel2); + this.castes.Controls.Add(this.label29); + this.castes.Controls.Add(this.casteGroupBox); + this.castes.Controls.Add(this.label5); + this.castes.Controls.Add(this.castesListView); + this.castes.Name = "castes"; + this.castes.UseVisualStyleBackColor = true; + // + // pictureBox2 + // + resources.ApplyResources(this.pictureBox2, "pictureBox2"); + this.pictureBox2.Image = global::AntMe.PlayerManagement.Properties.Resources.colony_nonstatic_32x32; + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.TabStop = false; + // + // kiNameLabel2 + // + resources.ApplyResources(this.kiNameLabel2, "kiNameLabel2"); + this.kiNameLabel2.Name = "kiNameLabel2"; + // + // label29 + // + resources.ApplyResources(this.label29, "label29"); + this.label29.Name = "label29"; + // + // casteGroupBox + // + resources.ApplyResources(this.casteGroupBox, "casteGroupBox"); + this.casteGroupBox.Controls.Add(this.rangeLabel); + this.casteGroupBox.Controls.Add(this.viewRangelabel); + this.casteGroupBox.Controls.Add(this.label10); + this.casteGroupBox.Controls.Add(this.energyLabel); + this.casteGroupBox.Controls.Add(this.loadLabel); + this.casteGroupBox.Controls.Add(this.speedLabel); + this.casteGroupBox.Controls.Add(this.attackLabel); + this.casteGroupBox.Controls.Add(this.rotationSpeedLabel); + this.casteGroupBox.Controls.Add(this.casteNameLabel); + this.casteGroupBox.Controls.Add(this.label13); + this.casteGroupBox.Controls.Add(this.label12); + this.casteGroupBox.Controls.Add(this.label11); + this.casteGroupBox.Controls.Add(this.label9); + this.casteGroupBox.Controls.Add(this.label8); + this.casteGroupBox.Controls.Add(this.label7); + this.casteGroupBox.Controls.Add(this.label6); + this.casteGroupBox.Name = "casteGroupBox"; + this.casteGroupBox.TabStop = false; + // + // rangeLabel + // + resources.ApplyResources(this.rangeLabel, "rangeLabel"); + this.rangeLabel.Name = "rangeLabel"; + // + // viewRangelabel + // + resources.ApplyResources(this.viewRangelabel, "viewRangelabel"); + this.viewRangelabel.Name = "viewRangelabel"; + // + // label10 + // + resources.ApplyResources(this.label10, "label10"); + this.label10.Name = "label10"; + // + // energyLabel + // + resources.ApplyResources(this.energyLabel, "energyLabel"); + this.energyLabel.Name = "energyLabel"; + // + // loadLabel + // + resources.ApplyResources(this.loadLabel, "loadLabel"); + this.loadLabel.Name = "loadLabel"; + // + // speedLabel + // + resources.ApplyResources(this.speedLabel, "speedLabel"); + this.speedLabel.Name = "speedLabel"; + // + // attackLabel + // + resources.ApplyResources(this.attackLabel, "attackLabel"); + this.attackLabel.Name = "attackLabel"; + // + // rotationSpeedLabel + // + resources.ApplyResources(this.rotationSpeedLabel, "rotationSpeedLabel"); + this.rotationSpeedLabel.Name = "rotationSpeedLabel"; + // + // casteNameLabel + // + resources.ApplyResources(this.casteNameLabel, "casteNameLabel"); + this.casteNameLabel.Name = "casteNameLabel"; + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // label12 + // + resources.ApplyResources(this.label12, "label12"); + this.label12.Name = "label12"; + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // castesListView + // + resources.ApplyResources(this.castesListView, "castesListView"); + this.castesListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.castesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.castesListView.Name = "castesListView"; + this.castesListView.ShowItemToolTips = true; + this.castesListView.SmallImageList = this.imageList; + this.castesListView.UseCompatibleStateImageBehavior = false; + this.castesListView.View = System.Windows.Forms.View.List; + this.castesListView.SelectedIndexChanged += new System.EventHandler(this.select_caste); + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Transparent; + this.imageList.Images.SetKeyName(0, "security_closed"); + this.imageList.Images.SetKeyName(1, "ant"); + // + // security + // + resources.ApplyResources(this.security, "security"); + this.security.Controls.Add(this.pictureBox3); + this.security.Controls.Add(this.zusatzinfosTextBox); + this.security.Controls.Add(this.kiNameLabel3); + this.security.Controls.Add(this.label31); + this.security.Controls.Add(this.label2); + this.security.Controls.Add(this.label1); + this.security.Controls.Add(this.rechteListView); + this.security.Name = "security"; + this.security.UseVisualStyleBackColor = true; + // + // pictureBox3 + // + resources.ApplyResources(this.pictureBox3, "pictureBox3"); + this.pictureBox3.Image = global::AntMe.PlayerManagement.Properties.Resources.colony_nonstatic_32x32; + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.TabStop = false; + // + // zusatzinfosTextBox + // + resources.ApplyResources(this.zusatzinfosTextBox, "zusatzinfosTextBox"); + this.zusatzinfosTextBox.Name = "zusatzinfosTextBox"; + this.zusatzinfosTextBox.ReadOnly = true; + // + // kiNameLabel3 + // + resources.ApplyResources(this.kiNameLabel3, "kiNameLabel3"); + this.kiNameLabel3.Name = "kiNameLabel3"; + // + // label31 + // + resources.ApplyResources(this.label31, "label31"); + this.label31.Name = "label31"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // rechteListView + // + resources.ApplyResources(this.rechteListView, "rechteListView"); + this.rechteListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.rechteListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.rechteListView.Name = "rechteListView"; + this.rechteListView.ShowItemToolTips = true; + this.rechteListView.SmallImageList = this.imageList; + this.rechteListView.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.rechteListView.UseCompatibleStateImageBehavior = false; + this.rechteListView.View = System.Windows.Forms.View.List; + // + // AntProperties + // + this.AcceptButton = this.okButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.okButton; + this.Controls.Add(this.tabControl); + this.Controls.Add(this.okButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AntProperties"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.tabControl.ResumeLayout(false); + this.common.ResumeLayout(false); + this.common.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.castes.ResumeLayout(false); + this.castes.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.casteGroupBox.ResumeLayout(false); + this.casteGroupBox.PerformLayout(); + this.security.ResumeLayout(false); + this.security.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.TabControl tabControl; + private System.Windows.Forms.TabPage common; + private System.Windows.Forms.TabPage castes; + private System.Windows.Forms.TabPage security; + private System.Windows.Forms.GroupBox casteGroupBox; + private System.Windows.Forms.Label rangeLabel; + private System.Windows.Forms.Label viewRangelabel; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label energyLabel; + private System.Windows.Forms.Label loadLabel; + private System.Windows.Forms.Label speedLabel; + private System.Windows.Forms.Label attackLabel; + private System.Windows.Forms.Label rotationSpeedLabel; + private System.Windows.Forms.Label casteNameLabel; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ListView castesListView; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListView rechteListView; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label kiNameLabel1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label datumLabel; + private System.Windows.Forms.Label dateigrößeLabel; + private System.Windows.Forms.Label spracheLabel; + private System.Windows.Forms.Label versionLabel; + private System.Windows.Forms.Label autorLabel; + private System.Windows.Forms.Label kiNameLabel2; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Label kiNameLabel3; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label statischLabel; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label debugLabel; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox dateinameTextBox; + private System.Windows.Forms.TextBox klassennameTextBox; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.TextBox zusatzinfosTextBox; + private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.PictureBox pictureBox3; + } +} \ No newline at end of file diff --git a/PlayerManagement/AntProperties.cs b/PlayerManagement/AntProperties.cs new file mode 100644 index 0000000..aa997e1 --- /dev/null +++ b/PlayerManagement/AntProperties.cs @@ -0,0 +1,126 @@ +using AntMe.Simulation; +using System.IO; +using System.Windows.Forms; + +namespace AntMe.PlayerManagement +{ + /// + /// Property Window for all kinds of Ants. + /// + public sealed partial class AntProperties : Form + { + private readonly PlayerInfoFilename player; + + /// + /// Default Contructor. + /// + /// Reference to the PlayerInfo + public AntProperties(PlayerInfoFilename playerInfo) + { + player = playerInfo; + InitializeComponent(); + + // Daten einfüllen + kiNameLabel1.Text = player.ColonyName; + kiNameLabel3.Text = player.ColonyName; + kiNameLabel2.Text = player.ColonyName; + Text = string.Format(Resource.AntPropertiesTitle, player.ColonyName); + + autorLabel.Text = string.Format(Resource.AntPropertiesAuthorFormat, player.FirstName, player.LastName); + versionLabel.Text = player.SimulationVersion.ToString(); + spracheLabel.Text = player.Language.ToString(); + statischLabel.Text = player.Static ? Resource.Yes : Resource.No; + debugLabel.Text = player.HasDebugInformation ? Resource.Yes : Resource.No; + klassennameTextBox.Text = player.ClassName; + + dateinameTextBox.Text = player.File; + try + { + FileInfo info = new FileInfo(player.File); + dateigrößeLabel.Text = info.Length + " Byte"; + datumLabel.Text = info.CreationTime.ToLongDateString() + " " + info.CreationTime.ToShortTimeString(); + } + catch + { + dateigrößeLabel.Text = Resource.AntPropertiesUnknown; + datumLabel.Text = Resource.AntPropertiesUnknown; + } + + // Ameisenkasten einfügen + castesListView.Items.Clear(); + foreach (CasteInfo info in player.Castes) + { + ListViewItem item = castesListView.Items.Add(info.Name, "ant"); + item.Tag = info; + } + select_caste(null, null); + + // Sicherheitsliste + int count = 0; + if (player.RequestFileAccess) + { + rechteListView.Items.Add(Resource.AntPropertiesIoAccess, "security_closed"); + count++; + } + if (player.RequestDatabaseAccess) + { + rechteListView.Items.Add(Resource.AntPropertiesDbAccess, "security_closed"); + count++; + } + if (player.RequestReferences) + { + rechteListView.Items.Add(Resource.AntPropertiesRefAccess, "security_closed"); + count++; + } + if (player.RequestUserInterfaceAccess) + { + rechteListView.Items.Add(Resource.AntPropertiesUiAccess, "security_closed"); + count++; + } + if (player.RequestNetworkAccess) + { + rechteListView.Items.Add(Resource.AntPropertiesNetAccess, "security_closed"); + count++; + } + if (count == 0) + { + rechteListView.Items.Add(Resource.AntPropertiesNoAccess, "security_closed"); + } + zusatzinfosTextBox.Text = player.RequestInformation == string.Empty + ? Resource.AntPropertiesNoAdditionalInfos + : player.RequestInformation; + + } + + private void select_caste(object sender, System.EventArgs e) + { + // TODO: Resultierende Werte aus den Settings hinzu schreiben + if (castesListView.SelectedItems.Count > 0) + { + casteGroupBox.Enabled = true; + CasteInfo info = (CasteInfo)castesListView.SelectedItems[0].Tag; + casteNameLabel.Text = info.Name; + attackLabel.Text = info.Attack.ToString(); + energyLabel.Text = info.Energy.ToString(); + loadLabel.Text = info.Load.ToString(); + speedLabel.Text = info.Speed.ToString(); + rotationSpeedLabel.Text = info.RotationSpeed.ToString(); + rangeLabel.Text = info.Range.ToString(); + viewRangelabel.Text = info.ViewRange.ToString(); + + } + else + { + casteGroupBox.Enabled = false; + casteNameLabel.Text = string.Empty; + attackLabel.Text = string.Empty; + energyLabel.Text = string.Empty; + loadLabel.Text = string.Empty; + speedLabel.Text = string.Empty; + rotationSpeedLabel.Text = string.Empty; + rangeLabel.Text = string.Empty; + viewRangelabel.Text = string.Empty; + } + } + } +} \ No newline at end of file diff --git a/PlayerManagement/AntProperties.de.resx b/PlayerManagement/AntProperties.de.resx new file mode 100644 index 0000000..7288f97 --- /dev/null +++ b/PlayerManagement/AntProperties.de.resx @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 73, 13 + + + Klassenname: + + + 95, 13 + + + Statische Variable: + + + 103, 13 + + + Debug-Nachrichten: + + + 90, 13 + + + Erstellungsdatum: + + + 62, 13 + + + Dateigröße: + + + 50, 13 + + + Sprache: + + + 35, 13 + + + Datei: + + + 35, 13 + + + Autor: + + + 31, 13 + + + Volk: + + + Allgemein + + + 31, 13 + + + Volk: + + + 59, 13 + + + Sichtweite: + + + 88, 13 + + + Geschwindigkeit: + + + 30, 13 + + + Last: + + + 63, 13 + + + Reichweite: + + + 46, 13 + + + Energie: + + + 109, 13 + + + Drehgeschwindigkeit: + + + 40, 13 + + + Angriff: + + + Kaste: + + + 43, 13 + + + Kasten: + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACg + CAAAAk1TRnQBSQFMAgEBAgEAASwBAAEsAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAv8BGgF6CiwJ/wEH + CP8gAAL/AVMKLAFTCf8BkwH0B/8gABf/AQcBkwH/AZMF/yAAAv8BegpTAXoF/wEaAUYBbwL/AW8B/wFv + Bf8gAAL/ARoBegosBf8BRgIfAW8B/wFvAQcBkwX/IAAC/wFTCiwBUwX/AW8DHwGTAW8B8wFvBf8gABD/ + AfMD/wFvAekBHwFGAZMB/wFvARoE/yAAAv8BegpTAXoC/wGTAW8BkwL/ARoBbwLpAZMCbwT/IAAC/wEa + AXoKLAT/AZMDbwGTAUYBHwHpAW8B8wT/IAAC/wFTCiwBUwT/AvQBGgH0Af8BkwHpAR8B6QGTAW8DkyAA + A/8B8QFtAfIE/wHyAW0BvAX/Bm8BkwPpAZMBGgL/IAAD/wHxAW0B8QT/AfEBbQEHCf8BGgFvARoBkwHp + AR8B6QGTARoB/yAAA/8B8QFtAbwE/wG8AW0B8Qz/AW8BkwHpAZMB/wGTAf8gAAT/AesB7AHzAv8B8wHs + AesM/wH0AZMBGgGTBP8gAAT/AfEBbQHsApIB6wFtAfAM/wEaAQcB9AKTA/8gAAX/AfIB7wJtAe0B8g3/ + ARoB8wL/ARoD/yAAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/+BAAs= + + + + Kasten + + + 31, 13 + + + Volk: + + + 131, 13 + + + Zusätzliche Informationen: + + + 93, 13 + + + Benötigte Rechte: + + + Sicherheit + + \ No newline at end of file diff --git a/PlayerManagement/AntProperties.resx b/PlayerManagement/AntProperties.resx new file mode 100644 index 0000000..3f1e1f4 --- /dev/null +++ b/PlayerManagement/AntProperties.resx @@ -0,0 +1,1667 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label25 + + + Language: + + + klassennameTextBox + + + 1 + + + + True + + + 3 + + + 15 + + + 2 + + + Attack: + + + 9 + + + + Microsoft Sans Serif, 8.25pt, style=Bold + + + castes + + + OK + + + 17 + + + viewRangelabel + + + + Bottom, Right + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + 387, 466 + + + 16 + + + AntProperties + + + common + + + Top, Left, Right + + + 1 + + + [CasteName] + + + 8 + + + 41, 13 + + + True + + + 32, 32 + + + True + + + 33, 13 + + + 33, 13 + + + 377, 426 + + + 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + okButton + + + speedLabel + + + 12 + + + 6 + + + energyLabel + + + Top, Bottom, Left, Right + + + 4 + + + 32, 32 + + + 118, 166 + + + 8 + + + True + + + 15, 70 + + + True + + + 5 + + + 53, 15 + + + common + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 34, 13 + + + common + + + Top, Bottom, Left, Right + + + 12 + + + [colonyname] + + + common + + + True + + + 3 + + + 37, 13 + + + label10 + + + NoControl + + + True + + + 115, 189 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + common + + + 63, 13 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + castes + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 268, 120 + + + 130, 80 + + + label11 + + + versionLabel + + + Author: + + + 1 + + + label26 + + + common + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 53, 28 + + + common + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 115, 110 + + + 231, 20 + + + 200, 100 + + + casteGroupBox + + + 1 + + + 82, 13 + + + 130, 100 + + + security + + + 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 53, 15 + + + label27 + + + Castes + + + 3, 3, 3, 3 + + + casteNameLabel + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label13 + + + 79, 13 + + + 115, 250 + + + [mod] + + + 15, 100 + + + loadLabel + + + Colony: + + + label6 + + + 6, 13 + + + 5 + + + 10 + + + True + + + Details: + + + Top, Left, Right + + + 8 + + + Required permissions: + + + 15, 80 + + + True + + + 2 + + + 15, 234 + + + 42, 13 + + + NoControl + + + 1 + + + 3 + + + 92, 13 + + + tabControl + + + 15, 86 + + + 11 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + [debug] + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33, 13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 42, 13 + + + 200, 80 + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 57, 13 + + + label22 + + + Top, Bottom, Left, Right + + + 0 + + + 15, 86 + + + 338, 136 + + + True + + + Vertical + + + 15, 25 + + + common + + + common + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5, 6 + + + zusatzinfosTextBox + + + 15 + + + common + + + Debug messages: + + + True + + + 200, 120 + + + 38, 13 + + + Load: + + + label23 + + + common + + + 115, 209 + + + 15, 120 + + + Security + + + 4 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 130, 140 + + + 16 + + + casteGroupBox + + + Additional information: + + + casteGroupBox + + + casteGroupBox + + + 110, 13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label8 + + + 15, 270 + + + casteGroupBox + + + 4 + + + [language] + + + 5 + + + common + + + True + + + security + + + True + + + casteGroupBox + + + $this + + + 9 + + + [colonyname] + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15 + + + 115, 90 + + + label29 + + + common + + + 34, 13 + + + 12 + + + True + + + 10 + + + 4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + [mod] + + + 6 + + + 4 + + + 14 + + + 0 + + + True + + + casteGroupBox + + + True + + + label7 + + + attackLabel + + + casteGroupBox + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 3 + + + True + + + 369, 400 + + + [colonyname] + + + casteGroupBox + + + Bottom, Left, Right + + + 10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 307, 438 + + + castes + + + rangeLabel + + + dateigrößeLabel + + + 1 + + + [date] + + + 1 + + + castes + + + common + + + casteGroupBox + + + 82, 13 + + + 15, 209 + + + security + + + 6 + + + 102, 16 + + + 0 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15, 189 + + + 19 + + + 42, 13 + + + 15, 70 + + + castes + + + 2 + + + 5 + + + label2 + + + 15, 110 + + + common + + + 5 + + + 7 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 8 + + + 4, 22 + + + 41, 13 + + + common + + + True + + + 0 + + + True + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 130, 120 + + + common + + + 11 + + + [mod] + + + 19 + + + True + + + 7 + + + common + + + label30 + + + 3 + + + True + + + 369, 400 + + + 0 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 3, 3, 3 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 268, 100 + + + 0 + + + 3 + + + pictureBox2 + + + 15, 250 + + + 0 + + + True + + + Rotation speed: + + + tabControl + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + kiNameLabel3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + castes + + + rechteListView + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + security + + + 2 + + + 14 + + + 22 + + + label1 + + + [mod] + + + 2 + + + pictureBox1 + + + 338, 142 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 42, 13 + + + security + + + dateinameTextBox + + + 11 + + + casteGroupBox + + + 15, 169 + + + 13 + + + security + + + [mod] + + + True + + + 102, 16 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 118, 267 + + + 33, 13 + + + [mod] + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + True + + + 11 + + + casteGroupBox + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Common + + + rotationSpeedLabel + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Castes: + + + [size] + + + 102, 16 + + + 4 + + + common + + + imageList + + + 0 + + + 58, 13 + + + 1 + + + True + + + Static variables: + + + Version: + + + common + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + spracheLabel + + + label12 + + + 1 + + + True + + + True + + + 47, 13 + + + 338, 104 + + + castes + + + 338, 186 + + + 10 + + + castesListView + + + 75, 23 + + + 64, 13 + + + 2 + + + label31 + + + 7 + + + Speed: + + + common + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + debugLabel + + + 110, 13 + + + 18 + + + 0 + + + 9 + + + 3 + + + kiNameLabel2 + + + 15, 202 + + + kiNameLabel1 + + + 1 + + + 20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Caste: + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + [static] + + + True + + + statischLabel + + + 14 + + + $this + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACg + CAAAAk1TRnQBSQFMAgEBAgEAASQBAAEoAQABEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAv8BGgF6CiwJ/wEH + CP8gAAL/AVMKLAFTCf8BkwH0B/8gABf/AQcBkwH/AZMF/yAAAv8BegpTAXoF/wEaAUYBbwL/AW8B/wFv + Bf8gAAL/ARoBegosBf8BRgIfAW8B/wFvAQcBkwX/IAAC/wFTCiwBUwX/AW8DHwGTAW8B8wFvBf8gABD/ + AfMD/wFvAekBHwFGAZMB/wFvARoE/yAAAv8BegpTAXoC/wGTAW8BkwL/ARoBbwLpAZMCbwT/IAAC/wEa + AXoKLAT/AZMDbwGTAUYBHwHpAW8B8wT/IAAC/wFTCiwBUwT/AvQBGgH0Af8BkwHpAR8B6QGTAW8DkyAA + A/8B8QFtAfIE/wHyAW0BvAX/Bm8BkwPpAZMBGgL/IAAD/wHxAW0B8QT/AfEBbQEHCf8BGgFvARoBkwHp + AR8B6QGTARoB/yAAA/8B8QFtAbwE/wG8AW0B8Qz/AW8BkwHpAZMB/wGTAf8gAAT/AesB7AHzAv8B8wHs + AesM/wH0AZMBGgGTBP8gAAT/AfEBbQHsApIB6wFtAfAM/wEaAQcB9AKTA/8gAAX/AfIB7wJtAe0B8g3/ + ARoB8wL/ARoD/yAAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/+XAAs= + + + + 14 + + + 15, 15 + + + 15, 38 + + + 1 + + + 15, 15 + + + 4, 22 + + + 33, 13 + + + casteGroupBox + + + 43, 13 + + + common + + + [author] + + + 13 + + + Colony: + + + 53, 28 + + + tabControl + + + 2 + + + True + + + 30, 13 + + + pictureBox3 + + + 12 + + + 115, 70 + + + 53, 28 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + True + + + 33, 13 + + + 115, 130 + + + View range: + + + 2 + + + 43, 13 + + + 4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17 + + + 0 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 268, 80 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 41, 13 + + + 13 + + + 2 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + CenterParent + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 369, 400 + + + security + + + 4 + + + 15, 140 + + + 20 + + + 26, 13 + + + 9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + datumLabel + + + Energy: + + + True + + + 53, 15 + + + label4 + + + 15, 15 + + + 4, 22 + + + 18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 47, 13 + + + [properties] + + + 7 + + + 42, 13 + + + label5 + + + Created: + + + True + + + casteGroupBox + + + True + + + casteGroupBox + + + 15 + + + Class name: + + + True + + + 32, 32 + + + label3 + + + casteGroupBox + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + autorLabel + + + casteGroupBox + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15, 250 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + File: + + + security + + + 231, 20 + + + 33, 13 + + + 15, 70 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 31, 13 + + + label28 + + + Range: + + + 3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Colony: + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + Top, Left, Right + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Size: + + + [mod] + + + label24 + + + 5 + + + 13 + + + 45, 13 + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + [version] + + + 0 + + + label9 + + + 43, 13 + + + 15, 130 + + + 15, 90 + + + True + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/PlayerManagement/CreateForm.Designer.cs b/PlayerManagement/CreateForm.Designer.cs new file mode 100644 index 0000000..a7bd5c8 --- /dev/null +++ b/PlayerManagement/CreateForm.Designer.cs @@ -0,0 +1,191 @@ +namespace AntMe.PlayerManagement +{ + partial class CreateForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CreateForm)); + this.cancelButton = new System.Windows.Forms.Button(); + this.okButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label4 = new System.Windows.Forms.Label(); + this.codeComboBox = new System.Windows.Forms.ComboBox(); + this.languageComboBox = new System.Windows.Forms.ComboBox(); + this.browseButton = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.folderTextBox = new System.Windows.Forms.TextBox(); + this.nameTextBox = new System.Windows.Forms.TextBox(); + this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // cancelButton + // + resources.ApplyResources(this.cancelButton, "cancelButton"); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Name = "cancelButton"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // okButton + // + resources.ApplyResources(this.okButton, "okButton"); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Name = "okButton"; + this.okButton.UseVisualStyleBackColor = true; + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.codeComboBox); + this.groupBox1.Controls.Add(this.languageComboBox); + this.groupBox1.Controls.Add(this.browseButton); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.folderTextBox); + this.groupBox1.Controls.Add(this.nameTextBox); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // codeComboBox + // + resources.ApplyResources(this.codeComboBox, "codeComboBox"); + this.codeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.codeComboBox.FormattingEnabled = true; + this.codeComboBox.Name = "codeComboBox"; + // + // languageComboBox + // + resources.ApplyResources(this.languageComboBox, "languageComboBox"); + this.languageComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.languageComboBox.FormattingEnabled = true; + this.languageComboBox.Name = "languageComboBox"; + // + // browseButton + // + resources.ApplyResources(this.browseButton, "browseButton"); + this.browseButton.Name = "browseButton"; + this.browseButton.UseVisualStyleBackColor = true; + this.browseButton.Click += new System.EventHandler(this.browseButton_Click); + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // folderTextBox + // + resources.ApplyResources(this.folderTextBox, "folderTextBox"); + this.folderTextBox.Name = "folderTextBox"; + this.folderTextBox.ReadOnly = true; + // + // nameTextBox + // + resources.ApplyResources(this.nameTextBox, "nameTextBox"); + this.nameTextBox.Name = "nameTextBox"; + // + // folderBrowserDialog + // + resources.ApplyResources(this.folderBrowserDialog, "folderBrowserDialog"); + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // pictureBox1 + // + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Image = global::AntMe.PlayerManagement.Properties.Resources.toddler; + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // CreateForm + // + this.AcceptButton = this.okButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.okButton); + this.Controls.Add(this.cancelButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CreateForm_FormClosing); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox codeComboBox; + private System.Windows.Forms.ComboBox languageComboBox; + private System.Windows.Forms.Button browseButton; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox folderTextBox; + private System.Windows.Forms.TextBox nameTextBox; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/PlayerManagement/CreateForm.cs b/PlayerManagement/CreateForm.cs new file mode 100644 index 0000000..9607779 --- /dev/null +++ b/PlayerManagement/CreateForm.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace AntMe.PlayerManagement +{ + /// + /// Selection Form for all available Code Generators. + /// + public partial class CreateForm : Form + { + private List generators; + + /// + /// Path to the created Solution File. + /// + public string GeneratedSolutionFile { get; private set; } + + /// + /// Default Constructor. + /// + public CreateForm() + { + InitializeComponent(); + + generators = new List(); + generators.Add(new GermanCSharpGenerator()); + generators.Add(new EnglishCSharpGenerator()); + generators.Add(new GermanVBGenerator()); + generators.Add(new EnglishVBGenerator()); + + foreach (var language in generators.Select(g => g.Language).Distinct()) + languageComboBox.Items.Add(language); + if (languageComboBox.Items.Count > 0) + languageComboBox.SelectedIndex = 0; + + // TODO: Später abhängig von der ausgewählten Sprache auflisten (vielleicht...) + foreach (var language in generators.Select(g => g.ProgrammingLanguage).Distinct()) + codeComboBox.Items.Add(language); + if (codeComboBox.Items.Count > 0) + codeComboBox.SelectedIndex = 0; + + // Identify Visual Studio Folder + DirectoryInfo root = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); + DirectoryInfo hit = root.GetDirectories("Visual Studio *").OrderByDescending(d => d.Name).FirstOrDefault(); + if (hit != null) + folderTextBox.Text = hit.FullName + @"\Projects"; + } + + private void browseButton_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(folderTextBox.Text)) + folderBrowserDialog.SelectedPath = folderTextBox.Text; + + if (folderBrowserDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + folderTextBox.Text = folderBrowserDialog.SelectedPath; + } + + private void CreateForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (DialogResult != System.Windows.Forms.DialogResult.OK) + return; + + // Check den Namen (muss den Namenskonventionen von Klassennamen entsprechen) + if (!Regex.IsMatch(nameTextBox.Text, @"^[a-zA-Z][a-zA-Z0-9]{1,19}$")) + { + MessageBox.Show("Der Name darf nur Buchstaben und Zahlen enthalten, nicht mit einer Zahl beginnen und zwischen 2 und 20 Zeichen lang sein."); + e.Cancel = true; + return; + } + + // Finde Generator + var generator = generators.Where(g => g.Language.Equals(languageComboBox.Text) && g.ProgrammingLanguage.Equals(codeComboBox.Text)).FirstOrDefault(); + if (generator == null) + { + MessageBox.Show("Falsche Einstellungen bei den Sprachen"); + e.Cancel = true; + return; + } + + // Prüfen, ob das Ausgabeverzeichnis existiert + DirectoryInfo root = new DirectoryInfo(folderTextBox.Text); + if (!root.Exists) + { + MessageBox.Show("Ausgabeverzeichnis existiert nicht"); + e.Cancel = true; + return; + } + + try + { + string solution = generator.Generate(nameTextBox.Text, folderTextBox.Text); + GeneratedSolutionFile = solution; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + e.Cancel = true; + return; + } + } + } +} diff --git a/PlayerManagement/CreateForm.de.resx b/PlayerManagement/CreateForm.de.resx new file mode 100644 index 0000000..72ba158 --- /dev/null +++ b/PlayerManagement/CreateForm.de.resx @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abbrechen + + + + 103, 13 + + + Programmiersprache + + + 153, 94 + + + 153, 67 + + + 397, 120 + + + 61, 13 + + + Verzeichnis + + + 47, 13 + + + Sprache + + + 153, 121 + + + 153, 41 + + + Einstellungen + + + Erstelle hier eine neue Ameisenkolonie für AntMe! +An dieser Stelle kannst du eine ganze Menge Einstellungen treffen. Die vermutlich wichtigste: Die Programmiersprache, in der du deine Ameisen kommandieren willst. Außerdem kannst du hier aber auch die Sprache wählen, die deine Ameisen verstehen werden. + + + Ameisenkolonie erstellen + + \ No newline at end of file diff --git a/PlayerManagement/CreateForm.resx b/PlayerManagement/CreateForm.resx new file mode 100644 index 0000000..698f964 --- /dev/null +++ b/PlayerManagement/CreateForm.resx @@ -0,0 +1,493 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Name + + + + 492, 373 + + + 1 + + + CreateForm + + + 409, 343 + + + 136, 67 + + + 136, 94 + + + 303, 96 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 6 + + + 7 + + + System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label1 + + + 12, 26 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 281, 20 + + + groupBox1 + + + browseButton + + + folderTextBox + + + 238, 20 + + + 71, 13 + + + $this + + + Cancel + + + 8 + + + label3 + + + True + + + groupBox1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + CenterParent + + + groupBox1 + + + 7 + + + 40, 124 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Settings + + + 0 + + + 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 380, 120 + + + 5 + + + Bottom, Right + + + 136, 121 + + + 40, 44 + + + Create a totally new Ant Colony to play with in AntMe! +Here you can choose some very important things. First: The Language you want to code in. Most people take C#, but there are some more to try. You also can choose your mother language. This affects not only the comments, but also the language your ants will understand. + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label5 + + + 0 + + + groupBox1 + + + ... + + + 5 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 55, 13 + + + 8 + + + $this + + + 75, 23 + + + 1 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label4 + + + Code Language + + + 1 + + + 2 + + + 4 + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 328, 343 + + + 3 + + + Output Folder + + + okButton + + + 110, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + codeComboBox + + + 6, 13 + + + 472, 177 + + + 159, 120 + + + 6 + + + groupBox1 + + + 3 + + + 3 + + + 321, 12 + + + Bottom, Right + + + True + + + groupBox1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + pictureBox1 + + + 2 + + + label2 + + + 37, 20 + + + 35, 13 + + + $this + + + cancelButton + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Create Colony + + + 0 + + + Language + + + 4 + + + True + + + 40, 70 + + + 12, 150 + + + 40, 97 + + + OK + + + 83, 13 + + + 2 + + + 75, 23 + + + folderBrowserDialog + + + groupBox1 + + + groupBox1 + + + $this + + + 110, 21 + + + $this + + + 136, 41 + + + languageComboBox + + + 4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + nameTextBox + + + 4 + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + 17, 17 + + + True + + \ No newline at end of file diff --git a/PlayerManagement/EnglishCSharpGenerator.cs b/PlayerManagement/EnglishCSharpGenerator.cs new file mode 100644 index 0000000..c1d34a4 --- /dev/null +++ b/PlayerManagement/EnglishCSharpGenerator.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.PlayerManagement +{ + internal sealed class EnglishCSharpGenerator : VsGenerator, IGenerator + { + public string Language + { + get { return "English"; } + } + + public string ProgrammingLanguage + { + get { return "C#"; } + } + + public string Generate(string name, string path) + { + return GenerateCS(name, path, + GeneratorFiles.solution, + GeneratorFiles.project, + GeneratorFiles.user, + GeneratorFiles.class_en, + GeneratorFiles.properties); + } + } +} diff --git a/PlayerManagement/EnglishVBGenerator.cs b/PlayerManagement/EnglishVBGenerator.cs new file mode 100644 index 0000000..6a7b0ad --- /dev/null +++ b/PlayerManagement/EnglishVBGenerator.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.PlayerManagement +{ + internal sealed class EnglishVBGenerator : VsGenerator, IGenerator + { + public string Language + { + get { return "English"; } + } + + public string ProgrammingLanguage + { + get { return "VB.NET"; } + } + + public string Generate(string name, string path) + { + return GenerateVB(name, path, + GeneratorFiles.solution_vb, + GeneratorFiles.project_vb, + GeneratorFiles.user_vb, + GeneratorFiles.class_vb_en, + GeneratorFiles.properties_vb); + } + } +} diff --git a/PlayerManagement/GeneratorFiles.Designer.cs b/PlayerManagement/GeneratorFiles.Designer.cs new file mode 100644 index 0000000..239c4a4 --- /dev/null +++ b/PlayerManagement/GeneratorFiles.Designer.cs @@ -0,0 +1,280 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AntMe.PlayerManagement { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class GeneratorFiles { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal GeneratorFiles() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AntMe.PlayerManagement.GeneratorFiles", typeof(GeneratorFiles).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to using AntMe.Deutsch; + ///using System; + ///using System.Collections.Generic; + ///using System.Linq; + ///using System.Text; + /// + ///namespace AntMe.Player.{2} + ///{ + /// [Spieler( + /// Volkname = "{2}", + /// Vorname = "", + /// Nachname = "" + /// )] + /// [Kaste( + /// Name = "Standard", + /// AngriffModifikator = 0, + /// DrehgeschwindigkeitModifikator = 0, + /// EnergieModifikator = 0, + /// GeschwindigkeitModifikator = 0, + /// LastModifikator = 0, + /// ReichweiteModifikator = 0, + /// Sich [rest of string was truncated]";. + /// + internal static string class_de { + get { + return ResourceManager.GetString("class_de", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to using AntMe.English; + ///using System; + ///using System.Collections.Generic; + ///using System.Linq; + ///using System.Text; + /// + ///namespace AntMe.Player.{2} + ///{ + /// [Player( + /// ColonyName = "{2}", + /// FirstName = "", + /// LastName = "" + /// )] + /// [Caste( + /// Name = "Default", + /// AttackModificator = 0, + /// EnergyModificator = 0, + /// LoadModificator = 0, + /// RangeModificator = 0, + /// RotationSpeedModificator = 0, + /// SpeedModificator = 0, + /// ViewRangeModificator = 0 /// [rest of string was truncated]";. + /// + internal static string class_en { + get { + return ResourceManager.GetString("class_en", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string class_vb_de { + get { + return ResourceManager.GetString("class_vb_de", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string class_vb_en { + get { + return ResourceManager.GetString("class_vb_en", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?> + ///<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + /// <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + /// <PropertyGroup> + /// <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + /// <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + /// [rest of string was truncated]";. + /// + internal static string project { + get { + return ResourceManager.GetString("project", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string project_vb { + get { + return ResourceManager.GetString("project_vb", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to using System.Reflection; + ///using System.Runtime.CompilerServices; + ///using System.Runtime.InteropServices; + /// + ///// General Information about an assembly is controlled through the following + ///// set of attributes. Change these attribute values to modify the information + ///// associated with an assembly. + ///[assembly: AssemblyTitle("AntMe! Player")] + ///[assembly: AssemblyDescription("")] + ///[assembly: AssemblyConfiguration("")] + ///[assembly: AssemblyCompany("")] + ///[assembly: AssemblyProduct("AntMe!")] + ///[assembly: AssemblyCop [rest of string was truncated]";. + /// + internal static string properties { + get { + return ResourceManager.GetString("properties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Imports System + ///Imports System.Reflection + ///Imports System.Runtime.InteropServices + /// + ///' General Information about an assembly is controlled through the following + ///' set of attributes. Change these attribute values to modify the information + ///' associated with an assembly. + /// + ///' Review the values of the assembly attributes + /// + ///<Assembly: AssemblyTitle("AntMe! Player")> + ///<Assembly: AssemblyDescription("")> + ///<Assembly: AssemblyCompany("")> + ///<Assembly: AssemblyProduct("AntMe!")> + ///<Assembly: AssemblyCopyright(" [rest of string was truncated]";. + /// + internal static string properties_vb { + get { + return ResourceManager.GetString("properties_vb", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to + ///Microsoft Visual Studio Solution File, Format Version 12.00 + ///# Visual Studio 2013 + ///VisualStudioVersion = 12.0.31101.0 + ///MinimumVisualStudioVersion = 10.0.40219.1 + ///Project("{{3}}") = "{2}", "{2}.csproj", "{{4}}" + ///EndProject + ///Global + /// GlobalSection(SolutionConfigurationPlatforms) = preSolution + /// Debug|Any CPU = Debug|Any CPU + /// Release|Any CPU = Release|Any CPU + /// EndGlobalSection + /// GlobalSection(ProjectConfigurationPlatforms) = postSolution + /// {{4}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + /// {{4}}.Debug|Any [rest of string was truncated]";. + /// + internal static string solution { + get { + return ResourceManager.GetString("solution", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to + ///Microsoft Visual Studio Solution File, Format Version 12.00 + ///# Visual Studio 2013 + ///VisualStudioVersion = 12.0.31101.0 + ///MinimumVisualStudioVersion = 10.0.40219.1 + ///Project("{{3}}") = "{2}", "{2}.vbproj", "{{4}}" + ///EndProject + ///Global + /// GlobalSection(SolutionConfigurationPlatforms) = preSolution + /// Debug|Any CPU = Debug|Any CPU + /// Release|Any CPU = Release|Any CPU + /// EndGlobalSection + /// GlobalSection(ProjectConfigurationPlatforms) = postSolution + /// {{4}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + /// {{4}}.Debug|Any [rest of string was truncated]";. + /// + internal static string solution_vb { + get { + return ResourceManager.GetString("solution_vb", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?> + ///<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + /// <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> + /// <StartAction>Program</StartAction> + /// <StartProgram>{6}\AntMe.exe</StartProgram> + /// <StartArguments>/file="{7}\bin\AntMe.Player.{2}.dll"</StartArguments> + /// </PropertyGroup> + ///</Project>. + /// + internal static string user { + get { + return ResourceManager.GetString("user", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string user_vb { + get { + return ResourceManager.GetString("user_vb", resourceCulture); + } + } + } +} diff --git a/PlayerManagement/GeneratorFiles.resx b/PlayerManagement/GeneratorFiles.resx new file mode 100644 index 0000000..ef5459c --- /dev/null +++ b/PlayerManagement/GeneratorFiles.resx @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Resources\class_de.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\class_en.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\class_vb_de.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\class_vb_en.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\project.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\project_vb.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\properties.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\properties_vb.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\solution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\solution_vb.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\user.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\user_vb.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + \ No newline at end of file diff --git a/PlayerManagement/GermanCSharpGenerator.cs b/PlayerManagement/GermanCSharpGenerator.cs new file mode 100644 index 0000000..28322a7 --- /dev/null +++ b/PlayerManagement/GermanCSharpGenerator.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.PlayerManagement +{ + internal sealed class GermanCSharpGenerator : VsGenerator, IGenerator + { + public string Language + { + get { return "Deutsch"; } + } + + public string ProgrammingLanguage + { + get { return "C#"; } + } + + public string Generate(string name, string path) + { + return GenerateCS(name, path, + GeneratorFiles.solution, + GeneratorFiles.project, + GeneratorFiles.user, + GeneratorFiles.class_de, + GeneratorFiles.properties); + } + } +} diff --git a/PlayerManagement/GermanVBGenerator.cs b/PlayerManagement/GermanVBGenerator.cs new file mode 100644 index 0000000..3cd4e2a --- /dev/null +++ b/PlayerManagement/GermanVBGenerator.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.PlayerManagement +{ + internal sealed class GermanVBGenerator : VsGenerator, IGenerator + { + public string Language + { + get { return "Deutsch"; } + } + + public string ProgrammingLanguage + { + get { return "VB.NET"; } + } + + public string Generate(string name, string path) + { + return GenerateVB(name, path, + GeneratorFiles.solution_vb, + GeneratorFiles.project_vb, + GeneratorFiles.user_vb, + GeneratorFiles.class_vb_de, + GeneratorFiles.properties_vb); + } + } +} diff --git a/PlayerManagement/IGenerator.cs b/PlayerManagement/IGenerator.cs new file mode 100644 index 0000000..4afb841 --- /dev/null +++ b/PlayerManagement/IGenerator.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.PlayerManagement +{ + internal interface IGenerator + { + string Language { get; } + + string ProgrammingLanguage { get; } + + string Generate(string name, string path); + } +} diff --git a/PlayerManagement/PlayerManagement.csproj b/PlayerManagement/PlayerManagement.csproj new file mode 100644 index 0000000..9073ded --- /dev/null +++ b/PlayerManagement/PlayerManagement.csproj @@ -0,0 +1,227 @@ + + + + + Debug + AnyCPU + {5D566A2A-C112-4543-95EA-F3E81A53CDE9} + Library + Properties + AntMe.PlayerManagement + AntMe.PlayerManagement + v4.0 + 512 + SAK + SAK + SAK + SAK + + + true + ..\bin\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + ..\bin\AntMe.PlayerManagement.XML + + + ..\bin\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + ..\bin\AntMe.PlayerManagement.XML + + + true + + + AntMe.snk + + + + + + + + + + + + + + + Form + + + AntProperties.cs + + + Form + + + CreateForm.cs + + + + + True + True + GeneratorFiles.resx + + + + + + Form + + + PlayerSelector.cs + + + + + + True + True + Resources.resx + + + Resource.de.resx + True + True + + + Resource.resx + True + True + + + Form + + + RightsRequest.cs + + + + + + + AntProperties.cs + Designer + + + AntProperties.cs + Designer + + + CreateForm.cs + + + CreateForm.cs + + + ResXFileCodeGenerator + Designer + GeneratorFiles.Designer.cs + + + PlayerSelector.cs + + + PlayerSelector.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + ResXFileCodeGenerator + Resource.de.Designer.cs + Designer + + + ResXFileCodeGenerator + Resource.Designer.cs + Designer + + + RightsRequest.cs + + + RightsRequest.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {415f50c3-bd70-4634-b1f7-a15b42f0b0c6} + SharedComponents + False + + + {35753e72-07f3-4f18-916c-479850ec375f} + SimulationCore + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PlayerManagement/PlayerSelector.Designer.cs b/PlayerManagement/PlayerSelector.Designer.cs new file mode 100644 index 0000000..d823b72 --- /dev/null +++ b/PlayerManagement/PlayerSelector.Designer.cs @@ -0,0 +1,226 @@ +namespace AntMe.PlayerManagement +{ + partial class PlayerSelector + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PlayerSelector)); + this.toolStrip = new System.Windows.Forms.ToolStrip(); + this.createButton = new System.Windows.Forms.ToolStripButton(); + this.loadButton = new System.Windows.Forms.ToolStripButton(); + this.propertiesButton = new System.Windows.Forms.ToolStripButton(); + this.playerListView = new System.Windows.Forms.ListView(); + this.nameColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.authorColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.playerContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.createMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.loadMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.propertiesMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.timer = new System.Windows.Forms.Timer(this.components); + this.cancelButton = new System.Windows.Forms.Button(); + this.OkButton = new System.Windows.Forms.Button(); + this.toolStrip.SuspendLayout(); + this.playerContextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip + // + resources.ApplyResources(this.toolStrip, "toolStrip"); + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.createButton, + this.loadButton, + this.propertiesButton}); + this.toolStrip.Name = "toolStrip"; + // + // createButton + // + resources.ApplyResources(this.createButton, "createButton"); + this.createButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.createButton.Image = global::AntMe.PlayerManagement.Properties.Resources.add; + this.createButton.Name = "createButton"; + this.createButton.Click += new System.EventHandler(this.createButton_Click); + // + // loadButton + // + resources.ApplyResources(this.loadButton, "loadButton"); + this.loadButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.loadButton.Image = global::AntMe.PlayerManagement.Properties.Resources.load_16x16; + this.loadButton.Name = "loadButton"; + this.loadButton.Click += new System.EventHandler(this.loadButton_Click); + // + // propertiesButton + // + resources.ApplyResources(this.propertiesButton, "propertiesButton"); + this.propertiesButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.propertiesButton.Image = global::AntMe.PlayerManagement.Properties.Resources.properties_16x16; + this.propertiesButton.Name = "propertiesButton"; + this.propertiesButton.Click += new System.EventHandler(this.propertiesButton_Click); + // + // playerListView + // + resources.ApplyResources(this.playerListView, "playerListView"); + this.playerListView.AllowDrop = true; + this.playerListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.nameColumn, + this.authorColumn}); + this.playerListView.ContextMenuStrip = this.playerContextMenu; + this.playerListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] { + ((System.Windows.Forms.ListViewGroup)(resources.GetObject("playerListView.Groups"))), + ((System.Windows.Forms.ListViewGroup)(resources.GetObject("playerListView.Groups1")))}); + this.playerListView.LargeImageList = this.imageList; + this.playerListView.MultiSelect = false; + this.playerListView.Name = "playerListView"; + this.playerListView.ShowItemToolTips = true; + this.playerListView.SmallImageList = this.imageList; + this.playerListView.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.playerListView.UseCompatibleStateImageBehavior = false; + this.playerListView.View = System.Windows.Forms.View.Tile; + this.playerListView.SelectedIndexChanged += new System.EventHandler(this.playerListView_SelectedIndexChanged); + this.playerListView.DoubleClick += new System.EventHandler(this.playerListView_DoubleClick); + // + // nameColumn + // + resources.ApplyResources(this.nameColumn, "nameColumn"); + // + // authorColumn + // + resources.ApplyResources(this.authorColumn, "authorColumn"); + // + // playerContextMenu + // + resources.ApplyResources(this.playerContextMenu, "playerContextMenu"); + this.playerContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.createMenuItem, + this.loadMenuItem, + this.toolStripMenuItem1, + this.propertiesMenuItem}); + this.playerContextMenu.Name = "contextMenuStrip1"; + // + // createMenuItem + // + resources.ApplyResources(this.createMenuItem, "createMenuItem"); + this.createMenuItem.Name = "createMenuItem"; + this.createMenuItem.Click += new System.EventHandler(this.createButton_Click); + // + // loadMenuItem + // + resources.ApplyResources(this.loadMenuItem, "loadMenuItem"); + this.loadMenuItem.Name = "loadMenuItem"; + this.loadMenuItem.Click += new System.EventHandler(this.loadButton_Click); + // + // toolStripMenuItem1 + // + resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + // + // propertiesMenuItem + // + resources.ApplyResources(this.propertiesMenuItem, "propertiesMenuItem"); + this.propertiesMenuItem.Name = "propertiesMenuItem"; + this.propertiesMenuItem.Click += new System.EventHandler(this.propertiesButton_Click); + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Transparent; + this.imageList.Images.SetKeyName(0, "nonstatic"); + this.imageList.Images.SetKeyName(1, "nonstatic_disabled"); + this.imageList.Images.SetKeyName(2, "nonstatic_disabled_secure"); + this.imageList.Images.SetKeyName(3, "nonstatic_secure"); + this.imageList.Images.SetKeyName(4, "static"); + this.imageList.Images.SetKeyName(5, "static_disabled"); + this.imageList.Images.SetKeyName(6, "static_secure"); + this.imageList.Images.SetKeyName(7, "static_disabled_secure"); + // + // openFileDialog + // + this.openFileDialog.DefaultExt = "*.dll"; + resources.ApplyResources(this.openFileDialog, "openFileDialog"); + this.openFileDialog.Multiselect = true; + // + // cancelButton + // + resources.ApplyResources(this.cancelButton, "cancelButton"); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Name = "cancelButton"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // OkButton + // + resources.ApplyResources(this.OkButton, "OkButton"); + this.OkButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.OkButton.Name = "OkButton"; + this.OkButton.UseVisualStyleBackColor = true; + // + // PlayerSelector + // + this.AcceptButton = this.OkButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.Controls.Add(this.OkButton); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.playerListView); + this.Controls.Add(this.toolStrip); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "PlayerSelector"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + this.playerContextMenu.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip; + private System.Windows.Forms.ToolStripButton createButton; + private System.Windows.Forms.ToolStripButton loadButton; + private System.Windows.Forms.ToolStripButton propertiesButton; + private System.Windows.Forms.ListView playerListView; + private System.Windows.Forms.ColumnHeader nameColumn; + private System.Windows.Forms.ColumnHeader authorColumn; + private System.Windows.Forms.ContextMenuStrip playerContextMenu; + private System.Windows.Forms.ToolStripMenuItem createMenuItem; + private System.Windows.Forms.ToolStripMenuItem loadMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem propertiesMenuItem; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.Timer timer; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button OkButton; + private System.Windows.Forms.ImageList imageList; + } +} \ No newline at end of file diff --git a/PlayerManagement/PlayerSelector.cs b/PlayerManagement/PlayerSelector.cs new file mode 100644 index 0000000..89bd9f6 --- /dev/null +++ b/PlayerManagement/PlayerSelector.cs @@ -0,0 +1,162 @@ +using AntMe.Simulation; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace AntMe.PlayerManagement +{ + /// + /// Form to select one of the known Player Files. + /// + public sealed partial class PlayerSelector : Form + { + private List players = new List(); + + /// + /// Default Constructor. + /// + public PlayerSelector() + { + InitializeComponent(); + + UpdateList(); + } + + /// + /// The selected Player. + /// + public PlayerInfoFilename SelectedPlayer { get; private set; } + + private void UpdateList() + { + players.Clear(); + foreach (var player in PlayerStore.Instance.KnownPlayer) + players.Add(player as PlayerInfoFilename); + + // Delete items + for (int i = 0; i < playerListView.Items.Count; i++) + { + if (!players.Contains((PlayerInfoFilename)playerListView.Items[i].Tag)) + { + playerListView.Items.RemoveAt(i); + i--; + } + } + + // Create new items + ListViewGroup staticGroup = playerListView.Groups["staticGroup"]; + ListViewGroup nonstaticGroup = playerListView.Groups["nonStaticGroup"]; + for (int i = 0; i < players.Count; i++) + { + PlayerInfoFilename info = players[i]; + if (!playerListView.Items.ContainsKey(info.GetHashCode().ToString())) + { + ListViewItem item = playerListView.Items.Add(info.GetHashCode().ToString(), info.ColonyName, 0); + item.Tag = info; + item.Group = info.Static ? staticGroup : nonstaticGroup; + item.SubItems.Add( + string.Format(Resource.AntPropertiesAuthorFormat, info.FirstName, info.LastName)); + } + } + + // Update Icon + foreach (ListViewItem listViewItem in playerListView.Items) + { + + // collect infos + PlayerInfoFilename playerInfo = (PlayerInfoFilename)listViewItem.Tag; + + bool playerStatic = playerInfo.Static; + bool playerEnabled = true; + bool playerSecure = RightsRequest.RequestRights(playerInfo); + string hintText = string.Empty; + + if (!RightsRequest.IsValidPlayer(playerInfo)) + { + playerEnabled = false; + hintText = RightsRequest.GetRuleViolationMessage(playerInfo); + } + //else if (RightsRequest.LockedRights(config, playerInfo)) + //{ + // playerEnabled = false; + // hintText = RightsRequest.RequiredRightsList(config, playerInfo); + //} + + // Set Information to Item + listViewItem.ImageKey = + (playerStatic ? "static" : "nonstatic") + + (!playerEnabled ? "_disabled" : string.Empty) + + (playerSecure ? "_secure" : string.Empty); + listViewItem.ToolTipText = hintText; + } + } + + private void createButton_Click(object sender, EventArgs e) + { + using (CreateForm form = new CreateForm()) + { + if (form.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + { + if (MessageBox.Show(this, "Es wurde eine neue Ameisenvorlage erstellt. Um deine neue Ameise aber im Spiel zu sehen, muss du sie zuvor mit einer Entwicklungsumgebung geöffnet und kompiliert werden. Soll die Entwicklungsumgebung gleich geöffnet werden?", "Ameise bearbeiten", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes) + { + // Start Visual Studio + Process.Start(form.GeneratedSolutionFile); + } + } + } + } + + private void loadButton_Click(object sender, EventArgs e) + { + if (openFileDialog.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + { + PlayerStore.Instance.RegisterFile(openFileDialog.FileName); + UpdateList(); + } + } + + private void playerListView_SelectedIndexChanged(object sender, EventArgs e) + { + if (playerListView.SelectedItems.Count > 0) + SelectedPlayer = playerListView.SelectedItems[0].Tag as PlayerInfoFilename; + else + SelectedPlayer = null; + + UpdateSelection(); + } + + private void playerListView_DoubleClick(object sender, EventArgs e) + { + if (playerListView.SelectedItems.Count > 0) + SelectedPlayer = playerListView.SelectedItems[0].Tag as PlayerInfoFilename; + else + SelectedPlayer = null; + + UpdateSelection(); + + DialogResult = System.Windows.Forms.DialogResult.OK; + Close(); + } + + private void UpdateSelection() + { + OkButton.Enabled = SelectedPlayer != null; + propertiesButton.Enabled = SelectedPlayer != null; + propertiesMenuItem.Enabled = SelectedPlayer != null; + } + + private void propertiesButton_Click(object sender, EventArgs e) + { + using (AntProperties properties = new AntProperties(SelectedPlayer)) + { + properties.ShowDialog(this); + } + } + } +} diff --git a/PlayerManagement/PlayerSelector.de.resx b/PlayerManagement/PlayerSelector.de.resx new file mode 100644 index 0000000..7eb05de --- /dev/null +++ b/PlayerManagement/PlayerSelector.de.resx @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Erstellen + + + Laden + + + Eigenschaften + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh + ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG + AwAAABFTdGF0aXNjaGUgQW1laXNlbgX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxB + bGlnbm1lbnQBAAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAAC3N0YXRpY0dyb3VwCw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh + ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG + AwAAABZOaWNodHN0YXRpc2NoZSBBbWVpc2VuBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpv + bnRhbEFsaWdubWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAObm9uU3RhdGljR3JvdXAL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADy + LgAAAk1TRnQBSQFMAgEBCAEAATwBAAE8AQABIAEAASABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAGA + AwABYAMAAQEBAAEYBgABkP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AGAAAvoB+wLa + AexaAAP7A+P/ABsAA/4CuAHfAvsB/FcAA/4DzAP8bwAD/wP1AfEB8wH0AfMC9AHzAvQB8wL0AfMC9AHz + AvQB8wL0AfMC9AHzBfQD/jkAA/8D9QPzG/QD/iQAAuAB7gLRAegGAAL6AfsD/U4AA+cD3AYAA/oD/UgA + A/8D/RUAA/cBuwHaAf8BRAGVAf8BLAGLAf8BLAGMAf8BLAGMAf8BLAGMAf8BLAGMAf8BLAGMAf8BLAGM + Af8BLQGFAf8BmQHHAf8D9h4AA/8D/RUAA/cD3QOeA5QSlQOPA8wD9iQAA/0CnQHWA/8DAALGAeQC1wHq + TgAD/QO6A/8DAAPVA+BIAAP+Ar8B4QL9Af4SAAP2Aa0B0gH/AT0BkAH/AQABaAH/AQABagH/AQABagH/ + AQABagH/AQABagH/AQABagH/AQABagH/AQABXwH/AVkBpAH/A/UeAAP+A9AD/RIAA/YD1gOZA3QSdgNs + A6wD9RUAAvoB+wL6AfsMAAK1Ad4C4gHvAwAC4AHuAscB5T8ABvsMAAPKA+kDAAPnA9ZLAALZAesC2wHs + BgAD/gkAA/kB0QHlAf4BYgGlAf8BcwGzAf8BdAGzAf8BdAGzAf8BdAGzAf8BdAGzAf8BdAGzAf8BcwGz + Af8BdAGwAf8B1wHpAf8D+CEAA+ID4wYAA/4JAAP5A+cDrRW5A7YD6wP4EgACvAHhAh8BsAIdAa4CkAHS + Av0B/gYAAu0B9AKYAdQDAALeAe0CvAHhPAADzgNnA2YDsQP9BgAD8QO2AwAD5gPOSwAD/AKnAdoGAAK1 + Ad4C+AH6BgAD9gGzAdYB/wFGAZQB/wEUAX4B/wEUAX8B/wEUAX8B/wEUAX8B/wEUAX8B/wEUAX8B/wEU + AX8B/wEUAXYB/wF+AbcB/wP1IQAD/APABgADygP5BgAD9gPZA50DiBKJA4EDvQP1DwAD/gIrAbMCBgGo + AgYBqAIGAagCdgHKCQACgAHMAvwB/QLiAe8C0QHoOQAD/gNvCVcDoAkAA6YD/QPpA90/AAP8DAACsgHd + AuwB9AMAAsEB4gLvAfUGAAP2AaoB0QH/ATgBjAH/AQMBdAH/AQMBdQH/AQMBdgH/AQMBdgH/AQMBdgH/ + AQMBdgH/AQMBdgH/AQMBbAH/AXABsQH/A/UVAAP8DAADyAPwAwAD0gPyBgAD9gPUA5UDfwOADIEDgAN4 + A7gD9Q8AA/4CMwG1AgYBqAIGAagCBgGoAgYDqAHZAwAD/AKOAdED/gLbAewC3AHtOQAD/gN0DFcDwQMA + A/wDrwP+A+MD5TkAAvsB/AJoAcUCJAGxAmoBxQLyAfcGAALpAfICqAHZAwACxAHjAusB8wYAA/kB0wHm + Af4BWwGiAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbQGsAf8B1wHp + Af8D+A8AA/sDlwNqA5gD9AYAA+4DwQMAA9QD7wYAA/kD5wOpFbUDsgPrA/gSAAKhAdcCBgGoAgYBqAIG + AagCBgGoAgYBqALuAfUC3wHuAr4B4QMAAsMB4wLEAeM8AAO8D1cD8QPmA9ADAAPTA9Q5AALaAewCBgGo + AgYBqAIGAagCKwGzAvgB+gYAAoYBzwMAAskB5QLzAfcGAAP2AaUBzgH/ATMBiwH/AQABbQH/AQABbgH/ + AQABbgH/AQABbgH/AQABbgH/AQABbgH/AQABbgH/AQABYwH/AV8BqAH/A/UPAAPjCVcDbwP5BgADqgMA + A9cD9QYAA/YD0gOVA3gDeQ96A3ADrwP1EgAD/gKmAdkCBgGoAgYBqAIGAagCBgGoArUB3gK3Ad8C8AH2 + AwAC7wH1AoABzDwAA/4DwAxXA8oDywPzAwAD8gOmOQAC4AHuAgYBqAIGAagCBgGoAgYBqAJaAcED/wL4 + AfoCmwHVAwACtgHfAvYB+QYAA/cBtQHXAf8BNAGLAf8BGQGGAf8BEQF+Af8BGAGBAf8BGQGCAf8BGQGC + Af8BEQF+Af8BGQGHAf8BEwF3Af8BjQHBAf8D9Q8AA+cMVwONA/8D+QO4AwADygP3BgAD9wPaA5UDkQOJ + A4sDjAOLA4gDkQOCA8YD9QMAAuoB8wL1AfgPAALtAfQCgwHNAhUBrQIGAagCigHQAo4B0QLpAfIGAALX + AesCvAHhKgAD7wP2DwAD8AOoA2ADVwOtA68D7gYAA+EDzjYAAvwB/QJOAb0CBgGoAgYBqAIGAagCBgGo + AssB5gLUAekC1QHqAwACmAHUAuwB9AYAA/4D9AHeAegB8gGcAaQBsAHhAeoB8wHoAe8B+AHoAe8B+AHo + Ae8B9wHlAe8B+AGeAaYBsgHZAeEB6wP0A/4PAAP9A4UMVwPYA98D4AMAA7YD8AYAA/4D9APpA6UD6wbw + A+8D8AOoA+ID9AP+AwAC7AHzArkB3wKyAd0C5QHwDwAC8wH3AuoB8wJKAbwCDwGrAmUBxALiAe8CygHl + AsAB4gJoAcUD/ycAA/ADzAPIA+oPAAP1A+8DgwNcA5QD6APYA9EDlwP/NgAC+wH8ApsB1QIKAaoCBgGo + AgYBqAKbAdUCtAHeAvUB+AMAAugB8gKhAdcMAAHkAeEB3QFmAWABXQHnAeUB4gkAAfAB7gHrAWsBZgFi + AdcB1AHRA/0VAAP8A7gDWQZXA7gDyQP2AwAD7AO8DAAD4ANgA+UJAAPtA2UD0wP9DAAC8AH2ArMB3QKP + AdECwgHjAvMB9wLkAfACqAHZApgB1AKVAdMCagHFAggBqAIGAagCCAGoAqAB2ALOAecC+gH7MAAD8wPI + A7AD0gP1A+oDwQO2A7QDmANZA1cDWQO8A9sD+yoAAs8B5wLRAegC+AH6DAAC8wH3AqwB2wJ3AckCUwG/ + AlcBvwLRAegGAAKtAdsCzQHnBgAD/gPjAXICcAPbA/sDAAP+A+sBZwJlAdgC1wP8BgAD2wPcA/kMAAP1 + A8QDoAOJA4sD3AYAA8QD2gYAA/4D4wNwA9sD+wMAA/4D6wNlA9cD/BIAAvoB+wLJAeUCigHQAq0B2wLm + AfED/gL6AfsCsAHdAggBqAIGAagCDwGrArIB3QLXAeoC4AHuDwAC+wH8A/4hAAP7A9cDrQPEA+sD/gP7 + A8YDWQNXA1wDyAPgA+cPAAP7A/4VAAL8Af0C5AHwAqYB2QKvAdwC5gHxBgAC+wH8AtoB7ALNAecCdgHK + AgYBqAIdAa4CewHLAoYBzwKYAdQC5gHxCQAD8QGxArABtgK1A+4D9AP2AZ0CnAFyAnAD8AkAA/0D6gPA + A8YD6wYAA/sD4wPaA6ADVwNmA6MDqgO2A+sJAAPxA7ADtQPuA/QD9gOcA3AD8CoAAvcB+QIqAbICGwGu + AgYBqAIGAagCjgHRAtQB6QKpAdoC0QHoAsQB4wLBAeICvAHhAscB5QL7Afw2AAP4A24DZQZXA68D3wPC + A9wD1APSA84D1gP7HgAC7AHzArAB3QKGAc4CmQHUApoB1QLLAeYCzAHmAncByQIKAaoCBgGoAh0BrgLg + A+4B9QwAA/kB6QHoAeABqAOmAqUBnwKeAYECgAFfAl0D0gP1EgAD8APGA6oDtwO4A9gD2QOgA1kDVwNm + A+cD8QwAA/kD5QOmA6UDngOAA10D0gP1DwAC/AH9Aq0B2wK8AeECwAHiAsEB4gK9AeECrgHcAtYB6gMA + AuMB7wKVAdMC5gHxAgYBqAIGAagCYAHCAqEB1wLfAe4C2gHsAukB8gL5AfsD/iEAA/wDxAPOA9ED0gPP + A8UD4AMAA+kDtAPrBlcDkQO8A+YD4wPuA/oD/ioAA/0C9wH5CQAC+QH6AhYBrAIGAagCBgGoAhcBrAKj + AdgCvwHhAusB8wLvAfUC4AHuAtsB6wLCAeUD5gG5ArgBiwKJAaACnwHgAt8D9BsAA/0D+AkAA/oDYQZX + A2IDvgPQA+8D8gPnA+ID1APmA7gDiQOfA98D9BIAA/8C7wH1AuIB7wLdAe0C5QHwAukB8gLeAe0CnAHV + ArAB3QLHAeUCwwPjAe8CowHYAooB0AJEAbsCBgGoAkYBugP+A/8C7wH1JAAD/wPyA+kD5QPqA+4D5gO5 + A8YD1gPTA+kDvgOtA38DVwOBA/4D/wPyJAAC9gH5As4B5wLdAe0C3wHuAuIB7wLaAewC5QHwAwAC8gH3 + AoQBzgKyAd0CBgGoAgYBqAKnAdoCywHmAsYB5AK+AeEC3AHsAusB8wP9A/sD9Qb0A/oVAAP3A9sD5QPm + A+kD4wPqAwAD9AOpA8gGVwPAA9gD1QPQA+QD7wP9A/sD9Qb0A/otAALcAe0CiAHPAvoB+wLoAfIC0wHp + ArIB3QIGAagCBgGoAgYBqAJvAccCuwHgApkB1AL1Afg5AAPlA6sD+gPsA94DyAlXA5sDzgO3A/YhAAL6 + AfsC0gHpAsUB5ALDAeMC1QHqAscB5QKZAdQCsQHdAtgB6wK/AeEC5AHwAoMBzQJmAcQCHwGwAgYBqALc + Ae0DAAL7AfwqAAP7A90D1APTA+AD1gO3A8cD4gPQA+oDqAOVA2cDVwPlAwAD/E4AAq8B3ALvAfUCWgHB + AgYBqAIGAagCnAHVA/4C+wH8AroB4EUAA8YD8gONBlcDuQP+A/sDzTYAAuAB7gJ4AcoC9gH4At0B7QLf + Ae4CbwHHAgYBqAIGAagCFwGsArUB3gKcAdUC4gHvPAAD5wOhA/cD5QPmA5sGVwNiA8oDuQPpSwACuwHg + AucB8QL9Af4CegHLAqUB2QP+BgACyQHlAusB80IAA84D7AP9A6IDvwP+BgAD1wPvPAAD/QKuAdwC5QHw + Ah8BsAIGAagCJAGxAu8B9QMAArUB3gP8QgAD/QPFA+oDZwNXA2oD8gMAA8oD/EgAAqgB2QL7AfwC+gH7 + AroB4AwAA/0C+wH8CQAD/gH2AfgB+gH5AfoB+zAAA8ED/AP7A80MAAP9A/sJAAP+A/gD+i0AAqYB2QL8 + Af0C8gH2AmwBxgLxAfYGAALoAfIC3AHtRQADwAP8A/QDmgPzBgAD7APlRQAC+gH7ArYB3wMAAuAB7gKr + AdsD/RIAAfAB9AH4AZQBwAH1ASABhAH8AQABdAH/AQIBdgH/AvsB/CoAA/sDygMAA+cDwwP9EgAD9APE + A44DfwOBA/snAAL8Af0CsAHdAwAC0QHoAuoB8wwAA/0GAAP/AfAB9AH4AdkB5gH1AfEB9QH5MAAD/QPG + AwAD3APuDAAD/QYAA/8D9APnA/UzAALkAfAC2QHrBgAC5gHxArAB3QLYAesD/gkAAasBzAH0AQABdAH/ + AQABdAH/AWMBpgH3AacBygH0Ac0B3wH0A/4qAAPqA+IGAAPrA8YD4gP+CQAD0AZ/A60DzgPhA/4nAALs + AfQCzwHnAwACxwHlAsMB4wL6AfsMAAP/Ab4B1wH0ASgBiQH7AQABdAH/AQABdAH/AYYBuQH1MAAD8APb + AwAD1gPTA/oMAAP/A9kDkgZ/A74zAALXAesC+AH6CQAD/gLhAe8D/QYAAYoBugH1AQABdAH/AXoBsgH2 + AfUB9wH6NgAD4QP5CQAD/gPoA/0GAAO/A38DuAP3MwACzQHnAvAB9QYAAusB8wKwAd0C6wHzBgAB+gH7 + AfwBVgGfAfgBAAF0Af8BcgGuAfYB2QHmAvUB9wH6A/4wAAPaA/MGAAPvA8YD7wYAA/sDpwN/A7QD5wP3 + A/4zAAP/GAABvwHXAfQBAAF0Af8BogHHAfQGAAHhAesB9gGaAcMB9AGYAcIB9QL9Af4qAAP/GAAD2gN/ + A8sGAAPsA8cDxgP9JwAC7gH1A/8MAAP8AwAB/QL+AUoBmQH4AQQBdgH/AeIB6wH2BgAB+AH5AfsB/AL9 + MAAD8QP/DAAD/AMAA/4DoQOBA+wGAAP5A/1LAAH6AfsB/AELAXkB/gFYAaEB+AMAA/4BfQG0AfUBAAF0 + Af8BAAF0Af8BOQGQAfoB+wL8QgAD+wOEA6gDAAP+A7kGfwOZA/w/AAGjAcgB9AEAAXQB/wHpAe8B9wMA + AdcB5QH1ATIBjgH7AQABdAH/AYQBtwH1SAADzAN/A/ADAAPmA5YDfwO8SwABvwHXAfQBAAF0Af8B6gHw + AfcDAAGPAb0B9QEAAXQB/wGrAcwB9AH5AfoB+0gAA9oDfwPxAwADwgN/A88D+kIAAfoB+wH8AQABdAH/ + AZgBwgH0AwABzgHgAfUBAAF0Af8BXwGlAfcB0gHiAfUB9gH4AfpFAAP7A38DxgMAA+EDfwOrA+MD+EsA + AWYBqAH3ARwBggH8AwAB9QH3AfoBAAF0Af8BjgG9AfUDAAP+AeoB8AH3A/5CAAOuA4wDAAP4A38DwQMA + A/4D8QP+PAAB1QHkAfUBAAF0Af8B9AH3AfkD/QEJAXkB/gF3AbEB9gYAA/9FAAPlA38D9wP9A4MDtgYA + A/9LAAEZAYEB/QFPAZwB+AMAAcwB3gH1AQABdAH/AeoB8AH3AwABXAGjAfcBAAF0Af8BlAHAAfVCAAOL + A6QDAAPgA38D8QMAA6kDfwPEPAABpAHJAfQBAAF0Af8DAAHeAekB9gEAAXQB/wHwAfQB+QP9AVIBngH5 + ASwBiwH7Ae4B8gH4QgADzAN/AwAD6gN/A/QD/QOlA5QD80gAAYYBuQH1AbIB0AH0AwAB5QHtAfYBXQGj + AfcB+wL8A/4BDQF7Af4BAAF0Af8BUwGeAfhCAAO+A9MDAAPuA6oD/AP+A4UDfwOlPAABxwHbAfQBZgGo + AfcDAAHmAe4B9wFNAZsB+AP+AfAB9AH5AQABdAH/AQABdAH/AcYB2wH0QgAD3gOuAwAD7gOiA/4D9AZ/ + A91dAAHlAe0B9wGfAcYB9AHyAfUB+VcAA+4DyQP1TgAD/wHFAdoB9AGsAc0B9AH8Av1UAAP/A9wD0AP9 + /wC0AALvAfVdAAPy/wAeAALBAeIC8AH2WgAD0gPzZgAD/wP1A/Mb9AP+PwAD+wHxAfIB9AHyAfMB9AHz + AvQB8wL0AfMC9AHzAvQB8wL0AfMC9AP1MAAC8wH3AqwB21oAA/UDxGYAA/cD3QOeA5QSlQOPA8wD9j8A + Ae0B8QH1AXMBswH/AS4BiwH/ASoBigH/ASoBiwH/ASoBiwH/ASoBiwH/ASoBiwH/ASoBhAH/AYkBvwH/ + A/cwAAKgAdcC9gH5CQAC9AH3A/5LAAO7A/cJAAP1A/5UAAP2A9YDmQN0EnYDbAOsA/UnAAP+AswB5gP+ + DwAB6wHwAfYBawGuAf8BFAF+Af8BDgF6Af8BDgF8Af8BDgF8Af8BDgF8Af8BDgF8Af8BDgFzAf8BdgGz + Af8D9zAAAtgB6wK3Ad8JAAJ3AckC8QH2SwAD4gPLCQADoAPzQgAD/A8AA/kD5wOtFbkDtgPrA/gqAALM + AeYC3QHtDwAB8AHyAfQBcgGyAf8BUgGeAf8BVQGjAf8BVQGjAf8BVQGjAf8BVQGjAf8BVQGjAf8BVgGe + Af8BvgHbAf4D+jAAA/0CegHLA/4GAAKqAdoC6wHzSwAD/QOiA/4GAAPCA+9CAAPSA/cMAAP2A9kDnQOI + EokDgQO9A/UqAAL7AfwCoAHXCQAG/gHqAfAB9wFcAaYB/wEAAWwB/wEAAWYB/wEAAWgB/wEAAWgB/wEA + AWgB/wEAAWgB/wEAAV4B/wFUAaIB/wP2GAAC8gH3ArwB4QK9AeEC7wH1DwACnwHWAtcB6wYAAq8B3ALk + AfAzAAP0A84DzwPyDwADugPhBgADxgPqQgAD8QPQDAAD9gPUA5UDfwOADIEDgAN4A7gD9S0AAqoB2gLr + AfMGAALaAewCxgHiAfIB8wH0AXMBswH/AVUBnwH/AVgBpAH/AVgBpAH/AVgBpAH/AVgBpAH/AVgBpAH/ + AVgBnwH/AcEB3QH+A/oVAALyAfYCEQGrAgYBqAIGAagCBgGoAqkB2gwAAukB8gJ7AcsGAAKnAdoC4QHv + MAAD9ANeCVcDwgwAA+4DowYAA8AD6EUAA7wD+wYAA+sD8QPrA6kVtQOyA+sD+C0AAugB8gKhAdcGAALv + AfUCsAHaAfIC9QFpAa0B/wEPAXsB/wEIAXcB/wEIAXgB/wEIAXgB/wEIAXgB/wEIAXkB/wEIAXAB/wFu + AbAB/wP2FQACvgHhAgYBqAIGAagCBgGoAgYBqAIGAagCtAHeDAACYQHCAvQB+AMAAqcB2gLsAfMwAAPQ + D1cDyQwAA5ID9gMAA8AD8EUAA9wD1wYAA80D2QPXA5UDeAN5D3oDcAOvA/UVAAL7AfwCygHlArUB3gLi + Ae8MAAP/AnsBywL6AfsDAALyAfcCqQHYAfIB9AH1AXEBsgH/AS8BjwH/ASwBjQH/ATYBkQH/ATYBkgH/ + ATIBjwH/AS4BjgH/ASsBhwH/AY8BwgH/A/gVAAK1Ad4CBgGoAgYBqAIGAagCBgGoAgYBqAIGAagC1wHr + BgAC/QH+Am8BxwL7AfwDAAKiAdcC7wH1MAADyhJXA+EGAAP9A5sD+wMAA70D8jMAA/YD+wwAA/sDqwYA + A+YD0gPfA5UDkQOJA4sDjAOLA4gDkQOCA8YD9RUAAm8BxwIGAagCBgGoAgYBqAJ6AcsD/gkAArgB3wK7 + AeADAALyAfYCnQHVA/wC9gH3AagBpwGmAeUB5AHjBvQD9QG5AbcBtgHJAcgBxgP1GAAC3wHuAgYBqAIG + AagCBgGoAgYBqAIGAagCBgGoAhcBrAL1AfgDAALaAewCmQHUBgACmAHUAu4B9TAAA+YSVwNiA/YDAAPj + A7cGAAO2A/EtAAP7A40DVwNmA7YD/gkAA7YD6wMAA+ED2QP0A+kDpQPrBvAD7wPwA6gD4gP0A/4SAAL6 + AfsCEwGrAgYBqAIGAagCBgGoAgYBqAKBAc0JAALwAfYCdgHKAwAC8AH2ArQB3QMAA/QBewF4AXcB1AHT + AdEGAAP3AZYBlAGTAacBpAGjA/sYAAP+Al8BwwIGAagCBgGoAgYBqAIGAagCBgGoAgYBqAJ7AcsDAAKO + AdEC5AHwBgACegHLAuMB7zAAA/4DkBJXA6MDAAOvA+oGAAOiA+ktAAPbDFcDpwkAA+YDswMAA9sD5gMA + A+ADYAPlCQAD7QNlA9MD/RUAAvsB/AIbAa4CBgGoAgYBqAIGAagCBgGoAgYBqAKxAd0GAALUAeoCqgHa + AwAC6gHzAroB4AMAA/QBpwKmAcQCwwP1A/sD9AF4AnYDxgP8GwAC/AH9ApgB1AIGAagCBgGoAgYBqAIG + AagCBgGoAjABtQL5AfoCcQHIA/8GAALWAeoCfAHLMwAD/QO2D1cDcgP6A50D/wYAA+ADpC0AA9MPVwPD + BgAD4gPEAwAD0wPsAwAD4wNwA9sD+wMAA/4D6wNlA9cD/BgAAmwBxgIGAagCBgGoAgYBqAIGAagCBgGo + AgYBqALmAfEDAAKGAc8C7QH0AwAC3gHtApoB1QMAA/sD3gGpAqgBuwK6AbwCuwGAAn4BkAKOA/IJAAP8 + GAAC6AHyAm8BxwIGAagCBgGoAgYBqAItAbMC+gH7AmMBxAL8Af0JAAKgAdcCyQHlGwAD/BgAA+wDmwlX + A3AD+wOTA/0JAAO7A9cqAAPwElcD5wMAA7AD8QMAA8YD5gMAA/EDsAO1A+4D9AP2A5wDcAPwGwAC8wH3 + AkgBvAIGAagCBgGoAgYBqAIGAagCBgGoAnYBygL5AfoChAHOBgAC7QH0AmEBwgYAA/YD4AGpAqgBhAKD + AawCqgHxAvAD/gkAAtsB7AKrAdsC4AHuA/8VAALpAfICsAHdApUB0wI7AbcCWQHAAlYBwALFAeQMAAJF + AboC+AH6GAAD4wPDA+cD/xUAA+4DxgO0A3kDjQOLA9QMAAN/A/kqAAPDD1cDjwP4A64GAAPNA8YDAAP3 + A90DpgOlA54DgANdA9ID9R4AA/0CrQHbAhkBrgIGAagCBgGoAgYBqAJrAcYC7QH0ApkB1AkAAqwB2wLE + AeMGAAP8A/UD9AP3EgAC9wH5ArsB4AKMAdACwAHiAvYB+RIAAvYB+QP9As0B5wIWAawCLwG0AgYBqAKm + AdkCfgHMAnMByQJ/AcwCZQHEAvsB/BsAA/gDzgOuA9ED9xIAA/cD/QPaA2EDcgNXA8ADpQOeA6UDlAP7 + LQAD5wOHCVcDhAPsA70GAAP8A6AD9gMAA/UD5QO4A4kDnwPfA/QMAALQAegC3gHtA/4SAAL3AfkCqQHa + Aj8BuQIkAbECNwG2ArQB3gJjAcQD/wkAAoABzALqAfMnAAL7AfwCywHmAoEBzQKOAdEC2QHrAvsB/ALu + AfUCrQHbAnEByAJ7AcsCXwHDAoEBzQJKAbwCBgGoAgYBqAIGAagCjAHQAtYB6gLvAfUnAAP8A9gDpwOv + A+ID/APxA8QDnQOjA5ADpwODCVcDrgPgA/IeAAPcA+MD/Q8AA/4D3QOYA3kDcgO7A5gD/wYAA/kDpQP+ + AwAD+wP1BvQD+g8AAvcB+QLPAecCmQHUAsMB4wL2AfgSAAP8A/0CigHQAgYBqAIpAbMCfwHMAt4B7QK8 + AeECwwHjAlMBvwLUAekwAALjAe8CjAHQAl8BwwKBAc0CyQHlAvgB+gMAAv0B/gLRAegCDwGrAgYBqAIG + AagCBgGoAnoBywLzAfcC3gHtAvIB9y0AA+kDrgOQA6cD1wP5AwAD/QPdA1wJVwOiA/UD5gP0GwAD+gPg + A7gDzwP0DwAD+wP3A8gDVwNjA6UD0AO3A74DlwP+JwAD/QLUAeoCkAHSApMB0gLaAewC/QH+A/0C2wHs + ApgB1AJ3AckCegHLApYB0wIvAbQCBgGoAgYBqAIRAasCjAHQArYB3wLqAfM5AAP9EgACsQHdAgYBqAIG + AagCBgGoAgYBqAIGAagCpwHaApYB0wK1Ad4D/QMAA/4C9gH4Au0B9ALcAewCzQHnAuYB8RgAA/0SAAPH + D1cDwAO1A8oD/QMAA/4D9wPwA+QD2gPrBgAD/gPjA7UDsAPdA/YD3wOyA6sDoQOiA20GVwNyA9QD6gP+ + MwAC6QHyAp0B1gJoAcUCegHLAqAB2ALkAfAC/AH9AvMB9wKnAdoCBgGoAgYBqAIGAagCHQGuAuQB8AL1 + AfgC7wH1TgACbwHHApMB0gJuAccCBgGoAgYBqAIGAagCtQHeA/4C0gHpAoEBzQKKAdAClQHTAqMB2ALD + AeMC2QHrAvEB9gL8Af0tAAObA7MDmglXA8oD/gPdA6cDrQO0A74D0wPiA/QD/Q8AA/EDvgOlA8gD8QYA + A+UDawZXA20G3QPpEgAD/gP/IQAC+gH7AvwB/Q8AAnMByQIGAagCBgGoAgYBqAIGAagCZwHEArEB3QKi + AdcC9gH4AwAD/ALyAfcC6gHzAtcB6wLQAegD/Q8AAvMB9wJzAckCnAHVAqIB1wKgAdgCoQHXAqMB2AKW + AdMCigHQAuAB7gYAAmEBwgLkAfAD/AIGAagCBgGoAgYBqAKGAc4COgG4AsYB5AL9Af4C+AH6A/4YAAP1 + A54DuQO9BrwDvgO1A60D5wYAA5ID6gP8CVcDqgN5A9UD/QP5A/42AAOqA1wJVwPAA9cDvgPuA+wD3APX + A84D1AP8FQAD/QP+GAAD/gJEAbsCsQHdAjcBtgIGAagCBgGoAjMBtQL7AfwC5AHwApkB1AKKAdACogHX + Aq4B3ALPAecC4wHvAvYB+QP/DwAD/wL2AfgC7AHzAucB8QLnAfEC7gH1AvAB9gLsAfMC2AHrAnABxwKv + AdwDAAJzAckC9gH4AuIB7wKdAdYCpwHaApMB0gJhAcICBgGoAgYBqAK2Ad8GAAL8Af0VAAP/A/cD8Abs + A/ED8wPwA+IDnAPGAwADngP3A+kDugPAA7MDkgZXA8oGAAP9FQAD5QPqA/AG7wPuA+wD+gYAA4UD6gOV + BlcDogPgA+oDwQPQA+AD8QP6GwACzQHnAoYBzwKiAdcCnAHVAqEB1wKnAdoCjAHQAmoBxQK7AeAGAAJN + Ab0DAALEAeMCBgGoAgYBqAJqAcUCOwG3AmgBxQP8A/0/AAKyAd0CVwG/AnMByQMAAuAB7gK6AeADAAIi + Aa8CBgGoAgYBqAIGAagCBgGoAugB8gLPAecCfwHMAtsB7DAAA8gDiwOeAwAD5wPNAwADaQxXA+wD2wOl + A+MSAAPhA8QDvQO8A8wDygO5A5cD3gMAA5UD/wPGA4sDhQOYA1cDmi0AAv0B/gL3AfkC9AP4AfoD/QL7 + AfwC8wH3AqMB2AKPAdEC6QHyAmsBxgMAAqAB1wLeAe0CqwHbAmcBxAIGAagCBgGoAlUBvwP+AwAC5gHx + A/45AALyAfcC+wH8AwAD/gKQAdIC9wH5AnQByQIGAagCBgGoAgYBqAIGAagCXAHBAtEB6AP9AqUB2QL7 + AfwwAAP0A/sDAAP+A7ED+AOfDFcDjwPdA/0DvwP7JAAD/AO6A5wDqgMAA7cD+wOmA1wGVwOrA/UDugPi + OQAC4AHuAmEBwgLNAecDAAK1Ad4C7QH0ArMB3QIGAagCBgGoAgYBqAIGAagCmgHVArAB3QKgAdgCzQHn + RQAC3AHtArsB4AP/AmMBxAIGAagCBgGoAgYBqALyAfcGAALoAfICyQHlPAAD5QPOA/8DkwlXA/QGAAPt + A9cqAAPpA/gDAAPfA94DxAlXA1wDwAPxA8cD+kIAAvoB+wKcAdUC+gH7AkgBvAIGAagCBgGoAgYBqAKA + AcwC9QH4AwACrwHcAvgB+kIAAvMB9wKPAdEDAAL9Af4CrAHbAloBwQLnAfEMAAKpAdoC9wH5OQAD9QOw + AwAD/QPEA40D7AwAA8ID+DAAA/4DtQMAA7MGVwOtBgAD8wPURQACqAHZAu4B9QL5AfoCbAHGAg0BqQJh + AcIC/AH9BgAC8QH2AroB4AP/PwAC0QHoAsYB5AYAAr0B4QLqAfMPAAL2AfgC+QH6OQAD3QPVBgADzwPv + DwAD9wP6MwADswP8AwADwwPFA/4JAAPQA/lCAAKgAdcC8wH3AwAC+AH6Ap0B1g8AAs0B5wP8PwACrQHb + AvAB9QMAAuMB7wKmAdlRAAPEA/MDAAPpA8BIAAP4A8ADAAP6A8UD/wwABv4/AAP8Ap8B1gMAA/4CpgHZ + AvUB+FEAA/4CpgHZA/4DAALqAfMCmwHVAuYB8UsAA/4DwAP+AwAD7wO4A+tFAAPmA9wDAAPlA75UAALp + AfICwwHjAwAC+wH8AowB0ALsAfRRAALxAfYCwgHjCQAC+gH7Ar8B4QKwAd0C6wHzA/9CAAP0A9IJAAP7 + A9ADxgPvA/88AAPSA/UDAAP/A+UDwQPnA/1LAALLAeYC6wHzBgAC+wH8AsAB4gK1Ad4C7wH1A/9IAALU + AekC7QH0DwAC9gH4As0B5wP+QgAD3wPwDwAD9wPaA/45AAP9A9MMAAP8A9oD8EgAA/4CwAHiA/4MAAL0 + AfgCxgHkA/xIAALxAfYD/loAA/MD/lEAA/wD9V0AAv0B/gLyAfYtAAFCAU0BPgcAAT4DAAEoAwABgAMA + AWADAAEBAQABAQYAAQYWAAP//wD/AAMAAf8BzwP/Ac8L/wHHA/8BxwT/AcABAQL/AcABAQH/AeYBfwL/ + AeYBfwL/AZ8BwAEBAf8BnwHAAQEB/wHiAX8C/wHiAX8C/wGPAcABAQH/AY8BwAEBAfwB8gF/Af8B/AHy + AX8C/wHNAcABAQH/Ac0BwAEBAfgBMgF/Af8B+AEyAX8C/wHMAcABAQH/AcwBwAEBAfABOAF/Af8B8AE4 + AX8B/wH9AeQBwAEBAf0B5AHAAQEB8AEQAX8B/wHwARABfwH/AfABZAHAAQEB8AFkAcABAQH4AQIBfwH/ + AfgBAgF/Af8B8AE0AcABAQHwATQBwAEBAfgBAgF/Af8B+AECAX8B/wHwAQQBwAEBAfABBAHAAQEBPgED + AT8B/wE+AQMBPwH/AfABBAHAAQEB8AEEAcABAQEPAYABHwH/AQ8BgAEfAf8B+AEEAfEBwwH4AQQB8QHD + AcABAAE/Af8BwAEAAT8B/wEeAQYBYAGDAR4BBgFgAYMB8AEAAT4BfwHwAQABPgF/AQYBAAFwAQcBBgEA + AXABBwH/AeABAAF/Af8B4AEAAX8B4AEAAfABBwHgAQAB8AEHAcABIAEBAf8BwAEgAQEB/wH5AcABAAEP + AfkBwAEAAQ8BwAEAAQMB/wHAAQABAwH/AcABQAEAAR8BwAFAAQABHwH/AcABAQL/AcABAQH/AcABAAEv + Af8BwAEAAS8C/wH8AQEC/wH8AQEC/wGAAQcC/wGAAQcC/wH8AQwC/wH8AQwC/wHwARMC/wHwARMC/wH8 + ATwB4wH/AfwBPAHjAf8B+AEzAv8B+AEzAv8B+QEfAYEB/wH5AR8BgQH/AfIBewEPAf8B8gF7AQ8B/wH5 + AYcBAQH/AfkBhwEBAf8B8gE8AQ8B/wHyATwBDwH/AfkBxgEfAf8B+QHGAR8B/wHzARgBDwH/AfMBGAEP + Af8B+wH8AWEB/wH7AfwBYQH/AfMB0AHPAf8B8wHQAc8C/wH4AYEC/wH4AYEC/wHxAQ8C/wHxAQ8C/wH4 + AYcC/wH4AYcC/wHiAQ8C/wHiAQ8C/wH5AREC/wH5AREC/wHgAW8C/wHgAW8C/wH5AREC/wH5AREC/wHk + AQcC/wHkAQcC/wH5AQEC/wH5AQEC/wHkAQcC/wHkAQcD/wHxA/8B8QP/AYcD/wGHEf8B/QP/Af0L/wH8 + A/8B/AT/AcABAQL/AfABAwH/AfwD/wH8BP8BwAEBAv8B8AEBAf8B/gFzAv8B/gFzA/8BwAEBAf8B8QHw + AQEB/wH+AXMC/wH+AXMC/wH3AcABAQH/AfkB8AEBAf8B/gEzAv8B/gEzAv8B8wHAAQEB/wH5AcABAQH+ + AR8BMwH/Af4BHwEzAv8B8wHAAQEB/wH8AcABAQH8AQ8BMwH/AfwBDwEzAv8B+QGAAQEB/wH8AcABAQH8 + AQcBkwH/AfwBBwGTAv8B+QGAAQEB/AE8AUABAQH8AQMBEwH/AfwBAwETAf8B/gF5AYABAQH8AQ4BQAED + AfwBAQEzAf8B/AEBATMB/wH4ARwBgAEBAfgBDgFIAcMB/AEBATMB/wH8AQEBMwH/AfgBHAGRAcMB+AEG + AUgBAwH+AQABMwH/Af4BAAEzAf8B+AEMAZABgwH8AQIBSAEHAX8BgAE5Af8BfwGAATkB/wH4AQQBkAEH + AfwBAAHMAQcBDwHgATwB/wEPAeABPAH/AfwBAQGQAQcB/gEAAeYBHwGDAfABAAH/AYMB8AEAAf8B/gEB + AYgBDwEfAYABcwH/AeABAAEDAf8B4AEAAQMB/wEfAQABxAEfAQcB4AEDAf8B/AEIAQEB/wH8AQgBAQH/ + AQcBwAEHAf8BwAEAAQcC/wF+AQABQAH/AX4BAAFAAcABAAEPAf8B+AEAAQcC/wH+AgAB/wH+AgAB+AEw + AQ8BzwH+AXwBAQEDAeABBgEAAR8B4AEGAQABHwH/AfgBAAEPAecB+AEAAQMB4AECAQABbwHgAQIBAAFv + AeABGAEAAT8B4AENAQAC/wH4AZABBwH/AfgBkAEHAeABCAEHAf8B8AEBAQABnwH/AfwBgAEDAf8B/AGA + AQMB/wHCAQABfwH/AfEBAAEfAv8BwAEzAv8BwAEzAf8B8gEAAT8C/wEAAU8C/wHIAXkC/wHIAXkB/wH+ + AUMBPwL/AYABxwL/AcwB+QL/AcwB+QL/ASMBnwL/AZMB5wL/AckD/wHJAv8B/gFHAZ8C/wEjA/8BiAP/ + AYgC/wH+AU8D/wEjA/8BnAEfAv8BnAEfAf8B/gFBA/8BMAF/Av8BnwEfAv8BnwEfAf8B/AHxAv8B/gE8 + AX8C/wGfA/8BnwL/AfwD/wH+AX8B/ws= + + + + Abbrechen + + + Spieler auswählen + + \ No newline at end of file diff --git a/PlayerManagement/PlayerSelector.resx b/PlayerManagement/PlayerSelector.resx new file mode 100644 index 0000000..8975e30 --- /dev/null +++ b/PlayerManagement/PlayerSelector.resx @@ -0,0 +1,645 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 500, 400 + + + 23, 22 + + + 765, 500 + + + 75, 23 + + + 765, 25 + + + 148, 22 + + + 683, 473 + + + 23, 22 + + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 28 + + + loadButton + + + OK + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + PlayerSelector + + + AntMe! Colony|*.dll + + + nameColumn + + + 23, 22 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 + LgAAAk1TRnQBSQFMAgEBCAEAASwBAAE0AQABIAEAASABAAT/ARkBEAj/AUIBTQE2BwABNgMAASgDAAGA + AwABYAMAAQEBAAEYBgABkP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AGAAAvoB+wLa + AexaAAP7A+P/ABsAA/4CuAHfAvsB/FcAA/4DzAP8bwAD/wP1AfEB8wH0AfMC9AHzAvQB8wL0AfMC9AHz + AvQB8wL0AfMC9AHzBfQD/jkAA/8D9QPzG/QD/iQAAuAB7gLRAegGAAL6AfsD/U4AA+cD3AYAA/oD/UgA + A/8D/RUAA/cBuwHaAf8BRAGVAf8BLAGLAf8BLAGMAf8BLAGMAf8BLAGMAf8BLAGMAf8BLAGMAf8BLAGM + Af8BLQGFAf8BmQHHAf8D9h4AA/8D/RUAA/cD3QOeA5QSlQOPA8wD9iQAA/0CnQHWA/8DAALGAeQC1wHq + TgAD/QO6A/8DAAPVA+BIAAP+Ar8B4QL9Af4SAAP2Aa0B0gH/AT0BkAH/AQABaAH/AQABagH/AQABagH/ + AQABagH/AQABagH/AQABagH/AQABagH/AQABXwH/AVkBpAH/A/UeAAP+A9AD/RIAA/YD1gOZA3QSdgNs + A6wD9RUAAvoB+wL6AfsMAAK1Ad4C4gHvAwAC4AHuAscB5T8ABvsMAAPKA+kDAAPnA9ZLAALZAesC2wHs + BgAD/gkAA/kB0QHlAf4BYgGlAf8BcwGzAf8BdAGzAf8BdAGzAf8BdAGzAf8BdAGzAf8BdAGzAf8BcwGz + Af8BdAGwAf8B1wHpAf8D+CEAA+ID4wYAA/4JAAP5A+cDrRW5A7YD6wP4EgACvAHhAh8BsAIdAa4CkAHS + Av0B/gYAAu0B9AKYAdQDAALeAe0CvAHhPAADzgNnA2YDsQP9BgAD8QO2AwAD5gPOSwAD/AKnAdoGAAK1 + Ad4C+AH6BgAD9gGzAdYB/wFGAZQB/wEUAX4B/wEUAX8B/wEUAX8B/wEUAX8B/wEUAX8B/wEUAX8B/wEU + AX8B/wEUAXYB/wF+AbcB/wP1IQAD/APABgADygP5BgAD9gPZA50DiBKJA4EDvQP1DwAD/gIrAbMCBgGo + AgYBqAIGAagCdgHKCQACgAHMAvwB/QLiAe8C0QHoOQAD/gNvCVcDoAkAA6YD/QPpA90/AAP8DAACsgHd + AuwB9AMAAsEB4gLvAfUGAAP2AaoB0QH/ATgBjAH/AQMBdAH/AQMBdQH/AQMBdgH/AQMBdgH/AQMBdgH/ + AQMBdgH/AQMBdgH/AQMBbAH/AXABsQH/A/UVAAP8DAADyAPwAwAD0gPyBgAD9gPUA5UDfwOADIEDgAN4 + A7gD9Q8AA/4CMwG1AgYBqAIGAagCBgGoAgYDqAHZAwAD/AKOAdED/gLbAewC3AHtOQAD/gN0DFcDwQMA + A/wDrwP+A+MD5TkAAvsB/AJoAcUCJAGxAmoBxQLyAfcGAALpAfICqAHZAwACxAHjAusB8wYAA/kB0wHm + Af4BWwGiAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbAGvAf8BbQGsAf8B1wHp + Af8D+A8AA/sDlwNqA5gD9AYAA+4DwQMAA9QD7wYAA/kD5wOpFbUDsgPrA/gSAAKhAdcCBgGoAgYBqAIG + AagCBgGoAgYBqALuAfUC3wHuAr4B4QMAAsMB4wLEAeM8AAO8D1cD8QPmA9ADAAPTA9Q5AALaAewCBgGo + AgYBqAIGAagCKwGzAvgB+gYAAoYBzwMAAskB5QLzAfcGAAP2AaUBzgH/ATMBiwH/AQABbQH/AQABbgH/ + AQABbgH/AQABbgH/AQABbgH/AQABbgH/AQABbgH/AQABYwH/AV8BqAH/A/UPAAPjCVcDbwP5BgADqgMA + A9cD9QYAA/YD0gOVA3gDeQ96A3ADrwP1EgAD/gKmAdkCBgGoAgYBqAIGAagCBgGoArUB3gK3Ad8C8AH2 + AwAC7wH1AoABzDwAA/4DwAxXA8oDywPzAwAD8gOmOQAC4AHuAgYBqAIGAagCBgGoAgYBqAJaAcED/wL4 + AfoCmwHVAwACtgHfAvYB+QYAA/cBtQHXAf8BNAGLAf8BGQGGAf8BEQF+Af8BGAGBAf8BGQGCAf8BGQGC + Af8BEQF+Af8BGQGHAf8BEwF3Af8BjQHBAf8D9Q8AA+cMVwONA/8D+QO4AwADygP3BgAD9wPaA5UDkQOJ + A4sDjAOLA4gDkQOCA8YD9QMAAuoB8wL1AfgPAALtAfQCgwHNAhUBrQIGAagCigHQAo4B0QLpAfIGAALX + AesCvAHhKgAD7wP2DwAD8AOoA2ADVwOtA68D7gYAA+EDzjYAAvwB/QJOAb0CBgGoAgYBqAIGAagCBgGo + AssB5gLUAekC1QHqAwACmAHUAuwB9AYAA/4D9AHeAegB8gGcAaQBsAHhAeoB8wHoAe8B+AHoAe8B+AHo + Ae8B9wHlAe8B+AGeAaYBsgHZAeEB6wP0A/4PAAP9A4UMVwPYA98D4AMAA7YD8AYAA/4D9APpA6UD6wbw + A+8D8AOoA+ID9AP+AwAC7AHzArkB3wKyAd0C5QHwDwAC8wH3AuoB8wJKAbwCDwGrAmUBxALiAe8CygHl + AsAB4gJoAcUD/ycAA/ADzAPIA+oPAAP1A+8DgwNcA5QD6APYA9EDlwP/NgAC+wH8ApsB1QIKAaoCBgGo + AgYBqAKbAdUCtAHeAvUB+AMAAugB8gKhAdcMAAHkAeEB3QFmAWABXQHnAeUB4gkAAfAB7gHrAWsBZgFi + AdcB1AHRA/0VAAP8A7gDWQZXA7gDyQP2AwAD7AO8DAAD4ANgA+UJAAPtA2UD0wP9DAAC8AH2ArMB3QKP + AdECwgHjAvMB9wLkAfACqAHZApgB1AKVAdMCagHFAggBqAIGAagCCAGoAqAB2ALOAecC+gH7MAAD8wPI + A7AD0gP1A+oDwQO2A7QDmANZA1cDWQO8A9sD+yoAAs8B5wLRAegC+AH6DAAC8wH3AqwB2wJ3AckCUwG/ + AlcBvwLRAegGAAKtAdsCzQHnBgAD/gPjAXICcAPbA/sDAAP+A+sBZwJlAdgC1wP8BgAD2wPcA/kMAAP1 + A8QDoAOJA4sD3AYAA8QD2gYAA/4D4wNwA9sD+wMAA/4D6wNlA9cD/BIAAvoB+wLJAeUCigHQAq0B2wLm + AfED/gL6AfsCsAHdAggBqAIGAagCDwGrArIB3QLXAeoC4AHuDwAC+wH8A/4hAAP7A9cDrQPEA+sD/gP7 + A8YDWQNXA1wDyAPgA+cPAAP7A/4VAAL8Af0C5AHwAqYB2QKvAdwC5gHxBgAC+wH8AtoB7ALNAecCdgHK + AgYBqAIdAa4CewHLAoYBzwKYAdQC5gHxCQAD8QGxArABtgK1A+4D9AP2AZ0CnAFyAnAD8AkAA/0D6gPA + A8YD6wYAA/sD4wPaA6ADVwNmA6MDqgO2A+sJAAPxA7ADtQPuA/QD9gOcA3AD8CoAAvcB+QIqAbICGwGu + AgYBqAIGAagCjgHRAtQB6QKpAdoC0QHoAsQB4wLBAeICvAHhAscB5QL7Afw2AAP4A24DZQZXA68D3wPC + A9wD1APSA84D1gP7HgAC7AHzArAB3QKGAc4CmQHUApoB1QLLAeYCzAHmAncByQIKAaoCBgGoAh0BrgLg + A+4B9QwAA/kB6QHoAeABqAOmAqUBnwKeAYECgAFfAl0D0gP1EgAD8APGA6oDtwO4A9gD2QOgA1kDVwNm + A+cD8QwAA/kD5QOmA6UDngOAA10D0gP1DwAC/AH9Aq0B2wK8AeECwAHiAsEB4gK9AeECrgHcAtYB6gMA + AuMB7wKVAdMC5gHxAgYBqAIGAagCYAHCAqEB1wLfAe4C2gHsAukB8gL5AfsD/iEAA/wDxAPOA9ED0gPP + A8UD4AMAA+kDtAPrBlcDkQO8A+YD4wPuA/oD/ioAA/0C9wH5CQAC+QH6AhYBrAIGAagCBgGoAhcBrAKj + AdgCvwHhAusB8wLvAfUC4AHuAtsB6wLCAeUD5gG5ArgBiwKJAaACnwHgAt8D9BsAA/0D+AkAA/oDYQZX + A2IDvgPQA+8D8gPnA+ID1APmA7gDiQOfA98D9BIAA/8C7wH1AuIB7wLdAe0C5QHwAukB8gLeAe0CnAHV + ArAB3QLHAeUCwwPjAe8CowHYAooB0AJEAbsCBgGoAkYBugP+A/8C7wH1JAAD/wPyA+kD5QPqA+4D5gO5 + A8YD1gPTA+kDvgOtA38DVwOBA/4D/wPyJAAC9gH5As4B5wLdAe0C3wHuAuIB7wLaAewC5QHwAwAC8gH3 + AoQBzgKyAd0CBgGoAgYBqAKnAdoCywHmAsYB5AK+AeEC3AHsAusB8wP9A/sD9Qb0A/oVAAP3A9sD5QPm + A+kD4wPqAwAD9AOpA8gGVwPAA9gD1QPQA+QD7wP9A/sD9Qb0A/otAALcAe0CiAHPAvoB+wLoAfIC0wHp + ArIB3QIGAagCBgGoAgYBqAJvAccCuwHgApkB1AL1Afg5AAPlA6sD+gPsA94DyAlXA5sDzgO3A/YhAAL6 + AfsC0gHpAsUB5ALDAeMC1QHqAscB5QKZAdQCsQHdAtgB6wK/AeEC5AHwAoMBzQJmAcQCHwGwAgYBqALc + Ae0DAAL7AfwqAAP7A90D1APTA+AD1gO3A8cD4gPQA+oDqAOVA2cDVwPlAwAD/E4AAq8B3ALvAfUCWgHB + AgYBqAIGAagCnAHVA/4C+wH8AroB4EUAA8YD8gONBlcDuQP+A/sDzTYAAuAB7gJ4AcoC9gH4At0B7QLf + Ae4CbwHHAgYBqAIGAagCFwGsArUB3gKcAdUC4gHvPAAD5wOhA/cD5QPmA5sGVwNiA8oDuQPpSwACuwHg + AucB8QL9Af4CegHLAqUB2QP+BgACyQHlAusB80IAA84D7AP9A6IDvwP+BgAD1wPvPAAD/QKuAdwC5QHw + Ah8BsAIGAagCJAGxAu8B9QMAArUB3gP8QgAD/QPFA+oDZwNXA2oD8gMAA8oD/EgAAqgB2QL7AfwC+gH7 + AroB4AwAA/0C+wH8CQAD/gH2AfgB+gH5AfoB+zAAA8ED/AP7A80MAAP9A/sJAAP+A/gD+i0AAqYB2QL8 + Af0C8gH2AmwBxgLxAfYGAALoAfIC3AHtRQADwAP8A/QDmgPzBgAD7APlRQAC+gH7ArYB3wMAAuAB7gKr + AdsD/RIAAfAB9AH4AZQBwAH1ASABhAH8AQABdAH/AQIBdgH/AvsB/CoAA/sDygMAA+cDwwP9EgAD9APE + A44DfwOBA/snAAL8Af0CsAHdAwAC0QHoAuoB8wwAA/0GAAP/AfAB9AH4AdkB5gH1AfEB9QH5MAAD/QPG + AwAD3APuDAAD/QYAA/8D9APnA/UzAALkAfAC2QHrBgAC5gHxArAB3QLYAesD/gkAAasBzAH0AQABdAH/ + AQABdAH/AWMBpgH3AacBygH0Ac0B3wH0A/4qAAPqA+IGAAPrA8YD4gP+CQAD0AZ/A60DzgPhA/4nAALs + AfQCzwHnAwACxwHlAsMB4wL6AfsMAAP/Ab4B1wH0ASgBiQH7AQABdAH/AQABdAH/AYYBuQH1MAAD8APb + AwAD1gPTA/oMAAP/A9kDkgZ/A74zAALXAesC+AH6CQAD/gLhAe8D/QYAAYoBugH1AQABdAH/AXoBsgH2 + AfUB9wH6NgAD4QP5CQAD/gPoA/0GAAO/A38DuAP3MwACzQHnAvAB9QYAAusB8wKwAd0C6wHzBgAB+gH7 + AfwBVgGfAfgBAAF0Af8BcgGuAfYB2QHmAvUB9wH6A/4wAAPaA/MGAAPvA8YD7wYAA/sDpwN/A7QD5wP3 + A/4zAAP/GAABvwHXAfQBAAF0Af8BogHHAfQGAAHhAesB9gGaAcMB9AGYAcIB9QL9Af4qAAP/GAAD2gN/ + A8sGAAPsA8cDxgP9JwAC7gH1A/8MAAP8AwAB/QL+AUoBmQH4AQQBdgH/AeIB6wH2BgAB+AH5AfsB/AL9 + MAAD8QP/DAAD/AMAA/4DoQOBA+wGAAP5A/1LAAH6AfsB/AELAXkB/gFYAaEB+AMAA/4BfQG0AfUBAAF0 + Af8BAAF0Af8BOQGQAfoB+wL8QgAD+wOEA6gDAAP+A7kGfwOZA/w/AAGjAcgB9AEAAXQB/wHpAe8B9wMA + AdcB5QH1ATIBjgH7AQABdAH/AYQBtwH1SAADzAN/A/ADAAPmA5YDfwO8SwABvwHXAfQBAAF0Af8B6gHw + AfcDAAGPAb0B9QEAAXQB/wGrAcwB9AH5AfoB+0gAA9oDfwPxAwADwgN/A88D+kIAAfoB+wH8AQABdAH/ + AZgBwgH0AwABzgHgAfUBAAF0Af8BXwGlAfcB0gHiAfUB9gH4AfpFAAP7A38DxgMAA+EDfwOrA+MD+EsA + AWYBqAH3ARwBggH8AwAB9QH3AfoBAAF0Af8BjgG9AfUDAAP+AeoB8AH3A/5CAAOuA4wDAAP4A38DwQMA + A/4D8QP+PAAB1QHkAfUBAAF0Af8B9AH3AfkD/QEJAXkB/gF3AbEB9gYAA/9FAAPlA38D9wP9A4MDtgYA + A/9LAAEZAYEB/QFPAZwB+AMAAcwB3gH1AQABdAH/AeoB8AH3AwABXAGjAfcBAAF0Af8BlAHAAfVCAAOL + A6QDAAPgA38D8QMAA6kDfwPEPAABpAHJAfQBAAF0Af8DAAHeAekB9gEAAXQB/wHwAfQB+QP9AVIBngH5 + ASwBiwH7Ae4B8gH4QgADzAN/AwAD6gN/A/QD/QOlA5QD80gAAYYBuQH1AbIB0AH0AwAB5QHtAfYBXQGj + AfcB+wL8A/4BDQF7Af4BAAF0Af8BUwGeAfhCAAO+A9MDAAPuA6oD/AP+A4UDfwOlPAABxwHbAfQBZgGo + AfcDAAHmAe4B9wFNAZsB+AP+AfAB9AH5AQABdAH/AQABdAH/AcYB2wH0QgAD3gOuAwAD7gOiA/4D9AZ/ + A91dAAHlAe0B9wGfAcYB9AHyAfUB+VcAA+4DyQP1TgAD/wHFAdoB9AGsAc0B9AH8Av1UAAP/A9wD0AP9 + /wC0AALvAfVdAAPy/wAeAALBAeIC8AH2WgAD0gPzZgAD/wP1A/Mb9AP+PwAD+wHxAfIB9AHyAfMB9AHz + AvQB8wL0AfMC9AHzAvQB8wL0AfMC9AP1MAAC8wH3AqwB21oAA/UDxGYAA/cD3QOeA5QSlQOPA8wD9j8A + Ae0B8QH1AXMBswH/AS4BiwH/ASoBigH/ASoBiwH/ASoBiwH/ASoBiwH/ASoBiwH/ASoBhAH/AYkBvwH/ + A/cwAAKgAdcC9gH5CQAC9AH3A/5LAAO7A/cJAAP1A/5UAAP2A9YDmQN0EnYDbAOsA/UnAAP+AswB5gP+ + DwAB6wHwAfYBawGuAf8BFAF+Af8BDgF6Af8BDgF8Af8BDgF8Af8BDgF8Af8BDgF8Af8BDgFzAf8BdgGz + Af8D9zAAAtgB6wK3Ad8JAAJ3AckC8QH2SwAD4gPLCQADoAPzQgAD/A8AA/kD5wOtFbkDtgPrA/gqAALM + AeYC3QHtDwAB8AHyAfQBcgGyAf8BUgGeAf8BVQGjAf8BVQGjAf8BVQGjAf8BVQGjAf8BVQGjAf8BVgGe + Af8BvgHbAf4D+jAAA/0CegHLA/4GAAKqAdoC6wHzSwAD/QOiA/4GAAPCA+9CAAPSA/cMAAP2A9kDnQOI + EokDgQO9A/UqAAL7AfwCoAHXCQAG/gHqAfAB9wFcAaYB/wEAAWwB/wEAAWYB/wEAAWgB/wEAAWgB/wEA + AWgB/wEAAWgB/wEAAV4B/wFUAaIB/wP2GAAC8gH3ArwB4QK9AeEC7wH1DwACnwHWAtcB6wYAAq8B3ALk + AfAzAAP0A84DzwPyDwADugPhBgADxgPqQgAD8QPQDAAD9gPUA5UDfwOADIEDgAN4A7gD9S0AAqoB2gLr + AfMGAALaAewCxgHiAfIB8wH0AXMBswH/AVUBnwH/AVgBpAH/AVgBpAH/AVgBpAH/AVgBpAH/AVgBpAH/ + AVgBnwH/AcEB3QH+A/oVAALyAfYCEQGrAgYBqAIGAagCBgGoAqkB2gwAAukB8gJ7AcsGAAKnAdoC4QHv + MAAD9ANeCVcDwgwAA+4DowYAA8AD6EUAA7wD+wYAA+sD8QPrA6kVtQOyA+sD+C0AAugB8gKhAdcGAALv + AfUCsAHaAfIC9QFpAa0B/wEPAXsB/wEIAXcB/wEIAXgB/wEIAXgB/wEIAXgB/wEIAXkB/wEIAXAB/wFu + AbAB/wP2FQACvgHhAgYBqAIGAagCBgGoAgYBqAIGAagCtAHeDAACYQHCAvQB+AMAAqcB2gLsAfMwAAPQ + D1cDyQwAA5ID9gMAA8AD8EUAA9wD1wYAA80D2QPXA5UDeAN5D3oDcAOvA/UVAAL7AfwCygHlArUB3gLi + Ae8MAAP/AnsBywL6AfsDAALyAfcCqQHYAfIB9AH1AXEBsgH/AS8BjwH/ASwBjQH/ATYBkQH/ATYBkgH/ + ATIBjwH/AS4BjgH/ASsBhwH/AY8BwgH/A/gVAAK1Ad4CBgGoAgYBqAIGAagCBgGoAgYBqAIGAagC1wHr + BgAC/QH+Am8BxwL7AfwDAAKiAdcC7wH1MAADyhJXA+EGAAP9A5sD+wMAA70D8jMAA/YD+wwAA/sDqwYA + A+YD0gPfA5UDkQOJA4sDjAOLA4gDkQOCA8YD9RUAAm8BxwIGAagCBgGoAgYBqAJ6AcsD/gkAArgB3wK7 + AeADAALyAfYCnQHVA/wC9gH3AagBpwGmAeUB5AHjBvQD9QG5AbcBtgHJAcgBxgP1GAAC3wHuAgYBqAIG + AagCBgGoAgYBqAIGAagCBgGoAhcBrAL1AfgDAALaAewCmQHUBgACmAHUAu4B9TAAA+YSVwNiA/YDAAPj + A7cGAAO2A/EtAAP7A40DVwNmA7YD/gkAA7YD6wMAA+ED2QP0A+kDpQPrBvAD7wPwA6gD4gP0A/4SAAL6 + AfsCEwGrAgYBqAIGAagCBgGoAgYBqAKBAc0JAALwAfYCdgHKAwAC8AH2ArQB3QMAA/QBewF4AXcB1AHT + AdEGAAP3AZYBlAGTAacBpAGjA/sYAAP+Al8BwwIGAagCBgGoAgYBqAIGAagCBgGoAgYBqAJ7AcsDAAKO + AdEC5AHwBgACegHLAuMB7zAAA/4DkBJXA6MDAAOvA+oGAAOiA+ktAAPbDFcDpwkAA+YDswMAA9sD5gMA + A+ADYAPlCQAD7QNlA9MD/RUAAvsB/AIbAa4CBgGoAgYBqAIGAagCBgGoAgYBqAKxAd0GAALUAeoCqgHa + AwAC6gHzAroB4AMAA/QBpwKmAcQCwwP1A/sD9AF4AnYDxgP8GwAC/AH9ApgB1AIGAagCBgGoAgYBqAIG + AagCBgGoAjABtQL5AfoCcQHIA/8GAALWAeoCfAHLMwAD/QO2D1cDcgP6A50D/wYAA+ADpC0AA9MPVwPD + BgAD4gPEAwAD0wPsAwAD4wNwA9sD+wMAA/4D6wNlA9cD/BgAAmwBxgIGAagCBgGoAgYBqAIGAagCBgGo + AgYBqALmAfEDAAKGAc8C7QH0AwAC3gHtApoB1QMAA/sD3gGpAqgBuwK6AbwCuwGAAn4BkAKOA/IJAAP8 + GAAC6AHyAm8BxwIGAagCBgGoAgYBqAItAbMC+gH7AmMBxAL8Af0JAAKgAdcCyQHlGwAD/BgAA+wDmwlX + A3AD+wOTA/0JAAO7A9cqAAPwElcD5wMAA7AD8QMAA8YD5gMAA/EDsAO1A+4D9AP2A5wDcAPwGwAC8wH3 + AkgBvAIGAagCBgGoAgYBqAIGAagCBgGoAnYBygL5AfoChAHOBgAC7QH0AmEBwgYAA/YD4AGpAqgBhAKD + AawCqgHxAvAD/gkAAtsB7AKrAdsC4AHuA/8VAALpAfICsAHdApUB0wI7AbcCWQHAAlYBwALFAeQMAAJF + AboC+AH6GAAD4wPDA+cD/xUAA+4DxgO0A3kDjQOLA9QMAAN/A/kqAAPDD1cDjwP4A64GAAPNA8YDAAP3 + A90DpgOlA54DgANdA9ID9R4AA/0CrQHbAhkBrgIGAagCBgGoAgYBqAJrAcYC7QH0ApkB1AkAAqwB2wLE + AeMGAAP8A/UD9AP3EgAC9wH5ArsB4AKMAdACwAHiAvYB+RIAAvYB+QP9As0B5wIWAawCLwG0AgYBqAKm + AdkCfgHMAnMByQJ/AcwCZQHEAvsB/BsAA/gDzgOuA9ED9xIAA/cD/QPaA2EDcgNXA8ADpQOeA6UDlAP7 + LQAD5wOHCVcDhAPsA70GAAP8A6AD9gMAA/UD5QO4A4kDnwPfA/QMAALQAegC3gHtA/4SAAL3AfkCqQHa + Aj8BuQIkAbECNwG2ArQB3gJjAcQD/wkAAoABzALqAfMnAAL7AfwCywHmAoEBzQKOAdEC2QHrAvsB/ALu + AfUCrQHbAnEByAJ7AcsCXwHDAoEBzQJKAbwCBgGoAgYBqAIGAagCjAHQAtYB6gLvAfUnAAP8A9gDpwOv + A+ID/APxA8QDnQOjA5ADpwODCVcDrgPgA/IeAAPcA+MD/Q8AA/4D3QOYA3kDcgO7A5gD/wYAA/kDpQP+ + AwAD+wP1BvQD+g8AAvcB+QLPAecCmQHUAsMB4wL2AfgSAAP8A/0CigHQAgYBqAIpAbMCfwHMAt4B7QK8 + AeECwwHjAlMBvwLUAekwAALjAe8CjAHQAl8BwwKBAc0CyQHlAvgB+gMAAv0B/gLRAegCDwGrAgYBqAIG + AagCBgGoAnoBywLzAfcC3gHtAvIB9y0AA+kDrgOQA6cD1wP5AwAD/QPdA1wJVwOiA/UD5gP0GwAD+gPg + A7gDzwP0DwAD+wP3A8gDVwNjA6UD0AO3A74DlwP+JwAD/QLUAeoCkAHSApMB0gLaAewC/QH+A/0C2wHs + ApgB1AJ3AckCegHLApYB0wIvAbQCBgGoAgYBqAIRAasCjAHQArYB3wLqAfM5AAP9EgACsQHdAgYBqAIG + AagCBgGoAgYBqAIGAagCpwHaApYB0wK1Ad4D/QMAA/4C9gH4Au0B9ALcAewCzQHnAuYB8RgAA/0SAAPH + D1cDwAO1A8oD/QMAA/4D9wPwA+QD2gPrBgAD/gPjA7UDsAPdA/YD3wOyA6sDoQOiA20GVwNyA9QD6gP+ + MwAC6QHyAp0B1gJoAcUCegHLAqAB2ALkAfAC/AH9AvMB9wKnAdoCBgGoAgYBqAIGAagCHQGuAuQB8AL1 + AfgC7wH1TgACbwHHApMB0gJuAccCBgGoAgYBqAIGAagCtQHeA/4C0gHpAoEBzQKKAdAClQHTAqMB2ALD + AeMC2QHrAvEB9gL8Af0tAAObA7MDmglXA8oD/gPdA6cDrQO0A74D0wPiA/QD/Q8AA/EDvgOlA8gD8QYA + A+UDawZXA20G3QPpEgAD/gP/IQAC+gH7AvwB/Q8AAnMByQIGAagCBgGoAgYBqAIGAagCZwHEArEB3QKi + AdcC9gH4AwAD/ALyAfcC6gHzAtcB6wLQAegD/Q8AAvMB9wJzAckCnAHVAqIB1wKgAdgCoQHXAqMB2AKW + AdMCigHQAuAB7gYAAmEBwgLkAfAD/AIGAagCBgGoAgYBqAKGAc4COgG4AsYB5AL9Af4C+AH6A/4YAAP1 + A54DuQO9BrwDvgO1A60D5wYAA5ID6gP8CVcDqgN5A9UD/QP5A/42AAOqA1wJVwPAA9cDvgPuA+wD3APX + A84D1AP8FQAD/QP+GAAD/gJEAbsCsQHdAjcBtgIGAagCBgGoAjMBtQL7AfwC5AHwApkB1AKKAdACogHX + Aq4B3ALPAecC4wHvAvYB+QP/DwAD/wL2AfgC7AHzAucB8QLnAfEC7gH1AvAB9gLsAfMC2AHrAnABxwKv + AdwDAAJzAckC9gH4AuIB7wKdAdYCpwHaApMB0gJhAcICBgGoAgYBqAK2Ad8GAAL8Af0VAAP/A/cD8Abs + A/ED8wPwA+IDnAPGAwADngP3A+kDugPAA7MDkgZXA8oGAAP9FQAD5QPqA/AG7wPuA+wD+gYAA4UD6gOV + BlcDogPgA+oDwQPQA+AD8QP6GwACzQHnAoYBzwKiAdcCnAHVAqEB1wKnAdoCjAHQAmoBxQK7AeAGAAJN + Ab0DAALEAeMCBgGoAgYBqAJqAcUCOwG3AmgBxQP8A/0/AAKyAd0CVwG/AnMByQMAAuAB7gK6AeADAAIi + Aa8CBgGoAgYBqAIGAagCBgGoAugB8gLPAecCfwHMAtsB7DAAA8gDiwOeAwAD5wPNAwADaQxXA+wD2wOl + A+MSAAPhA8QDvQO8A8wDygO5A5cD3gMAA5UD/wPGA4sDhQOYA1cDmi0AAv0B/gL3AfkC9AP4AfoD/QL7 + AfwC8wH3AqMB2AKPAdEC6QHyAmsBxgMAAqAB1wLeAe0CqwHbAmcBxAIGAagCBgGoAlUBvwP+AwAC5gHx + A/45AALyAfcC+wH8AwAD/gKQAdIC9wH5AnQByQIGAagCBgGoAgYBqAIGAagCXAHBAtEB6AP9AqUB2QL7 + AfwwAAP0A/sDAAP+A7ED+AOfDFcDjwPdA/0DvwP7JAAD/AO6A5wDqgMAA7cD+wOmA1wGVwOrA/UDugPi + OQAC4AHuAmEBwgLNAecDAAK1Ad4C7QH0ArMB3QIGAagCBgGoAgYBqAIGAagCmgHVArAB3QKgAdgCzQHn + RQAC3AHtArsB4AP/AmMBxAIGAagCBgGoAgYBqALyAfcGAALoAfICyQHlPAAD5QPOA/8DkwlXA/QGAAPt + A9cqAAPpA/gDAAPfA94DxAlXA1wDwAPxA8cD+kIAAvoB+wKcAdUC+gH7AkgBvAIGAagCBgGoAgYBqAKA + AcwC9QH4AwACrwHcAvgB+kIAAvMB9wKPAdEDAAL9Af4CrAHbAloBwQLnAfEMAAKpAdoC9wH5OQAD9QOw + AwAD/QPEA40D7AwAA8ID+DAAA/4DtQMAA7MGVwOtBgAD8wPURQACqAHZAu4B9QL5AfoCbAHGAg0BqQJh + AcIC/AH9BgAC8QH2AroB4AP/PwAC0QHoAsYB5AYAAr0B4QLqAfMPAAL2AfgC+QH6OQAD3QPVBgADzwPv + DwAD9wP6MwADswP8AwADwwPFA/4JAAPQA/lCAAKgAdcC8wH3AwAC+AH6Ap0B1g8AAs0B5wP8PwACrQHb + AvAB9QMAAuMB7wKmAdlRAAPEA/MDAAPpA8BIAAP4A8ADAAP6A8UD/wwABv4/AAP8Ap8B1gMAA/4CpgHZ + AvUB+FEAA/4CpgHZA/4DAALqAfMCmwHVAuYB8UsAA/4DwAP+AwAD7wO4A+tFAAPmA9wDAAPlA75UAALp + AfICwwHjAwAC+wH8AowB0ALsAfRRAALxAfYCwgHjCQAC+gH7Ar8B4QKwAd0C6wHzA/9CAAP0A9IJAAP7 + A9ADxgPvA/88AAPSA/UDAAP/A+UDwQPnA/1LAALLAeYC6wHzBgAC+wH8AsAB4gK1Ad4C7wH1A/9IAALU + AekC7QH0DwAC9gH4As0B5wP+QgAD3wPwDwAD9wPaA/45AAP9A9MMAAP8A9oD8EgAA/4CwAHiA/4MAAL0 + AfgCxgHkA/xIAALxAfYD/loAA/MD/lEAA/wD9V0AAv0B/gLyAfYtAAFCAU0BPgcAAT4DAAEoAwABgAMA + AWADAAEBAQABAQYAAQYWAAP//wD/AAMAAf8BzwP/Ac8L/wHHA/8BxwT/AcABAQL/AcABAQH/AeYBfwL/ + AeYBfwL/AZ8BwAEBAf8BnwHAAQEB/wHiAX8C/wHiAX8C/wGPAcABAQH/AY8BwAEBAfwB8gF/Af8B/AHy + AX8C/wHNAcABAQH/Ac0BwAEBAfgBMgF/Af8B+AEyAX8C/wHMAcABAQH/AcwBwAEBAfABOAF/Af8B8AE4 + AX8B/wH9AeQBwAEBAf0B5AHAAQEB8AEQAX8B/wHwARABfwH/AfABZAHAAQEB8AFkAcABAQH4AQIBfwH/ + AfgBAgF/Af8B8AE0AcABAQHwATQBwAEBAfgBAgF/Af8B+AECAX8B/wHwAQQBwAEBAfABBAHAAQEBPgED + AT8B/wE+AQMBPwH/AfABBAHAAQEB8AEEAcABAQEPAYABHwH/AQ8BgAEfAf8B+AEEAfEBwwH4AQQB8QHD + AcABAAE/Af8BwAEAAT8B/wEeAQYBYAGDAR4BBgFgAYMB8AEAAT4BfwHwAQABPgF/AQYBAAFwAQcBBgEA + AXABBwH/AeABAAF/Af8B4AEAAX8B4AEAAfABBwHgAQAB8AEHAcABIAEBAf8BwAEgAQEB/wH5AcABAAEP + AfkBwAEAAQ8BwAEAAQMB/wHAAQABAwH/AcABQAEAAR8BwAFAAQABHwH/AcABAQL/AcABAQH/AcABAAEv + Af8BwAEAAS8C/wH8AQEC/wH8AQEC/wGAAQcC/wGAAQcC/wH8AQwC/wH8AQwC/wHwARMC/wHwARMC/wH8 + ATwB4wH/AfwBPAHjAf8B+AEzAv8B+AEzAv8B+QEfAYEB/wH5AR8BgQH/AfIBewEPAf8B8gF7AQ8B/wH5 + AYcBAQH/AfkBhwEBAf8B8gE8AQ8B/wHyATwBDwH/AfkBxgEfAf8B+QHGAR8B/wHzARgBDwH/AfMBGAEP + Af8B+wH8AWEB/wH7AfwBYQH/AfMB0AHPAf8B8wHQAc8C/wH4AYEC/wH4AYEC/wHxAQ8C/wHxAQ8C/wH4 + AYcC/wH4AYcC/wHiAQ8C/wHiAQ8C/wH5AREC/wH5AREC/wHgAW8C/wHgAW8C/wH5AREC/wH5AREC/wHk + AQcC/wHkAQcC/wH5AQEC/wH5AQEC/wHkAQcC/wHkAQcD/wHxA/8B8QP/AYcD/wGHEf8B/QP/Af0L/wH8 + A/8B/AT/AcABAQL/AfABAwH/AfwD/wH8BP8BwAEBAv8B8AEBAf8B/gFzAv8B/gFzA/8BwAEBAf8B8QHw + AQEB/wH+AXMC/wH+AXMC/wH3AcABAQH/AfkB8AEBAf8B/gEzAv8B/gEzAv8B8wHAAQEB/wH5AcABAQH+ + AR8BMwH/Af4BHwEzAv8B8wHAAQEB/wH8AcABAQH8AQ8BMwH/AfwBDwEzAv8B+QGAAQEB/wH8AcABAQH8 + AQcBkwH/AfwBBwGTAv8B+QGAAQEB/AE8AUABAQH8AQMBEwH/AfwBAwETAf8B/gF5AYABAQH8AQ4BQAED + AfwBAQEzAf8B/AEBATMB/wH4ARwBgAEBAfgBDgFIAcMB/AEBATMB/wH8AQEBMwH/AfgBHAGRAcMB+AEG + AUgBAwH+AQABMwH/Af4BAAEzAf8B+AEMAZABgwH8AQIBSAEHAX8BgAE5Af8BfwGAATkB/wH4AQQBkAEH + AfwBAAHMAQcBDwHgATwB/wEPAeABPAH/AfwBAQGQAQcB/gEAAeYBHwGDAfABAAH/AYMB8AEAAf8B/gEB + AYgBDwEfAYABcwH/AeABAAEDAf8B4AEAAQMB/wEfAQABxAEfAQcB4AEDAf8B/AEIAQEB/wH8AQgBAQH/ + AQcBwAEHAf8BwAEAAQcC/wF+AQABQAH/AX4BAAFAAcABAAEPAf8B+AEAAQcC/wH+AgAB/wH+AgAB+AEw + AQ8BzwH+AXwBAQEDAeABBgEAAR8B4AEGAQABHwH/AfgBAAEPAecB+AEAAQMB4AECAQABbwHgAQIBAAFv + AeABGAEAAT8B4AENAQAC/wH4AZABBwH/AfgBkAEHAeABCAEHAf8B8AEBAQABnwH/AfwBgAEDAf8B/AGA + AQMB/wHCAQABfwH/AfEBAAEfAv8BwAEzAv8BwAEzAf8B8gEAAT8C/wEAAU8C/wHIAXkC/wHIAXkB/wH+ + AUMBPwL/AYABxwL/AcwB+QL/AcwB+QL/ASMBnwL/AZMB5wL/AckD/wHJAv8B/gFHAZ8C/wEjA/8BiAP/ + AYgC/wH+AU8D/wEjA/8BnAEfAv8BnAEfAf8B/gFBA/8BMAF/Av8BnwEfAv8BnwEfAf8B/AHxAv8B/gE8 + AX8C/wGfA/8BnwL/AfwD/wH+AX8B/xYACw== + + + + $this + + + Cancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Autor + + + + 4 + + + propertiesButton + + + 5 + + + False + + + 146 + + + System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 149, 76 + + + 4 + + + playerListView + + + Colony + + + loadMenuItem + + + $this + + + $this + + + authorColumn + + + 6, 13 + + + Magenta + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + propertiesMenuItem + + + 148, 22 + + + 0, 0 + + + createMenuItem + + + 145, 6 + + + Load + + + 75, 23 + + + OkButton + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh + ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG + AwAAAA5Ob25zdGF0aWMgQW50cwX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxBbGln + bm1lbnQBAAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAADm5vblN0YXRpY0dyb3VwCw== + + + + Create + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Volk erstellen + + + timer + + + 2 + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh + ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG + AwAAAAtTdGF0aWMgQW50cwX8////KFN5c3RlbS5XaW5kb3dzLkZvcm1zLkhvcml6b250YWxBbGlnbm1l + bnQBAAAAB3ZhbHVlX18ACAIAAAAAAAAACgYFAAAAC3N0YXRpY0dyb3VwCw== + + + + False + + + Magenta + + + 762, 439 + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + 3 + + + 148, 22 + + + 137 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bottom, Right + + + createButton + + + Top, Bottom, Left, Right + + + False + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom, Right + + + playerContextMenu + + + $this + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItem1 + + + toolStrip + + + Properties + + + 2 + + + Select Player + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + imageList + + + 602, 473 + + + 1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + CenterParent + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openFileDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + cancelButton + + + Magenta + + + Eigenschaften + + + Volk laden + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 274, 17 + + + de + + + 17, 17 + + + 115, 17 + + + 407, 17 + + + 487, 17 + + \ No newline at end of file diff --git a/PlayerManagement/PlayerStore.cs b/PlayerManagement/PlayerStore.cs new file mode 100644 index 0000000..d84c56a --- /dev/null +++ b/PlayerManagement/PlayerStore.cs @@ -0,0 +1,183 @@ +using AntMe.Simulation; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Xml.Serialization; + +namespace AntMe.PlayerManagement +{ + /// + /// Zentraler Player Speicher + /// + public sealed class PlayerStore + { + #region Singleton + + private static PlayerStore instance; + + public static PlayerStore Instance + { + get + { + if (instance == null) + instance = new PlayerStore(); + instance.Init(); + return instance; + } + } + + #endregion + + private bool init = false; + private readonly string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\AntMe\Player17.conf"; + private PlayerStoreConfiguration configuration = new PlayerStoreConfiguration(); + private List scannedFiles = new List(); + private List knownPlayer = new List(); + + private PlayerStore() + { + } + + private void Init() + { + lock (this) + { + if (init) return; + + // Load Config + LoadConfiguration(); + + // Load local files + DirectoryInfo root = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory; + foreach (var file in root.GetFiles("*.dll", SearchOption.TopDirectoryOnly)) + { + try + { + ScanFile(file.FullName); + } + catch (Exception) { } + } + + // Load Files from Config + foreach (var file in configuration.KnownFiles.ToArray()) + { + try + { + ScanFile(file); + } + catch (Exception) + { + UnregisterFile(file); + } + } + + init = true; + } + } + + /// + /// Lists all known Player. + /// + public ReadOnlyCollection KnownPlayer { get { return knownPlayer.AsReadOnly(); } } + + /// + /// Registeres a new File to the Storage. + /// + /// + public void RegisterFile(string file) + { + lock (this) + { + if (scannedFiles.Contains(file.ToLower())) + return; + + // Kick den alten + if (configuration.KnownFiles.Contains(file.ToLower())) + UnregisterFile(file); + + var result = AiAnalysis.Analyse(file, true); + + if (result.Count > 0) + { + configuration.KnownFiles.Add(file.ToLower()); + foreach (var player in result) + { + var playerInfo = new PlayerInfoFilename(player, file.ToLower()); + knownPlayer.Add(playerInfo); + } + } + + SaveConfiguration(); + } + } + + /// + /// Unregisteres a known File from the Storage. + /// + /// + public void UnregisterFile(string file) + { + lock (this) + { + if (configuration.KnownFiles.Contains(file.ToLower())) + { + scannedFiles.Remove(file.ToLower()); + configuration.KnownFiles.Remove(file.ToLower()); + knownPlayer.RemoveAll((p) => string.Compare(((PlayerInfoFilename)p).File, file.ToLower(), true) == 0); + SaveConfiguration(); + } + } + } + + /// + /// Adds all included Player without adding to the registered files. + /// + /// + private void ScanFile(string file) + { + try + { + var result = AiAnalysis.Analyse(file.ToLower(), false); + foreach (var player in result) + knownPlayer.Add(new PlayerInfoFilename(player, file)); + + scannedFiles.Add(file.ToLower()); + } + catch (Exception) { throw; } + } + + private void SaveConfiguration() + { + try + { + + using (Stream stream = File.Open(path, FileMode.Create)) + { + XmlSerializer serializer = new XmlSerializer(typeof(PlayerStoreConfiguration)); + serializer.Serialize(stream, configuration); + } + } + catch (Exception) { } + } + + private void LoadConfiguration() + { + try + { + using (Stream stream = File.Open(path, FileMode.Open)) + { + XmlSerializer serializer = new XmlSerializer(typeof(PlayerStoreConfiguration)); + var config = (PlayerStoreConfiguration)serializer.Deserialize(stream); + if (config != null) + configuration = config; + } + } + catch (Exception) { } + + } + } +} diff --git a/PlayerManagement/PlayerStoreConfiguration.cs b/PlayerManagement/PlayerStoreConfiguration.cs new file mode 100644 index 0000000..b962b5e --- /dev/null +++ b/PlayerManagement/PlayerStoreConfiguration.cs @@ -0,0 +1,26 @@ +using AntMe.Simulation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace AntMe.PlayerManagement +{ + /// + /// PlayerManagement Configuration + /// + [Serializable] + public sealed class PlayerStoreConfiguration + { + public PlayerStoreConfiguration() + { + KnownFiles = new List(); + } + + /// + /// List of all known Player + /// + public List KnownFiles { get; set; } + } +} diff --git a/PlayerManagement/Properties/AssemblyInfo.cs b/PlayerManagement/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..46b822e --- /dev/null +++ b/PlayerManagement/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AntMe! Player Management")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("AntMe! GmbH")] +[assembly: AssemblyProduct("AntMe!")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] +[assembly: AssemblyTrademark("AntMe!")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("718efcf5-9e3e-449b-b112-047c5a494c41")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.7.2.4")] +[assembly: AssemblyFileVersion("1.7.2.4")] diff --git a/PlayerManagement/Properties/Resources.Designer.cs b/PlayerManagement/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f462567 --- /dev/null +++ b/PlayerManagement/Properties/Resources.Designer.cs @@ -0,0 +1,133 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AntMe.PlayerManagement.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AntMe.PlayerManagement.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap add { + get { + object obj = ResourceManager.GetObject("add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap colony_nonstatic_32x32 { + get { + object obj = ResourceManager.GetObject("colony_nonstatic_32x32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap delete_16x16 { + get { + object obj = ResourceManager.GetObject("delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap load_16x16 { + get { + object obj = ResourceManager.GetObject("load_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap properties_16x16 { + get { + object obj = ResourceManager.GetObject("properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap security_32x32 { + get { + object obj = ResourceManager.GetObject("security_32x32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap toddler { + get { + object obj = ResourceManager.GetObject("toddler", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/PlayerManagement/Properties/Resources.resx b/PlayerManagement/Properties/Resources.resx new file mode 100644 index 0000000..e13953d --- /dev/null +++ b/PlayerManagement/Properties/Resources.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\colony_nonstatic_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\toddler.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\load_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\security_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/PlayerManagement/Resource.Designer.cs b/PlayerManagement/Resource.Designer.cs new file mode 100644 index 0000000..ef621e4 --- /dev/null +++ b/PlayerManagement/Resource.Designer.cs @@ -0,0 +1,189 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AntMe.PlayerManagement { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AntMe.PlayerManagement.Resource", typeof(Resource).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0} {1}. + /// + internal static string AntPropertiesAuthorFormat { + get { + return ResourceManager.GetString("AntPropertiesAuthorFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Access to a database. + /// + internal static string AntPropertiesDbAccess { + get { + return ResourceManager.GetString("AntPropertiesDbAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Access to the file system. + /// + internal static string AntPropertiesIoAccess { + get { + return ResourceManager.GetString("AntPropertiesIoAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Access to the network. + /// + internal static string AntPropertiesNetAccess { + get { + return ResourceManager.GetString("AntPropertiesNetAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Full access limitation. + /// + internal static string AntPropertiesNoAccess { + get { + return ResourceManager.GetString("AntPropertiesNoAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No further information available.. + /// + internal static string AntPropertiesNoAdditionalInfos { + get { + return ResourceManager.GetString("AntPropertiesNoAdditionalInfos", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ant references external assembly or assemblies.. + /// + internal static string AntPropertiesRefAccess { + get { + return ResourceManager.GetString("AntPropertiesRefAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Properties of {0}. + /// + internal static string AntPropertiesTitle { + get { + return ResourceManager.GetString("AntPropertiesTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Access to the user interface. + /// + internal static string AntPropertiesUiAccess { + get { + return ResourceManager.GetString("AntPropertiesUiAccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unknown. + /// + internal static string AntPropertiesUnknown { + get { + return ResourceManager.GetString("AntPropertiesUnknown", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to no. + /// + internal static string No { + get { + return ResourceManager.GetString("No", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Following rights are not granted in the settings:. + /// + internal static string SimulationPluginRightsLocked { + get { + return ResourceManager.GetString("SimulationPluginRightsLocked", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to This colony creates a ruleViolation with current settings: {0}. + /// + internal static string SimulationPluginRuleViolation { + get { + return ResourceManager.GetString("SimulationPluginRuleViolation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to yes. + /// + internal static string Yes { + get { + return ResourceManager.GetString("Yes", resourceCulture); + } + } + } +} diff --git a/PlayerManagement/Resource.de.Designer.cs b/PlayerManagement/Resource.de.Designer.cs new file mode 100644 index 0000000..e69de29 diff --git a/PlayerManagement/Resource.de.resx b/PlayerManagement/Resource.de.resx new file mode 100644 index 0000000..59e27cf --- /dev/null +++ b/PlayerManagement/Resource.de.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} {1} + Format of author-tag (AntProperties.cs) +0: First Name +1: Last Name + + + Zugriff auf eine Datenbank + To tell the user, that the ant needs DB-Access (AntProperties.cs) + + + Zugriff auf das Dateisystem + To tell the user, that the ant needs IO-Access (AntProperties.cs) + + + Zugriff auf das Netzwerk + To tell the user, that the ant needs Network-Access (AntProperties.cs) + + + Volle Zugriffseinschränkung + To tell the user, that the ant needs no Access (AntProperties.cs) + + + Keine weiteren Infos + Text, if there are no additional info to access-requests (AntProperties.cs) + + + Ameise bindet fremde Assemblies ein + To tell the user, that the ant needs Ref-Access (AntProperties.cs) + + + Eigenschaften von {0} + Title-Bar of ant-property-window (AntProperties.cs) +0: Folkname + + + Zugriff auf das Userinterface + To tell the user, that the ant needs UI-Access (AntProperties.cs) + + + Unbekannt + Unknown information at filesize and filecreationtime (AntProperties.cs) + + + Nein + Various use of no (AntProperties.cs) + + + Folgende Rechte wurden in den Einstellungen nicht frei geschaltet: + Header of a list of not granted rights (RightsRequest.cs) + + + Dieses Volk verursacht unter aktuellen Einstellungen eine Regelverletzung: {0} + Is used to show errormessage in listview-Tooltip (TeamSetup.cs) +0: Message of RuleViolation + + + Ja + Various use of yes (AntProperties.cs) + + \ No newline at end of file diff --git a/PlayerManagement/Resource.resx b/PlayerManagement/Resource.resx new file mode 100644 index 0000000..30962c3 --- /dev/null +++ b/PlayerManagement/Resource.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} {1} + Format of author-tag (AntProperties.cs) +0: First Name +1: Last Name + + + Access to a database + To tell the user, that the ant needs DB-Access (AntProperties.cs) + + + Access to the file system + To tell the user, that the ant needs IO-Access (AntProperties.cs) + + + Access to the network + To tell the user, that the ant needs Network-Access (AntProperties.cs) + + + Full access limitation + To tell the user, that the ant needs no Access (AntProperties.cs) + + + No further information available. + Text, if there are no additional info to access-requests (AntProperties.cs) + + + Ant references external assembly or assemblies. + To tell the user, that the ant needs Ref-Access (AntProperties.cs) + + + Properties of {0} + Title-Bar of ant-property-window (AntProperties.cs) +0: Folkname + + + Access to the user interface + To tell the user, that the ant needs UI-Access (AntProperties.cs) + + + Unknown + Unknown information at filesize and filecreationtime (AntProperties.cs) + + + no + Various uses of no (AntProperties.cs) + + + Following rights are not granted in the settings: + Header of a list of not granted rights (RightsRequest.cs) + + + This colony creates a ruleViolation with current settings: {0} + Is used to show errormessage in listview-Tooltip (TeamSetup.cs) +0: Message of RuleViolation + + + yes + Various uses of yes (AntProperties.cs) + + \ No newline at end of file diff --git a/PlayerManagement/Resources/add.png b/PlayerManagement/Resources/add.png new file mode 100644 index 0000000000000000000000000000000000000000..071a2bb4507ab32326d3afb5cf4ec857ae4518d8 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ=4@yqg0@p98VX=5DWjc7XrBs7;rFOkUP7$vUod>k;;?BN9$}fIJwF~uXgbI-w-g` ztn{dP`?nP50}raQ4@6gQQY@IUMP2&PN2Ysgn!Wx%iQi!C^Vk2KuEhKWB>_O$9`P^5 pzs{a&J7BN)_GFuS&W`ohm=iaa{C`-Q(GRqj!PC{xWt~$(696qlS-SuL literal 0 HcmV?d00001 diff --git a/PlayerManagement/Resources/class_de.txt b/PlayerManagement/Resources/class_de.txt new file mode 100644 index 0000000..12673cb --- /dev/null +++ b/PlayerManagement/Resources/class_de.txt @@ -0,0 +1,111 @@ +using AntMe.Deutsch; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.Player.{2} +{ + [Spieler( + Volkname = "{2}", + Vorname = "", + Nachname = "" + )] + [Kaste( + Name = "Standard", + AngriffModifikator = 0, + DrehgeschwindigkeitModifikator = 0, + EnergieModifikator = 0, + GeschwindigkeitModifikator = 0, + LastModifikator = 0, + ReichweiteModifikator = 0, + SichtweiteModifikator = 0 + )] + public class {0} : Basisameise + { + #region Kasten + + public override string BestimmeKaste(Dictionary anzahl) + { + return "Standard"; + } + + #endregion + + #region Fortbewegung + + public override void Wartet() + { + } + + public override void WirdMüde() + { + } + + public override void IstGestorben(Todesart todesart) + { + } + + public override void Tick() + { + } + + #endregion + + #region Nahrung + + public override void Sieht(Obst obst) + { + } + + public override void Sieht(Zucker zucker) + { + } + + public override void ZielErreicht(Obst obst) + { + } + + public override void ZielErreicht(Zucker zucker) + { + } + + #endregion + + #region Kommunikation + + public override void RiechtFreund(Markierung markierung) + { + } + + public override void SiehtFreund(Ameise ameise) + { + } + + public override void SiehtVerbündeten(Ameise ameise) + { + } + + #endregion + + #region Kampf + + public override void SiehtFeind(Ameise ameise) + { + } + + public override void SiehtFeind(Wanze wanze) + { + } + + public override void WirdAngegriffen(Ameise ameise) + { + } + + public override void WirdAngegriffen(Wanze wanze) + { + } + + #endregion + } +} \ No newline at end of file diff --git a/PlayerManagement/Resources/class_en.txt b/PlayerManagement/Resources/class_en.txt new file mode 100644 index 0000000..2e31f5c --- /dev/null +++ b/PlayerManagement/Resources/class_en.txt @@ -0,0 +1,111 @@ +using AntMe.English; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.Player.{2} +{ + [Player( + ColonyName = "{2}", + FirstName = "", + LastName = "" + )] + [Caste( + Name = "Default", + AttackModificator = 0, + EnergyModificator = 0, + LoadModificator = 0, + RangeModificator = 0, + RotationSpeedModificator = 0, + SpeedModificator = 0, + ViewRangeModificator = 0 + )] + public class {0} : BaseAnt + { + #region Caste + + public override string ChooseType(Dictionary typeCount) + { + return "Default"; + } + + #endregion + + #region Movement + + public override void Waits() + { + } + + public override void BecomesTired() + { + } + + public override void HasDied(KindOfDeath kindOfDeath) + { + } + + public override void Tick() + { + } + + #endregion + + #region Food + + public override void Spots(Fruit fruit) + { + } + + public override void Spots(Sugar sugar) + { + } + + public override void TargetReached(Fruit fruit) + { + } + + public override void TargetReached(Sugar sugar) + { + } + + #endregion + + #region Communication + + public override void SmellsFriend(Marker marker) + { + } + + public override void SpotsFriend(Ant ant) + { + } + + public override void SpotsPartner(Ant ant) + { + } + + #endregion + + #region Fight + + public override void SpotsEnemy(Ant ant) + { + } + + public override void SpotsEnemy(Bug bug) + { + } + + public override void UnderAttack(Ant ant) + { + } + + public override void UnderAttack(Bug bug) + { + } + + #endregion + } +} \ No newline at end of file diff --git a/PlayerManagement/Resources/class_vb_de.txt b/PlayerManagement/Resources/class_vb_de.txt new file mode 100644 index 0000000..0cbe797 --- /dev/null +++ b/PlayerManagement/Resources/class_vb_de.txt @@ -0,0 +1,92 @@ +Imports System.Collections.Generic + +Imports AntMe.Deutsch + + _ + _ +Public Class {0} + Inherits Basisameise + +#Region "Kasten" + + Public Overrides Function BestimmeKaste(ByVal anzahl As Dictionary(Of String, Integer)) As String + Return "Standard" + End Function + +#End Region + +#Region "Fortbewegung" + + Public Overrides Sub Wartet() + End Sub + + Public Overrides Sub WirdMüde() + End Sub + + Public Overrides Sub IstGestorben(ByVal todesart As Todesart) + End Sub + + Public Overrides Sub Tick() + End Sub + +#End Region + +#Region "Nahrung" + + Public Overrides Sub Sieht(ByVal obst As Obst) + End Sub + + Public Overrides Sub Sieht(ByVal zucker As Zucker) + End Sub + + Public Overrides Sub ZielErreicht(ByVal obst As Obst) + End Sub + + Public Overrides Sub ZielErreicht(ByVal zucker As Zucker) + End Sub + +#End Region + +#Region "Kommunikation" + + Public Overrides Sub RiechtFreund(ByVal markierung As Markierung) + End Sub + + Public Overrides Sub SiehtFreund(ByVal ameise As Ameise) + End Sub + + Public Overrides Sub SiehtVerbündeten(ByVal ameise As Ameise) + End Sub + +#End Region + +#Region "Kampf" + + Public Overrides Sub SiehtFeind(ByVal ameise As Ameise) + End Sub + + Public Overrides Sub SiehtFeind(ByVal wanze As Wanze) + End Sub + + Public Overrides Sub WirdAngegriffen(ByVal ameise As Ameise) + End Sub + + Public Overrides Sub WirdAngegriffen(ByVal wanze As Wanze) + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/PlayerManagement/Resources/class_vb_en.txt b/PlayerManagement/Resources/class_vb_en.txt new file mode 100644 index 0000000..eea724f --- /dev/null +++ b/PlayerManagement/Resources/class_vb_en.txt @@ -0,0 +1,92 @@ +Imports System.Collections.Generic + +Imports AntMe.English + + _ + _ +Public Class {0} + Inherits BaseAnt + +#Region "Casts" + + Public Overrides Function ChooseType(typeCount As Dictionary(Of String, Integer)) As String + Return "Default" + End Function + +#End Region + +#Region "Movement" + + Public Overrides Sub Waits() + End Sub + + Public Overrides Sub BecomesTired() + End Sub + + Public Overrides Sub HasDied(kindOfDeath As KindOfDeath) + End Sub + + Public Overrides Sub Tick() + End Sub + +#End Region + +#Region "Food" + + Public Overrides Sub Spots(fruit As Fruit) + End Sub + + Public Overrides Sub Spots(sugar As Sugar) + End Sub + + Public Overrides Sub TargetReached(fruit As Fruit) + End Sub + + Public Overrides Sub TargetReached(sugar As Sugar) + End Sub + +#End Region + +#Region "Communication" + + Public Overrides Sub SmellsFriend(marker As Marker) + End Sub + + Public Overrides Sub SpotsFriend(ant As Ant) + End Sub + + Public Overrides Sub SpotsPartner(ant As Ant) + End Sub + +#End Region + +#Region "Fight" + + Public Overrides Sub SpotsEnemy(ant As Ant) + End Sub + + Public Overrides Sub SpotsEnemy(bug As Bug) + End Sub + + Public Overrides Sub UnderAttack(ant As Ant) + End Sub + + Public Overrides Sub UnderAttack(bug As Bug) + End Sub + +#End Region + +End Class diff --git a/PlayerManagement/Resources/colony_nonstatic_32x32.png b/PlayerManagement/Resources/colony_nonstatic_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ebe76cc32b5036d122518097cb2185ce0d06d2 GIT binary patch literal 2141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq z_zr_GTBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFlEj zn_7~nP?4LHS8P>bs{}UF3djZt>nkaMm6T-LDnZ;6;TxdfoL`ixV4`QJn`~fgqF`dC zXJl?O*Y5S&<|;FXxCU}UafWMBX!jI4~!fe7drFi^7N0@5}`DQQ+gE^bgefjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3&3FtGB+_PzqG_wNeN^T96&vnSOB*uuNWG5z+lv`NG#Ad)HBeBn+()w0~E9Z$5wt( zNPd2f9a?lKI0qZsfOMiLLfDGXpX!oWl4=JG4+~ubOI<^w5JMv?12Zc_%P1uM5JhO( zee+W?(<-rOH!`*|F@tJHQUuj*qYnxQq<{g3I>=9G;tB);EF~EpUInE^IpAnXN!Cxz zNzF~oD=7wsnIUSJr6gOW!ks3@Lky**C0F)V8Zt02&+&9|42fvndOdngT(H1_kN0056>(j)cEXlLszI)g zq!hQbXmkp=i0LZ6V)d7sAW&HS(diaD|16IVjnk@ng`LY(A05=qQ0X%hRdw;25b)M; zi>=%@yR+BV-~U-S`JK1@uWDphF2=Kbtj?bo>`&tCM-Y0~_$ zrFxOunWL^1yHcM0XZ^q`R?2jxLvn{?`$OJ8mrob&VYrr<**hb`X#4e!;sWJ3jhWfM zEd3<XS6*v zee_3e+jhlc(g||=)(Hx4U@L#fvnO2nS--^94%Q#rQtIs08l(*OyZPiF7cNwtcQE>e z-``-r!jMXzYkAI*dZyy z2Fn?p%!Up2AM=0L@Z?>b^S$~5U*6G=JD8j;_SD+#j{Vj+>1V?3e^(~`3|EgVmz~j` zdSivAjIcqE?2NAF4Qo>N-PEh#=sVnAu{(LL_(xm0!(CE_+_QHze`or!D@E^>*(>Gf zjS}VMFWIC23Y|^&;xn#SqRwBPppPt=+NPx!W*n@Yc{$kCYDytv{0 zly|-sysYBcmwsD?J&cHHzHIVx&P}JYhdE_mugy^e#@sDi*87|R%6-SaS_o!;3_5w| z#_5G_XAY{}S#Wbh{eu%_HsP12wHq)`FPGaHXSC8SX07G!_m3w|+L>(fSgKG@?`Yr- zhs_h!w$z>8opXJ=L2ar~*z_~ge@kBNXx+gtUbdqCn#h9dA5y0OeH;;IRDVm^;pCsi z{ts5px}x{iaPQ*UM%`I|jUH{5*zEo6Z8ewQ{GdB>v#%~@X+Q7vOzqF2okhJTl5F;w zANLvU!5~S@McT=apnhK?25g;pP9e?!Fy(3>PPf*bS)W~XbP0l+XkKvab4| literal 0 HcmV?d00001 diff --git a/PlayerManagement/Resources/delete_16x16.png b/PlayerManagement/Resources/delete_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..460ceec191ba0d48ec9bbbf91e1994212087511f GIT binary patch literal 1397 zcmcIk%}*0S6kk$kpaIm2RzkvLg{Z-HKU&-FW?O_71VSr;h7aZ7vO9%M*^lfFX=#W7 zPZ%{Zq=`l`ayJ@+=tZMm42kjJff!>v=-Qt1!DBX%g)!!@AuxD-^|Xf!NlbT zSCfk%h=#u2*bp9%+pX4#`DCutu+xpY z$I!5zLK)G7M5nAzLeQg_Fr%Ak>&lCk1demU#*D=Wcu7~iq7Ct8Rf7;ZvW6(7Ap(yO5$M|sjO&FjF+a$kug!gPCjZv z5$R@9*JmP!jsrx8eS*zA0IFoI@L^0uFoN|6d1%hV_>&CFvm8%zSNHLYphNVyE-R_I zztDX?-sdaP_kl`ufwG0zCrm+gdryb_{}W7>%6b{I=1k#OWQl?^P=y+@ux89b&18vB z>82{8h@y&9kTSF>fvPzFSzobgd@b;`q{{bluk`X!9?7Jl`;mk%20h9o4@Pgh@dI+w zejEyy*8UxmiV6vuqZmI$hk`5l6h>_H#X6IryVB0?Zil07q2_*UWF$d29MQA+YZ3KZ zzTxW@L%s&>?VAgWi(*^;S9APXYrgSGK>b)V;SIgVb__oKX?(A8I-OM$&Ja!0?jN6P z9jESb1Jlbp_4W1Jr`_(*>PGceKxS^tJ28N!2Ob5WGp~ekhPuI5!NAM022gXS=~BC6 zecg1eetI`P&aDZnOL0%G{|)is_u$)(<(0s)&`b|Kd|b60K6gI18C=8l6Mfx@*z>OI GH~#>cQE|`! literal 0 HcmV?d00001 diff --git a/PlayerManagement/Resources/load_16x16.png b/PlayerManagement/Resources/load_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..32bc05348cf36db01bcd18f2c405f9d9c2d7d4f9 GIT binary patch literal 474 zcmV<00VV#4P)4f26otS0=IzXgyM(P40+yx=`V+LXwXjKTku@SV`X3au2uvOUvCzsYqJo8>7z?q@ zABdF*2_!o*o6XF7?^ZUE1LSsEWXSFBrL0oXak9OH+LO}98tf&n1L zQ-h677v_QAEHCF4AUmGz*LJV>KS@Em-riFSaN&gDbFX*T!V|GJRaH>M zCJCD7XbAYh;6$I$>UJT7(U_pAd3ELL(xo(Amn0FB=cxA(BVjniA086x8YVX*f_kqQ z^VS07-g9w(e?`)k_=5v{S^i!AM~Ss)2tPE&ZwBDu>#eHutGpMhicnQ&f&omH5u4`S zwb4k;q-opjZWs>HFvolm5J5z?VDgQCX| + + + + Debug + AnyCPU + {{4}} + Library + Properties + AntMe.Player.{2} + AntMe.Player.{2} + v4.0 + 512 + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + x86 + + + + {6}\AntMe.SharedComponents.dll + True + + + {6}\AntMe.Simulation.dll + True + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PlayerManagement/Resources/project_vb.txt b/PlayerManagement/Resources/project_vb.txt new file mode 100644 index 0000000..15b366d --- /dev/null +++ b/PlayerManagement/Resources/project_vb.txt @@ -0,0 +1,85 @@ + + + + + Debug + AnyCPU + {{4}} + Library + AntMe.Player.{2} + AntMe.Player.{2} + 512 + Windows + v4.0 + + + true + full + true + true + bin\ + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + x86 + + + pdbonly + false + true + true + bin\ + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + x86 + + + On + + + Binary + + + Off + + + On + + + + False + {6}\AntMe.SharedComponents.dll + False + + + False + {6}\AntMe.Simulation.dll + False + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PlayerManagement/Resources/properties.txt b/PlayerManagement/Resources/properties.txt new file mode 100644 index 0000000..2058894 --- /dev/null +++ b/PlayerManagement/Resources/properties.txt @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AntMe! Player")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AntMe!")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("{4}")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/PlayerManagement/Resources/properties_16x16.png b/PlayerManagement/Resources/properties_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7ce90f2c5ee64033eec5182f3872aa75be811f GIT binary patch literal 342 zcmV-c0jd6pP)7e9pE#)pa0{MTa;Pc^9}hBC>03c->U!T)d~M!@2K2`FW0KZFu}2=fbSW zU7o>}bMcX?PWt^rbuR9z>ZB-&$d + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/PlayerManagement/Resources/security_32x32.png b/PlayerManagement/Resources/security_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..23327cb918f1320f51dc87d377d0cb07c4ffc83b GIT binary patch literal 882 zcmV-&1C9KNP)pF7<5HgbW?9;ba!ELWdK2BZ(?O2Mrm?o zcW-iQb5FA$P5=M^7IZ~ebVG7wVRUJ4ZXi@?ZDjy3IWI9ZFEBVaoRnq&00PcQL_t(o zg|(N_aoaEqhClZDZf{U+V0VJB6U3ds_A5_!btb4iLESqYUZYGDVWGe|?NYMoT9{>r$CWOFPaW0<&Cz0Yf*2afdfNy|D;L*9;B}q>bKq9z0DF<*&bfRF{8B=--ftaGN^Y*ddy!&0M4&Gu zM;7Y+DMq}2qeF-eR zF>4z_si0E;k>Zq68oGuV(bJm&@LJm7o_GM0GP(}*fvfC^q?6viC4v9Ioy$vNO4iMT z`(6Z6;5(6`Oz6BBffRVzE;uUwQUaNdefjGHUw7>9EKWlNQu(_G+#6FibUJTQ7Xi=t z>U0sf27IP_vWD$J0taB?T%OqwPAwAGfG;^$LYs0Z6#|f;fIg=lSZd>mbNMO(zG;C2tQ$I?h~3kR@FxkVY;-J@R0-G?_zL*Z z(%ab(yym`cSUSVsOF*RfOAO!4xqPc@&kcrx-?!9C8^TuS6*2dll=pB!SL|H=NGwe2 z`f>5bEQl>z8@vvENleRLq`2#|f5~HHiHGQ3bBYb2;vCi!u|~AP4@2M=5zz2;k+=iC z0G}IO&@(va;?pY^|1ohcpAiq_ocJeXQ}=pW>nmdI_rRhr@1qDP&_qcrfG6Tj$#k4> zLC#-Aph09wJOlL`e*{)tt^B(XP!bcO=SPv^VU&^A5O^#32ab4&E!RQ7ivR!s07*qo IM6N<$f+QD%p8x;= literal 0 HcmV?d00001 diff --git a/PlayerManagement/Resources/solution.txt b/PlayerManagement/Resources/solution.txt new file mode 100644 index 0000000..11caab1 --- /dev/null +++ b/PlayerManagement/Resources/solution.txt @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{{3}}") = "{2}", "{2}.csproj", "{{4}}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {{4}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {{4}}.Debug|Any CPU.Build.0 = Debug|Any CPU + {{4}}.Release|Any CPU.ActiveCfg = Release|Any CPU + {{4}}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/PlayerManagement/Resources/solution_vb.txt b/PlayerManagement/Resources/solution_vb.txt new file mode 100644 index 0000000..c765b7e --- /dev/null +++ b/PlayerManagement/Resources/solution_vb.txt @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{{3}}") = "{2}", "{2}.vbproj", "{{4}}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {{4}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {{4}}.Debug|Any CPU.Build.0 = Debug|Any CPU + {{4}}.Release|Any CPU.ActiveCfg = Release|Any CPU + {{4}}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/PlayerManagement/Resources/toddler.png b/PlayerManagement/Resources/toddler.png new file mode 100644 index 0000000000000000000000000000000000000000..b275e0f46c1adcdab244497d1c4d9f2762186947 GIT binary patch literal 12705 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 literal 0 HcmV?d00001 diff --git a/PlayerManagement/Resources/user.txt b/PlayerManagement/Resources/user.txt new file mode 100644 index 0000000..7d9d049 --- /dev/null +++ b/PlayerManagement/Resources/user.txt @@ -0,0 +1,13 @@ + + + + Program + {6}\AntMe.exe + /file="{7}\bin\AntMe.Player.{2}.dll" + + + Program + {6}\AntMe.exe + /file="{7}\bin\AntMe.Player.{2}.dll" + + \ No newline at end of file diff --git a/PlayerManagement/Resources/user_vb.txt b/PlayerManagement/Resources/user_vb.txt new file mode 100644 index 0000000..7d9d049 --- /dev/null +++ b/PlayerManagement/Resources/user_vb.txt @@ -0,0 +1,13 @@ + + + + Program + {6}\AntMe.exe + /file="{7}\bin\AntMe.Player.{2}.dll" + + + Program + {6}\AntMe.exe + /file="{7}\bin\AntMe.Player.{2}.dll" + + \ No newline at end of file diff --git a/PlayerManagement/RightsRequest.Designer.cs b/PlayerManagement/RightsRequest.Designer.cs new file mode 100644 index 0000000..0609010 --- /dev/null +++ b/PlayerManagement/RightsRequest.Designer.cs @@ -0,0 +1,214 @@ +namespace AntMe.PlayerManagement +{ + partial class RightsRequest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RightsRequest)); + this.yesButton = new System.Windows.Forms.Button(); + this.noButton = new System.Windows.Forms.Button(); + this.acceptCheckBox = new System.Windows.Forms.CheckBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.colonyLabel = new System.Windows.Forms.Label(); + this.authorLabel = new System.Windows.Forms.Label(); + this.rightsListView = new System.Windows.Forms.ListView(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.detailsButton = new System.Windows.Forms.Button(); + this.acceptPanel = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.sorryPanel = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.closeButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.acceptPanel.SuspendLayout(); + this.sorryPanel.SuspendLayout(); + this.SuspendLayout(); + // + // yesButton + // + resources.ApplyResources(this.yesButton, "yesButton"); + this.yesButton.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.yesButton.Name = "yesButton"; + this.yesButton.UseVisualStyleBackColor = true; + // + // noButton + // + resources.ApplyResources(this.noButton, "noButton"); + this.noButton.DialogResult = System.Windows.Forms.DialogResult.No; + this.noButton.Name = "noButton"; + this.noButton.UseVisualStyleBackColor = true; + // + // acceptCheckBox + // + resources.ApplyResources(this.acceptCheckBox, "acceptCheckBox"); + this.acceptCheckBox.Name = "acceptCheckBox"; + this.acceptCheckBox.UseVisualStyleBackColor = true; + this.acceptCheckBox.CheckedChanged += new System.EventHandler(this.acceptCheckBox_CheckedChanged); + // + // pictureBox1 + // + this.pictureBox1.Image = global::AntMe.PlayerManagement.Properties.Resources.security_32x32; + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // colonyLabel + // + resources.ApplyResources(this.colonyLabel, "colonyLabel"); + this.colonyLabel.Name = "colonyLabel"; + // + // authorLabel + // + resources.ApplyResources(this.authorLabel, "authorLabel"); + this.authorLabel.Name = "authorLabel"; + // + // rightsListView + // + resources.ApplyResources(this.rightsListView, "rightsListView"); + this.rightsListView.Name = "rightsListView"; + this.rightsListView.SmallImageList = this.imageList; + this.rightsListView.UseCompatibleStateImageBehavior = false; + this.rightsListView.View = System.Windows.Forms.View.List; + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Transparent; + this.imageList.Images.SetKeyName(0, "closed"); + this.imageList.Images.SetKeyName(1, "open"); + // + // detailsButton + // + resources.ApplyResources(this.detailsButton, "detailsButton"); + this.detailsButton.Name = "detailsButton"; + this.detailsButton.UseVisualStyleBackColor = true; + this.detailsButton.Click += new System.EventHandler(this.detailsButton_Click); + // + // acceptPanel + // + resources.ApplyResources(this.acceptPanel, "acceptPanel"); + this.acceptPanel.Controls.Add(this.label5); + this.acceptPanel.Controls.Add(this.yesButton); + this.acceptPanel.Controls.Add(this.noButton); + this.acceptPanel.Controls.Add(this.acceptCheckBox); + this.acceptPanel.Name = "acceptPanel"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // sorryPanel + // + resources.ApplyResources(this.sorryPanel, "sorryPanel"); + this.sorryPanel.Controls.Add(this.label4); + this.sorryPanel.Controls.Add(this.closeButton); + this.sorryPanel.Name = "sorryPanel"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // closeButton + // + resources.ApplyResources(this.closeButton, "closeButton"); + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.No; + this.closeButton.Name = "closeButton"; + this.closeButton.UseVisualStyleBackColor = true; + // + // RightsRequest + // + this.AcceptButton = this.yesButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.noButton; + this.Controls.Add(this.detailsButton); + this.Controls.Add(this.rightsListView); + this.Controls.Add(this.authorLabel); + this.Controls.Add(this.colonyLabel); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.acceptPanel); + this.Controls.Add(this.sorryPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "RightsRequest"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.acceptPanel.ResumeLayout(false); + this.acceptPanel.PerformLayout(); + this.sorryPanel.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button yesButton; + private System.Windows.Forms.Button noButton; + private System.Windows.Forms.CheckBox acceptCheckBox; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label colonyLabel; + private System.Windows.Forms.Label authorLabel; + private System.Windows.Forms.ListView rightsListView; + private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.Button detailsButton; + private System.Windows.Forms.Panel acceptPanel; + private System.Windows.Forms.Panel sorryPanel; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Label label5; + } +} \ No newline at end of file diff --git a/PlayerManagement/RightsRequest.cs b/PlayerManagement/RightsRequest.cs new file mode 100644 index 0000000..5e8669e --- /dev/null +++ b/PlayerManagement/RightsRequest.cs @@ -0,0 +1,289 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +using AntMe.Simulation; +using AntMe.PlayerManagement; + +namespace AntMe.PlayerManagement +{ + public partial class RightsRequest : Form + { + private readonly PlayerInfoFilename playerInfo; + private const string open = "open"; + private const string closed = "closed"; + private readonly bool locked = false; + + public RightsRequest(SimulatorConfiguration config, PlayerInfoFilename player) + { + playerInfo = player; + InitializeComponent(); + yesButton.Enabled = acceptCheckBox.Checked; + + colonyLabel.Text = player.ColonyName; + authorLabel.Text = + string.Format(Resource.AntPropertiesAuthorFormat, player.FirstName, player.LastName); + + if (player.RequestFileAccess) + { + if (config.AllowFileAccess) + { + rightsListView.Items.Add(Resource.AntPropertiesIoAccess, open); + } + else + { + locked = true; + rightsListView.Items.Add(Resource.AntPropertiesIoAccess, closed); + } + } + if (player.RequestDatabaseAccess) + { + if (config.AllowDatabaseAccess) + { + rightsListView.Items.Add(Resource.AntPropertiesDbAccess, open); + } + else + { + locked = true; + rightsListView.Items.Add(Resource.AntPropertiesDbAccess, closed); + } + } + if (player.RequestReferences) + { + if (config.AllowReferences) + { + rightsListView.Items.Add(Resource.AntPropertiesRefAccess, open); + } + else + { + locked = true; + rightsListView.Items.Add(Resource.AntPropertiesRefAccess, closed); + } + } + if (player.RequestUserInterfaceAccess) + { + if (config.AllowUserinterfaceAccess) + { + rightsListView.Items.Add(Resource.AntPropertiesUiAccess, open); + } + else + { + locked = true; + rightsListView.Items.Add(Resource.AntPropertiesUiAccess, closed); + } + } + if (player.RequestNetworkAccess) + { + if (config.AllowNetworkAccess) + { + rightsListView.Items.Add(Resource.AntPropertiesNetAccess, open); + } + else + { + locked = true; + rightsListView.Items.Add(Resource.AntPropertiesNetAccess, closed); + } + } + + if (locked) + { + sorryPanel.Visible = true; + acceptPanel.Visible = false; + AcceptButton = closeButton; + CancelButton = closeButton; + } + else + { + sorryPanel.Visible = false; + acceptPanel.Visible = true; + AcceptButton = yesButton; + CancelButton = noButton; + } + } + + /// + /// Finds out, if the given player needs a security-request + /// + /// true, if request is needed + public bool NeedRequest() + { + return + playerInfo.RequestFileAccess || + playerInfo.RequestDatabaseAccess || + playerInfo.RequestReferences || + playerInfo.RequestUserInterfaceAccess || + playerInfo.RequestNetworkAccess; + } + + /// + /// Finds out, if the given player is locked through the antme-settings. + /// + /// true, if player is locked + public bool IsLocked() + { + return locked; + } + + private void acceptCheckBox_CheckedChanged(object sender, EventArgs e) + { + yesButton.Enabled = acceptCheckBox.Checked; + } + + private void detailsButton_Click(object sender, EventArgs e) + { + AntProperties properties = new AntProperties(playerInfo); + properties.ShowDialog(this); + } + + /// + /// Checks, if the player is still valid. + /// + /// player + /// true, if player is valid. + public static bool IsValidPlayer(PlayerInfo player) + { + bool output; + try + { + player.RuleCheck(); + output = true; + } + catch (RuleViolationException) + { + output = false; + } + return output; + } + + /// + /// Delivers the RuleViolationException-Message for that player. + /// + /// player + /// RuleViolation-Message + public static string GetRuleViolationMessage(PlayerInfo player) + { + string message = string.Empty; + try + { + player.RuleCheck(); + } + catch (RuleViolationException ex) + { + message = string.Format(Resource.SimulationPluginRuleViolation, ex.Message); + } + return message; + } + + /// + /// Checks player for right-requests. + /// + /// player + /// true, if player requests rights + public static bool RequestRights(PlayerInfo player) + { + return + player.RequestFileAccess || + player.RequestDatabaseAccess || + player.RequestReferences || + player.RequestUserInterfaceAccess || + player.RequestNetworkAccess; + } + + public static bool LockedRights(SimulatorConfiguration config, PlayerInfo player) + { + // Global check. If the player needs no rights there is no way to lock + if (!RequestRights(player)) + { + return false; + } + + // Fileaccess + if (player.RequestFileAccess && !config.AllowFileAccess) + { + return true; + } + + // Database + if (player.RequestDatabaseAccess && !config.AllowDatabaseAccess) + { + return true; + } + + // Refs + if (player.RequestReferences && !config.AllowReferences) + { + return true; + } + + // Userinterfaces + if (player.RequestUserInterfaceAccess && !config.AllowUserinterfaceAccess) + { + return true; + } + + // Network + if (player.RequestNetworkAccess && !config.AllowNetworkAccess) + { + return true; + } + + // No locks + return false; + } + + public static string RequiredRightsList(SimulatorConfiguration config, PlayerInfo player) + { + List securityRequests = new List(); + + // Security-Settings + if (player.RequestFileAccess) + { + if (!config.AllowFileAccess) + { + securityRequests.Add("- " + Resource.AntPropertiesIoAccess); + } + } + + if (player.RequestDatabaseAccess) + { + if (!config.AllowDatabaseAccess) + { + securityRequests.Add("- " + Resource.AntPropertiesDbAccess); + } + } + + if (player.RequestUserInterfaceAccess) + { + if (!config.AllowUserinterfaceAccess) + { + securityRequests.Add("- " + Resource.AntPropertiesUiAccess); + } + } + + if (player.RequestReferences) + { + if (!config.AllowReferences) + { + securityRequests.Add("- " + Resource.AntPropertiesRefAccess); + } + } + + if (player.RequestNetworkAccess) + { + if (!config.AllowNetworkAccess) + { + securityRequests.Add("- " + Resource.AntPropertiesNetAccess); + } + } + + if (securityRequests.Count > 0) + { + return + Resource.SimulationPluginRightsLocked + Environment.NewLine + + string.Join(Environment.NewLine, securityRequests.ToArray()); + } + + return string.Empty; + } + } +} \ No newline at end of file diff --git a/PlayerManagement/RightsRequest.de.resx b/PlayerManagement/RightsRequest.de.resx new file mode 100644 index 0000000..27c370a --- /dev/null +++ b/PlayerManagement/RightsRequest.de.resx @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ja + + + Nein + + + + 108, 17 + + + Ja, ich bin sicher. + + + Du versuchst gerade ein potentiell gefährliches Ameisenvolk zur aktuellen Teamzusammenstellung hinzuzufügen. Dieses Volk würde dadurch Zugriff auf zusätzliche Resourcen erhalten. + +Hier kannst du nachsehen welche Rechte dieses Volk angefordert hat und entscheiden, ob du dies erlauben willst. Beachte, dass Zugriffsrechte, die du diesem Volk gewährst, anschließend auch von den anderen Völkern verwendet werden können. + + + 88, 13 + + + Betroffenes Volk: + + + 109, 13 + + + Angeforderte Rechte: + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM + CAAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAv8BGgF6CiwC/wEa + AXoILAb/IAAC/wFTCiwBUwL/AVMILAFTBv8gACD/IAAC/wF6ClMBegL/AXoIUwF6Bv8gAAL/ARoBegos + Av8BGgF6CCwG/yAAAv8BUwosAVMC/wFTCCwBUwb/IAAg/yAAAv8BegpTAXoC/wF6CFMBegb/IAAC/wEa + AXoKLAL/ARoBeggsBv8gAAL/AVMKLAFTAv8BUwgsAVMG/yAAA/8B8QFtAfIE/wHyAW0BvAr/AewB7wX/ + Ae8B7CAAA/8B8QFtAfEE/wHxAW0BBwr/AW0B7QX/Ae0BbSAAA/8B8QFtAbwE/wG8AW0B8Qr/AW0B7QX/ + Ae0B6yAABP8B6wHsAfMC/wHzAewB6wv/AesB7QG8A/8BvAFtAfcgAAT/AfEBbQHsApIB6wFtAfAL/wH0 + AW0B7AH3Ae8B7QFtAewB9CAABf8B8gHvAm0B7QHyDf8B9AHvAm0B7AHvAfQB/yAAAUIBTQE+BwABPgMA + ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/+BAAs= + + + + 378, 13 + + + Bist du sicher, dass du diesem Volk die angeforderten Rechte gewähren willst? + + + Leider sind nicht alle angefragten Zugriffsrechte in den Grundeinstellungen von AntMe! freigegeben. Willst du aber dennoch dieses Volk zur Simulation hinzufügen, so musst du nur in die Simulationseinstellungen welchsen und dort im Tab "Sicherheit" die nötigen Zugriffsrechte bestätigen. + + + Schließen + + + AntMe! Sicherheitsabfrage + + \ No newline at end of file diff --git a/PlayerManagement/RightsRequest.resx b/PlayerManagement/RightsRequest.resx new file mode 100644 index 0000000..9ee12b7 --- /dev/null +++ b/PlayerManagement/RightsRequest.resx @@ -0,0 +1,627 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bottom, Right + + + + False + + + + 303, 80 + + + 75, 23 + + + 0 + + + Yes + + + yesButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + acceptPanel + + + 1 + + + Bottom, Right + + + 222, 80 + + + 75, 23 + + + 1 + + + No + + + noButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + acceptPanel + + + 2 + + + Bottom, Left + + + True + + + 0, 55 + + + 222, 17 + + + 2 + + + Yes, I'm sure I know what I'm doning here + + + acceptCheckBox + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + acceptPanel + + + 3 + + + + + + 12, 12 + + + 32, 32 + + + 3 + + + pictureBox1 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + Top, Left, Right + + + 50, 12 + + + 340, 114 + + + 4 + + + You try to add an potential dangerous Ant-colony to the current match-settings. This means you grant an ant special access to various ressources. + +Following, you can see the requested rights of that ant. Note, that the granted access-rights have also effect to the other colonies you add to the match. + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + True + + + 12, 143 + + + 118, 13 + + + 5 + + + Requesting Ant-Colony: + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + True + + + 12, 193 + + + 95, 13 + + + 6 + + + Requested Rights: + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + Microsoft Sans Serif, 8.25pt, style=Bold + + + 136, 143 + + + 85, 13 + + + 7 + + + [ColonyName] + + + colonyLabel + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + 136, 160 + + + 72, 13 + + + 8 + + + [AuthorName] + + + authorLabel + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Top, Bottom, Left, Right + + + 139, 193 + + + 251, 122 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM + CAAAAk1TRnQBSQFMAgEBAgEAAQwBAAEMAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAv8BGgF6CiwC/wEa + AXoILAb/IAAC/wFTCiwBUwL/AVMILAFTBv8gACD/IAAC/wF6ClMBegL/AXoIUwF6Bv8gAAL/ARoBegos + Av8BGgF6CCwG/yAAAv8BUwosAVMC/wFTCCwBUwb/IAAg/yAAAv8BegpTAXoC/wF6CFMBegb/IAAC/wEa + AXoKLAL/ARoBeggsBv8gAAL/AVMKLAFTAv8BUwgsAVMG/yAAA/8B8QFtAfIE/wHyAW0BvAr/AewB7wX/ + Ae8B7CAAA/8B8QFtAfEE/wHxAW0BBwr/AW0B7QX/Ae0BbSAAA/8B8QFtAbwE/wG8AW0B8Qr/AW0B7QX/ + Ae0B6yAABP8B6wHsAfMC/wHzAewB6wv/AesB7QG8A/8BvAFtAfcgAAT/AfEBbQHsApIB6wFtAfAL/wH0 + AW0B7AH3Ae8B7QFtAewB9CAABf8B8gHvAm0B7QHyDf8B9AHvAm0B7AHvAfQB/yAAAUIBTQE+BwABPgMA + ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/+BAAs= + + + + 9 + + + rightsListView + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top, Right + + + 315, 138 + + + 75, 23 + + + 10 + + + Details + + + detailsButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Bottom, Left, Right + + + True + + + 3, 0 + + + 266, 13 + + + 3 + + + Sure, you want to grant higher rights to this ant-colony? + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + acceptPanel + + + 0 + + + 12, 337 + + + 378, 103 + + + 11 + + + acceptPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + Bottom, Left, Right + + + Top, Bottom, Left, Right + + + 0, 0 + + + 378, 77 + + + 1 + + + Unfortunally there are not all required rights granted in the settings of AntMe!. To accept this colony, its neccessary to go to the settings, check the requested rights at the security-tab. After that, you can here accept the requested rights. + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + sorryPanel + + + 0 + + + Bottom, Right + + + 303, 80 + + + 75, 23 + + + 0 + + + Close + + + closeButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + sorryPanel + + + 1 + + + 12, 337 + + + 378, 103 + + + 12 + + + sorryPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + True + + + 6, 13 + + + 402, 452 + + + CenterParent + + + AntMe! Security-Request + + + imageList + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + RightsRequest + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PlayerManagement/Store.cs b/PlayerManagement/Store.cs new file mode 100644 index 0000000..64c7cdf --- /dev/null +++ b/PlayerManagement/Store.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.PlayerManagement +{ + public class Store + { + } +} diff --git a/PlayerManagement/VsGenerator.cs b/PlayerManagement/VsGenerator.cs new file mode 100644 index 0000000..316fb45 --- /dev/null +++ b/PlayerManagement/VsGenerator.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; + +namespace AntMe.PlayerManagement +{ + /// + /// Base Class for all Visual Studio based Code Generators. + /// + internal abstract class VsGenerator + { + private DirectoryInfo _outputPath; + private string _classname; + private string _solutionname; + private string _projectname; + private Guid _solutionguid; + private Guid _projectguid; + private string _playername; + private string _antmeroot; + + /// + /// Generates the project files for a C# Projekt + /// {0}: Name der Ameisenklasse + /// {1}: Solution Name + /// {2}: Projekt Name + /// {3}: Solution Guid + /// {4}: Projekt Guid + /// {5}: Player Display Name + /// {6}: AntMe Install Path + /// {7}: Project Root + /// + /// + /// + /// + /// + /// + /// + /// + /// Path to Solution File + protected string GenerateCS(string name, string path, string solutionFile, string projectFile, string projectUserFile, string classFile, string propertiesFile) + { + // Check KI Name + if (!Regex.IsMatch(name, @"^[a-zA-Z][a-zA-Z0-9]{1,19}$")) + throw new ArgumentException("Der Name darf nur Buchstaben und Zahlen enthalten, nicht mit einer Zahl beginnen und zwischen 2 und 20 Zeichen lang sein."); + + // Prüfen, ob das Ausgabeverzeichnis existiert + DirectoryInfo root = new DirectoryInfo(path); + if (!root.Exists) + throw new ArgumentException("Ausgabeverzeichnis existiert nicht"); + + // Verzeichnis erzeugen + _outputPath = root.CreateSubdirectory(name); + _outputPath.CreateSubdirectory("Properties"); + + // Identify AntMe! Root + _antmeroot = new FileInfo(Assembly.GetEntryAssembly().Location).DirectoryName; + + _classname = name + "Class"; + _solutionname = name; + _projectname = name; + _solutionguid = Guid.NewGuid(); + _projectguid = Guid.NewGuid(); + _playername = name; + + GenerateFile(_outputPath.FullName + "\\" + _solutionname + ".sln", solutionFile); + GenerateFile(_outputPath.FullName + "\\" + _projectname + ".csproj", projectFile); + GenerateFile(_outputPath.FullName + "\\" + _projectname + ".csproj.user", projectUserFile); + GenerateFile(_outputPath.FullName + "\\" + _classname + ".cs", classFile); + GenerateFile(_outputPath.FullName + "\\Properties\\AssemblyInfo.cs", propertiesFile); + + return _outputPath.FullName + "\\" + _solutionname + ".sln"; + } + + /// + /// Generates the project files for a C# Projekt + /// {0}: Name der Ameisenklasse + /// {1}: Solution Name + /// {2}: Projekt Name + /// {3}: Solution Guid + /// {4}: Projekt Guid + /// {5}: Player Display Name + /// {6}: AntMe Install Path + /// {7}: Project Root + /// + /// + /// + /// + /// + /// + /// + /// + /// Path to Solution File + protected string GenerateVB(string name, string path, string solutionFile, string projectFile, string projectUserFile, string classFile, string propertiesFile) + { + // Check KI Name + if (!Regex.IsMatch(name, @"^[a-zA-Z][a-zA-Z0-9]{1,19}$")) + throw new ArgumentException("Der Name darf nur Buchstaben und Zahlen enthalten, nicht mit einer Zahl beginnen und zwischen 2 und 20 Zeichen lang sein."); + + // Prüfen, ob das Ausgabeverzeichnis existiert + DirectoryInfo root = new DirectoryInfo(path); + if (!root.Exists) + throw new ArgumentException("Ausgabeverzeichnis existiert nicht"); + + // Verzeichnis erzeugen + _outputPath = root.CreateSubdirectory(name); + _outputPath.CreateSubdirectory("My Project"); + + // Identify AntMe! Root + _antmeroot = new FileInfo(Assembly.GetEntryAssembly().Location).DirectoryName; + + _classname = name + "Class"; + _solutionname = name; + _projectname = name; + _solutionguid = Guid.NewGuid(); + _projectguid = Guid.NewGuid(); + _playername = name; + + GenerateFile(_outputPath.FullName + "\\" + _solutionname + ".sln", solutionFile); + GenerateFile(_outputPath.FullName + "\\" + _projectname + ".vbproj", projectFile); + GenerateFile(_outputPath.FullName + "\\" + _projectname + ".vbproj.user", projectUserFile); + GenerateFile(_outputPath.FullName + "\\" + _classname + ".vb", classFile); + GenerateFile(_outputPath.FullName + "\\My Project\\AssemblyInfo.vb", propertiesFile); + + return _outputPath.FullName + "\\" + _solutionname + ".sln"; + } + + private void GenerateFile(string filename, string content) + { + content = content.Replace("{0}", _classname); + content = content.Replace("{1}", _solutionname); + content = content.Replace("{2}", _projectname); + content = content.Replace("{3}", _solutionguid.ToString()); + content = content.Replace("{4}", _projectguid.ToString()); + content = content.Replace("{5}", _playername); + content = content.Replace("{6}", _antmeroot); + content = content.Replace("{7}", _outputPath.FullName); + + File.WriteAllText(filename, content); + } + } +} diff --git a/Setup/Product.wxs b/Setup/Product.wxs index 5ce7bc0..8eef35c 100644 --- a/Setup/Product.wxs +++ b/Setup/Product.wxs @@ -9,7 +9,7 @@ Id="*" Name="AntMe! 1.7" Language="1033" - Version="1.7.1" + Version="1.7.2" Manufacturer="$(var.Manufactor)" UpgradeCode="$(var.UpgradeGuid)"> @@ -52,6 +52,7 @@ + @@ -131,6 +132,12 @@ + + + + + + @@ -155,6 +162,7 @@ + diff --git a/Setup/Setup.wixproj b/Setup/Setup.wixproj index 444125b..f47c324 100644 --- a/Setup/Setup.wixproj +++ b/Setup/Setup.wixproj @@ -60,6 +60,14 @@ Binaries;Content;Satellites INSTALLFOLDER + + PlayerManagement + {5d566a2a-c112-4543-95ea-f3e81a53cde9} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + SharedComponents {415f50c3-bd70-4634-b1f7-a15b42f0b0c6} diff --git a/SharedComponents/Properties/AssemblyInfo.cs b/SharedComponents/Properties/AssemblyInfo.cs index d3f85cd..638e149 100644 --- a/SharedComponents/Properties/AssemblyInfo.cs +++ b/SharedComponents/Properties/AssemblyInfo.cs @@ -12,7 +12,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly: AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly: AssemblyCulture("")] [assembly: AllowPartiallyTrustedCallers] @@ -39,5 +39,5 @@ // // Sie können alle Werte angeben oder die standardmäßigen Revisions- und Buildnummern // übernehmen, indem Sie "*" eingeben: -[assembly: AssemblyVersion("1.7.1.64")] -[assembly: AssemblyFileVersion("1.7.1.64")] \ No newline at end of file +[assembly: AssemblyVersion("1.7.2.69")] +[assembly: AssemblyFileVersion("1.7.2.69")] \ No newline at end of file diff --git a/SimulationCore/Properties/AssemblyInfo.cs b/SimulationCore/Properties/AssemblyInfo.cs index 7765322..7deb961 100644 --- a/SimulationCore/Properties/AssemblyInfo.cs +++ b/SimulationCore/Properties/AssemblyInfo.cs @@ -12,7 +12,7 @@ [assembly : AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly : AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly : AssemblyCulture("")] [assembly : AllowPartiallyTrustedCallers] @@ -41,5 +41,5 @@ // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.7.1.129")] -[assembly: AssemblyFileVersion("1.7.1.129")] \ No newline at end of file +[assembly: AssemblyVersion("1.7.2.133")] +[assembly: AssemblyFileVersion("1.7.2.133")] \ No newline at end of file diff --git a/SimulationCore/Simulation/AiAnalysis.cs b/SimulationCore/Simulation/AiAnalysis.cs index eeea245..11b04c0 100644 --- a/SimulationCore/Simulation/AiAnalysis.cs +++ b/SimulationCore/Simulation/AiAnalysis.cs @@ -91,7 +91,7 @@ public static List Analyse(byte[] file, bool checkRules) { // setup appdomain AppDomainSetup setup = new AppDomainSetup(); - setup.ApplicationBase = ".\\"; + setup.ApplicationBase = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName; // setup accessrights for the appdomain PermissionSet rechte = new PermissionSet(PermissionState.None); diff --git a/SimulationCore/Simulation/PlayerInfoFilename.cs b/SimulationCore/Simulation/PlayerInfoFilename.cs index d76a9ce..2bbf8e6 100644 --- a/SimulationCore/Simulation/PlayerInfoFilename.cs +++ b/SimulationCore/Simulation/PlayerInfoFilename.cs @@ -1,11 +1,13 @@ using System; -namespace AntMe.Simulation { +namespace AntMe.Simulation +{ /// /// Spielerinfo mit zusätzlicher Angabe eines Dateinamens /// [Serializable] - public sealed class PlayerInfoFilename : PlayerInfo { + public sealed class PlayerInfoFilename : PlayerInfo + { #region interne Variablen /// @@ -20,12 +22,13 @@ public sealed class PlayerInfoFilename : PlayerInfo { /// /// Creates an instance of PlayerInfoFilename /// - public PlayerInfoFilename() {} + public PlayerInfoFilename() { } /// /// Konstruktor der SpielerInfo mit Dateinamen /// - public PlayerInfoFilename(string file) { + public PlayerInfoFilename(string file) + { File = file; } @@ -34,7 +37,9 @@ public PlayerInfoFilename(string file) { /// /// /// - public PlayerInfoFilename(PlayerInfo info, string file) : base(info) { + public PlayerInfoFilename(PlayerInfo info, string file) + : base(info) + { File = file; } @@ -45,8 +50,9 @@ public PlayerInfoFilename(PlayerInfo info, string file) : base(info) { /// /// /// - public override bool Equals(object obj) { - PlayerInfoFilename other = (PlayerInfoFilename) obj; + public override bool Equals(object obj) + { + PlayerInfoFilename other = (PlayerInfoFilename)obj; return (GetHashCode() == other.GetHashCode()); } @@ -54,7 +60,8 @@ public override bool Equals(object obj) { /// Erzeugt einen Hash aus den gegebenen Daten /// /// Hashcode - public override int GetHashCode() { + public override int GetHashCode() + { return File.GetHashCode() ^ ClassName.GetHashCode(); } } diff --git a/SimulationCore/SimulationCore.csproj b/SimulationCore/SimulationCore.csproj index 8b57db7..6188203 100644 --- a/SimulationCore/SimulationCore.csproj +++ b/SimulationCore/SimulationCore.csproj @@ -203,6 +203,7 @@ {415F50C3-BD70-4634-B1F7-A15B42F0B0C6} SharedComponents + False diff --git a/SimulationPlugin/Challenge.cs b/SimulationPlugin/Challenge.cs new file mode 100644 index 0000000..4e45910 --- /dev/null +++ b/SimulationPlugin/Challenge.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.Plugin.Simulation +{ + internal sealed class Challenge + { + public Guid Id { get; set; } + + public string Name { get; set; } + + public string Description { get; set; } + + public byte Rating { get; set; } + } +} diff --git a/SimulationPlugin/ChallengeButton.Designer.cs b/SimulationPlugin/ChallengeButton.Designer.cs new file mode 100644 index 0000000..4e7bfdd --- /dev/null +++ b/SimulationPlugin/ChallengeButton.Designer.cs @@ -0,0 +1,106 @@ +namespace AntMe.Plugin.Simulation +{ + partial class ChallengeButton + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.star3 = new System.Windows.Forms.PictureBox(); + this.star2 = new System.Windows.Forms.PictureBox(); + this.star1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.star3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.star2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.star1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(15, 14); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(93, 20); + this.label1.TabIndex = 0; + this.label1.Text = "Sugar run!"; + // + // star3 + // + this.star3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.star3.Image = global::AntMe.Plugin.Simulation.Properties.Resources.star1; + this.star3.Location = new System.Drawing.Point(209, 49); + this.star3.Name = "star3"; + this.star3.Size = new System.Drawing.Size(32, 32); + this.star3.TabIndex = 1; + this.star3.TabStop = false; + // + // star2 + // + this.star2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.star2.Image = global::AntMe.Plugin.Simulation.Properties.Resources.star1; + this.star2.Location = new System.Drawing.Point(171, 49); + this.star2.Name = "star2"; + this.star2.Size = new System.Drawing.Size(32, 32); + this.star2.TabIndex = 2; + this.star2.TabStop = false; + // + // star1 + // + this.star1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.star1.Image = global::AntMe.Plugin.Simulation.Properties.Resources.star1; + this.star1.Location = new System.Drawing.Point(133, 49); + this.star1.Name = "star1"; + this.star1.Size = new System.Drawing.Size(32, 32); + this.star1.TabIndex = 3; + this.star1.TabStop = false; + // + // ChallengeButton + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Gainsboro; + this.Controls.Add(this.star1); + this.Controls.Add(this.star2); + this.Controls.Add(this.star3); + this.Controls.Add(this.label1); + this.Name = "ChallengeButton"; + this.Size = new System.Drawing.Size(244, 84); + ((System.ComponentModel.ISupportInitialize)(this.star3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.star2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.star1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox star3; + private System.Windows.Forms.PictureBox star2; + private System.Windows.Forms.PictureBox star1; + } +} diff --git a/SimulationPlugin/ChallengeButton.cs b/SimulationPlugin/ChallengeButton.cs new file mode 100644 index 0000000..b7d80b8 --- /dev/null +++ b/SimulationPlugin/ChallengeButton.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace AntMe.Plugin.Simulation +{ + public partial class ChallengeButton : UserControl + { + public ChallengeButton() + { + InitializeComponent(); + } + } +} diff --git a/SimulationPlugin/ChallengeButton.resx b/SimulationPlugin/ChallengeButton.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SimulationPlugin/ChallengeButton.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SimulationPlugin/ChallengesControl.Designer.cs b/SimulationPlugin/ChallengesControl.Designer.cs new file mode 100644 index 0000000..775635e --- /dev/null +++ b/SimulationPlugin/ChallengesControl.Designer.cs @@ -0,0 +1,186 @@ +namespace AntMe.Plugin.Simulation +{ + partial class ChallengesControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.mainPanel = new System.Windows.Forms.Panel(); + this.selectedPanel = new System.Windows.Forms.Panel(); + this.titelLabel = new System.Windows.Forms.Label(); + this.challengeButton1 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton2 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton3 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton4 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton5 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton6 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton7 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.challengeButton8 = new AntMe.Plugin.Simulation.ChallengeButton(); + this.flowLayoutPanel1.SuspendLayout(); + this.mainPanel.SuspendLayout(); + this.SuspendLayout(); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.AutoScroll = true; + this.flowLayoutPanel1.BackColor = System.Drawing.Color.White; + this.flowLayoutPanel1.Controls.Add(this.challengeButton1); + this.flowLayoutPanel1.Controls.Add(this.challengeButton2); + this.flowLayoutPanel1.Controls.Add(this.challengeButton3); + this.flowLayoutPanel1.Controls.Add(this.challengeButton4); + this.flowLayoutPanel1.Controls.Add(this.challengeButton5); + this.flowLayoutPanel1.Controls.Add(this.challengeButton6); + this.flowLayoutPanel1.Controls.Add(this.challengeButton7); + this.flowLayoutPanel1.Controls.Add(this.challengeButton8); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(273, 489); + this.flowLayoutPanel1.TabIndex = 0; + // + // mainPanel + // + this.mainPanel.Anchor = System.Windows.Forms.AnchorStyles.None; + this.mainPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.mainPanel.Controls.Add(this.selectedPanel); + this.mainPanel.Controls.Add(this.flowLayoutPanel1); + this.mainPanel.Location = new System.Drawing.Point(49, 54); + this.mainPanel.Name = "mainPanel"; + this.mainPanel.Size = new System.Drawing.Size(807, 491); + this.mainPanel.TabIndex = 1; + // + // selectedPanel + // + this.selectedPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.selectedPanel.Location = new System.Drawing.Point(273, 0); + this.selectedPanel.Name = "selectedPanel"; + this.selectedPanel.Size = new System.Drawing.Size(532, 489); + this.selectedPanel.TabIndex = 1; + // + // titelLabel + // + this.titelLabel.BackColor = System.Drawing.SystemColors.AppWorkspace; + this.titelLabel.Dock = System.Windows.Forms.DockStyle.Top; + this.titelLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold); + this.titelLabel.ForeColor = System.Drawing.SystemColors.HighlightText; + this.titelLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.titelLabel.Location = new System.Drawing.Point(0, 0); + this.titelLabel.Name = "titelLabel"; + this.titelLabel.Padding = new System.Windows.Forms.Padding(4); + this.titelLabel.Size = new System.Drawing.Size(1025, 27); + this.titelLabel.TabIndex = 2; + this.titelLabel.Text = "Challenges"; + // + // challengeButton1 + // + this.challengeButton1.Location = new System.Drawing.Point(3, 3); + this.challengeButton1.Name = "challengeButton1"; + this.challengeButton1.Size = new System.Drawing.Size(244, 84); + this.challengeButton1.TabIndex = 0; + // + // challengeButton2 + // + this.challengeButton2.Location = new System.Drawing.Point(3, 93); + this.challengeButton2.Name = "challengeButton2"; + this.challengeButton2.Size = new System.Drawing.Size(244, 84); + this.challengeButton2.TabIndex = 1; + // + // challengeButton3 + // + this.challengeButton3.Location = new System.Drawing.Point(3, 183); + this.challengeButton3.Name = "challengeButton3"; + this.challengeButton3.Size = new System.Drawing.Size(244, 84); + this.challengeButton3.TabIndex = 2; + // + // challengeButton4 + // + this.challengeButton4.Location = new System.Drawing.Point(3, 273); + this.challengeButton4.Name = "challengeButton4"; + this.challengeButton4.Size = new System.Drawing.Size(244, 84); + this.challengeButton4.TabIndex = 3; + // + // challengeButton5 + // + this.challengeButton5.Location = new System.Drawing.Point(3, 363); + this.challengeButton5.Name = "challengeButton5"; + this.challengeButton5.Size = new System.Drawing.Size(244, 84); + this.challengeButton5.TabIndex = 4; + // + // challengeButton6 + // + this.challengeButton6.Location = new System.Drawing.Point(3, 453); + this.challengeButton6.Name = "challengeButton6"; + this.challengeButton6.Size = new System.Drawing.Size(244, 84); + this.challengeButton6.TabIndex = 5; + // + // challengeButton7 + // + this.challengeButton7.Location = new System.Drawing.Point(3, 543); + this.challengeButton7.Name = "challengeButton7"; + this.challengeButton7.Size = new System.Drawing.Size(244, 84); + this.challengeButton7.TabIndex = 6; + // + // challengeButton8 + // + this.challengeButton8.Location = new System.Drawing.Point(3, 633); + this.challengeButton8.Name = "challengeButton8"; + this.challengeButton8.Size = new System.Drawing.Size(244, 84); + this.challengeButton8.TabIndex = 7; + // + // ChallengesControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.mainPanel); + this.Controls.Add(this.titelLabel); + this.Name = "ChallengesControl"; + this.Size = new System.Drawing.Size(1025, 577); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.ChallengesControl_Paint); + this.Resize += new System.EventHandler(this.ChallengesControl_Resize); + this.flowLayoutPanel1.ResumeLayout(false); + this.mainPanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Panel mainPanel; + private System.Windows.Forms.Label titelLabel; + private System.Windows.Forms.Panel selectedPanel; + private ChallengeButton challengeButton1; + private ChallengeButton challengeButton2; + private ChallengeButton challengeButton3; + private ChallengeButton challengeButton4; + private ChallengeButton challengeButton5; + private ChallengeButton challengeButton6; + private ChallengeButton challengeButton7; + private ChallengeButton challengeButton8; + } +} diff --git a/SimulationPlugin/ChallengesControl.cs b/SimulationPlugin/ChallengesControl.cs new file mode 100644 index 0000000..e57206a --- /dev/null +++ b/SimulationPlugin/ChallengesControl.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Drawing.Drawing2D; + +namespace AntMe.Plugin.Simulation +{ + public partial class ChallengesControl : UserControl + { + public ChallengesControl() + { + InitializeComponent(); + } + + private void ChallengesControl_Paint(object sender, PaintEventArgs e) + { + //using (LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(0, this.ClientRectangle.Height), Color.LightBlue, Color.CornflowerBlue)) + //{ + // e.Graphics.FillRectangle(brush, e.ClipRectangle); + //} + } + + private void ChallengesControl_Resize(object sender, EventArgs e) + { + mainPanel.Left = (ClientRectangle.Width - mainPanel.Width) / 2; + mainPanel.Top = (ClientRectangle.Height - mainPanel.Height) / 2; + } + } +} diff --git a/SimulationPlugin/ChallengesControl.resx b/SimulationPlugin/ChallengesControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SimulationPlugin/ChallengesControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SimulationPlugin/ChallengesPlugin.cs b/SimulationPlugin/ChallengesPlugin.cs new file mode 100644 index 0000000..3964a8e --- /dev/null +++ b/SimulationPlugin/ChallengesPlugin.cs @@ -0,0 +1,88 @@ +using AntMe.SharedComponents.Plugin; +using AntMe.SharedComponents.States; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Windows.Forms; + +namespace AntMe.Plugin.Simulation +{ + //public sealed class ChallengesPlugin : IProducerPlugin + //{ + // private readonly Version version = Assembly.GetExecutingAssembly().GetName().Version; + + // private ChallengesControl control = new ChallengesControl(); + + // private PluginState state = PluginState.Ready; + + // public void CreateState(ref SimulationState state) + // { + // throw new NotImplementedException(); + // } + + // public string Description { get { return "Neue Herausforderungen für deine Ameisen."; } } + + // public Guid Guid { get { return Guid.Parse("{C10E4DC6-B882-4D47-A9A1-6C8FB23870BB}"); } } + + // public string Name { get { return "Challenges"; } } + + // public Version Version + // { + // get { return version; } + // } + + // public PluginState State + // { + // get { return state; } + // } + + // public Control Control + // { + // get { return control; } + // } + + // public byte[] Settings + // { + // get + // { + // return null; + // } + // set + // { + + // } + // } + + // public void Start() + // { + + // } + + // public void Stop() + // { + + // } + + // public void Pause() + // { + + // } + + // public void StartupParameter(string[] parameter) + // { + + // } + + // public void SetVisibility(bool visible) + // { + + // } + + // public void UpdateUI(SimulationState state) + // { + + // } + //} +} diff --git a/SimulationPlugin/ChallengesSettings.cs b/SimulationPlugin/ChallengesSettings.cs new file mode 100644 index 0000000..06ce0cc --- /dev/null +++ b/SimulationPlugin/ChallengesSettings.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AntMe.Plugin.Simulation +{ + [Serializable] + public sealed class ChallengesSettings + { + public List ChallengeValues { get; set; } + } + + [Serializable] + public sealed class ChallengeValues + { + + } +} diff --git a/SimulationPlugin/FreeGameControl.Designer.cs b/SimulationPlugin/FreeGameControl.Designer.cs new file mode 100644 index 0000000..2dc3a94 --- /dev/null +++ b/SimulationPlugin/FreeGameControl.Designer.cs @@ -0,0 +1,804 @@ +namespace AntMe.Plugin.Simulation +{ + partial class FreeGameControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FreeGameControl)); + this.mainPanel = new System.Windows.Forms.Panel(); + this.panel8 = new System.Windows.Forms.Panel(); + this.author8label = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.name8label = new System.Windows.Forms.Label(); + this.info8button = new System.Windows.Forms.Button(); + this.team8Combo = new System.Windows.Forms.ComboBox(); + this.delete8Button = new System.Windows.Forms.Button(); + this.panel7 = new System.Windows.Forms.Panel(); + this.author7label = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.name7label = new System.Windows.Forms.Label(); + this.delete7Button = new System.Windows.Forms.Button(); + this.team7Combo = new System.Windows.Forms.ComboBox(); + this.info7button = new System.Windows.Forms.Button(); + this.panel6 = new System.Windows.Forms.Panel(); + this.author6label = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.name6label = new System.Windows.Forms.Label(); + this.delete6Button = new System.Windows.Forms.Button(); + this.team6Combo = new System.Windows.Forms.ComboBox(); + this.info6button = new System.Windows.Forms.Button(); + this.panel5 = new System.Windows.Forms.Panel(); + this.author5label = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.name5label = new System.Windows.Forms.Label(); + this.delete5Button = new System.Windows.Forms.Button(); + this.team5Combo = new System.Windows.Forms.ComboBox(); + this.info5button = new System.Windows.Forms.Button(); + this.panel4 = new System.Windows.Forms.Panel(); + this.author4label = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.name4label = new System.Windows.Forms.Label(); + this.info4button = new System.Windows.Forms.Button(); + this.team4Combo = new System.Windows.Forms.ComboBox(); + this.delete4Button = new System.Windows.Forms.Button(); + this.panel3 = new System.Windows.Forms.Panel(); + this.author3label = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.name3label = new System.Windows.Forms.Label(); + this.info3button = new System.Windows.Forms.Button(); + this.team3Combo = new System.Windows.Forms.ComboBox(); + this.delete3Button = new System.Windows.Forms.Button(); + this.panel2 = new System.Windows.Forms.Panel(); + this.author2label = new System.Windows.Forms.Label(); + this.name2label = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.info2button = new System.Windows.Forms.Button(); + this.team2Combo = new System.Windows.Forms.ComboBox(); + this.delete2Button = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.author1label = new System.Windows.Forms.Label(); + this.name1label = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.info1button = new System.Windows.Forms.Button(); + this.team1Combo = new System.Windows.Forms.ComboBox(); + this.delete1Button = new System.Windows.Forms.Button(); + this.titelLabel = new System.Windows.Forms.Label(); + this.toolStrip = new System.Windows.Forms.ToolStrip(); + this.settingsButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.resetButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.settingsLabelLabel = new System.Windows.Forms.ToolStripLabel(); + this.settingsLabel = new System.Windows.Forms.ToolStripLabel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.mainPanel.SuspendLayout(); + this.panel8.SuspendLayout(); + this.panel7.SuspendLayout(); + this.panel6.SuspendLayout(); + this.panel5.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.toolStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // mainPanel + // + resources.ApplyResources(this.mainPanel, "mainPanel"); + this.mainPanel.BackColor = System.Drawing.Color.White; + this.mainPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.mainPanel.Controls.Add(this.panel8); + this.mainPanel.Controls.Add(this.panel7); + this.mainPanel.Controls.Add(this.panel6); + this.mainPanel.Controls.Add(this.panel5); + this.mainPanel.Controls.Add(this.panel4); + this.mainPanel.Controls.Add(this.panel3); + this.mainPanel.Controls.Add(this.panel2); + this.mainPanel.Controls.Add(this.panel1); + this.mainPanel.Name = "mainPanel"; + // + // panel8 + // + resources.ApplyResources(this.panel8, "panel8"); + this.panel8.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel8.Controls.Add(this.author8label); + this.panel8.Controls.Add(this.label8); + this.panel8.Controls.Add(this.name8label); + this.panel8.Controls.Add(this.info8button); + this.panel8.Controls.Add(this.team8Combo); + this.panel8.Controls.Add(this.delete8Button); + this.panel8.Name = "panel8"; + this.panel8.Click += new System.EventHandler(this.open8_Click); + // + // author8label + // + resources.ApplyResources(this.author8label, "author8label"); + this.author8label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author8label.Name = "author8label"; + this.author8label.Click += new System.EventHandler(this.open8_Click); + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + this.label8.Click += new System.EventHandler(this.open8_Click); + // + // name8label + // + resources.ApplyResources(this.name8label, "name8label"); + this.name8label.Name = "name8label"; + this.name8label.Click += new System.EventHandler(this.open8_Click); + // + // info8button + // + resources.ApplyResources(this.info8button, "info8button"); + this.info8button.Name = "info8button"; + this.info8button.UseVisualStyleBackColor = true; + this.info8button.Click += new System.EventHandler(this.info8_Click); + // + // team8Combo + // + resources.ApplyResources(this.team8Combo, "team8Combo"); + this.team8Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team8Combo.FormattingEnabled = true; + this.team8Combo.Items.AddRange(new object[] { + resources.GetString("team8Combo.Items"), + resources.GetString("team8Combo.Items1"), + resources.GetString("team8Combo.Items2"), + resources.GetString("team8Combo.Items3"), + resources.GetString("team8Combo.Items4"), + resources.GetString("team8Combo.Items5"), + resources.GetString("team8Combo.Items6"), + resources.GetString("team8Combo.Items7")}); + this.team8Combo.Name = "team8Combo"; + this.team8Combo.SelectedIndexChanged += new System.EventHandler(this.team8Combo_SelectedIndexChanged); + // + // delete8Button + // + resources.ApplyResources(this.delete8Button, "delete8Button"); + this.delete8Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete8Button.Name = "delete8Button"; + this.delete8Button.UseVisualStyleBackColor = true; + this.delete8Button.Click += new System.EventHandler(this.drop8_Click); + // + // panel7 + // + resources.ApplyResources(this.panel7, "panel7"); + this.panel7.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel7.Controls.Add(this.author7label); + this.panel7.Controls.Add(this.label7); + this.panel7.Controls.Add(this.name7label); + this.panel7.Controls.Add(this.delete7Button); + this.panel7.Controls.Add(this.team7Combo); + this.panel7.Controls.Add(this.info7button); + this.panel7.Name = "panel7"; + this.panel7.Click += new System.EventHandler(this.open7_Click); + // + // author7label + // + resources.ApplyResources(this.author7label, "author7label"); + this.author7label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author7label.Name = "author7label"; + this.author7label.Click += new System.EventHandler(this.open7_Click); + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + this.label7.Click += new System.EventHandler(this.open7_Click); + // + // name7label + // + resources.ApplyResources(this.name7label, "name7label"); + this.name7label.Name = "name7label"; + this.name7label.Click += new System.EventHandler(this.open7_Click); + // + // delete7Button + // + resources.ApplyResources(this.delete7Button, "delete7Button"); + this.delete7Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete7Button.Name = "delete7Button"; + this.delete7Button.UseVisualStyleBackColor = true; + this.delete7Button.Click += new System.EventHandler(this.drop7_Click); + // + // team7Combo + // + resources.ApplyResources(this.team7Combo, "team7Combo"); + this.team7Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team7Combo.FormattingEnabled = true; + this.team7Combo.Items.AddRange(new object[] { + resources.GetString("team7Combo.Items"), + resources.GetString("team7Combo.Items1"), + resources.GetString("team7Combo.Items2"), + resources.GetString("team7Combo.Items3"), + resources.GetString("team7Combo.Items4"), + resources.GetString("team7Combo.Items5"), + resources.GetString("team7Combo.Items6"), + resources.GetString("team7Combo.Items7")}); + this.team7Combo.Name = "team7Combo"; + this.team7Combo.SelectedIndexChanged += new System.EventHandler(this.team7Combo_SelectedIndexChanged); + // + // info7button + // + resources.ApplyResources(this.info7button, "info7button"); + this.info7button.Name = "info7button"; + this.info7button.UseVisualStyleBackColor = true; + this.info7button.Click += new System.EventHandler(this.info7_Click); + // + // panel6 + // + resources.ApplyResources(this.panel6, "panel6"); + this.panel6.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel6.Controls.Add(this.author6label); + this.panel6.Controls.Add(this.label6); + this.panel6.Controls.Add(this.name6label); + this.panel6.Controls.Add(this.delete6Button); + this.panel6.Controls.Add(this.team6Combo); + this.panel6.Controls.Add(this.info6button); + this.panel6.Name = "panel6"; + this.panel6.Click += new System.EventHandler(this.open6_Click); + // + // author6label + // + resources.ApplyResources(this.author6label, "author6label"); + this.author6label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author6label.Name = "author6label"; + this.author6label.Click += new System.EventHandler(this.open6_Click); + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + this.label6.Click += new System.EventHandler(this.open6_Click); + // + // name6label + // + resources.ApplyResources(this.name6label, "name6label"); + this.name6label.Name = "name6label"; + this.name6label.Click += new System.EventHandler(this.open6_Click); + // + // delete6Button + // + resources.ApplyResources(this.delete6Button, "delete6Button"); + this.delete6Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete6Button.Name = "delete6Button"; + this.delete6Button.UseVisualStyleBackColor = true; + this.delete6Button.Click += new System.EventHandler(this.drop6_Click); + // + // team6Combo + // + resources.ApplyResources(this.team6Combo, "team6Combo"); + this.team6Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team6Combo.FormattingEnabled = true; + this.team6Combo.Items.AddRange(new object[] { + resources.GetString("team6Combo.Items"), + resources.GetString("team6Combo.Items1"), + resources.GetString("team6Combo.Items2"), + resources.GetString("team6Combo.Items3"), + resources.GetString("team6Combo.Items4"), + resources.GetString("team6Combo.Items5"), + resources.GetString("team6Combo.Items6"), + resources.GetString("team6Combo.Items7")}); + this.team6Combo.Name = "team6Combo"; + this.team6Combo.SelectedIndexChanged += new System.EventHandler(this.team6Combo_SelectedIndexChanged); + // + // info6button + // + resources.ApplyResources(this.info6button, "info6button"); + this.info6button.Name = "info6button"; + this.info6button.UseVisualStyleBackColor = true; + this.info6button.Click += new System.EventHandler(this.info6_Click); + // + // panel5 + // + resources.ApplyResources(this.panel5, "panel5"); + this.panel5.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel5.Controls.Add(this.author5label); + this.panel5.Controls.Add(this.label5); + this.panel5.Controls.Add(this.name5label); + this.panel5.Controls.Add(this.delete5Button); + this.panel5.Controls.Add(this.team5Combo); + this.panel5.Controls.Add(this.info5button); + this.panel5.Name = "panel5"; + this.panel5.Click += new System.EventHandler(this.open5_Click); + // + // author5label + // + resources.ApplyResources(this.author5label, "author5label"); + this.author5label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author5label.Name = "author5label"; + this.author5label.Click += new System.EventHandler(this.open5_Click); + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + this.label5.Click += new System.EventHandler(this.open5_Click); + // + // name5label + // + resources.ApplyResources(this.name5label, "name5label"); + this.name5label.Name = "name5label"; + this.name5label.Click += new System.EventHandler(this.open5_Click); + // + // delete5Button + // + resources.ApplyResources(this.delete5Button, "delete5Button"); + this.delete5Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete5Button.Name = "delete5Button"; + this.delete5Button.UseVisualStyleBackColor = true; + this.delete5Button.Click += new System.EventHandler(this.drop5_Click); + // + // team5Combo + // + resources.ApplyResources(this.team5Combo, "team5Combo"); + this.team5Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team5Combo.FormattingEnabled = true; + this.team5Combo.Items.AddRange(new object[] { + resources.GetString("team5Combo.Items"), + resources.GetString("team5Combo.Items1"), + resources.GetString("team5Combo.Items2"), + resources.GetString("team5Combo.Items3"), + resources.GetString("team5Combo.Items4"), + resources.GetString("team5Combo.Items5"), + resources.GetString("team5Combo.Items6"), + resources.GetString("team5Combo.Items7")}); + this.team5Combo.Name = "team5Combo"; + this.team5Combo.SelectedIndexChanged += new System.EventHandler(this.team5Combo_SelectedIndexChanged); + // + // info5button + // + resources.ApplyResources(this.info5button, "info5button"); + this.info5button.Name = "info5button"; + this.info5button.UseVisualStyleBackColor = true; + this.info5button.Click += new System.EventHandler(this.info5_Click); + // + // panel4 + // + resources.ApplyResources(this.panel4, "panel4"); + this.panel4.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel4.Controls.Add(this.author4label); + this.panel4.Controls.Add(this.label4); + this.panel4.Controls.Add(this.name4label); + this.panel4.Controls.Add(this.info4button); + this.panel4.Controls.Add(this.team4Combo); + this.panel4.Controls.Add(this.delete4Button); + this.panel4.Name = "panel4"; + this.panel4.Click += new System.EventHandler(this.open4_Click); + // + // author4label + // + resources.ApplyResources(this.author4label, "author4label"); + this.author4label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author4label.Name = "author4label"; + this.author4label.Click += new System.EventHandler(this.open4_Click); + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + this.label4.Click += new System.EventHandler(this.open4_Click); + // + // name4label + // + resources.ApplyResources(this.name4label, "name4label"); + this.name4label.Name = "name4label"; + this.name4label.Click += new System.EventHandler(this.open4_Click); + // + // info4button + // + resources.ApplyResources(this.info4button, "info4button"); + this.info4button.Name = "info4button"; + this.info4button.UseVisualStyleBackColor = true; + this.info4button.Click += new System.EventHandler(this.info4_Click); + // + // team4Combo + // + resources.ApplyResources(this.team4Combo, "team4Combo"); + this.team4Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team4Combo.FormattingEnabled = true; + this.team4Combo.Items.AddRange(new object[] { + resources.GetString("team4Combo.Items"), + resources.GetString("team4Combo.Items1"), + resources.GetString("team4Combo.Items2"), + resources.GetString("team4Combo.Items3"), + resources.GetString("team4Combo.Items4"), + resources.GetString("team4Combo.Items5"), + resources.GetString("team4Combo.Items6"), + resources.GetString("team4Combo.Items7")}); + this.team4Combo.Name = "team4Combo"; + this.team4Combo.SelectedIndexChanged += new System.EventHandler(this.team4Combo_SelectedIndexChanged); + // + // delete4Button + // + resources.ApplyResources(this.delete4Button, "delete4Button"); + this.delete4Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete4Button.Name = "delete4Button"; + this.delete4Button.UseVisualStyleBackColor = true; + this.delete4Button.Click += new System.EventHandler(this.drop4_Click); + // + // panel3 + // + resources.ApplyResources(this.panel3, "panel3"); + this.panel3.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel3.Controls.Add(this.author3label); + this.panel3.Controls.Add(this.label3); + this.panel3.Controls.Add(this.name3label); + this.panel3.Controls.Add(this.info3button); + this.panel3.Controls.Add(this.team3Combo); + this.panel3.Controls.Add(this.delete3Button); + this.panel3.Name = "panel3"; + this.panel3.Click += new System.EventHandler(this.open3_Click); + // + // author3label + // + resources.ApplyResources(this.author3label, "author3label"); + this.author3label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author3label.Name = "author3label"; + this.author3label.Click += new System.EventHandler(this.open3_Click); + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + this.label3.Click += new System.EventHandler(this.open3_Click); + // + // name3label + // + resources.ApplyResources(this.name3label, "name3label"); + this.name3label.Name = "name3label"; + this.name3label.Click += new System.EventHandler(this.open3_Click); + // + // info3button + // + resources.ApplyResources(this.info3button, "info3button"); + this.info3button.Name = "info3button"; + this.info3button.UseVisualStyleBackColor = true; + this.info3button.Click += new System.EventHandler(this.info3_Click); + // + // team3Combo + // + resources.ApplyResources(this.team3Combo, "team3Combo"); + this.team3Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team3Combo.FormattingEnabled = true; + this.team3Combo.Items.AddRange(new object[] { + resources.GetString("team3Combo.Items"), + resources.GetString("team3Combo.Items1"), + resources.GetString("team3Combo.Items2"), + resources.GetString("team3Combo.Items3"), + resources.GetString("team3Combo.Items4"), + resources.GetString("team3Combo.Items5"), + resources.GetString("team3Combo.Items6"), + resources.GetString("team3Combo.Items7")}); + this.team3Combo.Name = "team3Combo"; + this.team3Combo.SelectedIndexChanged += new System.EventHandler(this.team3Combo_SelectedIndexChanged); + // + // delete3Button + // + resources.ApplyResources(this.delete3Button, "delete3Button"); + this.delete3Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete3Button.Name = "delete3Button"; + this.delete3Button.UseVisualStyleBackColor = true; + this.delete3Button.Click += new System.EventHandler(this.drop3_Click); + // + // panel2 + // + resources.ApplyResources(this.panel2, "panel2"); + this.panel2.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel2.Controls.Add(this.author2label); + this.panel2.Controls.Add(this.name2label); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.info2button); + this.panel2.Controls.Add(this.team2Combo); + this.panel2.Controls.Add(this.delete2Button); + this.panel2.Name = "panel2"; + this.panel2.Click += new System.EventHandler(this.open2_Click); + // + // author2label + // + resources.ApplyResources(this.author2label, "author2label"); + this.author2label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author2label.Name = "author2label"; + this.author2label.Click += new System.EventHandler(this.open2_Click); + // + // name2label + // + resources.ApplyResources(this.name2label, "name2label"); + this.name2label.Name = "name2label"; + this.name2label.Click += new System.EventHandler(this.open2_Click); + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + this.label2.Click += new System.EventHandler(this.open2_Click); + // + // info2button + // + resources.ApplyResources(this.info2button, "info2button"); + this.info2button.Name = "info2button"; + this.info2button.UseVisualStyleBackColor = true; + this.info2button.Click += new System.EventHandler(this.info2_Click); + // + // team2Combo + // + resources.ApplyResources(this.team2Combo, "team2Combo"); + this.team2Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team2Combo.FormattingEnabled = true; + this.team2Combo.Items.AddRange(new object[] { + resources.GetString("team2Combo.Items"), + resources.GetString("team2Combo.Items1"), + resources.GetString("team2Combo.Items2"), + resources.GetString("team2Combo.Items3"), + resources.GetString("team2Combo.Items4"), + resources.GetString("team2Combo.Items5"), + resources.GetString("team2Combo.Items6"), + resources.GetString("team2Combo.Items7")}); + this.team2Combo.Name = "team2Combo"; + this.team2Combo.SelectedIndexChanged += new System.EventHandler(this.team2Combo_SelectedIndexChanged); + // + // delete2Button + // + resources.ApplyResources(this.delete2Button, "delete2Button"); + this.delete2Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete2Button.Name = "delete2Button"; + this.delete2Button.UseVisualStyleBackColor = true; + this.delete2Button.Click += new System.EventHandler(this.drop2_Click); + // + // panel1 + // + resources.ApplyResources(this.panel1, "panel1"); + this.panel1.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel1.Controls.Add(this.author1label); + this.panel1.Controls.Add(this.name1label); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.info1button); + this.panel1.Controls.Add(this.team1Combo); + this.panel1.Controls.Add(this.delete1Button); + this.panel1.Name = "panel1"; + this.panel1.Click += new System.EventHandler(this.open1_Click); + // + // author1label + // + resources.ApplyResources(this.author1label, "author1label"); + this.author1label.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.author1label.Name = "author1label"; + this.author1label.Click += new System.EventHandler(this.open1_Click); + // + // name1label + // + resources.ApplyResources(this.name1label, "name1label"); + this.name1label.Name = "name1label"; + this.name1label.Click += new System.EventHandler(this.open1_Click); + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + this.label1.Click += new System.EventHandler(this.open1_Click); + // + // info1button + // + resources.ApplyResources(this.info1button, "info1button"); + this.info1button.Name = "info1button"; + this.info1button.UseVisualStyleBackColor = true; + this.info1button.Click += new System.EventHandler(this.info1_Click); + // + // team1Combo + // + resources.ApplyResources(this.team1Combo, "team1Combo"); + this.team1Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.team1Combo.FormattingEnabled = true; + this.team1Combo.Items.AddRange(new object[] { + resources.GetString("team1Combo.Items"), + resources.GetString("team1Combo.Items1"), + resources.GetString("team1Combo.Items2"), + resources.GetString("team1Combo.Items3"), + resources.GetString("team1Combo.Items4"), + resources.GetString("team1Combo.Items5"), + resources.GetString("team1Combo.Items6"), + resources.GetString("team1Combo.Items7")}); + this.team1Combo.Name = "team1Combo"; + this.team1Combo.SelectedIndexChanged += new System.EventHandler(this.team1Combo_SelectedIndexChanged); + // + // delete1Button + // + resources.ApplyResources(this.delete1Button, "delete1Button"); + this.delete1Button.Image = global::AntMe.Plugin.Simulation.Properties.Resources.delete_16x16; + this.delete1Button.Name = "delete1Button"; + this.delete1Button.UseVisualStyleBackColor = true; + this.delete1Button.Click += new System.EventHandler(this.drop1_Click); + // + // titelLabel + // + resources.ApplyResources(this.titelLabel, "titelLabel"); + this.titelLabel.BackColor = System.Drawing.SystemColors.AppWorkspace; + this.titelLabel.ForeColor = System.Drawing.SystemColors.HighlightText; + this.titelLabel.Name = "titelLabel"; + // + // toolStrip + // + resources.ApplyResources(this.toolStrip, "toolStrip"); + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.settingsButton, + this.toolStripSeparator3, + this.resetButton, + this.toolStripSeparator4, + this.settingsLabelLabel, + this.settingsLabel}); + this.toolStrip.Name = "toolStrip"; + // + // settingsButton + // + resources.ApplyResources(this.settingsButton, "settingsButton"); + this.settingsButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.settingsButton.Image = global::AntMe.Plugin.Simulation.Properties.Resources.settings_16x16; + this.settingsButton.Name = "settingsButton"; + this.settingsButton.Click += new System.EventHandler(this.settingsButton_Click); + // + // toolStripSeparator3 + // + resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + this.toolStripSeparator3.Name = "toolStripSeparator3"; + // + // resetButton + // + resources.ApplyResources(this.resetButton, "resetButton"); + this.resetButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.resetButton.Image = global::AntMe.Plugin.Simulation.Properties.Resources.resetteams; + this.resetButton.Name = "resetButton"; + this.resetButton.Click += new System.EventHandler(this.resetButton_Click); + // + // toolStripSeparator4 + // + resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); + this.toolStripSeparator4.Name = "toolStripSeparator4"; + // + // settingsLabelLabel + // + resources.ApplyResources(this.settingsLabelLabel, "settingsLabelLabel"); + this.settingsLabelLabel.Name = "settingsLabelLabel"; + // + // settingsLabel + // + resources.ApplyResources(this.settingsLabel, "settingsLabel"); + this.settingsLabel.Name = "settingsLabel"; + // + // pictureBox1 + // + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // FreeGameControl + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.toolStrip); + this.Controls.Add(this.titelLabel); + this.Controls.Add(this.mainPanel); + this.Controls.Add(this.pictureBox1); + this.Name = "FreeGameControl"; + this.Resize += new System.EventHandler(this.FreeGameControl_Resize); + this.mainPanel.ResumeLayout(false); + this.panel8.ResumeLayout(false); + this.panel8.PerformLayout(); + this.panel7.ResumeLayout(false); + this.panel7.PerformLayout(); + this.panel6.ResumeLayout(false); + this.panel6.PerformLayout(); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel mainPanel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button delete4Button; + private System.Windows.Forms.Button delete3Button; + private System.Windows.Forms.Button delete2Button; + private System.Windows.Forms.Button delete8Button; + private System.Windows.Forms.Button delete7Button; + private System.Windows.Forms.Button delete6Button; + private System.Windows.Forms.Button delete1Button; + private System.Windows.Forms.Button delete5Button; + private System.Windows.Forms.Button info4button; + private System.Windows.Forms.Button info3button; + private System.Windows.Forms.Button info2button; + private System.Windows.Forms.Button info8button; + private System.Windows.Forms.Button info7button; + private System.Windows.Forms.Button info5button; + private System.Windows.Forms.Button info6button; + private System.Windows.Forms.Button info1button; + private System.Windows.Forms.ComboBox team4Combo; + private System.Windows.Forms.ComboBox team3Combo; + private System.Windows.Forms.ComboBox team2Combo; + private System.Windows.Forms.ComboBox team8Combo; + private System.Windows.Forms.ComboBox team7Combo; + private System.Windows.Forms.ComboBox team6Combo; + private System.Windows.Forms.ComboBox team1Combo; + private System.Windows.Forms.ComboBox team5Combo; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel8; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Panel panel7; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label author8label; + private System.Windows.Forms.Label name8label; + private System.Windows.Forms.Label author7label; + private System.Windows.Forms.Label name7label; + private System.Windows.Forms.Label author6label; + private System.Windows.Forms.Label name6label; + private System.Windows.Forms.Label author5label; + private System.Windows.Forms.Label name5label; + private System.Windows.Forms.Label author4label; + private System.Windows.Forms.Label name4label; + private System.Windows.Forms.Label author3label; + private System.Windows.Forms.Label name3label; + private System.Windows.Forms.Label author2label; + private System.Windows.Forms.Label name2label; + private System.Windows.Forms.Label author1label; + private System.Windows.Forms.Label name1label; + private System.Windows.Forms.Label titelLabel; + private System.Windows.Forms.ToolStrip toolStrip; + private System.Windows.Forms.ToolStripButton settingsButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripButton resetButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripLabel settingsLabelLabel; + private System.Windows.Forms.ToolStripLabel settingsLabel; + private System.Windows.Forms.PictureBox pictureBox1; + } +} diff --git a/SimulationPlugin/FreeGameControl.cs b/SimulationPlugin/FreeGameControl.cs new file mode 100644 index 0000000..c1cc19d --- /dev/null +++ b/SimulationPlugin/FreeGameControl.cs @@ -0,0 +1,420 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Drawing.Drawing2D; +using AntMe.Simulation; +using AntMe.PlayerManagement; + +namespace AntMe.Plugin.Simulation +{ + public partial class FreeGameControl : UserControl + { + private FreeGameSetup setup; + + public FreeGameControl() + { + InitializeComponent(); + SetSetup(new FreeGameSetup()); + } + + public void SetSetup(FreeGameSetup setup) + { + this.setup = setup; + UpdateControls(); + } + + private void FreeGameControl_Resize(object sender, EventArgs e) + { + mainPanel.Left = (ClientRectangle.Width - mainPanel.Width) / 4; + mainPanel.Top = (ClientRectangle.Height - mainPanel.Height) / 4; + } + + #region Opens + + private void open1_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot1.PlayerInfo = player; + setup.Slot1.Filename = player.File; + setup.Slot1.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open2_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot2.PlayerInfo = player; + setup.Slot2.Filename = player.File; + setup.Slot2.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open3_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot3.PlayerInfo = player; + setup.Slot3.Filename = player.File; + setup.Slot3.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open4_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot4.PlayerInfo = player; + setup.Slot4.Filename = player.File; + setup.Slot4.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open5_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot5.PlayerInfo = player; + setup.Slot5.Filename = player.File; + setup.Slot5.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open6_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot6.PlayerInfo = player; + setup.Slot6.Filename = player.File; + setup.Slot6.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open7_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot7.PlayerInfo = player; + setup.Slot7.Filename = player.File; + setup.Slot7.Typename = player.ClassName; + } + UpdateControls(); + } + + private void open8_Click(object sender, EventArgs e) + { + var player = open(); + if (player != null) + { + setup.Slot8.PlayerInfo = player; + setup.Slot8.Filename = player.File; + setup.Slot8.Typename = player.ClassName; + } + UpdateControls(); + } + + private PlayerInfoFilename open() + { + using (PlayerSelector selector = new PlayerSelector()) + { + if (selector.ShowDialog(this) == DialogResult.OK) + { + return selector.SelectedPlayer; + } + } + + return null; + } + + #endregion + + #region Teams + + private void team1Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot1.Team = team1Combo.SelectedIndex + 1; + } + + private void team2Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot2.Team = team2Combo.SelectedIndex + 1; + } + + private void team3Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot3.Team = team3Combo.SelectedIndex + 1; + } + + private void team4Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot4.Team = team4Combo.SelectedIndex + 1; + } + + private void team5Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot5.Team = team5Combo.SelectedIndex + 1; + } + + private void team6Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot6.Team = team6Combo.SelectedIndex + 1; + } + + private void team7Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot7.Team = team7Combo.SelectedIndex + 1; + } + + private void team8Combo_SelectedIndexChanged(object sender, EventArgs e) + { + setup.Slot8.Team = team8Combo.SelectedIndex + 1; + } + + #endregion + + #region Info + + private void info1_Click(object sender, EventArgs e) + { + info(setup.Slot1.PlayerInfo); + } + + private void info2_Click(object sender, EventArgs e) + { + info(setup.Slot2.PlayerInfo); + } + + private void info3_Click(object sender, EventArgs e) + { + info(setup.Slot3.PlayerInfo); + } + + private void info4_Click(object sender, EventArgs e) + { + info(setup.Slot4.PlayerInfo); + } + + private void info5_Click(object sender, EventArgs e) + { + info(setup.Slot5.PlayerInfo); + } + + private void info6_Click(object sender, EventArgs e) + { + info(setup.Slot6.PlayerInfo); + } + + private void info7_Click(object sender, EventArgs e) + { + info(setup.Slot7.PlayerInfo); + } + + private void info8_Click(object sender, EventArgs e) + { + info(setup.Slot8.PlayerInfo); + } + + private void info(PlayerInfoFilename info) + { + if (info == null) return; + using (AntProperties properties = new AntProperties(info)) + { + properties.ShowDialog(this); + } + } + + #endregion + + #region Drop + + private void drop1_Click(object sender, EventArgs e) + { + setup.Slot1.PlayerInfo = null; + setup.Slot1.Filename = string.Empty; + setup.Slot1.Typename = string.Empty; + setup.Slot1.Team = 1; + UpdateControls(); + } + private void drop2_Click(object sender, EventArgs e) + { + setup.Slot2.PlayerInfo = null; + setup.Slot2.Filename = string.Empty; + setup.Slot2.Typename = string.Empty; + setup.Slot2.Team = 2; + UpdateControls(); + } + private void drop3_Click(object sender, EventArgs e) + { + setup.Slot3.PlayerInfo = null; + setup.Slot3.Filename = string.Empty; + setup.Slot3.Typename = string.Empty; + setup.Slot3.Team = 3; + UpdateControls(); + } + private void drop4_Click(object sender, EventArgs e) + { + setup.Slot4.PlayerInfo = null; + setup.Slot4.Filename = string.Empty; + setup.Slot4.Typename = string.Empty; + setup.Slot4.Team = 4; + UpdateControls(); + } + private void drop5_Click(object sender, EventArgs e) + { + setup.Slot5.PlayerInfo = null; + setup.Slot5.Filename = string.Empty; + setup.Slot5.Typename = string.Empty; + setup.Slot5.Team = 5; + UpdateControls(); + } + private void drop6_Click(object sender, EventArgs e) + { + setup.Slot6.PlayerInfo = null; + setup.Slot6.Filename = string.Empty; + setup.Slot6.Typename = string.Empty; + setup.Slot6.Team = 6; + UpdateControls(); + } + private void drop7_Click(object sender, EventArgs e) + { + setup.Slot7.PlayerInfo = null; + setup.Slot7.Filename = string.Empty; + setup.Slot7.Typename = string.Empty; + setup.Slot7.Team = 7; + UpdateControls(); + } + + private void drop8_Click(object sender, EventArgs e) + { + setup.Slot8.PlayerInfo = null; + setup.Slot8.Filename = string.Empty; + setup.Slot8.Typename = string.Empty; + setup.Slot8.Team = 8; + UpdateControls(); + } + + #endregion + + private void UpdateControls() + { + SuspendLayout(); + + team1Combo.SelectedIndex = setup.Slot1.Team - 1; + team2Combo.SelectedIndex = setup.Slot2.Team - 1; + team3Combo.SelectedIndex = setup.Slot3.Team - 1; + team4Combo.SelectedIndex = setup.Slot4.Team - 1; + team5Combo.SelectedIndex = setup.Slot5.Team - 1; + team6Combo.SelectedIndex = setup.Slot6.Team - 1; + team7Combo.SelectedIndex = setup.Slot7.Team - 1; + team8Combo.SelectedIndex = setup.Slot8.Team - 1; + + ResumeLayout(false); + + settingsLabel.Text = setup.SimulatorConfiguration.Settings.SettingsName; + + string unselectedName = string.Empty; + string unselectedAuthor = "Empty Slot"; + name1label.Text = setup.Slot1.PlayerInfo != null ? setup.Slot1.PlayerInfo.ColonyName : unselectedName; + name2label.Text = setup.Slot2.PlayerInfo != null ? setup.Slot2.PlayerInfo.ColonyName : unselectedName; + name3label.Text = setup.Slot3.PlayerInfo != null ? setup.Slot3.PlayerInfo.ColonyName : unselectedName; + name4label.Text = setup.Slot4.PlayerInfo != null ? setup.Slot4.PlayerInfo.ColonyName : unselectedName; + name5label.Text = setup.Slot5.PlayerInfo != null ? setup.Slot5.PlayerInfo.ColonyName : unselectedName; + name6label.Text = setup.Slot6.PlayerInfo != null ? setup.Slot6.PlayerInfo.ColonyName : unselectedName; + name7label.Text = setup.Slot7.PlayerInfo != null ? setup.Slot7.PlayerInfo.ColonyName : unselectedName; + name8label.Text = setup.Slot8.PlayerInfo != null ? setup.Slot8.PlayerInfo.ColonyName : unselectedName; + + author1label.Text = setup.Slot1.PlayerInfo != null ? setup.Slot1.PlayerInfo.FirstName + " " + setup.Slot1.PlayerInfo.LastName : unselectedAuthor; + author2label.Text = setup.Slot2.PlayerInfo != null ? setup.Slot2.PlayerInfo.FirstName + " " + setup.Slot2.PlayerInfo.LastName : unselectedAuthor; + author3label.Text = setup.Slot3.PlayerInfo != null ? setup.Slot3.PlayerInfo.FirstName + " " + setup.Slot3.PlayerInfo.LastName : unselectedAuthor; + author4label.Text = setup.Slot4.PlayerInfo != null ? setup.Slot4.PlayerInfo.FirstName + " " + setup.Slot4.PlayerInfo.LastName : unselectedAuthor; + author5label.Text = setup.Slot5.PlayerInfo != null ? setup.Slot5.PlayerInfo.FirstName + " " + setup.Slot5.PlayerInfo.LastName : unselectedAuthor; + author6label.Text = setup.Slot6.PlayerInfo != null ? setup.Slot6.PlayerInfo.FirstName + " " + setup.Slot6.PlayerInfo.LastName : unselectedAuthor; + author7label.Text = setup.Slot7.PlayerInfo != null ? setup.Slot7.PlayerInfo.FirstName + " " + setup.Slot7.PlayerInfo.LastName : unselectedAuthor; + author8label.Text = setup.Slot8.PlayerInfo != null ? setup.Slot8.PlayerInfo.FirstName + " " + setup.Slot8.PlayerInfo.LastName : unselectedAuthor; + + delete1Button.Enabled = setup.Slot1.PlayerInfo != null; + delete2Button.Enabled = setup.Slot2.PlayerInfo != null; + delete3Button.Enabled = setup.Slot3.PlayerInfo != null; + delete4Button.Enabled = setup.Slot4.PlayerInfo != null; + delete5Button.Enabled = setup.Slot5.PlayerInfo != null; + delete6Button.Enabled = setup.Slot6.PlayerInfo != null; + delete7Button.Enabled = setup.Slot7.PlayerInfo != null; + delete8Button.Enabled = setup.Slot8.PlayerInfo != null; + + team1Combo.Enabled = setup.Slot1.PlayerInfo != null; + team2Combo.Enabled = setup.Slot2.PlayerInfo != null; + team3Combo.Enabled = setup.Slot3.PlayerInfo != null; + team4Combo.Enabled = setup.Slot4.PlayerInfo != null; + team5Combo.Enabled = setup.Slot5.PlayerInfo != null; + team6Combo.Enabled = setup.Slot6.PlayerInfo != null; + team7Combo.Enabled = setup.Slot7.PlayerInfo != null; + team8Combo.Enabled = setup.Slot8.PlayerInfo != null; + + info1button.Enabled = setup.Slot1.PlayerInfo != null; + info2button.Enabled = setup.Slot2.PlayerInfo != null; + info3button.Enabled = setup.Slot3.PlayerInfo != null; + info4button.Enabled = setup.Slot4.PlayerInfo != null; + info5button.Enabled = setup.Slot5.PlayerInfo != null; + info6button.Enabled = setup.Slot6.PlayerInfo != null; + info7button.Enabled = setup.Slot7.PlayerInfo != null; + info8button.Enabled = setup.Slot8.PlayerInfo != null; + } + + private void resetButton_Click(object sender, EventArgs e) + { + setup.Reset(); + UpdateControls(); + } + + private void settingsButton_Click(object sender, EventArgs e) + { + using (SimulationProperties form = new SimulationProperties(setup)) + { + form.ShowDialog(this); + UpdateControls(); + } + } + + internal void DirectStart(string filename) + { + PlayerStore.Instance.RegisterFile(filename); + + var players = PlayerStore.Instance.KnownPlayer.Where(p => p.File.ToLower().Equals(filename.ToLower())); + if (players.Count() > 1) + { + throw new Exception("Mehr als einen Spieler gefunden"); + } + else if (players.Count() == 0) + { + throw new Exception("Leider kein Spieler gefunden"); + } + else + { + var player = players.First(); + setup.Slot1.PlayerInfo = player; + setup.Slot1.Filename = player.File; + setup.Slot1.Typename = player.ClassName; + UpdateControls(); + } + } + } +} diff --git a/SimulationPlugin/FreeGameControl.de.resx b/SimulationPlugin/FreeGameControl.de.resx new file mode 100644 index 0000000..e469f61 --- /dev/null +++ b/SimulationPlugin/FreeGameControl.de.resx @@ -0,0 +1,905 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + Freies Spiel + + + Einstellungen + + + Zurücksetzen + + + 127, 22 + + + Aktuelle Einstellungen: + + + + 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 + + + \ No newline at end of file diff --git a/SimulationPlugin/FreeGameControl.resx b/SimulationPlugin/FreeGameControl.resx new file mode 100644 index 0000000..c3294e6 --- /dev/null +++ b/SimulationPlugin/FreeGameControl.resx @@ -0,0 +1,2773 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel2 + + + 5 + + + + 4 + + + Team 5 + + + 1 + + + 2 + + + info3button + + + 1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel8 + + + 7 + + + 1 + + + + 275, 3 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + Magenta + + + 275, 38 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Team 8 + + + False + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 27 + + + Team 5 + + + delete8Button + + + False + + + 33, 30 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 275, 38 + + + 2 + + + info5button + + + 42, 34 + + + 4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Team 3 + + + Team 2 + + + resetButton + + + 44, 34 + + + Team 6 + + + 3 + + + 33, 30 + + + team6Combo + + + 42, 14 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel5 + + + + Top, Right + + + Team 2 + + + True + + + [author] + + + 12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 25 + + + [author] + + + info2button + + + 19 + + + 3, 10 + + + 72, 21 + + + 275, 3 + + + 0 + + + 33, 30 + + + [author] + + + panel5 + + + 0 + + + name3label + + + name6label + + + True + + + panel3 + + + 33, 30 + + + panel4 + + + 0 + + + 275, 38 + + + 3, 10 + + + Bottom, Right + + + 968, 27 + + + 350, 62 + + + panel5 + + + Team 1 + + + 4 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 43, 13 + + + name2label + + + 2 + + + 33, 30 + + + [name] + + + System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + author5label + + + 44, 14 + + + $this + + + False + + + panel8 + + + Team 1 + + + 2 + + + Top, Right + + + 314, 3 + + + panel4 + + + $this + + + 33, 30 + + + panel6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 23 + + + 4 + + + NoControl + + + [name] + + + delete2Button + + + 44, 14 + + + True + + + author6label + + + [name] + + + delete6Button + + + panel4 + + + [name] + + + 2 + + + panel6 + + + Microsoft Sans Serif, 24pt + + + 1 + + + 35, 37 + + + 275, 3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + team2Combo + + + Team 6 + + + author8label + + + Team 1 + + + 2 + + + panel2 + + + 6, 13 + + + [name] + + + panel7 + + + Team 8 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top, Right + + + Top, Right + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 42, 34 + + + 0 + + + panel5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator4 + + + panel7 + + + [name] + + + 4 + + + 44, 34 + + + False + + + panel5 + + + Segoe UI, 9pt, style=Bold + + + 2 + + + 3, 10 + + + Team 6 + + + Team 5 + + + Team 8 + + + Team 7 + + + Team 2 + + + Team 4 + + + Team 3 + + + 3 + + + 35, 37 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Team 2 + + + 1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Microsoft Sans Serif, 24pt + + + Team 4 + + + [name] + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + panel4 + + + 1 + + + True + + + False + + + Team 5 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + name7label + + + None + + + 275, 3 + + + panel3 + + + Team 7 + + + 0 + + + Team 7 + + + delete7Button + + + Top, Right + + + delete1Button + + + 72, 21 + + + 2 + + + 5 + + + 43, 13 + + + 3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + panel8 + + + 275, 38 + + + panel1 + + + 6, 25 + + + team5Combo + + + 4 + + + True + + + info7button + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + 5 + + + 3 + + + info4button + + + panel1 + + + panel1 + + + 6, 25 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Microsoft Sans Serif, 24pt + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + name8label + + + Team 3 + + + mainPanel + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + panel1 + + + Team 7 + + + Team 8 + + + 33, 37 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + label8 + + + 275, 38 + + + Team 1 + + + 9 + + + 44, 14 + + + panel3 + + + 14 + + + 30 + + + [---] + + + author7label + + + Top, Right + + + 3 + + + True + + + 2 + + + panel6 + + + 4, 4, 4, 4 + + + Team 6 + + + panel6 + + + Team 8 + + + 43, 13 + + + 314, 3 + + + Team 3 + + + name1label + + + Top, Right + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + panel3 + + + 3, 207 + + + True + + + label7 + + + 17 + + + True + + + 33, 30 + + + 3, 139 + + + Top, Right + + + 314, 2 + + + Magenta + + + True + + + 5 + + + 1 + + + 1 + + + 43, 13 + + + 35, 37 + + + False + + + 383, 71 + + + panel6 + + + 275, 38 + + + 72, 21 + + + panel2 + + + 350, 62 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + True + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top, Right + + + 56, 16 + + + 5 + + + delete4Button + + + 24 + + + 56, 16 + + + 43, 13 + + + True + + + 33, 30 + + + Bottom, Right + + + System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + [author] + + + 20 + + + 383, 3 + + + 3, 10 + + + 72, 21 + + + 56, 16 + + + team4Combo + + + Microsoft Sans Serif, 24pt + + + label2 + + + 33, 30 + + + 0, 0 + + + 0 + + + 0 + + + 35, 37 + + + 7 + + + [author] + + + 2 + + + 1 + + + [author] + + + 56, 16 + + + 15 + + + 56, 16 + + + Team 6 + + + 44, 14 + + + 56, 16 + + + Team 7 + + + 3, 10 + + + Bottom, Right + + + 2 + + + 81, 55 + + + panel7 + + + Microsoft Sans Serif, 11.25pt, style=Bold + + + 30, 22 + + + 5 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + True + + + 43, 13 + + + Top, Right + + + delete3Button + + + mainPanel + + + Team 5 + + + 16 + + + Current Settings: + + + 0 + + + Top, Right + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + info1button + + + 2 + + + 33, 30 + + + 33, 30 + + + True + + + Top + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + panel8 + + + panel7 + + + mainPanel + + + Reset + + + 3, 71 + + + $this + + + 8 + + + Top, Right + + + label1 + + + mainPanel + + + 0 + + + pictureBox1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 35, 37 + + + 6 + + + 1 + + + team7Combo + + + 2 + + + Microsoft Sans Serif, 24pt + + + Team 6 + + + 350, 62 + + + 18 + + + author1label + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + 13 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + 314, 3 + + + Team 4 + + + 3, 10 + + + 56, 16 + + + Team 2 + + + Team 3 + + + Team 4 + + + Team 5 + + + Team 6 + + + Team 7 + + + Team 8 + + + panel3 + + + 0 + + + Team 7 + + + label4 + + + info6button + + + Team 6 + + + Team 3 + + + Team 4 + + + Team 2 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + Team 8 + + + mainPanel + + + settingsButton + + + Team 5 + + + Team 4 + + + Team 3 + + + author2label + + + 29 + + + 31 + + + panel2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33, 30 + + + False + + + 0 + + + False + + + FreeGameControl + + + 0, 27 + + + 314, 3 + + + 4 + + + mainPanel + + + True + + + 11 + + + panel8 + + + 350, 62 + + + 22 + + + Team 1 + + + 6 + + + 43, 13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 44, 34 + + + 275, 38 + + + author4label + + + Top, Right + + + 0 + + + Top, Right + + + 44, 34 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 314, 3 + + + Team 8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 35, 37 + + + 44, 14 + + + 275, 3 + + + 0 + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + 33, 30 + + + panel1 + + + team3Combo + + + 1 + + + 0 + + + 21 + + + panel7 + + + True + + + name5label + + + 4 + + + $this + + + 350, 62 + + + 26 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 275, 3 + + + 2 + + + mainPanel + + + False + + + 3 + + + 33, 30 + + + 6 + + + [name] + + + Team 4 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 35, 37 + + + 95, 22 + + + panel2 + + + 1 + + + [author] + + + panel2 + + + False + + + team8Combo + + + Microsoft Sans Serif, 24pt + + + 5 + + + Bottom, Right + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom, Right + + + 350, 62 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33, 30 + + + name4label + + + panel5 + + + 5 + + + Team 2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 383, 207 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 5 + + + 1 + + + 3 + + + False + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mainPanel + + + False + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Team 1 + + + Team 5 + + + True + + + 2 + + + True + + + 1 + + + Bottom, Right + + + Top, Right + + + 0 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 314, 3 + + + False + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Team 1 + + + 968, 598 + + + False + + + 72, 21 + + + author3label + + + panel4 + + + True + + + 42, 14 + + + panel8 + + + 0 + + + 23, 22 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + panel7 + + + 0 + + + Team 2 + + + label3 + + + Team 4 + + + 23, 22 + + + Team 1 + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + Top, Right + + + team1Combo + + + Team 3 + + + True + + + 44, 14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Team 7 + + + 350, 62 + + + 72, 21 + + + settingsLabelLabel + + + 4 + + + Microsoft Sans Serif, 24pt + + + 72, 21 + + + 216, 310 + + + 0 + + + Bottom, Right + + + 752, 288 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + delete5Button + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + panel4 + + + True + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + 275, 3 + + + mainPanel + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + label5 + + + 314, 3 + + + settingsLabel + + + titelLabel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + Free Game + + + panel5 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 10 + + + 44, 34 + + + 8 + + + 2 + + + Settings + + + panel2 + + + 72, 21 + + + 3, 10 + + + 1 + + + 33, 30 + + + Microsoft Sans Serif, 9.75pt, style=Bold + + + 3, 3 + + + + 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 + + + + True + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + Bottom, Right + + + 350, 62 + + + 2 + + + 56, 16 + + + panel7 + + + 7 + + + 3 + + + Microsoft Sans Serif, 24pt + + + 3 + + + 275, 2 + + + 28 + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 968, 25 + + + 2 + + + 1 + + + 3 + + + panel6 + + + 4 + + + panel4 + + + 738, 274 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 383, 139 + + + 3, 10 + + + info8button + + + 275, 38 + + + [author] + + + 44, 34 + + + 1 + + + panel3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAANhJREFUOE9jGNxgDwOD1j4Ghk1A/B8b3svAsByqFK74zW4Ghvdo+De6RiS8C6qd + gQFoWtAWdvb12wjgrewcG/cwMj4FGQDUsx+qnXQAtPo9zACnjIys/8RikHqQpt1MTOfBBmRkZO7HphAf + BhmwC9OAjO1AcR2QJFQRmI0EdAgYkPU2PT39PC4MtOASXgOAil6BbAFJ4gAEXUA0hhkATDs7UAxITc16 + iawQIZ7+A+jC9zA+yACg7UGgxIfkhaz1IAkg/zRMIQw7ODjVpaTkysD4IHWDBTAwAACqYAq8eZkMzwAA + AABJRU5ErkJggg== + + + + panel6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator3 + + + label6 + + + Bottom, Right + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 43, 13 + + + False + + + toolStrip + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + de + + + 17, 17 + + + True + + \ No newline at end of file diff --git a/SimulationPlugin/FreeGamePlugin.cs b/SimulationPlugin/FreeGamePlugin.cs new file mode 100644 index 0000000..5a64d63 --- /dev/null +++ b/SimulationPlugin/FreeGamePlugin.cs @@ -0,0 +1,204 @@ +using AntMe.PlayerManagement; +using AntMe.SharedComponents.Plugin; +using AntMe.SharedComponents.States; +using AntMe.Simulation; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Windows.Forms; +using System.Xml.Serialization; + +namespace AntMe.Plugin.Simulation +{ + public sealed class FreeGamePlugin : IProducerPlugin + { + private readonly Version version = Assembly.GetExecutingAssembly().GetName().Version; + + private FreeGameControl control; + private FreeGameSetup setup; + private Simulator sim; + private bool paused; + + public FreeGamePlugin() + { + setup = new FreeGameSetup(); + control = new FreeGameControl(); + control.SetSetup(setup); + } + + public Guid Guid { get { return Guid.Parse("{77257ACF-6E73-48DF-B3A4-B469E34BFC35}"); } } + public string Name { get { return Resource.FreeGamePluginName; } } + public Version Version { get { return version; } } + public string Description { get { return Resource.FreeGamePluginDescription; } } + public Control Control { get { return control; } } + + public PluginState State + { + get + { + if (sim == null) + { + int count = 0; + if (setup.Slot1.PlayerInfo != null) count++; + if (setup.Slot2.PlayerInfo != null) count++; + if (setup.Slot3.PlayerInfo != null) count++; + if (setup.Slot4.PlayerInfo != null) count++; + if (setup.Slot5.PlayerInfo != null) count++; + if (setup.Slot6.PlayerInfo != null) count++; + if (setup.Slot7.PlayerInfo != null) count++; + if (setup.Slot8.PlayerInfo != null) count++; + control.Enabled = true; + return count > 0 ? PluginState.Ready : PluginState.NotReady; + } + else + { + control.Enabled = false; + return paused ? PluginState.Paused : PluginState.Running; + } + } + } + + public byte[] Settings + { + get + { + using (MemoryStream stream = new MemoryStream()) + { + XmlSerializer serializer = new XmlSerializer(typeof(FreeGameSetup)); + serializer.Serialize(stream, setup); + return stream.ToArray(); + } + } + set + { + if (value != null && value.Length > 0) + { + using (MemoryStream puffer = new MemoryStream(value)) + { + XmlSerializer serializer = new XmlSerializer(typeof(FreeGameSetup)); + var temp = serializer.Deserialize(puffer) as FreeGameSetup; + if (temp != null) + setup = temp; + } + + DiscoverPlayerInfo(setup.Slot1); + DiscoverPlayerInfo(setup.Slot2); + DiscoverPlayerInfo(setup.Slot3); + DiscoverPlayerInfo(setup.Slot4); + DiscoverPlayerInfo(setup.Slot5); + DiscoverPlayerInfo(setup.Slot6); + DiscoverPlayerInfo(setup.Slot7); + DiscoverPlayerInfo(setup.Slot8); + + // In das Form bringen + control.SetSetup(setup); + } + } + } + + private void DiscoverPlayerInfo(FreeGameSlot slot) + { + if (slot != null && + !string.IsNullOrEmpty(slot.Filename) && + !string.IsNullOrEmpty(slot.Typename)) + { + try + { + PlayerStore.Instance.RegisterFile(slot.Filename); + slot.PlayerInfo = PlayerStore.Instance.KnownPlayer.FirstOrDefault(p => + p.File.ToLower().Equals(slot.Filename.ToLower()) && p.ClassName.Equals(slot.Typename)); + } + catch (Exception) + { + // Kick slot, falls es probleme gab + slot.Filename = string.Empty; + slot.PlayerInfo = null; + slot.Typename = string.Empty; + } + } + } + + public void Start() + { + if (State == PluginState.Ready) + { + // Create new simulator + SimulatorConfiguration config = setup.SimulatorConfiguration.Clone() as SimulatorConfiguration; + FreeGameSlot[] slots = new[] { + setup.Slot1, setup.Slot2, + setup.Slot3, setup.Slot4, + setup.Slot5, setup.Slot6, + setup.Slot7, setup.Slot8 }; + + for (int i = 0; i < 8; i++) + { + var hits = slots.Where(s => s.Team == i + 1 && s.PlayerInfo != null); + if (hits.Count() > 0) + { + var team = new TeamInfo() { Guid = Guid.NewGuid(), Name = "Team " + (i + 1) }; + team.Player.AddRange(hits.Select(p => p.PlayerInfo)); + config.Teams.Add(team); + } + } + + sim = new Simulator(config); + control.Enabled = false; + } + + if (State == PluginState.Paused) + { + paused = false; + } + } + + public void Stop() + { + if (State == PluginState.Running || State == PluginState.Paused) + { + sim.Unload(); + sim = null; + control.Enabled = true; + } + } + + public void Pause() + { + paused = true; + } + + public void StartupParameter(string[] parameter) + { + foreach (string param in parameter) + { + if (param.ToUpper().StartsWith("/FILE")) + { + control.DirectStart(param.Substring(6).Trim()); + } + } + } + + public void SetVisibility(bool visible) { } + + public void UpdateUI(SimulationState state) { } + + public void CreateState(ref SimulationState state) + { + if (sim == null) + { + throw new Exception(Resource.SimulatorPluginNotStarted); + } + + sim.Step(ref state); + + if (sim.State == SimulatorState.Finished) + { + sim.Unload(); + sim = null; + paused = false; + } + } + } +} diff --git a/SimulationPlugin/FreeGameSetup.cs b/SimulationPlugin/FreeGameSetup.cs new file mode 100644 index 0000000..19bc525 --- /dev/null +++ b/SimulationPlugin/FreeGameSetup.cs @@ -0,0 +1,96 @@ +using AntMe.Simulation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace AntMe.Plugin.Simulation +{ + [Serializable] + public sealed class FreeGameSetup + { + public SimulatorConfiguration SimulatorConfiguration { get; set; } + public FreeGameSlot Slot1 { get; set; } + public FreeGameSlot Slot2 { get; set; } + public FreeGameSlot Slot3 { get; set; } + public FreeGameSlot Slot4 { get; set; } + public FreeGameSlot Slot5 { get; set; } + public FreeGameSlot Slot6 { get; set; } + public FreeGameSlot Slot7 { get; set; } + public FreeGameSlot Slot8 { get; set; } + + public List KnownSettingFiles { get; set; } + + public FreeGameSetup() + { + Slot1 = new FreeGameSlot(); + Slot2 = new FreeGameSlot(); + Slot3 = new FreeGameSlot(); + Slot4 = new FreeGameSlot(); + Slot5 = new FreeGameSlot(); + Slot6 = new FreeGameSlot(); + Slot7 = new FreeGameSlot(); + Slot8 = new FreeGameSlot(); + SimulatorConfiguration = new SimulatorConfiguration(); + KnownSettingFiles = new List(); + Reset(); + } + + public void Reset() + { + Slot1.Filename = string.Empty; + Slot1.Typename = string.Empty; + Slot1.PlayerInfo = null; + Slot1.Team = 1; + + Slot2.Filename = string.Empty; + Slot2.Typename = string.Empty; + Slot2.PlayerInfo = null; + Slot2.Team = 2; + + Slot3.Filename = string.Empty; + Slot3.Typename = string.Empty; + Slot3.PlayerInfo = null; + Slot3.Team = 3; + + Slot4.Filename = string.Empty; + Slot4.Typename = string.Empty; + Slot4.PlayerInfo = null; + Slot4.Team = 4; + + Slot5.Filename = string.Empty; + Slot5.Typename = string.Empty; + Slot5.PlayerInfo = null; + Slot5.Team = 5; + + Slot6.Filename = string.Empty; + Slot6.Typename = string.Empty; + Slot6.PlayerInfo = null; + Slot6.Team = 6; + + Slot7.Filename = string.Empty; + Slot7.Typename = string.Empty; + Slot7.PlayerInfo = null; + Slot7.Team = 7; + + Slot8.Filename = string.Empty; + Slot8.Typename = string.Empty; + Slot8.PlayerInfo = null; + Slot8.Team = 8; + } + } + + [Serializable] + public sealed class FreeGameSlot + { + public string Filename { get; set; } + + public string Typename { get; set; } + + [XmlIgnore] + public PlayerInfoFilename PlayerInfo { get; set; } + + public int Team { get; set; } + } +} diff --git a/SimulationPlugin/PlayerItem.cs b/SimulationPlugin/PlayerItem.cs index 98bf323..7d3d1b6 100644 --- a/SimulationPlugin/PlayerItem.cs +++ b/SimulationPlugin/PlayerItem.cs @@ -23,7 +23,7 @@ public PlayerItem(PlayerInfoFilename info) { ColonyName = info.ColonyName; FileName = info.File; ClassName = info.ClassName; - AuthorName = string.Format(Resource.SimulatorPluginAntPropertiesAuthorFormat, info.FirstName, info.LastName); + AuthorName = string.Format(Resource.AntPropertiesAuthorFormat, info.FirstName, info.LastName); } /// diff --git a/SimulationPlugin/Properties/AssemblyInfo.cs b/SimulationPlugin/Properties/AssemblyInfo.cs index 0dae271..3ab9a51 100644 --- a/SimulationPlugin/Properties/AssemblyInfo.cs +++ b/SimulationPlugin/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("AntMe! GmbH")] [assembly: AssemblyProduct("AntMe!")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("AntMe!")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.1.207")] -[assembly: AssemblyFileVersion("1.7.1.207")] +[assembly: AssemblyVersion("1.7.2.287")] +[assembly: AssemblyFileVersion("1.7.2.287")] diff --git a/SimulationPlugin/Properties/Resources.Designer.cs b/SimulationPlugin/Properties/Resources.Designer.cs index 5457f19..6378a23 100644 --- a/SimulationPlugin/Properties/Resources.Designer.cs +++ b/SimulationPlugin/Properties/Resources.Designer.cs @@ -212,9 +212,19 @@ internal static string SimulatorPluginFolkFileFilter { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap timeout_32x32 { + internal static System.Drawing.Bitmap star1 { get { - object obj = ResourceManager.GetObject("timeout_32x32", resourceCulture); + object obj = ResourceManager.GetObject("star1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap star2 { + get { + object obj = ResourceManager.GetObject("star2", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -222,9 +232,9 @@ internal static System.Drawing.Bitmap timeout_32x32 { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap toddler { + internal static System.Drawing.Bitmap timeout_32x32 { get { - object obj = ResourceManager.GetObject("toddler", resourceCulture); + object obj = ResourceManager.GetObject("timeout_32x32", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/SimulationPlugin/Properties/Resources.resx b/SimulationPlugin/Properties/Resources.resx index 93ebae5..87d3e7b 100644 --- a/SimulationPlugin/Properties/Resources.resx +++ b/SimulationPlugin/Properties/Resources.resx @@ -133,30 +133,27 @@ ..\Resources\colony_nonstatic_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - *.dll - The filter to find folks (TeamSetup.cs) + + ..\Resources\timeout_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\settings_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\security_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\duration_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\load_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\debug_messages_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\timeout_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + *.dll + The filter to find folks (TeamSetup.cs) - - ..\Resources\duration_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\security_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\settings_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -164,10 +161,16 @@ ..\Resources\map_generation_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\settings_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\debug_messages_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\toddler.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\star1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\star2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/SimulationPlugin/Resource.Designer.cs b/SimulationPlugin/Resource.Designer.cs index b447812..f76a7d0 100644 --- a/SimulationPlugin/Resource.Designer.cs +++ b/SimulationPlugin/Resource.Designer.cs @@ -61,155 +61,137 @@ internal Resource() { } /// - /// Looks up a localized string similar to no. - /// - internal static string No { - get { - return ResourceManager.GetString("No", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There was a problem during runtime: {0}. - /// - internal static string SimulationPluginExcetionIntro { - get { - return ResourceManager.GetString("SimulationPluginExcetionIntro", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} from {3}. + /// Looks up a localized string similar to {0} {1}. /// - internal static string SimulationPluginKicklistEntry { + internal static string AntPropertiesAuthorFormat { get { - return ResourceManager.GetString("SimulationPluginKicklistEntry", resourceCulture); + return ResourceManager.GetString("AntPropertiesAuthorFormat", resourceCulture); } } /// - /// Looks up a localized string similar to The following colonies are not valid anymore: . + /// Looks up a localized string similar to Access to a database. /// - internal static string SimulationPluginKicklistHead { + internal static string AntPropertiesDbAccess { get { - return ResourceManager.GetString("SimulationPluginKicklistHead", resourceCulture); + return ResourceManager.GetString("AntPropertiesDbAccess", resourceCulture); } } /// - /// Looks up a localized string similar to AntMe! - Simulation. + /// Looks up a localized string similar to Access to the file system. /// - internal static string SimulationPluginMessageBoxTitle { + internal static string AntPropertiesIoAccess { get { - return ResourceManager.GetString("SimulationPluginMessageBoxTitle", resourceCulture); + return ResourceManager.GetString("AntPropertiesIoAccess", resourceCulture); } } /// - /// Looks up a localized string similar to Following rights are not granted in the settings:. + /// Looks up a localized string similar to Access to the network. /// - internal static string SimulationPluginRightsLocked { + internal static string AntPropertiesNetAccess { get { - return ResourceManager.GetString("SimulationPluginRightsLocked", resourceCulture); + return ResourceManager.GetString("AntPropertiesNetAccess", resourceCulture); } } /// - /// Looks up a localized string similar to This colony creates a ruleViolation with current settings: {0}. + /// Looks up a localized string similar to Full access limitation. /// - internal static string SimulationPluginRuleViolation { + internal static string AntPropertiesNoAccess { get { - return ResourceManager.GetString("SimulationPluginRuleViolation", resourceCulture); + return ResourceManager.GetString("AntPropertiesNoAccess", resourceCulture); } } /// - /// Looks up a localized string similar to {0} {1}. + /// Looks up a localized string similar to Ant references external assembly or assemblies.. /// - internal static string SimulatorPluginAntPropertiesAuthorFormat { + internal static string AntPropertiesRefAccess { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesAuthorFormat", resourceCulture); + return ResourceManager.GetString("AntPropertiesRefAccess", resourceCulture); } } /// - /// Looks up a localized string similar to Access to a database. + /// Looks up a localized string similar to Access to the user interface. /// - internal static string SimulatorPluginAntPropertiesDbAccess { + internal static string AntPropertiesUiAccess { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesDbAccess", resourceCulture); + return ResourceManager.GetString("AntPropertiesUiAccess", resourceCulture); } } /// - /// Looks up a localized string similar to Access to the file system. + /// Looks up a localized string similar to The Free Game Mode allows to arrange free games. /// - internal static string SimulatorPluginAntPropertiesIoAccess { + internal static string FreeGamePluginDescription { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesIoAccess", resourceCulture); + return ResourceManager.GetString("FreeGamePluginDescription", resourceCulture); } } /// - /// Looks up a localized string similar to Access to the network. + /// Looks up a localized string similar to Free Game. /// - internal static string SimulatorPluginAntPropertiesNetAccess { + internal static string FreeGamePluginName { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesNetAccess", resourceCulture); + return ResourceManager.GetString("FreeGamePluginName", resourceCulture); } } /// - /// Looks up a localized string similar to Full access limitation. + /// Looks up a localized string similar to no. /// - internal static string SimulatorPluginAntPropertiesNoAccess { + internal static string No { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesNoAccess", resourceCulture); + return ResourceManager.GetString("No", resourceCulture); } } /// - /// Looks up a localized string similar to No further information available.. + /// Looks up a localized string similar to There was a problem during runtime: {0}. /// - internal static string SimulatorPluginAntPropertiesNoAdditionalInfos { + internal static string SimulationPluginExcetionIntro { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesNoAdditionalInfos", resourceCulture); + return ResourceManager.GetString("SimulationPluginExcetionIntro", resourceCulture); } } /// - /// Looks up a localized string similar to Ant references external assembly or assemblies.. + /// Looks up a localized string similar to {0} from {3}. /// - internal static string SimulatorPluginAntPropertiesRefAccess { + internal static string SimulationPluginKicklistEntry { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesRefAccess", resourceCulture); + return ResourceManager.GetString("SimulationPluginKicklistEntry", resourceCulture); } } /// - /// Looks up a localized string similar to Properties of {0}. + /// Looks up a localized string similar to The following colonies are not valid anymore: . /// - internal static string SimulatorPluginAntPropertiesTitle { + internal static string SimulationPluginKicklistHead { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesTitle", resourceCulture); + return ResourceManager.GetString("SimulationPluginKicklistHead", resourceCulture); } } /// - /// Looks up a localized string similar to Access to the user interface. + /// Looks up a localized string similar to AntMe! - Simulation. /// - internal static string SimulatorPluginAntPropertiesUiAccess { + internal static string SimulationPluginMessageBoxTitle { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesUiAccess", resourceCulture); + return ResourceManager.GetString("SimulationPluginMessageBoxTitle", resourceCulture); } } /// - /// Looks up a localized string similar to Unknown. + /// Looks up a localized string similar to This colony creates a ruleViolation with current settings: {0}. /// - internal static string SimulatorPluginAntPropertiesUnknown { + internal static string SimulationPluginRuleViolation { get { - return ResourceManager.GetString("SimulatorPluginAntPropertiesUnknown", resourceCulture); + return ResourceManager.GetString("SimulationPluginRuleViolation", resourceCulture); } } @@ -223,7 +205,7 @@ internal static string SimulatorPluginDescription { } /// - /// Looks up a localized string similar to Simulation. + /// Looks up a localized string similar to Free Game. /// internal static string SimulatorPluginName { get { diff --git a/SimulationPlugin/Resource.de.resx b/SimulationPlugin/Resource.de.resx index bc5dfeb..fe7eb11 100644 --- a/SimulationPlugin/Resource.de.resx +++ b/SimulationPlugin/Resource.de.resx @@ -117,6 +117,44 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + {0} {1} + Format of author-tag (AntProperties.cs) +0: First Name +1: Last Name + + + Zugriff auf eine Datenbank + To tell the user, that the ant needs DB-Access (AntProperties.cs) + + + Zugriff auf das Dateisystem + To tell the user, that the ant needs IO-Access (AntProperties.cs) + + + Zugriff auf das Netzwerk + To tell the user, that the ant needs Network-Access (AntProperties.cs) + + + Volle Zugriffseinschränkung + To tell the user, that the ant needs no Access (AntProperties.cs) + + + Ameise bindet fremde Assemblies ein + To tell the user, that the ant needs Ref-Access (AntProperties.cs) + + + Zugriff auf das Userinterface + To tell the user, that the ant needs UI-Access (AntProperties.cs) + + + Mit dem freien Spiel lassen sich beliebige Spiele zusammenstellen. + Description of the Free Game Plugin + + + Freies Spiel + Name of the Free Game Plugin + Nein Various use of no (AntProperties.cs) @@ -142,64 +180,17 @@ AntMe! - Simulation Caption of every Messagebox (TeamSetup.cs) - - Folgende Rechte wurden in den Einstellungen nicht frei geschaltet: - Header of a list of not granted rights (RightsRequest.cs) - Dieses Volk verursacht unter aktuellen Einstellungen eine Regelverletzung: {0} Is used to show errormessage in listview-Tooltip (TeamSetup.cs) 0: Message of RuleViolation - - {0} {1} - Format of author-tag (AntProperties.cs) -0: First Name -1: Last Name - - - Zugriff auf eine Datenbank - To tell the user, that the ant needs DB-Access (AntProperties.cs) - - - Zugriff auf das Dateisystem - To tell the user, that the ant needs IO-Access (AntProperties.cs) - - - Zugriff auf das Netzwerk - To tell the user, that the ant needs Network-Access (AntProperties.cs) - - - Volle Zugriffseinschränkung - To tell the user, that the ant needs no Access (AntProperties.cs) - - - Keine weiteren Infos - Text, if there are no additional info to access-requests (AntProperties.cs) - - - Ameise bindet fremde Assemblies ein - To tell the user, that the ant needs Ref-Access (AntProperties.cs) - - - Eigenschaften von {0} - Title-Bar of ant-property-window (AntProperties.cs) -0: Folkname - - - Zugriff auf das Userinterface - To tell the user, that the ant needs UI-Access (AntProperties.cs) - - - Unbekannt - Unknown information at filesize and filecreationtime (AntProperties.cs) - Ameisensimulation Description of Simulator-Application (SimulatorPlugin.cs) - Simulation + Freies Spiel Name of Simulator-Application (SimulatorPlugin.cs) diff --git a/SimulationPlugin/Resource.resx b/SimulationPlugin/Resource.resx index 0ee3875..6187bf9 100644 --- a/SimulationPlugin/Resource.resx +++ b/SimulationPlugin/Resource.resx @@ -117,6 +117,44 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + {0} {1} + Format of author-tag (AntProperties.cs) +0: First Name +1: Last Name + + + Access to a database + To tell the user, that the ant needs DB-Access (AntProperties.cs) + + + Access to the file system + To tell the user, that the ant needs IO-Access (AntProperties.cs) + + + Access to the network + To tell the user, that the ant needs Network-Access (AntProperties.cs) + + + Full access limitation + To tell the user, that the ant needs no Access (AntProperties.cs) + + + Ant references external assembly or assemblies. + To tell the user, that the ant needs Ref-Access (AntProperties.cs) + + + Access to the user interface + To tell the user, that the ant needs UI-Access (AntProperties.cs) + + + The Free Game Mode allows to arrange free games + Description of the Free Game Plugin + + + Free Game + Name of the Free Game Plugin + no Various uses of no (AntProperties.cs) @@ -142,64 +180,17 @@ AntMe! - Simulation Caption of every Messagebox (TeamSetup.cs) - - Following rights are not granted in the settings: - Header of a list of not granted rights (RightsRequest.cs) - This colony creates a ruleViolation with current settings: {0} Is used to show errormessage in listview-Tooltip (TeamSetup.cs) 0: Message of RuleViolation - - {0} {1} - Format of author-tag (AntProperties.cs) -0: First Name -1: Last Name - - - Access to a database - To tell the user, that the ant needs DB-Access (AntProperties.cs) - - - Access to the file system - To tell the user, that the ant needs IO-Access (AntProperties.cs) - - - Access to the network - To tell the user, that the ant needs Network-Access (AntProperties.cs) - - - Full access limitation - To tell the user, that the ant needs no Access (AntProperties.cs) - - - No further information available. - Text, if there are no additional info to access-requests (AntProperties.cs) - - - Ant references external assembly or assemblies. - To tell the user, that the ant needs Ref-Access (AntProperties.cs) - - - Properties of {0} - Title-Bar of ant-property-window (AntProperties.cs) -0: Folkname - - - Access to the user interface - To tell the user, that the ant needs UI-Access (AntProperties.cs) - - - Unknown - Unknown information at filesize and filecreationtime (AntProperties.cs) - Ant simulation Description of Simulator-Application (SimulatorPlugin.cs) - Simulation + Free Game Name of Simulator-Application (SimulatorPlugin.cs) diff --git a/SimulationPlugin/Resources/star1.png b/SimulationPlugin/Resources/star1.png new file mode 100644 index 0000000000000000000000000000000000000000..346c44140b16d18db88d12428b9bb074d92c1b24 GIT binary patch literal 719 zcmV;=0xPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0zgSbK~z{r#g>1k0znjp`~Ke~5)l!Jh)5(N z5fPF8ib%xVd8VCv&rWZ<)79-Bo|=7ke(l+F&TPXu_peAXm)&mXw%e_5>iaoJF_+BAcF)6K9EBt%AZ-Bu>GLy&D`U_(nJV*^G z)+xsTZltv0qIVnRy4UNu&1S>p_nM^*0Pe*-^ZDFgzQ+ho7FTCR>B2&w5$#2={K{}M zaY2UQes2%!JO~z2j-3~0{!13e^3C8)&JR+w@Dv0MPmybsW#c_LZ$yeIOvHhcYh)7v z?M=>Skzxu@M4ILrkxsgKlk-`mm_k;(lA63W&W2}!XOW_Xv}7`6+$&P+!OW)Ryb&o{ z$YB+Lv1pm%QZh46&Kr@U#ROEav}}v=8q9c3&Kr?pBzc#?-MChL{ZK3L2KgT?=QT(% zVxl<|BXYY~K=vnH=@XA@{)>_>`-2oClu;H=Pp~>zl&5F2Mg5TdK#G9d`9>hn(i1EP zT+dj}{wl9Y5t!iF36={UBUr0G)ui}Ir1&{p;|q%N43NFi+RXp}002ovPDHLkV1g!$ BOI-i} literal 0 HcmV?d00001 diff --git a/SimulationPlugin/Resources/star2.png b/SimulationPlugin/Resources/star2.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ad6365537ef9a1c80b7d166f7b62271e38f588 GIT binary patch literal 900 zcmV-~1AF|5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0`*BmK~z{r#g;vY6G0Tmud%VRv9YnSy2i@F z<{B%(>Iy9tEX7K}PO!4N!bZ45IpclkNp3aV!ocZr7>Fz^Ib&cUtSl@90wHh^2!w-! z=l@OExF0XO6Yn^SUo!K5Z+2(jym>PVMD$+~MN?e2K_@3CXv%gIMA3x7U_jg3+Z06+ zy0VW6qG&?9eMq*wLazG_UD?M3Q8YoRkJRrkl4Wh2Y8gbajL~RBwc1pyq z&je8{BM1WWyvMrR>D;Df^9R~_KNCc;jDv&E)azZ>-O=bWqOpZ`-p>S4EP~g&THVCD zUzo~Dy{4n1Bec`LCWvAY-ENoa^%p6*-M$A7(N2hlh++}E?ZR*=B@YJIXn+3`+6mDR z{li(!nQVe(ZPIvrDf=9~D>ypRm@NFhc%c4qoITpv+0zTh3l&?bhIR}}rmTCO6auO{VF!%OBk zuMnl5=%OS^raxM(Fqo<$U6 zcuAC6rQz_3WS+?+wjiT5QZT_`cyK_jEe6sqhh*f3&sqh zn55BAxOm=7$s7&WeTFaH#Ws7HtDf`R5kxVD>jB^Sk}u#b$y+lFJLuCwuh&DNS=T3G z?8Dgh8hnS^rwCDu;fM1V#!?h5p-OJ#9y}h8^>OU`cc*fz^#J`}X#e$-5XBhJ`;L-) zONZR^o}e1JS@vZ_k>SIG z?+8l0pLvkXf-fA7vx5n&Vd4QK*^d!L#`k@k-Ft;0FM<=e**w5*siQ0VFrs*#h~oJ{ a3x5FQlrW2Uiut_&0000 - - Form + + + UserControl - - AntProperties.cs + + ChallengeButton.cs - - Form + + UserControl - - CreateForm.cs + + ChallengesControl.cs - - - True - True - GeneratorFiles.resx + + + + UserControl - - - + + FreeGameControl.cs + + + True True Presets.resx - - Form - - - RightsRequest.cs - - - True True Resources.resx + + True True @@ -130,15 +126,6 @@ - - - UserControl - - - TeamSetup.cs - - - Form @@ -148,23 +135,17 @@ - - AntProperties.cs - Designer - - - AntProperties.cs - Designer + + ChallengeButton.cs - - CreateForm.cs + + ChallengesControl.cs - - CreateForm.cs + + FreeGameControl.cs - - ResXFileCodeGenerator - GeneratorFiles.Designer.cs + + FreeGameControl.cs ResXFileCodeGenerator @@ -172,8 +153,8 @@ ResXFileCodeGenerator - Resources.Designer.cs Designer + Resources.Designer.cs Designer @@ -185,12 +166,6 @@ Resource.Designer.cs Designer - - RightsRequest.cs - - - RightsRequest.cs - SimulationProperties.cs Designer @@ -203,31 +178,31 @@ StatisticControl.cs Designer - - TeamSetup.cs - Designer - - - TeamSetup.cs - Designer - SimulationProperties.cs Designer + + {5d566a2a-c112-4543-95ea-f3e81a53cde9} + PlayerManagement + False + {415F50C3-BD70-4634-B1F7-A15B42F0B0C6} SharedComponents + False {35753E72-07F3-4F18-916C-479850EC375F} SimulationCore + False + @@ -292,14 +267,8 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAABKxJREFUaEPtmk1o + XFUUx2dRsEgXhXTRRQTBLou4KNhFISU2QXHTgB8BhSiImKy6CCqiEnCh4sKt0IULERUFBRUFFy4EP+ii + iuInUr+wCz+iFVsx2vH3a+Y2972eSSaZuRN4zh9+ZM55995zzrz37rv3ZVrtdvt/RehsMqGzyYTOkqDb + 4Q1YAR2leAfuuCR+3VESdHRsbKw9MTExFIxlzEoOuVEadNJElpaWhoKxjFnJITdKgy4kESVXgk7BhM5y + yI3SjAouzKhgc8iN0owKLsyoYHPIjdKMCi7MqGBzyI3SjAouzKhgc8iN0qDlbSh4uZJDbpQG3e8edWpq + 6tzs7OzphYWF3/MEFxcXz+gfBNPT02c7++GlSg65URq0E56BP6A9OTm5koqdm5v7s5PgoDgHL8PuSg65 + MSzQ29Cen58/ZbEzMzPnO8W+B0fg8ADYFcaOnCVBFuSHlfHx8Y+8zyj2H+xHYUfUZ5CEzpKgk+CHxPdw + JGpbgtBZCnS0U2TCt5d7oralCJ1bATkhXQOz8CA8DW/Bx3AKLkxUNfR5zDa2tY99HcOxdkax+iF09oLJ + wPXwBDjZOCvmxQwCx3RsYxir7y8gdHYD7QAvy4uPlhqfwYvgBHQXOEF5pq6Cr+E5uDh7ot1wJdjGtvax + r2M4Vn18YxrbHLY0wYXOOsjEluA05AmcAP1++5XnXQ7yEr0nOrYejgmObQxj5bHNRX/XuBGhM4E8o4uw + DCmQ95u+8ahPBNpUUt0wJhjbHFI+5qavpzMeOgXtg/wR4mLhcNR2WCAv/UfgK9Dxb+evmOu+qF9O7Gy1 + DkG6R51Fh/acrIPqRSZ8fj8Jt4A56jPnQ9E4iUsdrdaBTkcN16LhEq0kaKMiK0WhXWCuGuZ+ID+eUzVW + HzXp2zqeHysN2lSREeg4+MEawkdY1Wi1jnU6eD+UX9cOoMgc5CSb5p1jYZuKsTb136ih8uODAO2BgRWZ + yDQFbkZOhO0qxtp/5S/XyJW36wfk/ZZWZX0VmajpMvgOVsK2FWOt4Nc16srb9gNyRTXIInPdCq7Seio4 + XdK/gKuYUHmfYbOB7gbX3n9DT5e0KxY/nIff4AXoSfk4g6RHXQEPwY+QFiOL4XgVY/X+8r7SEC/xD+Fh + 2JTycTfLJuUk9RKcAU+UA1hDb6940EHIt3oO4mDvw+NwJ0zDdsqd1X1goU5QzsopX3M/WK8rETtXB0yr + rZy/4Buw+FfhAbgNXN6V1s1wLzwLX4K5pDOaMOd1l8GhU9B+yHclEd4vP8MX8C74JTwFzpQ3wHWwnq6F + q8F2biG9elz8PAZu+uV58Edmn8BPkG8Ycsx1f1RLTuhMIFcuvnLJt4cbYULeAr/Ct/ApmIyz5ytgAZ6l + N8HXOq/BB2BBn8MPcBbqZ68b5maO/W0Pc9BecHXkN5wH207MxZz2Rjl3I3R2A7m58NJzZ1LiHVad+u8x + jWlsc9jS+63Q2QvIR9hN4NLQBXuJH4s6pmMbw1h9b1VD51YwGXAv7a9lvdR85epbEjcJbteiK0Kfx2xj + W/vY1zEca+B78dDZZEJnkwmdTSZ0NpnQ2WRCZ5MJnU0mdDaZ0NlkQmdzabf+A3B/a0QkrEoLAAAAAElF + TkSuQmCC + + + + + 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 + k6QqA50AAAAASUVORK5CYII= + + + + + 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 + DxrUzDl1FgAAAABJRU5ErkJggg== + + + + + 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 + + + \ No newline at end of file diff --git a/XnaPlugin/XnaPlugin/InstructionPanel.cs b/XnaPlugin/XnaPlugin/InstructionPanel.cs new file mode 100644 index 0000000..b897b8c --- /dev/null +++ b/XnaPlugin/XnaPlugin/InstructionPanel.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace AntMe.Plugin.Xna +{ + public partial class InstructionPanel : UserControl + { + public InstructionPanel() + { + InitializeComponent(); + } + } +} diff --git a/XnaPlugin/XnaPlugin/InstructionPanel.de.resx b/XnaPlugin/XnaPlugin/InstructionPanel.de.resx new file mode 100644 index 0000000..23d6d55 --- /dev/null +++ b/XnaPlugin/XnaPlugin/InstructionPanel.de.resx @@ -0,0 +1,792 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAABKxJREFUaEPtmk1o + XFUUx2dRsEgXhXTRRQTBLou4KNhFISU2QXHTgB8BhSiImKy6CCqiEnCh4sKt0IULERUFBRUFFy4EP+ii + iuInUr+wCz+iFVsx2vH3a+Y2972eSSaZuRN4zh9+ZM55995zzrz37rv3ZVrtdvt/RehsMqGzyYTOkqDb + 4Q1YAR2leAfuuCR+3VESdHRsbKw9MTExFIxlzEoOuVEadNJElpaWhoKxjFnJITdKgy4kESVXgk7BhM5y + yI3SjAouzKhgc8iN0owKLsyoYHPIjdKMCi7MqGBzyI3SjAouzKhgc8iN0qDlbSh4uZJDbpQG3e8edWpq + 6tzs7OzphYWF3/MEFxcXz+gfBNPT02c7++GlSg65URq0E56BP6A9OTm5koqdm5v7s5PgoDgHL8PuSg65 + MSzQ29Cen58/ZbEzMzPnO8W+B0fg8ADYFcaOnCVBFuSHlfHx8Y+8zyj2H+xHYUfUZ5CEzpKgk+CHxPdw + JGpbgtBZCnS0U2TCt5d7oralCJ1bATkhXQOz8CA8DW/Bx3AKLkxUNfR5zDa2tY99HcOxdkax+iF09oLJ + wPXwBDjZOCvmxQwCx3RsYxir7y8gdHYD7QAvy4uPlhqfwYvgBHQXOEF5pq6Cr+E5uDh7ot1wJdjGtvax + r2M4Vn18YxrbHLY0wYXOOsjEluA05AmcAP1++5XnXQ7yEr0nOrYejgmObQxj5bHNRX/XuBGhM4E8o4uw + DCmQ95u+8ahPBNpUUt0wJhjbHFI+5qavpzMeOgXtg/wR4mLhcNR2WCAv/UfgK9Dxb+evmOu+qF9O7Gy1 + DkG6R51Fh/acrIPqRSZ8fj8Jt4A56jPnQ9E4iUsdrdaBTkcN16LhEq0kaKMiK0WhXWCuGuZ+ID+eUzVW + HzXp2zqeHysN2lSREeg4+MEawkdY1Wi1jnU6eD+UX9cOoMgc5CSb5p1jYZuKsTb136ih8uODAO2BgRWZ + yDQFbkZOhO0qxtp/5S/XyJW36wfk/ZZWZX0VmajpMvgOVsK2FWOt4Nc16srb9gNyRTXIInPdCq7Seio4 + XdK/gKuYUHmfYbOB7gbX3n9DT5e0KxY/nIff4AXoSfk4g6RHXQEPwY+QFiOL4XgVY/X+8r7SEC/xD+Fh + 2JTycTfLJuUk9RKcAU+UA1hDb6940EHIt3oO4mDvw+NwJ0zDdsqd1X1goU5QzsopX3M/WK8rETtXB0yr + rZy/4Buw+FfhAbgNXN6V1s1wLzwLX4K5pDOaMOd1l8GhU9B+yHclEd4vP8MX8C74JTwFzpQ3wHWwnq6F + q8F2biG9elz8PAZu+uV58Edmn8BPkG8Ycsx1f1RLTuhMIFcuvnLJt4cbYULeAr/Ct/ApmIyz5ytgAZ6l + N8HXOq/BB2BBn8MPcBbqZ68b5maO/W0Pc9BecHXkN5wH207MxZz2Rjl3I3R2A7m58NJzZ1LiHVad+u8x + jWlsc9jS+63Q2QvIR9hN4NLQBXuJH4s6pmMbw1h9b1VD51YwGXAv7a9lvdR85epbEjcJbteiK0Kfx2xj + W/vY1zEca+B78dDZZEJnkwmdTSZ0NpnQ2WRCZ5MJnU0mdDaZ0NlkQmdzabf+A3B/a0QkrEoLAAAAAElF + TkSuQmCC + + + + Mit freundlicher Unterstützung von +Bit Barons + + + + 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 + k6QqA50AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + EgAACxIB0t1+/AAAACV0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVggMjAwNId2rM8A + AAbISURBVGhD5ZoJTBRnFMeVo4BQQEChodVSJfUIFQUKkcOWGpAjtA2FSoA0DbGtREk0EpqgvW3jQWqL + pQmiHJpI4pGgbUoMuwULhiUcxjUpAUvVeFU2sUTkhtf3NstmdubtLsvOmjgl+WV2/9/33nz/3Znvfd8s + CwDgfwUrKhlWVDKsqGRYUcmwopJhRQeShHyORAi0pworyowfUjgwMNB54MAByMrKgqqqKhgcHGxC/X3E + zdDvqcCKMhGOlKvV6sHCwkIICgrCsy0wEhoaCqWlpdDZ2fkX9vsCCTHEORRWtAN/pGBoaKj93LlzkJ2d + bWKSY9GiRbBt2zZobGyEkZGRXzH+bcTTkE92WNEO8pCex48fd2k0mhatVnstLy9vhjM6S0FBwQx+y9oO + /EPDf2K8FnnHkE92WFFGcrZv3y4xKaSoqAi7QZYgxqGw4hygiSZApHF8lpaWJjEpZMuWLdgNvhLEWMMJ + eV6kzRlWtEAQsufRo0d/4/FTgc4yNTVVFRERITEpZM2aNXTv1nPxZnDHvNrp6elqfB0jarMKKzJEIZU4 + sfy7detWOH/+/BS+9xW0s2Dp+WXZsmUSk0J8fHygv79fw8WbY2JiYs+hQ4egrKwM7ty504rah4i3sI85 + WNHAc0j2w4cPVZWVlZCYmKgfoIuLC+h0un+wbT/ynYBvRey/fv36fTc3NxODHCqVasgQ8zVCl/fs8UsB + VLoIWrh839TUNE2x9IHu2rULWltb76FehoQhnB89nPgSUnr16tX+vXv3wsqVK00G5+zsDGvXroXY2FgT + 4uPjISEhQc+mTZv0H9CKFStMYs2xfPlySE5OhqSkJP2RoHs7JSXFeExNTTVhw4YNJrM/fRHp6elQV1c3 + g7fcb+ghE3E1eDIifBOL1F64cGE4NzcXvLy8jMmeNVatWgX79u2D7u7uG+iJrohXDB6xFSB0dHT098OH + D+u/KS7Bs4qnpyfQnIPf+hhOjKfRawgZ9kHD5SUlJWyQEqD1+/DwMK3iAmcvZ+Kbo0ePsgHPMjk5OTA5 + OdmI/lzIp9AwUVxTUwMLFy6UBNLlERkZCVRXCZw0WNavX6+HNgdOTk6SPObw9/fXx4WHh8O6detMCAsL + Y6HJk47BwcFszszMTMASpkZfxh2Z2DDx8dmzZ8Hd3d0kuLa2dhLbarHgH0OqsPgfF4Of5HE8wQl6jffM + DTItzGGJ+vr6Scx7enx8vHpsbKxGCOaqFYK3oP6Il2kdvX7w4EHv6tWrTfJlZGQAtv2BY/YQeMMWwRsB + ObjImKZFAQVTecHktH/l+rJg/W6gciMchCUqKiqmMY5KIpvPCpHV1dXGXFTGcLztqHuJ+mGrSBCQhsV8 + lEzv2LED30KuoM0qWMeveXh4GAdhjd27d2PY/HdJuENroj03VRrcnnah5iPuQ0gEEQltbW0jXV1d9Onb + smD3uHTp0n3OmDnofsO/YkEOW0nEc8LAwABtL2lfzvXBMzGiiASE9nBcmzlePHny5DhnzBxRUVFA8wOT + yxZoSWrxtmBFGYighQxnzBx0Od6+fbuZySUrrCgD6cXFxRJTlqA1Ot4+AxjrLMolK6woA5/k5+dLTFkD + S9Moxr4gyiUrrCgD+2nnw5myxMGDBzEUogV5ZIcV7WVmZuYErZA4U5bYuXMnhsO7wlxyw4pzgJZqFTqd + 7hiuqn7G10QF8hOBk88tX19fiSFr0F4a/9qQH5AfDRzB2fsI1lk6h63VQgIrzgGaWH6gukfraiopMTEx + ejZu3AghISESM3OB1vC0no6LizM+WIiOjtY/EOjt7cVTwgeG888bVrSBkvLycsnA5YQ2IA0NDfQMjR7Q + c2OwCVa0kaJTp07pywo3YHugZa1KpSKzGaJzzhtWnAcfnTlzBlxdXSWDni9kVq1W0w4tXXQuu2DFeZJ/ + 8eJF/W9FnAFboAmvubl5AnOmis5hN6xoB+/hRDbl7e0tMTFXFi9eDC0tLWQ2RZRbFljRTtJxwOP0BIMz + ZAk/Pz+4fPnyOOZIFuWUDVaUgc3t7e1PxL8JW4I+INx/j2Es/ZcAl1MWWFEm4rq7u4es/dRCBAQE0MaB + 1tGbRTlkhxVl5HWtVqsT/3ohZMmSJXDlypUR7PuWKNYhsKLMvNbX13ePnjCKzS5duhTw0iezb4piHAYr + OoBXb968eYse486aDQwMBI1G8wTb3hD1dSis6CBevnv3bj+ZpkVFR0fHMGq0W+D6OgxWdCDBuJPq6+np + odITL2p7KrCig6H/IrD4G64jYUUlw4pKhhWVDCsqGVZUMqyoZFhRybCikmFFJcOKSoYVlQwrKhdY8B+v + DxrUzDl1FgAAAABJRU5ErkJggg== + + + + + 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 + + + + Benutze das Scrollrad um die Kamera näher an das fokusierte Objekt heranzubringen oder wegzuzoomen. Dadurch lassen sich Ameisen genau bei der Arbeit beobachten oder Wanzen können genauer unter die Lupe genommen werden. + +Um die Kamera um das entsprechende Objekt zu rotieren musst du die rechte Maustaste gedrückt halten und in die Maus in die entsprechende Richtung bewegen. So ist es dir möglich deine Ameisen von allen Seiten zu betrachten und einen Ãœberblick rund ums Spielfeld zu erhalten. + +Durch das Gedrückthalten der linken Maustaste kann die Kamera über das Spielfeld bewegt werden. So kannst du andere Objekte in den Mittelpunkt der Szene rücken und Zuckerberge, Ameisen und sonstiges Gewusel beobachten. + + +Um den Debug-Modus zu aktivieren, drücke einfach "D". Das zeigt dann die Sichtradien der Ameisen an und zeigt, wohin die Ameise unterwegs ist. Außerdem werden alle Denkblasen der Ameisen angezeigt. + + + + 145, 13 + + + Kontrolle der 3D Ansicht + + + 3D Ansicht + + \ No newline at end of file diff --git a/XnaPlugin/XnaPlugin/InstructionPanel.resx b/XnaPlugin/XnaPlugin/InstructionPanel.resx new file mode 100644 index 0000000..342ce8f --- /dev/null +++ b/XnaPlugin/XnaPlugin/InstructionPanel.resx @@ -0,0 +1,1065 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Controlling the 3D View + + + + NoControl + + + $this + + + $this + + + pictureBox2 + + + pictureBox4 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + + + + 3D View + + + InstructionPanel + + + Bottom, Right + + + label1 + + + + + + 4 + + + NoControl + + + + 60, 60 + + + titelLabel + + + 208, 139 + + + 60, 60 + + + $this + + + $this + + + + True + + + pictureBox3 + + + Microsoft Sans Serif, 8.25pt, style=Bold + + + pictureBox1 + + + label3 + + + 14 + + + 3 + + + $this + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 657, 340 + + + 7 + + + 8 + + + 5 + + + + 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 + k6QqA50AAAAASUVORK5CYII= + + + + 12 + + + 13 + + + 140, 13 + + + NoControl + + + 16 + + + 60, 60 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 30, 88 + + + MiddleCenter + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 11 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + Top + + + $this + + + 15 + + + 319, 319 + + + NoControl + + + 171, 39 + + + NoControl + + + NoControl + + + Bottom, Right + + + 0, 0 + + + Special thanks to +Bit Barons + + + + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 19 + + + 60, 60 + + + 6, 13 + + + + iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAABKxJREFUaEPtmk1o + XFUUx2dRsEgXhXTRRQTBLou4KNhFISU2QXHTgB8BhSiImKy6CCqiEnCh4sKt0IULERUFBRUFFy4EP+ii + iuInUr+wCz+iFVsx2vH3a+Y2972eSSaZuRN4zh9+ZM55995zzrz37rv3ZVrtdvt/RehsMqGzyYTOkqDb + 4Q1YAR2leAfuuCR+3VESdHRsbKw9MTExFIxlzEoOuVEadNJElpaWhoKxjFnJITdKgy4kESVXgk7BhM5y + yI3SjAouzKhgc8iN0owKLsyoYHPIjdKMCi7MqGBzyI3SjAouzKhgc8iN0qDlbSh4uZJDbpQG3e8edWpq + 6tzs7OzphYWF3/MEFxcXz+gfBNPT02c7++GlSg65URq0E56BP6A9OTm5koqdm5v7s5PgoDgHL8PuSg65 + MSzQ29Cen58/ZbEzMzPnO8W+B0fg8ADYFcaOnCVBFuSHlfHx8Y+8zyj2H+xHYUfUZ5CEzpKgk+CHxPdw + JGpbgtBZCnS0U2TCt5d7oralCJ1bATkhXQOz8CA8DW/Bx3AKLkxUNfR5zDa2tY99HcOxdkax+iF09oLJ + wPXwBDjZOCvmxQwCx3RsYxir7y8gdHYD7QAvy4uPlhqfwYvgBHQXOEF5pq6Cr+E5uDh7ot1wJdjGtvax + r2M4Vn18YxrbHLY0wYXOOsjEluA05AmcAP1++5XnXQ7yEr0nOrYejgmObQxj5bHNRX/XuBGhM4E8o4uw + DCmQ95u+8ahPBNpUUt0wJhjbHFI+5qavpzMeOgXtg/wR4mLhcNR2WCAv/UfgK9Dxb+evmOu+qF9O7Gy1 + DkG6R51Fh/acrIPqRSZ8fj8Jt4A56jPnQ9E4iUsdrdaBTkcN16LhEq0kaKMiK0WhXWCuGuZ+ID+eUzVW + HzXp2zqeHysN2lSREeg4+MEawkdY1Wi1jnU6eD+UX9cOoMgc5CSb5p1jYZuKsTb136ih8uODAO2BgRWZ + yDQFbkZOhO0qxtp/5S/XyJW36wfk/ZZWZX0VmajpMvgOVsK2FWOt4Nc16srb9gNyRTXIInPdCq7Seio4 + XdK/gKuYUHmfYbOB7gbX3n9DT5e0KxY/nIff4AXoSfk4g6RHXQEPwY+QFiOL4XgVY/X+8r7SEC/xD+Fh + 2JTycTfLJuUk9RKcAU+UA1hDb6940EHIt3oO4mDvw+NwJ0zDdsqd1X1goU5QzsopX3M/WK8rETtXB0yr + rZy/4Buw+FfhAbgNXN6V1s1wLzwLX4K5pDOaMOd1l8GhU9B+yHclEd4vP8MX8C74JTwFzpQ3wHWwnq6F + q8F2biG9elz8PAZu+uV58Edmn8BPkG8Ycsx1f1RLTuhMIFcuvnLJt4cbYULeAr/Ct/ApmIyz5ytgAZ6l + N8HXOq/BB2BBn8MPcBbqZ68b5maO/W0Pc9BecHXkN5wH207MxZz2Rjl3I3R2A7m58NJzZ1LiHVad+u8x + jWlsc9jS+63Q2QvIR9hN4NLQBXuJH4s6pmMbw1h9b1VD51YwGXAv7a9lvdR85epbEjcJbteiK0Kfx2xj + W/vY1zEca+B78dDZZEJnkwmdTSZ0NpnQ2WRCZ5MJnU0mdDaZ0NlkQmdzabf+A3B/a0QkrEoLAAAAAElF + TkSuQmCC + + + + 30, 316 + + + $this + + + 30, 161 + + + 17 + + + + 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 + + + + 853, 27 + + + $this + + + NoControl + + + 30, 237 + + + label2 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 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 + DxrUzDl1FgAAAABJRU5ErkJggg== + + + + pictureBox5 + + + 4, 4, 4, 4 + + + NoControl + + + 853, 524 + + + Use the scroll wheel to move the camera closer to a focused object or to zoom out. This way you can observe ants at work or inspect bugs. + + +To rotate the camera around a specified object, keep the right mouse button down and move the mouse in the desired direction. This enables you to observe your ants from all sides and to gain an overview of the game. + + +By holding down the left mouse button, you can move the camera across the map. Do this to move objects into view and to observe sugar hills, ants and other game elements. + + + +To enable the debug-view just press "D". This shows the view range of all ants, show their current target and all the thinking-bubbles. + + + + + 0 + + + 96, 90 + + + $this + + + + + + Microsoft Sans Serif, 11.25pt, style=Bold + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 18 + + + + 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 + + + + 642, 382 + + + 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 27, 57 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + de + + \ No newline at end of file diff --git a/XnaPlugin/XnaPlugin/Plugin.cs b/XnaPlugin/XnaPlugin/Plugin.cs index 61fc76b..716fa45 100644 --- a/XnaPlugin/XnaPlugin/Plugin.cs +++ b/XnaPlugin/XnaPlugin/Plugin.cs @@ -18,15 +18,17 @@ public sealed class Plugin : IConsumerPlugin private PluginState state = PluginState.Ready; + private InstructionPanel control = new InstructionPanel(); + private RenderWindow window; public Guid Guid { get { return Guid.Parse("{AC254307-B465-493B-B99C-9E7BC8F19234}"); } } public Version Version { get { return version; } } - public string Name { get { return Resource.PluginName; } } + public string Name { get { return Strings.PluginName; } } - public string Description { get { return Resource.PluginDescription; } } + public string Description { get { return Strings.PluginDescription; } } public void StartupParameter(string[] parameter) { } @@ -41,7 +43,7 @@ public bool Interrupt public Control Control { - get { return null; } + get { return control; } } public byte[] Settings @@ -69,6 +71,8 @@ public void Start() if (window == null) { Thread t = new Thread(Loop); + t.CurrentCulture = Thread.CurrentThread.CurrentCulture; + t.CurrentUICulture = Thread.CurrentThread.CurrentUICulture; t.IsBackground = true; t.Start(); } diff --git a/XnaPlugin/XnaPlugin/Properties/AssemblyInfo.cs b/XnaPlugin/XnaPlugin/Properties/AssemblyInfo.cs index 8c87921..50cd380 100644 --- a/XnaPlugin/XnaPlugin/Properties/AssemblyInfo.cs +++ b/XnaPlugin/XnaPlugin/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ [assembly: AssemblyProduct("AntMe!")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("AntMe! GmbH")] -[assembly: AssemblyCopyright("Copyright © 2014 AntMe! GmbH")] +[assembly: AssemblyCopyright("Copyright © 2015 AntMe! GmbH")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -31,5 +31,5 @@ // Build Number // Revision // -[assembly: AssemblyVersion("1.7.1.461")] -[assembly: AssemblyFileVersionAttribute("1.7.1.461")] +[assembly: AssemblyVersion("1.7.2.464")] +[assembly: AssemblyFileVersionAttribute("1.7.2.464")] diff --git a/XnaPlugin/XnaPlugin/RenderWindow.cs b/XnaPlugin/XnaPlugin/RenderWindow.cs index 8846867..9097506 100644 --- a/XnaPlugin/XnaPlugin/RenderWindow.cs +++ b/XnaPlugin/XnaPlugin/RenderWindow.cs @@ -8,6 +8,7 @@ using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using AntMe.SharedComponents.States; +using System.Threading; namespace AntMe.Plugin.Xna { @@ -69,7 +70,7 @@ public RenderWindow() graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; - Window.Title = "AntMe! XNA"; + Window.Title = "AntMe! - " + Strings.PluginName; IsMouseVisible = true; Window.AllowUserResizing = true; } @@ -79,6 +80,9 @@ protected override void Initialize() camera = new Camera(Window); previousKeyboardState = Keyboard.GetState(); + Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de"); + Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de"); + base.Initialize(); } @@ -392,27 +396,27 @@ protected override void Draw(GameTime gameTime) // name = antNames[ameise.Id]; //} - line1 = string.Format(Resource.HovertextAntLine1, name, selectedItem.AdditionalInfo); - line2 = string.Format(Resource.HovertextAntLine2, ameise.Vitality); + line1 = string.Format(Strings.HovertextAntLine1, name, selectedItem.AdditionalInfo); + line2 = string.Format(Strings.HovertextAntLine2, ameise.Vitality); break; case SelectionType.Anthill: - line1 = Resource.HovertextAnthillLine1; - line2 = string.Format(Resource.HovertextAnthillLine2, selectedItem.AdditionalInfo); + line1 = Strings.HovertextAnthillLine1; + line2 = string.Format(Strings.HovertextAnthillLine2, selectedItem.AdditionalInfo); break; case SelectionType.Bug: BugState bugState = (BugState)selectedItem.Item; - line1 = Resource.HovertextBugLine1; - line2 = string.Format(Resource.HovertextBugLine2, bugState.Vitality); + line1 = Strings.HovertextBugLine1; + line2 = string.Format(Strings.HovertextBugLine2, bugState.Vitality); break; case SelectionType.Fruit: FruitState fruitState = (FruitState)selectedItem.Item; - line1 = Resource.HovertextFruitLine1; - line2 = string.Format(Resource.HovertextFruitLine2, fruitState.Amount); + line1 = Strings.HovertextFruitLine1; + line2 = string.Format(Strings.HovertextFruitLine2, fruitState.Amount); break; case SelectionType.Sugar: SugarState sugar = (SugarState)selectedItem.Item; - line1 = Resource.HovertextSugarLine1; - line2 = string.Format(Resource.HovertextSugarLine2, sugar.Amount); + line1 = Strings.HovertextSugarLine1; + line2 = string.Format(Strings.HovertextSugarLine2, sugar.Amount); break; default: line1 = String.Empty; @@ -919,14 +923,14 @@ public void DrawInfobox(SimulationState state) infoBox.Draw(spriteBatch, new Rectangle(355, 15, 80, height - 10), new Color(0.3f, 0.3f, 0.9f, 0.3f)); infoBox.Draw(spriteBatch, new Rectangle(445, 15, 80, height - 10), new Color(1f, 1f, 1f, 0.3f)); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnColony2, new Vector2(20, ROWHEIGHT + 20), Color.Black); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnCollectedFood1, new Vector2(180, 20), Color.Black); //Green); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnCollectedFood2, new Vector2(180, ROWHEIGHT + 20), Color.Black); //Green); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnKilledAnts1, new Vector2(270, 20), Color.Black); //Red); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnKilledAnts2, new Vector2(270, ROWHEIGHT + 20), Color.Black); //Red); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnKilledBugs1, new Vector2(360, 20), Color.Black); //Blue); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnKilledBugs2, new Vector2(360, ROWHEIGHT + 20), Color.Black); //Blue); - spriteBatch.DrawString(hudFont, Resource.InfoboxColumnPoints2, new Vector2(450, /*ROWHEIGHT +*/ 20), Color.Black); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnColony2, new Vector2(20, ROWHEIGHT + 20), Color.Black); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnCollectedFood1, new Vector2(180, 20), Color.Black); //Green); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnCollectedFood2, new Vector2(180, ROWHEIGHT + 20), Color.Black); //Green); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnKilledAnts1, new Vector2(270, 20), Color.Black); //Red); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnKilledAnts2, new Vector2(270, ROWHEIGHT + 20), Color.Black); //Red); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnKilledBugs1, new Vector2(360, 20), Color.Black); //Blue); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnKilledBugs2, new Vector2(360, ROWHEIGHT + 20), Color.Black); //Blue); + spriteBatch.DrawString(hudFont, Strings.InfoboxColumnPoints2, new Vector2(450, /*ROWHEIGHT +*/ 20), Color.Black); //int count = 0; for (int i = 0; i < state.ColonyStates.Count; i++) diff --git a/XnaPlugin/XnaPlugin/Strings.Designer.cs b/XnaPlugin/XnaPlugin/Strings.Designer.cs new file mode 100644 index 0000000..58ea46a --- /dev/null +++ b/XnaPlugin/XnaPlugin/Strings.Designer.cs @@ -0,0 +1,333 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34014 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AntMe.Plugin.Xna { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Strings { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Strings() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AntMe.Plugin.Xna.Strings", typeof(Strings).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Anthill. + /// + internal static string HovertextAnthillLine1 { + get { + return ResourceManager.GetString("HovertextAnthillLine1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Colony: {0}. + /// + internal static string HovertextAnthillLine2 { + get { + return ResourceManager.GetString("HovertextAnthillLine2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} ({1}). + /// + internal static string HovertextAntLine1 { + get { + return ResourceManager.GetString("HovertextAntLine1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Energy: {0}. + /// + internal static string HovertextAntLine2 { + get { + return ResourceManager.GetString("HovertextAntLine2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bug. + /// + internal static string HovertextBugLine1 { + get { + return ResourceManager.GetString("HovertextBugLine1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Energy: {0}. + /// + internal static string HovertextBugLine2 { + get { + return ResourceManager.GetString("HovertextBugLine2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apple. + /// + internal static string HovertextFruitLine1 { + get { + return ResourceManager.GetString("HovertextFruitLine1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Food: {0}. + /// + internal static string HovertextFruitLine2 { + get { + return ResourceManager.GetString("HovertextFruitLine2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sugar. + /// + internal static string HovertextSugarLine1 { + get { + return ResourceManager.GetString("HovertextSugarLine1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Food: {0}. + /// + internal static string HovertextSugarLine2 { + get { + return ResourceManager.GetString("HovertextSugarLine2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to beaten. + /// + internal static string InfoboxColumnBeatenAnts1 { + get { + return ResourceManager.GetString("InfoboxColumnBeatenAnts1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ants. + /// + internal static string InfoboxColumnBeatenAnts2 { + get { + return ResourceManager.GetString("InfoboxColumnBeatenAnts2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to collected. + /// + internal static string InfoboxColumnCollectedFood1 { + get { + return ResourceManager.GetString("InfoboxColumnCollectedFood1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Food. + /// + internal static string InfoboxColumnCollectedFood2 { + get { + return ResourceManager.GetString("InfoboxColumnCollectedFood2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to collected. + /// + internal static string InfoboxColumnCollectedFruits1 { + get { + return ResourceManager.GetString("InfoboxColumnCollectedFruits1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fruit. + /// + internal static string InfoboxColumnCollectedFruits2 { + get { + return ResourceManager.GetString("InfoboxColumnCollectedFruits2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string InfoboxColumnColony1 { + get { + return ResourceManager.GetString("InfoboxColumnColony1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to colony name. + /// + internal static string InfoboxColumnColony2 { + get { + return ResourceManager.GetString("InfoboxColumnColony2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to eaten. + /// + internal static string InfoboxColumnEatenAnts1 { + get { + return ResourceManager.GetString("InfoboxColumnEatenAnts1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ants. + /// + internal static string InfoboxColumnEatenAnts2 { + get { + return ResourceManager.GetString("InfoboxColumnEatenAnts2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to killed. + /// + internal static string InfoboxColumnKilledAnts1 { + get { + return ResourceManager.GetString("InfoboxColumnKilledAnts1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ants. + /// + internal static string InfoboxColumnKilledAnts2 { + get { + return ResourceManager.GetString("InfoboxColumnKilledAnts2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to killed. + /// + internal static string InfoboxColumnKilledBugs1 { + get { + return ResourceManager.GetString("InfoboxColumnKilledBugs1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Bugs. + /// + internal static string InfoboxColumnKilledBugs2 { + get { + return ResourceManager.GetString("InfoboxColumnKilledBugs2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string InfoboxColumnPoints1 { + get { + return ResourceManager.GetString("InfoboxColumnPoints1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Points. + /// + internal static string InfoboxColumnPoints2 { + get { + return ResourceManager.GetString("InfoboxColumnPoints2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to starved. + /// + internal static string InfoboxColumnStarvedAnts1 { + get { + return ResourceManager.GetString("InfoboxColumnStarvedAnts1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ants. + /// + internal static string InfoboxColumnStarvedAnts2 { + get { + return ResourceManager.GetString("InfoboxColumnStarvedAnts2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Display the simulation in 3D. + /// + internal static string PluginDescription { + get { + return ResourceManager.GetString("PluginDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 3D View. + /// + internal static string PluginName { + get { + return ResourceManager.GetString("PluginName", resourceCulture); + } + } + } +} diff --git a/XnaPlugin/XnaPlugin/Strings.de.Designer.cs b/XnaPlugin/XnaPlugin/Strings.de.Designer.cs new file mode 100644 index 0000000..e69de29 diff --git a/XnaPlugin/XnaPlugin/Strings.de.resx b/XnaPlugin/XnaPlugin/Strings.de.resx new file mode 100644 index 0000000..44d2204 --- /dev/null +++ b/XnaPlugin/XnaPlugin/Strings.de.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ameisenbau + Text for anthill-hover-tag - Line 1 (RenderForm.cs) + + + Volk: {0} + Text for anthill-hover-tag - Line 2 (RenderForm.cs) +0: Colony-Name + + + {0} ({1}) + Text for ant-hover-tag - Line 1 (RenderForm.cs) +0: Name of ant +1: Colony-Name + + + Energie: {0} + Text for ant-hover-tag - Line 2 (RenderForm.cs) +0: Energy of ant + + + Wanze + Text for bug-hover-tag - Line 1 (RenderForm.cs) + + + Energie: {0} + Text for bug-hover-tag - Line 2 (RenderForm.cs) +0: Energy of bug + + + Apfel + Text for fruit-hover-tag - Line 1 (RenderForm.cs) + + + Nahrung: {0} + Text for fruit-hover-tag - Line 2 (RenderForm.cs) +0: Amount of food + + + Zucker + Text for sugar-hover-tag - Line 1 (RenderForm.cs) + + + Nahrung: {0} + Text for sugar-hover-tag - Line 2 (RenderForm.cs) +0: Amount of food + + + geschlagene + Line 1 of infobox-text for beaten ants (ModelManager.cs) + + + Ameisen + Line 2 of infobox-text for beaten ants (ModelManager.cs) + + + gesammelte + Line 1 of infobox-text for collected food (ModelManager.cs) + + + Nahrung + Line 2 of infobox-text for collected food (ModelManager.cs) + + + gesammeltes + Line 1 of infobox-text for collected fruits (ModelManager.cs) + + + Obst + Line 2 of infobox-text for collected fruits (ModelManager.cs) + + + + Line 1 of infobox-text for colony (ModelManager.cs) + + + Volkname + Line 2 of infobox-text for colony (ModelManager.cs) + + + gefressene + Line 1 of infobox-text for eaten ants (ModelManager.cs) + + + Ameisen + Line 2 of infobox-text for eaten ants (ModelManager.cs) + + + gestorbene + Line 1 of infobox-text for killed ants (ModelManager.cs) + + + Ameisen + Line 2 of infobox-text for killed ants (ModelManager.cs) + + + getötete + Line 1 of infobox-text for killed bugs (ModelManager.cs) + + + Wanzen + Line 2 of infobox-text for killed bugs (ModelManager.cs) + + + + Line 1 of infobox-text for points (ModelManager.cs) + + + Punkte + Line 2 of infobox-text for points (ModelManager.cs) + + + verhungerte + Line 1 of infobox-text for starved ants (ModelManager.cs) + + + Ameisen + Line 2 of infobox-text for starved ants (ModelManager.cs) + + + Zeigen Sie die Simulation in einer 3D-Welt an + Description of plugin (Plugin.cs) + + + 3D Ansicht + Name of Plugin (plugin.cs) + + \ No newline at end of file diff --git a/XnaPlugin/XnaPlugin/Strings.resx b/XnaPlugin/XnaPlugin/Strings.resx new file mode 100644 index 0000000..274cfce --- /dev/null +++ b/XnaPlugin/XnaPlugin/Strings.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Anthill + Text for anthill-hover-tag - Line 1 (RenderForm.cs) + + + Colony: {0} + Text for anthill-hover-tag - Line 2 (RenderForm.cs) +0: Colony-Name + + + {0} ({1}) + Text for ant-hover-tag - Line 1 (RenderForm.cs) +0: Name of ant +1: Colony-Name + + + Energy: {0} + Text for ant-hover-tag - Line 2 (RenderForm.cs) +0: Energy of ant + + + Bug + Text for bug-hover-tag - Line 1 (RenderForm.cs) + + + Energy: {0} + Text for bug-hover-tag - Line 2 (RenderForm.cs) +0: Energy of bug + + + Apple + Text for fruit-hover-tag - Line 1 (RenderForm.cs) + + + Food: {0} + Text for fruit-hover-tag - Line 2 (RenderForm.cs) +0: Amount of food + + + Sugar + Text for sugar-hover-tag - Line 1 (RenderForm.cs) + + + Food: {0} + Text for sugar-hover-tag - Line 2 (RenderForm.cs) +0: Amount of food + + + beaten + Line 1 of infobox-text for beaten ants (ModelManager.cs) + + + Ants + Line 2 of infobox-text for beaten ants (ModelManager.cs) + + + collected + Line 1 of infobox-text for collected food (ModelManager.cs) + + + Food + Line 2 of infobox-text for collected food (ModelManager.cs) + + + collected + Line 1 of infobox-text for collected fruits (ModelManager.cs) + + + Fruit + Line 2 of infobox-text for collected fruits (ModelManager.cs) + + + + Line 1 of infobox-text for colony (ModelManager.cs) + + + colony name + Line 2 of infobox-text for colony (ModelManager.cs) + + + eaten + Line 1 of infobox-text for eaten ants (ModelManager.cs) + + + Ants + Line 2 of infobox-text for eaten ants (ModelManager.cs) + + + killed + Line 1 of infobox-text for killed ants (ModelManager.cs) + + + Ants + Line 2 of infobox-text for killed ants (ModelManager.cs) + + + killed + Line 1 of infobox-text for killed bugs (ModelManager.cs) + + + Bugs + Line 2 of infobox-text for killed bugs (ModelManager.cs) + + + + Line 1 of infobox-text for points (ModelManager.cs) + + + Points + Line 2 of infobox-text for points (ModelManager.cs) + + + starved + Line 1 of infobox-text for starved ants (ModelManager.cs) + + + Ants + Line 2 of infobox-text for starved ants (ModelManager.cs) + + + Display the simulation in 3D + Description of plugin (Plugin.cs) + + + 3D View + Name of Plugin (plugin.cs) + + \ No newline at end of file diff --git a/XnaPlugin/XnaPlugin/XnaPlugin.csproj b/XnaPlugin/XnaPlugin/XnaPlugin.csproj index 61a661d..2b603de 100644 --- a/XnaPlugin/XnaPlugin/XnaPlugin.csproj +++ b/XnaPlugin/XnaPlugin/XnaPlugin.csproj @@ -80,6 +80,8 @@ + + @@ -91,20 +93,36 @@ + + UserControl + + + InstructionPanel.cs + - + + True + True + Strings.de.resx + + + True + True + Strings.resx + {415f50c3-bd70-4634-b1f7-a15b42f0b0c6} SharedComponents + False {B09C7823-AFF3-45A4-AAAC-88821B464DEC} @@ -138,8 +156,23 @@ - - + + InstructionPanel.cs + + + InstructionPanel.cs + + + InstructionPanel.cs + + + ResXFileCodeGenerator + Strings.de.Designer.cs + + + ResXFileCodeGenerator + Strings.Designer.cs +