Client LuaCsForBarotrauma
TestScreen.cs
1 #nullable enable
2 using System.Linq;
4 using Microsoft.Xna.Framework;
5 using Microsoft.Xna.Framework.Graphics;
6 
7 /*
8  * This screen only exists because I'm going mental without access to EnC on Linux.
9  * This is fucking stupid and horrible.
10  * Remember to remove this crap eventually.
11  * - Markus
12  */
13 namespace Barotrauma
14 {
15  internal sealed class TestScreen : EditorScreen
16  {
17  public override Camera Cam { get; }
18 
19  private Item? miniMapItem;
20 
21  public static Character? dummyCharacter;
22  public static Effect? BlueprintEffect;
23  public TabMenu? TabMenu;
24 
25  public TestScreen()
26  {
27  Cam = new Camera();
28  BlueprintEffect = GameMain.GameScreen.BlueprintEffect;
29 
30  new GUIButton(new RectTransform(new Point(256, 256), Frame.RectTransform), "Reload shader")
31  {
32  OnClicked = (button, o) =>
33  {
34  BlueprintEffect.Dispose();
35  GameMain.Instance.Content.Unload();
36  BlueprintEffect = EffectLoader.Load("Effects/blueprintshader");
37  GameMain.GameScreen.BlueprintEffect = BlueprintEffect;
38  return true;
39  }
40  };
41  }
42 
43  public override void Select()
44  {
45  base.Select();
46  if (dummyCharacter is { Removed: false })
47  {
48  dummyCharacter.Remove();
49  }
50 
51  dummyCharacter = Character.Create(CharacterPrefab.HumanSpeciesName, Vector2.Zero, "", id: Entity.DummyID, hasAi: false);
52  dummyCharacter.Info.Job = new Job(JobPrefab.Prefabs.FirstOrDefault(static jp => jp.Identifier == "captain"));
53  dummyCharacter.Info.Name = "Galldren";
54  dummyCharacter.Inventory.CreateSlots();
55  dummyCharacter.Info.GiveExperience(999999);
56 
57  miniMapItem = new Item(ItemPrefab.Find(null, "circuitbox".ToIdentifier()), Vector2.Zero, null, 1337, false);
58  miniMapItem.GetComponent<Holdable>().AttachToWall();
59 
60  Character.Controlled = dummyCharacter;
61  GameMain.World.ProcessChanges();
62  }
63 
64  public override void AddToGUIUpdateList()
65  {
67  CharacterHUD.AddToGUIUpdateList(dummyCharacter);
68  dummyCharacter?.SelectedItem?.AddToGUIUpdateList();
69  TabMenu?.AddToGUIUpdateList();
70  }
71 
72  public override void Update(double deltaTime)
73  {
74  base.Update(deltaTime);
75  TabMenu?.Update((float)deltaTime);
76 
77  if (dummyCharacter is { } dummy && miniMapItem is { } item)
78  {
79  if (dummy.SelectedItem != item)
80  {
81  dummy.SelectedItem = item;
82  }
83 
84  dummy.SelectedItem?.UpdateHUD(Cam, dummy, (float)deltaTime);
85  item.SendSignal("1", "signal_in1");
86  Vector2 pos = FarseerPhysics.ConvertUnits.ToSimUnits(item.Position);
87 
88  foreach (Limb limb in dummy.AnimController.Limbs)
89  {
90  limb.body.SetTransform(pos, 0.0f);
91  }
92 
93  if (dummy.AnimController?.Collider is { } collider)
94  {
95  collider.SetTransform(pos, 0);
96  }
97 
98  dummy.ControlLocalPlayer((float)deltaTime, Cam, false);
99  dummy.Control((float)deltaTime, Cam);
100  }
101  }
102 
103  public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
104  {
105  base.Draw(deltaTime, graphics, spriteBatch);
106  graphics.Clear(BackgroundColor);
107 
108  spriteBatch.Begin(SpriteSortMode.BackToFront, transformMatrix: Cam.Transform);
109  miniMapItem?.Draw(spriteBatch, false);
110  if (dummyCharacter is { } dummy)
111  {
112  dummyCharacter.DrawFront(spriteBatch, Cam);
113  dummyCharacter.Draw(spriteBatch, Cam);
114  }
115 
116  spriteBatch.End();
117 
118  spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: GUI.SamplerState);
119 
120  GUI.Draw(Cam, spriteBatch);
121 
122  dummyCharacter?.DrawHUD(spriteBatch, Cam, false);
123 
124  spriteBatch.End();
125  }
126  }
127 }
virtual void AddToGUIUpdateList(bool ignoreChildren=false, int order=0)
RectTransform RectTransform