Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
PlayersScreen.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3
4namespace Game {
5 public class PlayersScreen : Screen {
9
12 public const string fName = "PlayersScreen";
13
14 public PlayersScreen() {
15 XElement node = ContentManager.Get<XElement>("Screens/PlayersScreen");
16 LoadContents(this, node);
17 m_playersPanel = Children.Find<StackPanelWidget>("PlayersPanel");
18 m_addPlayerButton = Children.Find<ButtonWidget>("AddPlayerButton");
19 m_screenLayoutButton = Children.Find<ButtonWidget>("ScreenLayoutButton");
20 }
21
22 public override void Enter(object[] parameters) {
23 m_subsystemPlayers = (SubsystemPlayers)parameters[0];
24 m_subsystemPlayers.PlayerAdded += PlayersChanged;
25 m_subsystemPlayers.PlayerRemoved += PlayersChanged;
27 }
28
29 public override void Leave() {
30 m_subsystemPlayers.PlayerAdded -= PlayersChanged;
31 m_subsystemPlayers.PlayerRemoved -= PlayersChanged;
32 m_subsystemPlayers = null;
34 m_playersPanel.Children.Clear();
35 }
36
37 public override void Update() {
38 if (m_addPlayerButton.IsClicked) {
39 SubsystemGameInfo subsystemGameInfo = m_subsystemPlayers.Project.FindSubsystem<SubsystemGameInfo>(true);
40 if (subsystemGameInfo.WorldSettings.GameMode == GameMode.Cruel) {
42 null,
43 new MessageDialog(
47 null,
48 null
49 )
50 );
51 }
52 else if (subsystemGameInfo.WorldSettings.GameMode == GameMode.Adventure) {
54 null,
55 new MessageDialog(
59 null,
60 null
61 )
62 );
63 }
64 else if (m_subsystemPlayers.PlayersData.Count >= 4) {
66 null,
67 new MessageDialog(
71 null,
72 null
73 )
74 );
75 }
76 else {
78 }
79 }
80 if (m_screenLayoutButton.IsClicked) {
81 ScreenLayout[] array = null;
82 if (m_subsystemPlayers.PlayersData.Count == 1) {
83 array = new ScreenLayout[1];
84 }
85 else if (m_subsystemPlayers.PlayersData.Count == 2) {
86 array = [ScreenLayout.DoubleVertical, ScreenLayout.DoubleHorizontal, ScreenLayout.DoubleOpposite];
87 }
88 else if (m_subsystemPlayers.PlayersData.Count == 3) {
89 array = [ScreenLayout.TripleVertical, ScreenLayout.TripleHorizontal, ScreenLayout.TripleEven, ScreenLayout.TripleOpposite];
90 }
91 else if (m_subsystemPlayers.PlayersData.Count == 4) {
92 array = [ScreenLayout.Quadruple, ScreenLayout.QuadrupleOpposite];
93 }
94 if (array != null) {
96 null,
99 array,
100 80f,
101 delegate(object o) {
102 string str = o.ToString();
103 string name = $"Textures/Atlas/ScreenLayout{str}";
104 return new StackPanelWidget {
105 Direction = LayoutDirection.Horizontal,
107 Children = {
108 new RectangleWidget {
109 Size = new Vector2(98f, 56f),
111 FillColor = Color.White,
112 OutlineColor = Color.Transparent,
113 Margin = new Vector2(10f, 0f)
114 },
115 new StackPanelWidget {
116 Direction = LayoutDirection.Vertical,
118 Margin = new Vector2(10f, 0f),
119 Children = {
120 new LabelWidget { Text = StringsManager.GetString($"ScreenLayout.{str}.Name") },
121 new LabelWidget {
122 Text = StringsManager.GetString($"ScreenLayout.{str}.Description"), Color = Color.Gray
123 }
124 }
125 }
126 }
127 };
128 },
129 delegate(object o) {
130 if (o != null) {
131 if (m_subsystemPlayers.PlayersData.Count == 1) {
133 }
134 if (m_subsystemPlayers.PlayersData.Count == 2) {
136 }
137 if (m_subsystemPlayers.PlayersData.Count == 3) {
139 }
140 if (m_subsystemPlayers.PlayersData.Count == 4) {
142 }
143 }
144 }
145 )
146 );
147 }
148 }
149 if (Input.Back
150 || Input.Cancel
151 || Children.Find<ButtonWidget>("TopBar.Back").IsClicked) {
153 }
154 }
155
156 public virtual void UpdatePlayersPanel() {
157 m_playersPanel.Children.Clear();
158 foreach (PlayerData playersDatum in m_subsystemPlayers.PlayersData) {
159 m_playersPanel.Children.Add(new PlayerWidget(playersDatum, m_characterSkinsCache));
160 }
161 }
162
163 public void PlayersChanged(PlayerData playerData) {
165 }
166 }
167}
readonly WidgetsList Children
static object Get(Type type, string name)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
static string GetContentWidgets(string name, string prop)
CharacterSkinsCache m_characterSkinsCache
SubsystemPlayers m_subsystemPlayers
ButtonWidget m_addPlayerButton
void PlayersChanged(PlayerData playerData)
ButtonWidget m_screenLayoutButton
virtual void UpdatePlayersPanel()
override void Enter(object[] parameters)
StackPanelWidget m_playersPanel
static void SwitchScreen(string name, params object[] parameters)
static ScreenLayout ScreenLayout2
static ScreenLayout ScreenLayout4
static ScreenLayout ScreenLayout3
static ScreenLayout ScreenLayout1
static string GetString(string name)
virtual WidgetAlignment VerticalAlignment
virtual Vector2 Margin
virtual void LoadContents(object eventsTarget, XElement node)
static Color Transparent
定义 Color.cs:5
static Color White