/
CreateCharNameSelect.cs
180 lines (146 loc) · 5.27 KB
/
CreateCharNameSelect.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
// Project: Daggerfall Unity
// Copyright: Copyright (C) 2009-2023 Daggerfall Workshop
// Web Site: http://www.dfworkshop.net
// License: MIT License (http://www.opensource.org/licenses/mit-license.php)
// Source Code: https://github.com/Interkarma/daggerfall-unity
// Original Author: Gavin Clayton (interkarma@dfworkshop.net)
// Contributors:
//
// Notes:
//
using UnityEngine;
using System;
using DaggerfallWorkshop.Game.UserInterface;
using DaggerfallWorkshop.Game.Utility;
using DaggerfallWorkshop.Game.Entity;
using DaggerfallWorkshop.Utility;
namespace DaggerfallWorkshop.Game.UserInterfaceWindows
{
/// <summary>
/// Implements the enter name window.
/// </summary>
public class CreateCharNameSelect : DaggerfallPopupWindow
{
const string nativeImgName = "CHAR00I0.IMG";
NameHelper nameHelper = new NameHelper();
RaceTemplate raceTemplate;
Genders gender;
Texture2D nativeTexture;
TextBox textBox = new TextBox();
Button randomNameButton = new Button();
Button okButton = new Button();
IMECompositionMode prevIME;
public RaceTemplate RaceTemplate
{
get { return raceTemplate; }
set { SetRaceTemplate(value); }
}
public Genders Gender
{
get { return gender; }
set { SetGender(value); }
}
public string CharacterName
{
get { return textBox.Text; }
set { textBox.Text = value; }
}
public CreateCharNameSelect(IUserInterfaceManager uiManager)
: base(uiManager)
{
}
protected override void Setup()
{
// Load native texture
nativeTexture = DaggerfallUI.GetTextureFromImg(nativeImgName);
if (!nativeTexture)
throw new Exception("CreateCharNameSelect: Could not load native texture.");
// Setup native panel background
NativePanel.BackgroundTexture = nativeTexture;
// Text edit box
textBox.Position = new Vector2(80, 5);
textBox.Size = new Vector2(214, 7);
NativePanel.Components.Add(textBox);
// Random name button
randomNameButton = DaggerfallUI.AddButton(new Rect(279, 3, 36, 10), NativePanel);
randomNameButton.Label.Text = TextManager.Instance.GetLocalizedText("random");
randomNameButton.Label.ShadowColor = Color.black;
randomNameButton.BackgroundColor = new Color(0.5f, 0.5f, 0.5f, 0.75f);
randomNameButton.OnMouseClick += RandomNameButton_OnMouseClick;
// OK button
okButton = DaggerfallUI.AddButton(new Rect(263, 172, 39, 22), NativePanel);
okButton.OnMouseClick += OkButton_OnMouseClick;
// First display of random button
ShowRandomButton();
}
public override void OnPush()
{
// Subsequent display of random button
ShowRandomButton();
base.OnPush();
// Enable IME composition during input
prevIME = Input.imeCompositionMode;
Input.imeCompositionMode = IMECompositionMode.On;
}
public override void OnPop()
{
base.OnPop();
// Restore previous IME composition mode
Input.imeCompositionMode = prevIME;
}
void ShowRandomButton()
{
// Must have a race template set
if (raceTemplate == null)
{
randomNameButton.Enabled = false;
return;
}
randomNameButton.Enabled = true;
// Randomise DFRandom seed from System.Random
// A bit of a hack but better than starting with a seed of 0 every time
System.Random random = new System.Random();
DFRandom.Seed = (uint)random.Next();
}
public override void Update()
{
base.Update();
if (Input.GetKeyDown(KeyCode.Return))
AcceptName();
}
void AcceptName()
{
if (textBox.Text.Length > 0)
CloseWindow();
}
void SetRaceTemplate(RaceTemplate raceTemplate)
{
if (this.raceTemplate != null)
{
// Empty name textbox if race ID changed
if (this.raceTemplate.ID != raceTemplate.ID)
textBox.Text = string.Empty;
}
this.raceTemplate = raceTemplate;
}
void SetGender(Genders gender)
{
// Empty name textbox if gender changed
if (this.gender != gender)
textBox.Text = string.Empty;
this.gender = gender;
}
#region Event Handlers
private void RandomNameButton_OnMouseClick(BaseScreenComponent sender, Vector2 position)
{
// Generate name based on race
NameHelper.BankTypes bankType = MacroHelper.GetNameBank((Races)raceTemplate.ID);
textBox.Text = nameHelper.FullName(bankType, gender);
}
void OkButton_OnMouseClick(BaseScreenComponent sender, Vector2 position)
{
AcceptName();
}
#endregion
}
}