From 147f53a52d6da76ae70fe81462e3fe1cd6b14b0e Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 3 Aug 2019 16:16:46 +0200 Subject: [PATCH 1/3] Made GUI Movable, renamed mod --- CrosshairMod/Interface.cs | 4 +++- CrosshairMod/Main.cs | 2 +- CrosshairMod/bin/Release/CrosshairMod.dll | Bin 15360 -> 15872 bytes 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CrosshairMod/Interface.cs b/CrosshairMod/Interface.cs index 53b71c7..82a207f 100644 --- a/CrosshairMod/Interface.cs +++ b/CrosshairMod/Interface.cs @@ -100,7 +100,9 @@ namespace CrosshairMod // Renders the Panel, but also handles Updating the buttons private static void RenderFunc(int windowID) { - + // Make Window draggable + GUI.DragWindow(new Rect(0, 0, 10000, 20)); + // Draw the Length and Thickness Labels GUI.Label(new Rect(60, 70, 120, 30), "Length: " + Settings.GetValue("crosshairLength")); GUI.Label(new Rect(60, 110, 120, 30), "Thickness: " + Settings.GetValue("crosshairThickness")); diff --git a/CrosshairMod/Main.cs b/CrosshairMod/Main.cs index d0a81da..a73c6b3 100644 --- a/CrosshairMod/Main.cs +++ b/CrosshairMod/Main.cs @@ -22,7 +22,7 @@ namespace CrosshairMod * handling initializing and updating the components * of the crosshair mod. */ - public class Main : MonoBehaviour + public class CrosshairMod : MonoBehaviour { // Define Hotkeys for Menu and Crosshair Toggle private char MENU_OPEN_KEY = 'H'; diff --git a/CrosshairMod/bin/Release/CrosshairMod.dll b/CrosshairMod/bin/Release/CrosshairMod.dll index 717523228f2a627db52f70e263aa574f65f607a7..db70273308fd3e7d8e44d4539692a6535fbd4c85 100644 GIT binary patch delta 3155 zcmaKu4Qv$0702J3z1#cn+4yYh{DHC0K5Ulr2gV;5uuW`iOdU*YaBy%@sVxGO5_;yK z4grfhgrGo7!m)}Wt_j9XBZNqk$}LSILMwt&6jiBOqzY1ExfE4NN&}=-3PnNv&)gb9 zBXySdXK<}K&iR@55Gb#2;TB}4JILwJCt@=;uX?Oq z9Ca4$7b=3_rMN_<5ZQJZL~i&-8n#S_Wt2e7TkbNwRMIT7Fri}7{BADPhbt&m~@1 zI1etvk95Mwg$A3$-_xj981tpS1_ICFZ+Ol>^wgRclGaw&AyV|GBek(W_IwNys)rQY zjWpyn;sF`|6JT~vS-=hE@hKS*H6Wt&FcbBHizcm)hvXv*qZtnOcwYGA|BW6G?aaiaLdzE;Tu(oULUVyH*L^I6W#dlp zd5Ru$IENBlYF0)Id?i8GgRr`ISgK7W@!EVtUR(N*@i@XlOU!-At!rClmZF9fHkQKj zOg)&Q2GB++TFz*R5KA;XbCWwTBZ>)sw>_Q>M*0;wALrlDqoTw6q;P#dbkN= ziSRp6Lp92hPv%-7bCFDjtb~Q;^||A1DHQ57C%kEkA0#Zw5w>{7G>6RiGw8#NwxAv? z-SQOjMP=Dxmt&kL*0U{`BiCe2%F1e4H!TWN>VEBXfbPeXP3 zv(gsl22n^+?m+$;afO)Ll_o+vqb7Gm&~TDBL5HATDslFTIn>76gb%@O&}yaolzyr- zmz7^>CiNqxP3eeI=6=!c$D`6-XR^KrnfFeF%A$Kb0y<~WX2+|bI~I-DPm5$S)P6fiKXjhPqph@P z09jI~7CSD{AT4qXM}Y4tj8V5^1oTOqGLAW9sI5ST#^{dzb5OBG0mnI!Nh=i%(mCg_ z$fH-Vq06LlqIvYXMHm8fT~UlC_%x`$D4ugY`bF~TcX3n$=F_;My{N?pLQNX6@7rZ9 zW{|5`cHHYUbxB@}eym>tWm)vJ>!>g&-=b$+mq0}pmD`VsnN(p>t^Jai8KK%ZV!+EH zNNXNYGL=(QQT$a@&>2O8^tpWQ&Qv&h4OhNUQ{$lsm^sghbC|q%98p))wFe1oG#n1i@9{jqQBZd6Z7eYMF;G+ zMIANb6vj(a6|JYXM`)Fz_;~fSCZcdRmfdQqr|(mA90E*nyGTz?*2u5&510*8@A9ZwlU>D!%+1*~kv`WIdYfK@K1W9! zSE+@iX7YDj*PvalThzrbIsXm2PXCH}c)4chG!@yyvt54n(0)f9XVXW{rO;~Ea(<4V z)pYV8M#l#zHIqvmohfc6M!?^1d~sZEpqZcX~5N=KCbM(Ko7{M$oo z7B$dXO4vYW=|igIy?ow$JtsZwz92fT3moLVE~y9YLNhPtEO2FTGb;8m-!yY`13b-a z%$<=lO>`jyM>2|(fW;c1TI!)xUW=P(Y;W!=m#rz>vwrL^Mu#(*Jy!>JzkR$uw*9@5 zU&KB+Yc|ckg$gr!qx;7y%iqMIlomVxrc8)Q(6hMP@z15*yjvMaF2C|(Uq2D*%k%L)^R24RG5`FFJeD-)Kbpv{9P`e<$+0rWe*s>4 BLIVH* delta 3149 zcmai$3vg7`8OOhK?%un1H=B^%(9IJz%aUZ-JPZkWlq8Vwh=~a%m_n1EITIc!P?CX}ls?812dbjOh~vPNv9;52N(&hpwFR{ZeOQ&2_J7X3!BUv% z&g}nwzyJBpcOHB0z1z33@7v$oGR-~w(IDBMOEfJviIoz~f?-(Zct_&sQubZJSb=`& z0itRVDLD`2z57@L-Py2I++gbOE~euJ8xX+%r}E2~D^ z`Cijp$*mNTmQ-pK6S>1BqB*JDWrbidEX$!8@3WM{wF~^Gigq|9%&KEF4gH8cH6|- zVlO&w%>m_%7$aKa=HUip7FWf_(JDv4oae#GADbSVrNhdHl^2~4ONG$|6VXL=czAdr z4EID( zclgwx#&BM`kB1k*8_vs!)uO|2UM8IT;cSl}XE-k_Rxj;v8!R^pwBuTQ9KSug>DSe7 z590zi!i&W>yn#C09qu9)QM2Qkno=aKR3mg(AFClM(~2t`#s1g=ROhjsa;_cXC2!6G z+&1b5HYRF(1xAEq5iEmn-n@Rd)#jt<5?QEPD^8D1cFICugQ8HTZ_12Yg&YwhQnGd_ zGW+DlBgVNl`f!>Zk*V^ecKbT3>}?{Gd+j=1V8scZ5Og*Fkr zi0fh80HKa`vECHZ5(Un%imW~djP2ur{ zoKeVVf==hH+)JyqHfWL70oC|I=zdMAu5`QkRm2_6KFh z-84xX0G+Vu2HOXE&88=v2SA_NbVxtKQz?w6tn9bmJc31Z+O!>2d{jH#YFp@(^s1r+ z^*Hx|E?bmwz&Q{HI`U*{f<85lf{JVkIZyCR>QuCwUNZ-HkPe2eqH>}^`iV_)h#ZMg<2=pdYSPGkQ-4-V@B(_@YBYr*>CZNO-#7>Q z#HJosf`{p*O^>?Hft*Ehz|Cfvp5QZRl1;VxIZ%d081QW#p}DsxmCEAub%k$|9KM`( zDcVg}^=?*9hi!TTG>eYg)aUGG6?8^XKV`WLs-zse%82^uX(nmCO=nC=&nuGam2_Cq zZb~z|StZ3!mdK8~DHm8p?e|#pTm2%hrpIl1SAUn!rZYBe(?8&K6u?^+KbqRodMdn) zsuWoR*3(=?Pg4>-MD^5YQv+xot&H2a3%G!uu<5U$M*5~rGuT7aM4Ki$g6^ZuHihUq zZ>7C9b%7SqQJao}?x&MBC9&(gjowmZ?Qc8%s1uu0mHZnl+O)gNIA_D8dq?PI^xqlo`vu4M_DXKrBUQO%$s_N=*;4YBRoPIiS}=TYeM z&>>du8er2Y1vy>p=jIS9?{bZ>#VoG<6#j>76uQ;<3s!_VT*NJ~&ea&lrA+@=P2z88 zz_d`P)%7`2H@b++$r&86Av-^(CnJ`V;N+kHPoYi<;(2(T=0HD#n)ENK=ee|&_Gl$I zr2pn6ltw1vY$||;s1#aA^PuI>cnQ@gn6DaIs0j@n%6U-fa_WKe7;V$)RnZ2eJxZ4; z?Nd6R$srf8r=ZKYjQf=iDRpSl@6n{+r}U80Q;XE)l2UTW<}7NU71T>7=`AW|arO%1 zI0$(A8Fg4S!_niQ#l}By`GIi*`nXH#4*dofJTS-QWpmjedxu>X&4Cc}i`9XG96#^E zKLEU|v295>w;`&fZt}3@_>LY6Jm?zr&gd{x|G8-D0H2L2{wh?y0k)X~3te>iqEzwJlw@6BJ9wWL5iQnB230?iYj gw`H802>RJ+ajjzMXiD|x8h@{R)LZ*8OO!hQ13)4^dH?_b From 85a4c7b2549aa41003a2210456472cf3f6282056 Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 4 Aug 2019 15:50:04 +0200 Subject: [PATCH 2/3] Commented everything properly --- CrosshairMod/Crosshair.cs | 22 ++++---- CrosshairMod/Interface.cs | 73 ++++++++++++++++++--------- CrosshairMod/Interface/Button.cs | 55 ++++++++++++-------- CrosshairMod/Interface/InputObject.cs | 30 +++++++---- CrosshairMod/Interface/Slider.cs | 41 +++++++++++---- CrosshairMod/Logging.cs | 18 +++---- CrosshairMod/Main.cs | 25 ++++----- CrosshairMod/Settings.cs | 41 ++++++++++----- 8 files changed, 188 insertions(+), 117 deletions(-) diff --git a/CrosshairMod/Crosshair.cs b/CrosshairMod/Crosshair.cs index d8727c9..aa42e23 100644 --- a/CrosshairMod/Crosshair.cs +++ b/CrosshairMod/Crosshair.cs @@ -8,34 +8,31 @@ using UnityEngine; namespace CrosshairMod { - /* The class responsible for drawing/creating/administrating the crosshair. - * - * This is where settings are applied to the crosshair. - */ + /// + /// Contains Crosshair information and draws/creates it + /// static class Crosshair { - // Crosshair Texture / Style + /// + /// Graphics information for the crosshair + /// private static Texture2D m_texture = new Texture2D(0, 0); private static GUIStyle m_style; - // If crosshair is visible or hidden private static bool m_enabled = true; private static bool m_validState = true; - // Toggles visibilty of the crosshair public static void Toggle() { m_enabled = !m_enabled; Settings.SetSetting("crosshairVisible", 1, true); } - // Returns wether the crosshair is enabled public static bool Enabled() { return m_enabled; } - // Change Color public static void SetColor(int r, int g, int b, int a) { Settings.SetSetting("crosshairColorRed", r); @@ -46,7 +43,6 @@ namespace CrosshairMod Create(); } - // Change Size public static void ChangeSize(int difference) { int currentLength = Settings.GetValue("crosshairLength"); @@ -56,7 +52,6 @@ namespace CrosshairMod Create(); } - // Change Thickness public static void ChangeThickness(int difference) { int currentThickness = Settings.GetValue("crosshairThickness"); @@ -66,7 +61,9 @@ namespace CrosshairMod Create(); } - // This must be called, or else no crosshair will be rendered + /// + /// Creates a new crosshair texture with the current settings + /// public static void Create() { // Creates a crosshair texture @@ -125,7 +122,6 @@ namespace CrosshairMod m_style.normal.background = m_texture; } - // Render the Crosshair public static void Render() { // If the crosshair is faulty, then don't execute this code diff --git a/CrosshairMod/Interface.cs b/CrosshairMod/Interface.cs index 82a207f..1acb1c8 100644 --- a/CrosshairMod/Interface.cs +++ b/CrosshairMod/Interface.cs @@ -8,45 +8,65 @@ using UnityEngine; namespace CrosshairMod { - - /* A class that handles the Crosshair GUI. - * - * Contains all Buttons, Sliders etc. that are able to modify the crosshair. - */ - - // TODO: Create GUILayout.Window to make a less crappy version of the settings window + /// + /// Handles and contains every Object needed for the interface + /// static class Interface { - // Saves wether the interface is visible or not private static bool m_visible = false; - // Stores all Buttons used in the interface. + /// + /// A list of all Objects (That includes buttons, sliders etc) inside the GUI Window + /// This makes it easy to add more components if it is needed. + /// private static List m_inputs = new List(); + // TODO: Replace with dictionary, the whole concept of having IDs inside the objects is stupid and unnecessary - // Values of the RGBA Sliders + /// + /// RGBA Slider values + /// private static int rSliderValue, gSliderValue, bSliderValue, aSliderValue; - // Position ind dimension of the GUI background private static Vector2 m_position; private static Vector2 m_dimension; - // Creates a new button object and adds it to the List + /// + /// Creates a new Button and adds it to the content list + /// + /// X-Position + /// Y-position + /// Width + /// Height + /// Text to be displayed on the button + /// Key of the Button + /// Action to be executed when the button is pressed private static void AddButton(float x, float y, float width, float height, string label, string ID, params EventHandler[] onClickEvent) { - GUIButton buttonObj = new GUIButton(x, y, width, height, label, ID, onClickEvent); + Input.Button buttonObj = new Input.Button(x, y, width, height, label, ID, onClickEvent); m_inputs.Add(buttonObj); } - // Creates a new slider object and adds it to the List - // Returns the index of the button + /// + /// Creates a new Slider and adds ot to the content list + /// + /// X-Position + /// Y-Position/param> + /// Width + /// Height + /// Minimum value of the slider + /// Maximum value of the slider + /// Starting value of the slider + /// Key of the slider private static void AddSlider(float x, float y, float width, float height, float min, float max, float init, string ID) { - GUISlider sliderObj = new GUISlider(x, y, width, height, min, max, init, ID); + Input.Slider sliderObj = new Input.Slider(x, y, width, height, min, max, init, ID); m_inputs.Add(sliderObj); } - // Initializes all Buttons, gives them their function etc + /// + /// Creates all needed input objects and initializes window + /// public static void Init() { // Set dimension to 0.25 of the screen width/height @@ -58,7 +78,7 @@ namespace CrosshairMod // Create Crosshair Visibilty Button AddButton(20, 20, 200, 30, (Crosshair.Enabled() ? "Hide Crosshair" : "Show Crosshair"), "Toggle", (object sender, EventArgs e) => { Crosshair.Toggle(); }, - (object sender, EventArgs e) => { GUIButton btn = (GUIButton)sender; btn.label = (Crosshair.Enabled() ? "Hide Crosshair" : "Show Crosshair"); }); + (object sender, EventArgs e) => { Input.Button btn = (Input.Button)sender; btn.Label = (Crosshair.Enabled() ? "Hide Crosshair" : "Show Crosshair"); }); // Create Crosshair Size +/- Buttons AddButton(20, 60, 30, 30, @@ -84,20 +104,21 @@ namespace CrosshairMod AddSlider(m_dimension.x / 2 + 60, 150, 200, 30, 0, 255, aSliderValue, "alpha"); } - // Displays / Hides the menu public static void Toggle() { m_visible = !m_visible; } - // Renders the window public static void Render() { + // TODO: Think about making this a GUILayout.ModalWindow if (m_visible) GUI.Window(420, new Rect(m_position, m_dimension), RenderFunc, "Crosshair Settings"); } - // Renders the Panel, but also handles Updating the buttons + /// + /// Where actual rendering happens. Draws all objects and updated them + /// private static void RenderFunc(int windowID) { // Make Window draggable @@ -114,7 +135,7 @@ namespace CrosshairMod GUI.Label(new Rect(m_dimension.x / 2 + 20, 150, 200, 30), "A: " + aSliderValue); // Set crosshair Colour after getting slider values - IEnumerable it = m_inputs.OfType(); + IEnumerable it = m_inputs.OfType(); rSliderValue = (int)it.First(slider => slider.ID == "red").Value; gSliderValue = (int)it.First(slider => slider.ID == "green").Value; bSliderValue = (int)it.First(slider => slider.ID == "blue").Value; @@ -123,12 +144,14 @@ namespace CrosshairMod Crosshair.SetColor(rSliderValue, gSliderValue, bSliderValue, aSliderValue); // Update Buttons - HandleButtons(); + HandleInputObjects(); } - // Calls the Update function on all Buttons to check if they were pressed, and execute their Action - private static void HandleButtons() + /// + /// Calls the Update function of each input object + /// + private static void HandleInputObjects() { foreach(InputObject obj in m_inputs) { diff --git a/CrosshairMod/Interface/Button.cs b/CrosshairMod/Interface/Button.cs index 895da89..6e4f259 100644 --- a/CrosshairMod/Interface/Button.cs +++ b/CrosshairMod/Interface/Button.cs @@ -6,51 +6,62 @@ using System.Text; using UnityEngine; -namespace CrosshairMod +namespace CrosshairMod.Input { - /* - * A button wrapper class that is used right now as I don't have access to - * the games buttons. Since UnityEngine.GUI only has a function to draw Buttons, - * I made this class for easy handling. - * - */ - class GUIButton : InputObject + /// + /// Button wrapper for Unitys GUI.Button() function. I made this in order + /// to store buttons and render them in Lists + /// + class Button : InputObject { - // da_google thinks this Button Wrapper is stupid, so let's see what ths Button Wrapper thinks about him - private const bool IS_DA_GOOGLE_STUPID = true; - // Interesting. - - // OnClick event + /// + /// Event Handler that contains the actions to execute when the Button was clicked + /// public event EventHandler OnClick; - // Label of the Button - public string label { get; set; } = ""; + public string Label = ""; - // Initialize Button - public GUIButton(float x, float y, float width, float height, string label, string ID, params EventHandler[] OnClickEvent) + /// + /// Create new Button + /// + /// X-Position + /// Y-Position + /// Width + /// Height + /// Text inside the button + /// Button ID + /// Action to execute when button is pressed + public Button(float x, float y, float width, float height, string label, string ID, params EventHandler[] OnClickEvent) : base(x, y, width, height, ID) { - Logging.Debug.Log("Button Constructor"); + Logging.Debug.Log("Button Constructor: " + label); // Assign position, dimension and label - this.label = label; + this.Label = label; // Push OnClickEvents foreach(EventHandler e in OnClickEvent) OnClick += e; } - public GUIButton(string ID) + /// + /// Sad, pathetic default constructor + /// + /// + public Button(string ID) : base(0, 0, 0, 0, ID) { // Empty } - // Updates and Draws the Button. + /// + /// Draws button and returns button state / executes button action + /// + /// 1f if the button is pressed, 0f else public override float Update() { // Get if the Button was pressed and invoke OnClick event accordingly - bool buttonPressed = GUI.Button(new Rect(position, dimensions), label); + bool buttonPressed = GUI.Button(new Rect(position, dimensions), Label); if (buttonPressed) OnClick?.Invoke(this, EventArgs.Empty); diff --git a/CrosshairMod/Interface/InputObject.cs b/CrosshairMod/Interface/InputObject.cs index 7e14d2a..11743bf 100644 --- a/CrosshairMod/Interface/InputObject.cs +++ b/CrosshairMod/Interface/InputObject.cs @@ -8,21 +8,25 @@ using UnityEngine; namespace CrosshairMod { - /* - * Base of all Input Objects. - * - * Any Input Object that wants to be displayed in the Interface must - * inherit from this class. - */ + /// + /// Base class for all InputObjects. Defines basic attributes that + /// every input object needs + /// abstract class InputObject { - // position and dimension of the object public Vector2 position, dimensions; - - // ID of the Object + + // TODO: Remove once dictionary was implemented public readonly string ID; - // constructor to set position and size + /// + /// Create new InputObject + /// + /// X-Position + /// Y-Position + /// Width + /// Height + /// ID public InputObject(float x, float y, float width, float height, string ID) { this.position = new Vector2(x, y); @@ -30,7 +34,11 @@ namespace CrosshairMod this.ID = ID; } - // the update method (that works as renderer) must be overriden by each object + /// + /// The Update method every Input Object needs. + /// This is needed to store all kinds of input objects in one List for example + /// + /// Value of the Object public abstract float Update(); } } diff --git a/CrosshairMod/Interface/Slider.cs b/CrosshairMod/Interface/Slider.cs index 47dbf80..df6a28d 100644 --- a/CrosshairMod/Interface/Slider.cs +++ b/CrosshairMod/Interface/Slider.cs @@ -6,18 +6,33 @@ using System.Text; using UnityEngine; -namespace CrosshairMod +namespace CrosshairMod.Input { - class GUISlider : InputObject + class Slider : InputObject { - // Min/Max values for the slider - public float Min { get; set; } = 0; - public float Max { get; set; } = 0; + /// + /// Min/Max Slider values + /// + public float Min = 0; + public float Max = 0; - // Current slider value - public float Value { get; set; } = 0; + /// + /// Current slider value + /// + public float Value = 0; - public GUISlider(float x, float y, float width, float height, float min, float max, float init, string ID) + /// + /// Creates a new Slider + /// + /// X-Position + /// Y-Position + /// Width + /// Height + /// Minimum Slider value + /// Maximum Slider value + /// Initial Slider value + /// ID + public Slider(float x, float y, float width, float height, float min, float max, float init, string ID) : base(x, y, width, height, ID) { Min = min; @@ -25,12 +40,20 @@ namespace CrosshairMod Value = init; } - public GUISlider(string ID) + /// + /// Sad, pathetic default constructor + /// + /// + public Slider(string ID) :base (0, 0, 0, 0, ID) { } + /// + /// Draws and Updates the slider + /// + /// Value of the Slider public override float Update() { Value = GUI.HorizontalSlider(new Rect(position, dimensions), Value, Min, Max); diff --git a/CrosshairMod/Logging.cs b/CrosshairMod/Logging.cs index db9fd39..3f1c199 100644 --- a/CrosshairMod/Logging.cs +++ b/CrosshairMod/Logging.cs @@ -8,17 +8,17 @@ using UnityEngine; namespace CrosshairMod { - // CrosshairMod's Logging class - // Simply writes messages to the Unity Debug output - // However, I prefer this over Debug.Log() since it doesn't include a stacktrace (Except for Errors) + /// + /// Handles Logging in the Crosshair mod + /// public static class Logging { - // The Prefix that gets put in front of every Log public const string PREFIX = "[CROSSHAIRMOD]"; - // A kind of sub-class that is used to Log messages that will only appear - // when the User installs a Debug build of the Mod. Release versions will - // not log Debug messages this way. + /// + /// Logging's subclass for Debug Logging. + /// This only logs messages in the debug build of the mod. + /// public static class Debug { public static void Log(string message) @@ -44,19 +44,17 @@ namespace CrosshairMod } - // Logs information public static void Log(string message) { Console.WriteLine(PREFIX + "Info: " + message); } - // Logs warnings public static void LogWarning(string message) { Console.WriteLine(PREFIX + "Warning: " + message); } - // Logs errors + public static void LogError(string message) { UnityEngine.Debug.Log(PREFIX + "Error: " + message); diff --git a/CrosshairMod/Main.cs b/CrosshairMod/Main.cs index a73c6b3..910981d 100644 --- a/CrosshairMod/Main.cs +++ b/CrosshairMod/Main.cs @@ -1,12 +1,11 @@ /* - * Source code of a mode that adds a crosshair into + * Source code of a mod that adds a crosshair into * the game Blackwake. * * @author Lauchmelder - * @version v0.3 + * @version v0.3.1 */ - using System; using System.Collections.Generic; using System.Linq; @@ -16,24 +15,22 @@ using UnityEngine; namespace CrosshairMod { - - /* - * This is the Main class that is responsible for - * handling initializing and updating the components - * of the crosshair mod. - */ + /// + /// Class that gets loaded by the ModLoader. Calls every component of the Mod + /// public class CrosshairMod : MonoBehaviour { - // Define Hotkeys for Menu and Crosshair Toggle + /// + /// Default Hotkey Definitions + /// private char MENU_OPEN_KEY = 'H'; private char CH_TOGGLE_KEY = 'J'; - // This will be executed first void Start() { // Update the settings - Settings.LoadSettings(".\\Blackwake_Data\\Managed\\Mods\\chSettings.sett"); + Settings.LoadSettings(".\\Blackwake_Data\\Managed\\Mods\\Assets\\chSettings.sett"); // Create Crosshair Crosshair.Create(); // Create Panel @@ -44,7 +41,6 @@ namespace CrosshairMod CH_TOGGLE_KEY = (char)Settings.GetValue("hotkeyGUIToggle", true, CH_TOGGLE_KEY); } - // This gets called on every GUI Update (Can be multiple tiems per Frame) void OnGUI() { // Check for Key presses @@ -66,11 +62,10 @@ namespace CrosshairMod Crosshair.Render(); } - // Will be called when the application is closed void OnApplicationQuit() { // Save settings - Settings.SaveSettings(".\\Blackwake_Data\\Managed\\Mods\\chSettings.sett"); + Settings.SaveSettings(".\\Blackwake_Data\\Managed\\Mods\\Assets\\chSettings.sett"); Logging.Debug.Log("Saved Settings"); } } diff --git a/CrosshairMod/Settings.cs b/CrosshairMod/Settings.cs index 795ad70..a48bedc 100644 --- a/CrosshairMod/Settings.cs +++ b/CrosshairMod/Settings.cs @@ -6,16 +6,17 @@ using System.Text; namespace CrosshairMod { - /* - * The class that is responsible for loading and storing all the - * necessary settings. There is much room for improvement. - */ + /// + /// Loads, contains and handles settings + /// static class Settings { - // Initialize Settings dictionary private static Dictionary m_settings = new Dictionary(); - // Load settings from file + /// + /// Load settings from file + /// + /// public static void LoadSettings(string filepath) { Logging.Debug.Log("Accessing Settings at " + filepath); @@ -75,7 +76,10 @@ namespace CrosshairMod Logging.Log("Settings loaded."); } - // Converts the dictionary to a sett file + /// + /// Converts dictionary to a string to be stored in the settings file + /// + /// Save location public static void SaveSettings(string filepath) { string filecontent = ""; @@ -87,7 +91,11 @@ namespace CrosshairMod System.IO.File.WriteAllText(filepath, filecontent); } - // Adds a setting to the settings + /// + /// Create new setting and add it to the dictionary + /// + /// Setting name + /// Setting value public static void AddSetting(string key, int value) { if (m_settings.ContainsKey(key)) @@ -96,7 +104,12 @@ namespace CrosshairMod m_settings.Add(key, value); } - // Changes a settings value, and adds it if specified + /// + /// Change a settings value + /// + /// Setting name + /// New setting value + /// If the setting doesn't exist, create it public static void SetSetting(string key, int newVal, bool addIfDoesntExist = false) { // If the setting doesn't exist, either add and set it, or print a Debug.Warning @@ -117,9 +130,13 @@ namespace CrosshairMod m_settings[key] = newVal; } - // Tries to return the value belonging to a certain key - // If the specified key doesn't exist, it returns 0 and logs an error - // One can also specify that the setting should be created with some initial value + /// + /// Returns the value of a setting + /// + /// Setting name + /// Add the setting if it doesn't exist + /// Initial value of the setting in case it doesn't exist + /// public static int GetValue(string key, bool addIfDoesntExist = false, int initialValue = 0) { int value = 0; From d908c8d70f4e2d397cb2510441d16c98d477020a Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 4 Aug 2019 16:21:32 +0200 Subject: [PATCH 3/3] Reworked Input Objects --- CrosshairMod/Interface.cs | 24 +++++++++++------------- CrosshairMod/Interface/Button.cs | 10 ++++------ CrosshairMod/Interface/InputObject.cs | 9 ++------- CrosshairMod/Interface/Slider.cs | 10 ++++------ 4 files changed, 21 insertions(+), 32 deletions(-) diff --git a/CrosshairMod/Interface.cs b/CrosshairMod/Interface.cs index 1acb1c8..1d77afe 100644 --- a/CrosshairMod/Interface.cs +++ b/CrosshairMod/Interface.cs @@ -19,8 +19,7 @@ namespace CrosshairMod /// A list of all Objects (That includes buttons, sliders etc) inside the GUI Window /// This makes it easy to add more components if it is needed. /// - private static List m_inputs = new List(); - // TODO: Replace with dictionary, the whole concept of having IDs inside the objects is stupid and unnecessary + private static Dictionary m_inputs = new Dictionary(); /// /// RGBA Slider values @@ -43,8 +42,8 @@ namespace CrosshairMod /// Action to be executed when the button is pressed private static void AddButton(float x, float y, float width, float height, string label, string ID, params EventHandler[] onClickEvent) { - Input.Button buttonObj = new Input.Button(x, y, width, height, label, ID, onClickEvent); - m_inputs.Add(buttonObj); + Input.Button buttonObj = new Input.Button(x, y, width, height, label, onClickEvent); + m_inputs.Add(ID, buttonObj); } /// @@ -60,8 +59,8 @@ namespace CrosshairMod /// Key of the slider private static void AddSlider(float x, float y, float width, float height, float min, float max, float init, string ID) { - Input.Slider sliderObj = new Input.Slider(x, y, width, height, min, max, init, ID); - m_inputs.Add(sliderObj); + Input.Slider sliderObj = new Input.Slider(x, y, width, height, min, max, init); + m_inputs.Add(ID, sliderObj); } /// @@ -111,7 +110,6 @@ namespace CrosshairMod public static void Render() { - // TODO: Think about making this a GUILayout.ModalWindow if (m_visible) GUI.Window(420, new Rect(m_position, m_dimension), RenderFunc, "Crosshair Settings"); } @@ -136,10 +134,10 @@ namespace CrosshairMod // Set crosshair Colour after getting slider values IEnumerable it = m_inputs.OfType(); - rSliderValue = (int)it.First(slider => slider.ID == "red").Value; - gSliderValue = (int)it.First(slider => slider.ID == "green").Value; - bSliderValue = (int)it.First(slider => slider.ID == "blue").Value; - aSliderValue = (int)it.First(slider => slider.ID == "alpha").Value; + rSliderValue = (int)((Input.Slider)m_inputs["red"]).Value; + gSliderValue = (int)((Input.Slider)m_inputs["green"]).Value; + bSliderValue = (int)((Input.Slider)m_inputs["blue"]).Value; + aSliderValue = (int)((Input.Slider)m_inputs["alpha"]).Value; Crosshair.SetColor(rSliderValue, gSliderValue, bSliderValue, aSliderValue); @@ -153,9 +151,9 @@ namespace CrosshairMod /// private static void HandleInputObjects() { - foreach(InputObject obj in m_inputs) + foreach(KeyValuePair obj in m_inputs) { - obj.Update(); + obj.Value.Update(); } } } diff --git a/CrosshairMod/Interface/Button.cs b/CrosshairMod/Interface/Button.cs index 6e4f259..17e42db 100644 --- a/CrosshairMod/Interface/Button.cs +++ b/CrosshairMod/Interface/Button.cs @@ -29,10 +29,9 @@ namespace CrosshairMod.Input /// Width /// Height /// Text inside the button - /// Button ID /// Action to execute when button is pressed - public Button(float x, float y, float width, float height, string label, string ID, params EventHandler[] OnClickEvent) - : base(x, y, width, height, ID) + public Button(float x, float y, float width, float height, string label, params EventHandler[] OnClickEvent) + : base(x, y, width, height) { Logging.Debug.Log("Button Constructor: " + label); @@ -47,9 +46,8 @@ namespace CrosshairMod.Input /// /// Sad, pathetic default constructor /// - /// - public Button(string ID) - : base(0, 0, 0, 0, ID) + public Button() + : base(0, 0, 0, 0) { // Empty } diff --git a/CrosshairMod/Interface/InputObject.cs b/CrosshairMod/Interface/InputObject.cs index 11743bf..cd039f0 100644 --- a/CrosshairMod/Interface/InputObject.cs +++ b/CrosshairMod/Interface/InputObject.cs @@ -6,7 +6,7 @@ using System.Text; using UnityEngine; -namespace CrosshairMod +namespace CrosshairMod.Input { /// /// Base class for all InputObjects. Defines basic attributes that @@ -15,9 +15,6 @@ namespace CrosshairMod abstract class InputObject { public Vector2 position, dimensions; - - // TODO: Remove once dictionary was implemented - public readonly string ID; /// /// Create new InputObject @@ -26,12 +23,10 @@ namespace CrosshairMod /// Y-Position /// Width /// Height - /// ID - public InputObject(float x, float y, float width, float height, string ID) + public InputObject(float x, float y, float width, float height) { this.position = new Vector2(x, y); this.dimensions = new Vector2(width, height); - this.ID = ID; } /// diff --git a/CrosshairMod/Interface/Slider.cs b/CrosshairMod/Interface/Slider.cs index df6a28d..bab072e 100644 --- a/CrosshairMod/Interface/Slider.cs +++ b/CrosshairMod/Interface/Slider.cs @@ -31,9 +31,8 @@ namespace CrosshairMod.Input /// Minimum Slider value /// Maximum Slider value /// Initial Slider value - /// ID - public Slider(float x, float y, float width, float height, float min, float max, float init, string ID) - : base(x, y, width, height, ID) + public Slider(float x, float y, float width, float height, float min, float max, float init) + : base(x, y, width, height) { Min = min; Max = max; @@ -43,9 +42,8 @@ namespace CrosshairMod.Input /// /// Sad, pathetic default constructor /// - /// - public Slider(string ID) - :base (0, 0, 0, 0, ID) + public Slider() + :base (0, 0, 0, 0) { }