Client LuaCsForBarotrauma
BarotraumaClient/ClientSource/Networking/KarmaManager.cs
1 using Microsoft.Xna.Framework;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 
7 namespace Barotrauma
8 {
9  partial class KarmaManager : ISerializableEntity
10  {
11  public void CreateSettingsFrame(GUIComponent parent)
12  {
13  if (TextManager.ContainsTag("Karma.ResetKarmaBetweenRounds"))
14  {
15  CreateLabeledTickBox(parent, "ResetKarmaBetweenRounds");
16  }
17 
18  CreateLabeledSlider(parent, 0.0f, 40.0f, 1.0f, nameof(KickBanThreshold));
19  if (TextManager.ContainsTag("Karma.KicksBeforeBan"))
20  {
21  CreateLabeledNumberInput(parent, 0, 10, nameof(KicksBeforeBan));
22  }
23  CreateLabeledSlider(parent, 0.0f, 50.0f, 1.0f, nameof(HerpesThreshold));
24 
25  CreateLabeledSlider(parent, 0.0f, 0.5f, 0.01f, nameof(KarmaDecay));
26  CreateLabeledSlider(parent, 50.0f, 100.0f, 1.0f, nameof(KarmaDecayThreshold));
27  CreateLabeledSlider(parent, 0.0f, 0.5f, 0.01f, nameof(KarmaIncrease));
28  CreateLabeledSlider(parent, 0.0f, 50.0f, 1.0f, nameof(KarmaIncreaseThreshold));
29 
30  new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.12f), parent.RectTransform), TextManager.Get("Karma.PositiveActions"),
31  textAlignment: Alignment.Center, font: GUIStyle.SubHeadingFont)
32  {
33  CanBeFocused = false
34  };
35 
36  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(StructureRepairKarmaIncrease));
37  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(HealFriendlyKarmaIncrease));
38  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(DamageEnemyKarmaIncrease));
39  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(ItemRepairKarmaIncrease));
40  CreateLabeledSlider(parent, 0.0f, 10.0f, 0.05f, nameof(ExtinguishFireKarmaIncrease));
41  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(BallastFloraKarmaIncrease));
42 
43  new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.12f), parent.RectTransform), TextManager.Get("Karma.NegativeActions"),
44  textAlignment: Alignment.Center, font: GUIStyle.SubHeadingFont)
45  {
46  CanBeFocused = false
47  };
48 
49  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(StructureDamageKarmaDecrease));
50  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(DamageFriendlyKarmaDecrease));
51  //hide these for now if a localized text is not available
52  if (TextManager.ContainsTag("Karma." + nameof(StunFriendlyKarmaDecrease)))
53  {
54  CreateLabeledSlider(parent, 0.0f, 1.0f, 0.01f, nameof(StunFriendlyKarmaDecrease));
55  }
56  if (TextManager.ContainsTag("Karma." + nameof(StunFriendlyKarmaDecreaseThreshold)))
57  {
58  CreateLabeledSlider(parent, 0.0f, 10.0f, 1.0f, nameof(StunFriendlyKarmaDecreaseThreshold));
59  }
60  CreateLabeledSlider(parent, 0.0f, 100.0f, 1.0f, nameof(ReactorMeltdownKarmaDecrease));
61  CreateLabeledSlider(parent, 0.0f, 10.0f, 0.05f, nameof(ReactorOverheatKarmaDecrease));
62  CreateLabeledNumberInput(parent, 0, 20, nameof(AllowedWireDisconnectionsPerMinute));
63  CreateLabeledSlider(parent, 0.0f, 20.0f, 0.5f, nameof(WireDisconnectionKarmaDecrease));
64  CreateLabeledSlider(parent, 0.0f, 30.0f, 1.0f, nameof(SpamFilterKarmaDecrease));
65 
66  //hide these for now if a localized text is not available
67  if (TextManager.ContainsTag("Karma." + nameof(DangerousItemStealKarmaDecrease)))
68  {
69  CreateLabeledSlider(parent, 0.0f, 30.0f, 1.0f, nameof(DangerousItemStealKarmaDecrease));
70  }
71  if (TextManager.ContainsTag("Karma." + nameof(DangerousItemStealBots)))
72  {
73  CreateLabeledTickBox(parent, nameof(DangerousItemStealBots));
74  }
75  CreateLabeledSlider(parent, 0.0f, 30.0f, 0.5f, nameof(DangerousItemContainKarmaDecrease));
76  CreateLabeledTickBox(parent, nameof(IsDangerousItemContainKarmaDecreaseIncremental));
77  CreateLabeledSlider(parent, 0.0f, 100.0f, 1.0f, nameof(MaxDangerousItemContainKarmaDecrease));
78  }
79 
80  private void CreateLabeledSlider(GUIComponent parent, float min, float max, float step, string propertyName)
81  {
82  var container = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), parent.RectTransform), isHorizontal: true)
83  {
84  Stretch = true,
85  RelativeSpacing = 0.05f,
86  ToolTip = TextManager.Get("Karma." + propertyName + "ToolTip")
87  };
88 
89  LocalizedString labelText = TextManager.Get("Karma." + propertyName);
90  var label = new GUITextBlock(new RectTransform(new Vector2(0.7f, 1.0f), container.RectTransform),
91  labelText, textAlignment: Alignment.CenterLeft, font: GUIStyle.SmallFont)
92  {
93  ToolTip = TextManager.Get("Karma." + propertyName + "ToolTip")
94  };
95 
96  var slider = new GUIScrollBar(new RectTransform(new Vector2(0.3f, 1.0f), container.RectTransform), barSize: 0.1f, style: "GUISlider")
97  {
98  Step = step <= 0.0f ? 0.0f : step / (max - min),
99  Range = new Vector2(min, max),
100  OnMoved = (GUIScrollBar scrollBar, float barScroll) =>
101  {
102  string formattedValueStr = step >= 1.0f ?
103  ((int)scrollBar.BarScrollValue).ToString() :
104  scrollBar.BarScrollValue.Format(decimalCount: step <= 0.1f ? 2 : 1);
105  label.Text = TextManager.AddPunctuation(':', labelText, formattedValueStr);
106  return true;
107  }
108  };
109  container.RectTransform.MinSize = new Point(0, container.RectTransform.Children.Max(c => c.MinSize.Y));
110  GameMain.NetworkMember.ServerSettings.AssignGUIComponent(propertyName, slider);
111  slider.OnMoved(slider, slider.BarScroll);
112  }
113 
114  private void CreateLabeledNumberInput(GUIComponent parent, int min, int max, string propertyName)
115  {
116  var container = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), parent.RectTransform), isHorizontal: true)
117  {
118  Stretch = true,
119  RelativeSpacing = 0.05f,
120  ToolTip = TextManager.Get("Karma." + propertyName + "ToolTip")
121  };
122 
123  LocalizedString labelText = TextManager.Get("Karma." + propertyName);
124  new GUITextBlock(new RectTransform(new Vector2(0.7f, 1.0f), container.RectTransform), labelText, textAlignment: Alignment.CenterLeft, font: GUIStyle.SmallFont)
125  {
126  ToolTip = TextManager.Get("Karma." + propertyName + "ToolTip")
127  };
128 
129  var numInput = new GUINumberInput(new RectTransform(new Vector2(0.3f, 1.0f), container.RectTransform), NumberType.Int)
130  {
131  MinValueInt = min,
132  MaxValueInt = max
133  };
134 
135  container.RectTransform.MinSize = new Point(0, container.RectTransform.Children.Max(c => c.MinSize.Y));
136  GameMain.NetworkMember.ServerSettings.AssignGUIComponent(propertyName, numInput);
137  }
138 
139  private void CreateLabeledTickBox(GUIComponent parent, string propertyName)
140  {
141  var tickBox = new GUITickBox(new RectTransform(new Vector2(0.3f, 0.1f), parent.RectTransform), TextManager.Get("Karma." + propertyName))
142  {
143  ToolTip = TextManager.Get("Karma." + propertyName + "ToolTip").Fallback("")
144  };
145  GameMain.NetworkMember.ServerSettings.AssignGUIComponent(propertyName, tickBox);
146  }
147  }
148 }
RectTransform RectTransform
Point?? MinSize
Min size in pixels. Does not affect scaling.
NumberType
Definition: Enums.cs:715