diff --git a/.clang-format b/.clang-format
index 9ea77e7a..15b6fd78 100644
--- a/.clang-format
+++ b/.clang-format
@@ -18,3 +18,15 @@ PointerAlignment: Right
AllowShortFunctionsOnASingleLine: Inline
AllowShortCaseLabelsOnASingleLine: true
ConstructorInitializerAllOnOneLineOrOnePerLine: true
+---
+# The style for AngelScript source files
+Language: Java
+UseTab: Never
+ColumnLimit: 100
+
+NamespaceIndentation: All
+IndentCaseLabels: true
+
+AllowShortFunctionsOnASingleLine: Inline
+AllowShortCaseLabelsOnASingleLine: true
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
diff --git a/Resources/Scripts/Base/Base.as b/Resources/Scripts/Base/Base.as
index c265ecb8..424a5cea 100644
--- a/Resources/Scripts/Base/Base.as
+++ b/Resources/Scripts/Base/Base.as
@@ -1,22 +1,21 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
- */
-
- #include "Utils.as"
+ */
+
+#include "Utils.as"
diff --git a/Resources/Scripts/Base/Utils.as b/Resources/Scripts/Base/Utils.as
index fefac9e5..750c2e46 100644
--- a/Resources/Scripts/Base/Utils.as
+++ b/Resources/Scripts/Base/Utils.as
@@ -19,133 +19,117 @@
*/
namespace spades {
- // AngelScript doesn't seem to support user-defined template functions...
+ // AngelScript doesn't seem to support user-defined template functions...
- uint Min(uint a, uint b) {
- return (a < b) ? a : b;
- }
+ uint Min(uint a, uint b) { return (a < b) ? a : b; }
- uint Max(uint a, uint b) {
- return (a > b) ? a : b;
- }
+ uint Max(uint a, uint b) { return (a > b) ? a : b; }
- int Min(int a, int b) {
- return (a < b) ? a : b;
- }
+ int Min(int a, int b) { return (a < b) ? a : b; }
- int Max(int a, int b) {
- return (a > b) ? a : b;
- }
+ int Max(int a, int b) { return (a > b) ? a : b; }
- float Min(float a, float b) {
- return (a < b) ? a : b;
- }
+ float Min(float a, float b) { return (a < b) ? a : b; }
- float Max(float a, float b) {
- return (a > b) ? a : b;
- }
+ float Max(float a, float b) { return (a > b) ? a : b; }
- float Clamp(float val, float lower, float upper) {
- return Min(Max(val, lower), upper);
- }
+ float Clamp(float val, float lower, float upper) { return Min(Max(val, lower), upper); }
- int Clamp(int val, int lower, int upper) {
- return Min(Max(val, lower), upper);
- }
+ int Clamp(int val, int lower, int upper) { return Min(Max(val, lower), upper); }
- uint Clamp(uint val, uint lower, uint upper) {
- return Min(Max(val, lower), upper);
- }
+ uint Clamp(uint val, uint lower, uint upper) { return Min(Max(val, lower), upper); }
- /** Renders an image in the way CSS border-image does. */
- void DrawSliceImage(Renderer@ renderer, Image@ image, float x, float y, float w, float h, float border) {
- float iw = image.Width;
- float ih = image.Height;
- renderer.DrawImage(image, AABB2(x, y, border, border),
- AABB2(0.f, 0.f, border, border));
- renderer.DrawImage(image, AABB2(x + w - border, y, border, border),
- AABB2(iw - border, 0.f, border, border));
- renderer.DrawImage(image, AABB2(x, y + h - border, border, border),
- AABB2(0.f, ih - border, border, border));
- renderer.DrawImage(image, AABB2(x + w - border, y + h - border, border, border),
- AABB2(iw - border, ih - border, border, border));
- renderer.DrawImage(image, AABB2(x + border, y, w - border - border, border),
- AABB2(border, 0.f, iw - border - border, border));
- renderer.DrawImage(image, AABB2(x + border, y + h - border, w - border - border, border),
- AABB2(border, ih - border, iw - border - border, border));
- renderer.DrawImage(image, AABB2(x, y + border, border, h - border - border),
- AABB2(0.f, border, border, ih - border - border));
- renderer.DrawImage(image, AABB2(x + w - border, y + border, border, h - border - border),
- AABB2(iw - border, border, border, ih - border - border));
- renderer.DrawImage(image, AABB2(x + border, y + border, w - border - border, h - border - border),
- AABB2(border, border, iw - border - border, ih - border - border));
- }
+ /** Renders an image in the way CSS border-image does. */
+ void DrawSliceImage(Renderer @renderer, Image @image, float x, float y, float w, float h,
+ float border) {
+ float iw = image.Width;
+ float ih = image.Height;
+ renderer.DrawImage(image, AABB2(x, y, border, border), AABB2(0.f, 0.f, border, border));
+ renderer.DrawImage(image, AABB2(x + w - border, y, border, border),
+ AABB2(iw - border, 0.f, border, border));
+ renderer.DrawImage(image, AABB2(x, y + h - border, border, border),
+ AABB2(0.f, ih - border, border, border));
+ renderer.DrawImage(image, AABB2(x + w - border, y + h - border, border, border),
+ AABB2(iw - border, ih - border, border, border));
+ renderer.DrawImage(image, AABB2(x + border, y, w - border - border, border),
+ AABB2(border, 0.f, iw - border - border, border));
+ renderer.DrawImage(image, AABB2(x + border, y + h - border, w - border - border, border),
+ AABB2(border, ih - border, iw - border - border, border));
+ renderer.DrawImage(image, AABB2(x, y + border, border, h - border - border),
+ AABB2(0.f, border, border, ih - border - border));
+ renderer.DrawImage(image, AABB2(x + w - border, y + border, border, h - border - border),
+ AABB2(iw - border, border, border, ih - border - border));
+ renderer.DrawImage(image,
+ AABB2(x + border, y + border, w - border - border, h - border - border),
+ AABB2(border, border, iw - border - border, ih - border - border));
+ }
- /** Returns the byte index for a certain character index. */
- int GetByteIndexForString(string s, int charIndex, int start = 0) {
- int len = s.length;
- while(start < len && charIndex > 0) {
- int c = s[start];
- if((c & 0x80) == 0) {
- charIndex--;
- start += 1;
- } else if((c & 0xe0) == 0xc0) {
- charIndex--;
- start += 2;
- } else if((c & 0xf0) == 0xe0) {
- charIndex--;
- start += 3;
- } else if((c & 0xf8) == 0xf0) {
- charIndex--;
- start += 4;
- } else if((c & 0xfc) == 0xf8) {
- charIndex--;
- start += 5;
- } else if((c & 0xfe) == 0xfc) {
- charIndex--;
- start += 6;
- } else{
- // invalid!
- charIndex--;
- start++;
- }
- }
+ /** Returns the byte index for a certain character index. */
+ int GetByteIndexForString(string s, int charIndex, int start = 0) {
+ int len = s.length;
+ while (start < len && charIndex > 0) {
+ int c = s[start];
+ if ((c & 0x80) == 0) {
+ charIndex--;
+ start += 1;
+ } else if ((c & 0xe0) == 0xc0) {
+ charIndex--;
+ start += 2;
+ } else if ((c & 0xf0) == 0xe0) {
+ charIndex--;
+ start += 3;
+ } else if ((c & 0xf8) == 0xf0) {
+ charIndex--;
+ start += 4;
+ } else if ((c & 0xfc) == 0xf8) {
+ charIndex--;
+ start += 5;
+ } else if ((c & 0xfe) == 0xfc) {
+ charIndex--;
+ start += 6;
+ } else {
+ // invalid!
+ charIndex--;
+ start++;
+ }
+ }
- if(start > len) start = len;
- return start;
- }
+ if (start > len)
+ start = len;
+ return start;
+ }
- /** Returns the byte index for a certain character index. */
- int GetCharIndexForString(string s, int byteIndex, int start = 0) {
- int len = s.length;
- int charIndex = 0;
- while(start < len && start < byteIndex && byteIndex > 0) {
- int c = s[start];
- if((c & 0x80) == 0) {
- charIndex++;
- start += 1;
- } else if((c & 0xe0) == 0xc0) {
- charIndex++;
- start += 2;
- } else if((c & 0xf0) == 0xe0) {
- charIndex++;
- start += 3;
- } else if((c & 0xf8) == 0xf0) {
- charIndex++;
- start += 4;
- } else if((c & 0xfc) == 0xf8) {
- charIndex++;
- start += 5;
- } else if((c & 0xfe) == 0xfc) {
- charIndex++;
- start += 6;
- } else {
- // invalid!
- charIndex++;
- start++;
- }
- }
+ /** Returns the byte index for a certain character index. */
+ int GetCharIndexForString(string s, int byteIndex, int start = 0) {
+ int len = s.length;
+ int charIndex = 0;
+ while (start < len && start < byteIndex && byteIndex > 0) {
+ int c = s[start];
+ if ((c & 0x80) == 0) {
+ charIndex++;
+ start += 1;
+ } else if ((c & 0xe0) == 0xc0) {
+ charIndex++;
+ start += 2;
+ } else if ((c & 0xf0) == 0xe0) {
+ charIndex++;
+ start += 3;
+ } else if ((c & 0xf8) == 0xf0) {
+ charIndex++;
+ start += 4;
+ } else if ((c & 0xfc) == 0xf8) {
+ charIndex++;
+ start += 5;
+ } else if ((c & 0xfe) == 0xfc) {
+ charIndex++;
+ start += 6;
+ } else {
+ // invalid!
+ charIndex++;
+ start++;
+ }
+ }
- return charIndex;
- }
+ return charIndex;
+ }
}
diff --git a/Resources/Scripts/Gui/Client/ChatLogWindow.as b/Resources/Scripts/Gui/Client/ChatLogWindow.as
index da794d56..ecaa22df 100644
--- a/Resources/Scripts/Gui/Client/ChatLogWindow.as
+++ b/Resources/Scripts/Gui/Client/ChatLogWindow.as
@@ -21,10 +21,10 @@
namespace spades {
- class ChatLogSayWindow: ClientChatWindow {
- ChatLogWindow@ owner;
+ class ChatLogSayWindow : ClientChatWindow {
+ ChatLogWindow @owner;
- ChatLogSayWindow(ChatLogWindow@ own, bool isTeamChat) {
+ ChatLogSayWindow(ChatLogWindow @own, bool isTeamChat) {
super(own.ui, isTeamChat);
@owner = own;
}
@@ -35,20 +35,20 @@ namespace spades {
}
}
- class ChatLogWindow: spades::ui::UIElement {
+ class ChatLogWindow : spades::ui::UIElement {
float contentsTop, contentsHeight;
- ClientUI@ ui;
- private ClientUIHelper@ helper;
+ ClientUI @ui;
+ private ClientUIHelper @helper;
- private spades::ui::TextViewer@ viewer;
- ChatLogSayWindow@ sayWindow;
+ private spades::ui::TextViewer @viewer;
+ ChatLogSayWindow @sayWindow;
- private spades::ui::UIElement@ sayButton1;
- private spades::ui::UIElement@ sayButton2;
+ private spades::ui::UIElement @sayButton1;
+ private spades::ui::UIElement @sayButton2;
- ChatLogWindow(ClientUI@ ui) {
+ ChatLogWindow(ClientUI @ui) {
super(ui.manager);
@this.ui = ui;
@this.helper = ui.helper;
@@ -75,20 +75,16 @@ namespace spades {
{
spades::ui::Button button(Manager);
button.Caption = _Tr("Client", "Close");
- button.Bounds = AABB2(
- contentsLeft + contentsWidth - 150.f,
- contentsTop + contentsHeight - 30.f
- , 150.f, 30.f);
+ button.Bounds = AABB2(contentsLeft + contentsWidth - 150.f,
+ contentsTop + contentsHeight - 30.f, 150.f, 30.f);
@button.Activated = spades::ui::EventHandler(this.OnOkPressed);
AddChild(button);
}
{
spades::ui::Button button(Manager);
button.Caption = _Tr("Client", "Say Global");
- button.Bounds = AABB2(
- contentsLeft,
- contentsTop + contentsHeight - 30.f
- , 150.f, 30.f);
+ button.Bounds =
+ AABB2(contentsLeft, contentsTop + contentsHeight - 30.f, 150.f, 30.f);
@button.Activated = spades::ui::EventHandler(this.OnGlobalChat);
AddChild(button);
@this.sayButton1 = button;
@@ -96,10 +92,8 @@ namespace spades {
{
spades::ui::Button button(Manager);
button.Caption = _Tr("Client", "Say Team");
- button.Bounds = AABB2(
- contentsLeft + 155.f,
- contentsTop + contentsHeight - 30.f
- , 150.f, 30.f);
+ button.Bounds =
+ AABB2(contentsLeft + 155.f, contentsTop + contentsHeight - 30.f, 150.f, 30.f);
@button.Activated = spades::ui::EventHandler(this.OnTeamChat);
AddChild(button);
@this.sayButton2 = button;
@@ -107,7 +101,8 @@ namespace spades {
{
spades::ui::TextViewer viewer(Manager);
AddChild(viewer);
- viewer.Bounds = AABB2(contentsLeft, contentsTop, contentsWidth, contentsHeight - 40.f);
+ viewer.Bounds =
+ AABB2(contentsLeft, contentsTop, contentsWidth, contentsHeight - 40.f);
@this.viewer = viewer;
}
}
@@ -117,9 +112,7 @@ namespace spades {
viewer.ScrollToEnd();
}
- void Close() {
- @ui.ActiveUI = null;
- }
+ void Close() { @ui.ActiveUI = null; }
void SayWindowClosed() {
@sayWindow = null;
@@ -127,12 +120,10 @@ namespace spades {
sayButton2.Enable = true;
}
- private void OnOkPressed(spades::ui::UIElement@ sender) {
- Close();
- }
+ private void OnOkPressed(spades::ui::UIElement @sender) { Close(); }
- private void OnTeamChat(spades::ui::UIElement@ sender) {
- if(sayWindow !is null) {
+ private void OnTeamChat(spades::ui::UIElement @sender) {
+ if (sayWindow !is null) {
sayWindow.IsTeamChat = true;
return;
}
@@ -145,8 +136,8 @@ namespace spades {
@Manager.ActiveElement = wnd.field;
}
- private void OnGlobalChat(spades::ui::UIElement@ sender) {
- if(sayWindow !is null) {
+ private void OnGlobalChat(spades::ui::UIElement @sender) {
+ if (sayWindow !is null) {
sayWindow.IsTeamChat = false;
return;
}
@@ -160,45 +151,40 @@ namespace spades {
}
void HotKey(string key) {
- if(sayWindow !is null) {
+ if (sayWindow !is null) {
UIElement::HotKey(key);
return;
}
- if(IsEnabled and (key == "Escape")) {
+ if (IsEnabled and(key == "Escape")) {
Close();
- } else if(IsEnabled and (key == "y")) {
+ } else if (IsEnabled and(key == "y")) {
OnTeamChat(this);
- } else if(IsEnabled and (key == "t")) {
+ } else if (IsEnabled and(key == "t")) {
OnGlobalChat(this);
} else {
UIElement::HotKey(key);
}
}
- void Record(string text, Vector4 color) {
- viewer.AddLine(text, this.IsVisible, color);
- }
+ void Record(string text, Vector4 color) { viewer.AddLine(text, this.IsVisible, color); }
void Render() {
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Renderer@ r = Manager.Renderer;
- Image@ img = r.RegisterImage("Gfx/White.tga");
+ Renderer @r = Manager.Renderer;
+ Image @img = r.RegisterImage("Gfx/White.tga");
r.ColorNP = Vector4(1, 1, 1, 0.08f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + contentsTop - 15.f, size.x, 1.f));
r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop - 15.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop + contentsHeight + 15.f, size.x, 1.f));
+ AABB2(pos.x, pos.y + contentsTop + contentsHeight + 15.f, size.x, 1.f));
r.ColorNP = Vector4(1, 1, 1, 0.2f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + contentsTop - 14.f, size.x, 1.f));
r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop - 14.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop + contentsHeight + 14.f, size.x, 1.f));
+ AABB2(pos.x, pos.y + contentsTop + contentsHeight + 14.f, size.x, 1.f));
UIElement::Render();
}
-
}
}
diff --git a/Resources/Scripts/Gui/Client/ChatSayWindow.as b/Resources/Scripts/Gui/Client/ChatSayWindow.as
index 481c2d5c..ffca3325 100644
--- a/Resources/Scripts/Gui/Client/ChatSayWindow.as
+++ b/Resources/Scripts/Gui/Client/ChatSayWindow.as
@@ -22,19 +22,20 @@
namespace spades {
uint StringCommonPrefixLength(string a, string b) {
- for(uint i = 0, ln = Min(a.length, b.length); i < ln; i++) {
- if(ToLower(a[i]) != ToLower(b[i])) return i;
+ for (uint i = 0, ln = Min(a.length, b.length); i < ln; i++) {
+ if (ToLower(a[i]) != ToLower(b[i]))
+ return i;
}
return Min(a.length, b.length);
}
/** Shows cvar's current value when user types something like "/cg_foobar" */
- class CommandFieldConfigValueView: spades::ui::UIElement {
- string[]@ configNames;
+ class CommandFieldConfigValueView : spades::ui::UIElement {
+ string[] @configNames;
string[] configValues;
- CommandFieldConfigValueView(spades::ui::UIManager@ manager, string[] configNames) {
+ CommandFieldConfigValueView(spades::ui::UIManager @manager, string[] configNames) {
super(manager);
- for(uint i = 0, len = configNames.length; i < len; i++) {
+ for (uint i = 0, len = configNames.length; i < len; i++) {
configValues.insertLast(ConfigItem(configNames[i]).StringValue);
}
@this.configNames = configNames;
@@ -42,11 +43,11 @@ namespace spades {
void Render() {
float maxNameLen = 0.f;
float maxValueLen = 20.f;
- Font@ font = this.Font;
- Renderer@ renderer = this.Manager.Renderer;
+ Font @font = this.Font;
+ Renderer @renderer = this.Manager.Renderer;
float rowHeight = 25.f;
- for(uint i = 0, len = configNames.length; i < len; i++) {
+ for (uint i = 0, len = configNames.length; i < len; i++) {
maxNameLen = Max(maxNameLen, font.Measure(configNames[i]).x);
maxValueLen = Max(maxValueLen, font.Measure(configValues[i]).x);
}
@@ -54,60 +55,54 @@ namespace spades {
pos.y -= float(configNames.length) * rowHeight + 10.f;
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 0.5f);
- renderer.DrawImage(null,
- AABB2(pos.x, pos.y, maxNameLen + maxValueLen + 20.f,
- float(configNames.length) * rowHeight + 10.f));
+ renderer.DrawImage(null, AABB2(pos.x, pos.y, maxNameLen + maxValueLen + 20.f,
+ float(configNames.length) * rowHeight + 10.f));
- for(uint i = 0, len = configNames.length; i < len; i++) {
- font.DrawShadow(configNames[i],
- pos + Vector2(5.f, 8.f + float(i) * rowHeight),
- 1.f, Vector4(1,1,1,0.7), Vector4(0,0,0,0.3f));
+ for (uint i = 0, len = configNames.length; i < len; i++) {
+ font.DrawShadow(configNames[i], pos + Vector2(5.f, 8.f + float(i) * rowHeight), 1.f,
+ Vector4(1, 1, 1, 0.7), Vector4(0, 0, 0, 0.3f));
font.DrawShadow(configValues[i],
- pos + Vector2(15.f + maxNameLen, 8.f + float(i) * rowHeight),
- 1.f, Vector4(1,1,1,1), Vector4(0,0,0,0.4f));
+ pos + Vector2(15.f + maxNameLen, 8.f + float(i) * rowHeight), 1.f,
+ Vector4(1, 1, 1, 1), Vector4(0, 0, 0, 0.4f));
}
-
}
}
- class CommandField: FieldWithHistory {
- CommandFieldConfigValueView@ valueView;
+ class CommandField : FieldWithHistory {
+ CommandFieldConfigValueView @valueView;
- CommandField(spades::ui::UIManager@ manager, array@ history) {
+ CommandField(spades::ui::UIManager @manager,
+ array @history) {
super(manager, history);
-
}
void OnChanged() {
FieldWithHistory::OnChanged();
- if(valueView !is null) {
+ if (valueView !is null) {
@valueView.Parent = null;
}
- if(Text.substr(0, 1) == "/" &&
- Text.substr(1, 1) != " ") {
+ if (Text.substr(0, 1) == "/" && Text.substr(1, 1) != " ") {
int whitespace = Text.findFirst(" ");
- if(whitespace < 0) {
+ if (whitespace < 0) {
whitespace = int(Text.length);
}
string input = Text.substr(1, whitespace - 1);
- if(input.length >= 2) {
- string[]@ names = GetAllConfigNames();
+ if (input.length >= 2) {
+ string[] @names = GetAllConfigNames();
string[] filteredNames;
- for(uint i = 0, len = names.length; i < len; i++) {
- if (
- StringCommonPrefixLength(input, names[i]) == input.length &&
- !ConfigItem(names[i]).IsUnknown
- ) {
+ for (uint i = 0, len = names.length; i < len; i++) {
+ if (StringCommonPrefixLength(input, names[i]) == input.length &&
+ !ConfigItem(names[i]).IsUnknown) {
filteredNames.insertLast(names[i]);
- if(filteredNames.length >= 8) {
+ if (filteredNames.length >= 8) {
// too many
break;
}
}
}
- if(filteredNames.length > 0) {
+ if (filteredNames.length > 0) {
@valueView = CommandFieldConfigValueView(this.Manager, filteredNames);
valueView.Bounds = AABB2(0.f, -15.f, 0.f, 0.f);
@valueView.Parent = this;
@@ -117,22 +112,18 @@ namespace spades {
}
void KeyDown(string key) {
- if(key == "Tab") {
- if(SelectionLength == 0 &&
- SelectionStart == int(Text.length) &&
- Text.substr(0, 1) == "/" &&
- Text.findFirst(" ") < 0) {
+ if (key == "Tab") {
+ if (SelectionLength == 0 && SelectionStart == int(Text.length) &&
+ Text.substr(0, 1) == "/" && Text.findFirst(" ") < 0) {
// config variable auto completion
string input = Text.substr(1);
- string[]@ names = GetAllConfigNames();
+ string[] @names = GetAllConfigNames();
string commonPart;
bool foundOne = false;
- for(uint i = 0, len = names.length; i < len; i++) {
- if (
- StringCommonPrefixLength(input, names[i]) == input.length &&
- !ConfigItem(names[i]).IsUnknown
- ) {
- if(!foundOne) {
+ for (uint i = 0, len = names.length; i < len; i++) {
+ if (StringCommonPrefixLength(input, names[i]) == input.length &&
+ !ConfigItem(names[i]).IsUnknown) {
+ if (!foundOne) {
commonPart = names[i];
foundOne = true;
}
@@ -142,30 +133,29 @@ namespace spades {
}
}
- if(commonPart.length > input.length) {
+ if (commonPart.length > input.length) {
Text = "/" + commonPart;
Select(Text.length, 0);
}
-
}
- }else{
+ } else {
FieldWithHistory::KeyDown(key);
}
}
}
- class ClientChatWindow: spades::ui::UIElement {
- private ClientUI@ ui;
- private ClientUIHelper@ helper;
+ class ClientChatWindow : spades::ui::UIElement {
+ private ClientUI @ui;
+ private ClientUIHelper @helper;
- CommandField@ field;
- spades::ui::Button@ sayButton;
- spades::ui::SimpleButton@ teamButton;
- spades::ui::SimpleButton@ globalButton;
+ CommandField @field;
+ spades::ui::Button @sayButton;
+ spades::ui::SimpleButton @teamButton;
+ spades::ui::SimpleButton @globalButton;
bool isTeamChat;
- ClientChatWindow(ClientUI@ ui, bool isTeamChat) {
+ ClientChatWindow(ClientUI @ui, bool isTeamChat) {
super(ui.manager);
@this.ui = ui;
@this.helper = ui.helper;
@@ -230,14 +220,13 @@ namespace spades {
}
}
- void UpdateState() {
- sayButton.Enable = field.Text.length > 0;
- }
+ void UpdateState() { sayButton.Enable = field.Text.length > 0; }
bool IsTeamChat {
get final { return isTeamChat; }
set {
- if(isTeamChat == value) return;
+ if (isTeamChat == value)
+ return;
isTeamChat = value;
teamButton.Toggled = isTeamChat;
globalButton.Toggled = not isTeamChat;
@@ -245,39 +234,33 @@ namespace spades {
}
}
- private void OnSetGlobal(spades::ui::UIElement@ sender) {
- IsTeamChat = false;
- }
- private void OnSetTeam(spades::ui::UIElement@ sender) {
- IsTeamChat = true;
- }
+ private void OnSetGlobal(spades::ui::UIElement @sender) { IsTeamChat = false; }
+ private void OnSetTeam(spades::ui::UIElement @sender) { IsTeamChat = true; }
- private void OnFieldChanged(spades::ui::UIElement@ sender) {
- UpdateState();
- }
+ private void OnFieldChanged(spades::ui::UIElement @sender) { UpdateState(); }
- private void Close() {
- @ui.ActiveUI = null;
- }
+ private void Close() { @ui.ActiveUI = null; }
- private void OnCancel(spades::ui::UIElement@ sender) {
+ private void OnCancel(spades::ui::UIElement @sender) {
field.Cancelled();
Close();
}
private bool CheckAndSetConfigVariable() {
string text = field.Text;
- if(text.substr(0, 1) != "/") return false;
+ if (text.substr(0, 1) != "/")
+ return false;
int idx = text.findFirst(" ");
- if(idx < 2) return false;
+ if (idx < 2)
+ return false;
// find variable
string varname = text.substr(1, idx - 1);
string[] vars = GetAllConfigNames();
- for(uint i = 0, len = vars.length; i < len; i++) {
- if(vars[i].length == varname.length &&
- StringCommonPrefixLength(vars[i], varname) == vars[i].length) {
+ for (uint i = 0, len = vars.length; i < len; i++) {
+ if (vars[i].length == varname.length &&
+ StringCommonPrefixLength(vars[i], varname) == vars[i].length) {
// match
string val = text.substr(idx + 1);
ConfigItem item(vars[i]);
@@ -289,10 +272,10 @@ namespace spades {
return false;
}
- private void OnSay(spades::ui::UIElement@ sender) {
+ private void OnSay(spades::ui::UIElement @sender) {
field.CommandSent();
- if(!CheckAndSetConfigVariable()) {
- if(isTeamChat)
+ if (!CheckAndSetConfigVariable()) {
+ if (isTeamChat)
ui.helper.SayTeam(field.Text);
else
ui.helper.SayGlobal(field.Text);
@@ -301,12 +284,12 @@ namespace spades {
}
void HotKey(string key) {
- if(IsEnabled and key == "Escape") {
+ if (IsEnabled and key == "Escape") {
OnCancel(this);
- }else if(IsEnabled and key == "Enter") {
- if(field.Text.length == 0) {
+ } else if (IsEnabled and key == "Enter") {
+ if (field.Text.length == 0) {
OnCancel(this);
- }else{
+ } else {
OnSay(this);
}
} else {
diff --git a/Resources/Scripts/Gui/Client/ClientUI.as b/Resources/Scripts/Gui/Client/ClientUI.as
index d43b9b7e..f4e2c5f1 100644
--- a/Resources/Scripts/Gui/Client/ClientUI.as
+++ b/Resources/Scripts/Gui/Client/ClientUI.as
@@ -24,25 +24,26 @@
namespace spades {
class ClientUI {
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- FontManager@ fontManager;
- ClientUIHelper@ helper;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ FontManager @fontManager;
+ ClientUIHelper @helper;
- spades::ui::UIManager@ manager;
- spades::ui::UIElement@ activeUI;
+ spades::ui::UIManager @manager;
+ spades::ui::UIElement @activeUI;
- ChatLogWindow@ chatLogWindow;
+ ChatLogWindow @chatLogWindow;
- ClientMenu@ clientMenu;
+ ClientMenu @clientMenu;
- array chatHistory;
+ array chatHistory;
bool shouldExit = false;
private float time = -1.f;
- ClientUI(Renderer@ renderer, AudioDevice@ audioDevice, FontManager@ fontManager, ClientUIHelper@ helper) {
+ ClientUI(Renderer @renderer, AudioDevice @audioDevice, FontManager @fontManager,
+ ClientUIHelper @helper) {
@this.renderer = renderer;
@this.audioDevice = audioDevice;
@this.fontManager = fontManager;
@@ -57,77 +58,55 @@ namespace spades {
@chatLogWindow = ChatLogWindow(this);
}
- void MouseEvent(float x, float y) {
- manager.MouseEvent(x, y);
- }
+ void MouseEvent(float x, float y) { manager.MouseEvent(x, y); }
- void WheelEvent(float x, float y) {
- manager.WheelEvent(x, y);
- }
+ void WheelEvent(float x, float y) { manager.WheelEvent(x, y); }
- void KeyEvent(string key, bool down) {
- manager.KeyEvent(key, down);
- }
+ void KeyEvent(string key, bool down) { manager.KeyEvent(key, down); }
- void TextInputEvent(string text) {
- manager.TextInputEvent(text);
- }
+ void TextInputEvent(string text) { manager.TextInputEvent(text); }
void TextEditingEvent(string text, int start, int len) {
manager.TextEditingEvent(text, start, len);
}
- bool AcceptsTextInput() {
- return manager.AcceptsTextInput;
- }
+ bool AcceptsTextInput() { return manager.AcceptsTextInput; }
- AABB2 GetTextInputRect() {
- return manager.TextInputRect;
- }
+ AABB2 GetTextInputRect() { return manager.TextInputRect; }
void RunFrame(float dt) {
- if(time < 0.f) {
+ if (time < 0.f) {
time = 0.f;
}
manager.RunFrame(dt);
- if(activeUI !is null){
+ if (activeUI !is null) {
manager.Render();
}
time += Min(dt, 0.05f);
}
- void Closing() {
+ void Closing() {}
- }
+ bool WantsClientToBeClosed() { return shouldExit; }
- bool WantsClientToBeClosed() {
- return shouldExit;
- }
+ bool NeedsInput() { return activeUI !is null; }
- bool NeedsInput() {
- return activeUI !is null;
- }
-
- void set_ActiveUI(spades::ui::UIElement@ value) {
- if(activeUI !is null) {
+ void set_ActiveUI(spades::ui::UIElement @value) {
+ if (activeUI !is null) {
manager.RootElement.RemoveChild(activeUI);
}
@activeUI = value;
- if(activeUI !is null) {
+ if (activeUI !is null) {
activeUI.Bounds = manager.RootElement.Bounds;
manager.RootElement.AddChild(activeUI);
}
manager.KeyPanic();
}
- spades::ui::UIElement@ get_ActiveUI(){
- return activeUI;
- }
+ spades::ui::UIElement @get_ActiveUI() { return activeUI; }
- void EnterClientMenu() {
- @ActiveUI = clientMenu;
- }
+ void EnterClientMenu() { @ActiveUI = clientMenu; }
void EnterTeamChatWindow() {
ClientChatWindow wnd(this, true);
@@ -147,17 +126,13 @@ namespace spades {
@ActiveUI = wnd;
@manager.ActiveElement = wnd.field;
}
- void CloseUI() {
- @ActiveUI = null;
- }
+ void CloseUI() { @ActiveUI = null; }
- void RecordChatLog(string text, Vector4 color) {
- chatLogWindow.Record(text, color);
- }
+ void RecordChatLog(string text, Vector4 color) { chatLogWindow.Record(text, color); }
}
- ClientUI@ CreateClientUI(Renderer@ renderer, AudioDevice@ audioDevice,
- FontManager@ fontManager, ClientUIHelper@ helper) {
+ ClientUI @CreateClientUI(Renderer @renderer, AudioDevice @audioDevice, FontManager @fontManager,
+ ClientUIHelper @helper) {
return ClientUI(renderer, audioDevice, fontManager, helper);
}
diff --git a/Resources/Scripts/Gui/Client/FieldWithHistory.as b/Resources/Scripts/Gui/Client/FieldWithHistory.as
index 04a9bbd1..fea49c46 100644
--- a/Resources/Scripts/Gui/Client/FieldWithHistory.as
+++ b/Resources/Scripts/Gui/Client/FieldWithHistory.as
@@ -34,12 +34,13 @@ namespace spades {
}
// Field with bash-like history support
- class FieldWithHistory: spades::ui::Field {
- array@ cmdhistory;
- CommandHistoryItem@ temporalLastHistory;
+ class FieldWithHistory : spades::ui::Field {
+ array @cmdhistory;
+ CommandHistoryItem @temporalLastHistory;
uint currentHistoryIndex;
- FieldWithHistory(spades::ui::UIManager@ manager, array@ history) {
+ FieldWithHistory(spades::ui::UIManager @manager,
+ array @history) {
super(manager);
@this.cmdhistory = history;
@@ -47,10 +48,8 @@ namespace spades {
@temporalLastHistory = this.CommandHistoryItemRep;
}
- private CommandHistoryItem@ CommandHistoryItemRep {
- get {
- return CommandHistoryItem(this.Text, this.SelectionStart, this.SelectionEnd);
- }
+ private CommandHistoryItem @CommandHistoryItemRep {
+ get { return CommandHistoryItem(this.Text, this.SelectionStart, this.SelectionEnd); }
set {
this.Text = value.text;
this.Select(value.selStart, value.selEnd - value.selStart);
@@ -58,35 +57,35 @@ namespace spades {
}
private void OverwriteItem() {
- if(currentHistoryIndex < cmdhistory.length) {
+ if (currentHistoryIndex < cmdhistory.length) {
@cmdhistory[currentHistoryIndex] = this.CommandHistoryItemRep;
- }else if(currentHistoryIndex == cmdhistory.length) {
+ } else if (currentHistoryIndex == cmdhistory.length) {
@temporalLastHistory = this.CommandHistoryItemRep;
}
}
private void LoadItem() {
- if(currentHistoryIndex < cmdhistory.length) {
+ if (currentHistoryIndex < cmdhistory.length) {
@this.CommandHistoryItemRep = cmdhistory[currentHistoryIndex];
- }else if(currentHistoryIndex == cmdhistory.length) {
+ } else if (currentHistoryIndex == cmdhistory.length) {
@this.CommandHistoryItemRep = temporalLastHistory;
}
}
void KeyDown(string key) {
- if(key == "Up") {
- if(currentHistoryIndex > 0) {
+ if (key == "Up") {
+ if (currentHistoryIndex > 0) {
OverwriteItem();
currentHistoryIndex--;
LoadItem();
}
- }else if(key == "Down") {
- if(currentHistoryIndex < cmdhistory.length) {
+ } else if (key == "Down") {
+ if (currentHistoryIndex < cmdhistory.length) {
OverwriteItem();
currentHistoryIndex++;
LoadItem();
}
- }else{
+ } else {
Field::KeyDown(key);
}
}
@@ -96,9 +95,7 @@ namespace spades {
currentHistoryIndex = cmdhistory.length - 1;
}
- void Cancelled() {
- OverwriteItem();
- }
+ void Cancelled() { OverwriteItem(); }
};
}
diff --git a/Resources/Scripts/Gui/Client/Menu.as b/Resources/Scripts/Gui/Client/Menu.as
index d0bed603..8d9cc483 100644
--- a/Resources/Scripts/Gui/Client/Menu.as
+++ b/Resources/Scripts/Gui/Client/Menu.as
@@ -21,11 +21,11 @@
namespace spades {
- class ClientMenu: spades::ui::UIElement {
- private ClientUI@ ui;
- private ClientUIHelper@ helper;
+ class ClientMenu : spades::ui::UIElement {
+ private ClientUI @ui;
+ private ClientUIHelper @helper;
- ClientMenu(ClientUI@ ui) {
+ ClientMenu(ClientUI @ui) {
super(ui.manager);
@this.ui = ui;
@this.helper = ui.helper;
@@ -37,8 +37,8 @@ namespace spades {
{
spades::ui::Label label(Manager);
label.BackgroundColor = Vector4(0, 0, 0, 0.5f);
- label.Bounds = AABB2(0.f, 0.f,
- Manager.Renderer.ScreenWidth, Manager.Renderer.ScreenHeight);
+ label.Bounds =
+ AABB2(0.f, 0.f, Manager.Renderer.ScreenWidth, Manager.Renderer.ScreenHeight);
AddChild(label);
}
@@ -78,26 +78,22 @@ namespace spades {
}
}
- private void OnBackToGame(spades::ui::UIElement@ sender) {
- @ui.ActiveUI = null;
- }
- private void OnSetup(spades::ui::UIElement@ sender) {
+ private void OnBackToGame(spades::ui::UIElement @sender) { @ui.ActiveUI = null; }
+ private void OnSetup(spades::ui::UIElement @sender) {
PreferenceViewOptions opt;
opt.GameActive = true;
PreferenceView al(this, opt, ui.fontManager);
al.Run();
}
- private void OnChatLog(spades::ui::UIElement@ sender) {
+ private void OnChatLog(spades::ui::UIElement @sender) {
@ui.ActiveUI = @ui.chatLogWindow;
ui.chatLogWindow.ScrollToEnd();
}
- private void OnDisconnect(spades::ui::UIElement@ sender) {
- ui.shouldExit = true;
- }
+ private void OnDisconnect(spades::ui::UIElement @sender) { ui.shouldExit = true; }
void HotKey(string key) {
- if(IsEnabled and key == "Escape") {
+ if (IsEnabled and key == "Escape") {
@ui.ActiveUI = null;
} else {
UIElement::HotKey(key);
diff --git a/Resources/Scripts/Gui/MainScreen/CountryFlags.as b/Resources/Scripts/Gui/MainScreen/CountryFlags.as
index 552e5f25..d9b48c1b 100644
--- a/Resources/Scripts/Gui/MainScreen/CountryFlags.as
+++ b/Resources/Scripts/Gui/MainScreen/CountryFlags.as
@@ -1,268 +1,990 @@
// public domain.
namespace spades {
- class FlagIconRenderer {
- private Image@ atlas;
- private Renderer@ renderer;
- FlagIconRenderer(Renderer@ renderer) {
- @atlas = renderer.RegisterImage("Gfx/UI/Flags.png");
- @this.renderer = renderer;
- }
-
- bool DrawIcon(string name, Vector2 pos) {
- int x = -1, y = 1;
- int code = 0;
- for(uint i = 0; i < name.length; i++) {
- code += int(name[i]) << (i * 8);
- }
- switch(code){
- case 0x4441: x = 0; y = 0; break;
- case 0x4541: x = 1; y = 0; break;
- case 0x4641: x = 2; y = 0; break;
- case 0x4741: x = 3; y = 0; break;
- case 0x4941: x = 4; y = 0; break;
- case 0x4c41: x = 5; y = 0; break;
- case 0x4d41: x = 6; y = 0; break;
- case 0x4e41: x = 7; y = 0; break;
- case 0x4f41: x = 8; y = 0; break;
- case 0x5241: x = 9; y = 0; break;
- case 0x5341: x = 10; y = 0; break;
- case 0x5441: x = 11; y = 0; break;
- case 0x5541: x = 12; y = 0; break;
- case 0x5741: x = 13; y = 0; break;
- case 0x5841: x = 14; y = 0; break;
- case 0x5a41: x = 15; y = 0; break;
- case 0x4142: x = 0; y = 1; break;
- case 0x4242: x = 1; y = 1; break;
- case 0x4442: x = 2; y = 1; break;
- case 0x4542: x = 3; y = 1; break;
- case 0x4642: x = 4; y = 1; break;
- case 0x4742: x = 5; y = 1; break;
- case 0x4842: x = 6; y = 1; break;
- case 0x4942: x = 7; y = 1; break;
- case 0x4a42: x = 8; y = 1; break;
- case 0x4d42: x = 9; y = 1; break;
- case 0x4e42: x = 10; y = 1; break;
- case 0x4f42: x = 11; y = 1; break;
- case 0x5242: x = 12; y = 1; break;
- case 0x5342: x = 13; y = 1; break;
- case 0x5442: x = 14; y = 1; break;
- case 0x5642: x = 15; y = 1; break;
- case 0x5742: x = 0; y = 2; break;
- case 0x5942: x = 1; y = 2; break;
- case 0x5a42: x = 2; y = 2; break;
- case 0x4143: x = 3; y = 2; break;
- case 0x4343: x = 4; y = 2; break;
- case 0x4443: x = 5; y = 2; break;
- case 0x4643: x = 6; y = 2; break;
- case 0x4743: x = 7; y = 2; break;
- case 0x4843: x = 8; y = 2; break;
- case 0x4943: x = 9; y = 2; break;
- case 0x4b43: x = 10; y = 2; break;
- case 0x4c43: x = 11; y = 2; break;
- case 0x4d43: x = 12; y = 2; break;
- case 0x4e43: x = 13; y = 2; break;
- case 0x4f43: x = 14; y = 2; break;
- case 0x5243: x = 15; y = 2; break;
- case 0x5343: x = 0; y = 3; break;
- case 0x5543: x = 1; y = 3; break;
- case 0x5643: x = 2; y = 3; break;
- case 0x5843: x = 3; y = 3; break;
- case 0x5943: x = 4; y = 3; break;
- case 0x5a43: x = 5; y = 3; break;
- case 0x4544: x = 6; y = 3; break;
- case 0x4a44: x = 7; y = 3; break;
- case 0x4b44: x = 8; y = 3; break;
- case 0x4d44: x = 9; y = 3; break;
- case 0x4f44: x = 10; y = 3; break;
- case 0x5a44: x = 11; y = 3; break;
- case 0x4345: x = 12; y = 3; break;
- case 0x4545: x = 13; y = 3; break;
- case 0x4745: x = 14; y = 3; break;
- case 0x4845: x = 15; y = 3; break;
- case 0x5245: x = 0; y = 4; break;
- case 0x5345: x = 1; y = 4; break;
- case 0x5445: x = 2; y = 4; break;
- case 0x4946: x = 3; y = 4; break;
- case 0x4a46: x = 4; y = 4; break;
- case 0x4b46: x = 5; y = 4; break;
- case 0x4d46: x = 6; y = 4; break;
- case 0x4f46: x = 7; y = 4; break;
- case 0x5246: x = 8; y = 4; break;
- case 0x4147: x = 9; y = 4; break;
- case 0x4247: x = 10; y = 4; break;
- case 0x4447: x = 11; y = 4; break;
- case 0x4547: x = 12; y = 4; break;
- case 0x4647: x = 13; y = 4; break;
- case 0x4847: x = 14; y = 4; break;
- case 0x4947: x = 15; y = 4; break;
- case 0x4c47: x = 0; y = 5; break;
- case 0x4d47: x = 1; y = 5; break;
- case 0x4e47: x = 2; y = 5; break;
- case 0x5047: x = 3; y = 5; break;
- case 0x5147: x = 4; y = 5; break;
- case 0x5247: x = 5; y = 5; break;
- case 0x5347: x = 6; y = 5; break;
- case 0x5447: x = 7; y = 5; break;
- case 0x5547: x = 8; y = 5; break;
- case 0x5747: x = 9; y = 5; break;
- case 0x5947: x = 10; y = 5; break;
- case 0x4b48: x = 11; y = 5; break;
- case 0x4d48: x = 12; y = 5; break;
- case 0x4e48: x = 13; y = 5; break;
- case 0x5248: x = 14; y = 5; break;
- case 0x5448: x = 15; y = 5; break;
- case 0x5548: x = 0; y = 6; break;
- case 0x4449: x = 1; y = 6; break;
- case 0x4549: x = 2; y = 6; break;
- case 0x4c49: x = 3; y = 6; break;
- case 0x4e49: x = 4; y = 6; break;
- case 0x4f49: x = 5; y = 6; break;
- case 0x5149: x = 6; y = 6; break;
- case 0x5249: x = 7; y = 6; break;
- case 0x5349: x = 8; y = 6; break;
- case 0x5449: x = 9; y = 6; break;
- case 0x4d4a: x = 10; y = 6; break;
- case 0x4f4a: x = 11; y = 6; break;
- case 0x504a: x = 12; y = 6; break;
- case 0x454b: x = 13; y = 6; break;
- case 0x474b: x = 14; y = 6; break;
- case 0x484b: x = 15; y = 6; break;
- case 0x494b: x = 0; y = 7; break;
- case 0x4d4b: x = 1; y = 7; break;
- case 0x4e4b: x = 2; y = 7; break;
- case 0x504b: x = 3; y = 7; break;
- case 0x524b: x = 4; y = 7; break;
- case 0x574b: x = 5; y = 7; break;
- case 0x594b: x = 6; y = 7; break;
- case 0x5a4b: x = 7; y = 7; break;
- case 0x414c: x = 8; y = 7; break;
- case 0x424c: x = 9; y = 7; break;
- case 0x434c: x = 10; y = 7; break;
- case 0x494c: x = 11; y = 7; break;
- case 0x4b4c: x = 12; y = 7; break;
- case 0x524c: x = 13; y = 7; break;
- case 0x534c: x = 14; y = 7; break;
- case 0x544c: x = 15; y = 7; break;
- case 0x554c: x = 0; y = 8; break;
- case 0x564c: x = 1; y = 8; break;
- case 0x594c: x = 2; y = 8; break;
- case 0x414d: x = 3; y = 8; break;
- case 0x434d: x = 4; y = 8; break;
- case 0x444d: x = 5; y = 8; break;
- case 0x454d: x = 6; y = 8; break;
- case 0x474d: x = 7; y = 8; break;
- case 0x484d: x = 8; y = 8; break;
- case 0x4b4d: x = 9; y = 8; break;
- case 0x4c4d: x = 10; y = 8; break;
- case 0x4d4d: x = 11; y = 8; break;
- case 0x4e4d: x = 12; y = 8; break;
- case 0x4f4d: x = 13; y = 8; break;
- case 0x504d: x = 14; y = 8; break;
- case 0x514d: x = 15; y = 8; break;
- case 0x524d: x = 0; y = 9; break;
- case 0x534d: x = 1; y = 9; break;
- case 0x544d: x = 2; y = 9; break;
- case 0x554d: x = 3; y = 9; break;
- case 0x564d: x = 4; y = 9; break;
- case 0x574d: x = 5; y = 9; break;
- case 0x584d: x = 6; y = 9; break;
- case 0x594d: x = 7; y = 9; break;
- case 0x5a4d: x = 8; y = 9; break;
- case 0x414e: x = 9; y = 9; break;
- case 0x434e: x = 10; y = 9; break;
- case 0x454e: x = 11; y = 9; break;
- case 0x464e: x = 12; y = 9; break;
- case 0x474e: x = 13; y = 9; break;
- case 0x494e: x = 14; y = 9; break;
- case 0x4c4e: x = 15; y = 9; break;
- case 0x4f4e: x = 0; y = 10; break;
- case 0x504e: x = 1; y = 10; break;
- case 0x524e: x = 2; y = 10; break;
- case 0x554e: x = 3; y = 10; break;
- case 0x5a4e: x = 4; y = 10; break;
- case 0x4d4f: x = 5; y = 10; break;
- case 0x4150: x = 6; y = 10; break;
- case 0x4550: x = 7; y = 10; break;
- case 0x4650: x = 8; y = 10; break;
- case 0x4750: x = 9; y = 10; break;
- case 0x4850: x = 10; y = 10; break;
- case 0x4b50: x = 11; y = 10; break;
- case 0x4c50: x = 12; y = 10; break;
- case 0x4d50: x = 13; y = 10; break;
- case 0x4e50: x = 14; y = 10; break;
- case 0x5250: x = 15; y = 10; break;
- case 0x5350: x = 0; y = 11; break;
- case 0x5450: x = 1; y = 11; break;
- case 0x5750: x = 2; y = 11; break;
- case 0x5950: x = 3; y = 11; break;
- case 0x4151: x = 4; y = 11; break;
- case 0x4552: x = 5; y = 11; break;
- case 0x4f52: x = 6; y = 11; break;
- case 0x5352: x = 7; y = 11; break;
- case 0x5552: x = 8; y = 11; break;
- case 0x5752: x = 9; y = 11; break;
- case 0x4153: x = 10; y = 11; break;
- case 0x4253: x = 11; y = 11; break;
- case 0x4353: x = 12; y = 11; break;
- case 0x4453: x = 13; y = 11; break;
- case 0x4553: x = 14; y = 11; break;
- case 0x4753: x = 15; y = 11; break;
- case 0x4853: x = 0; y = 12; break;
- case 0x4953: x = 1; y = 12; break;
- case 0x4a53: x = 2; y = 12; break;
- case 0x4b53: x = 3; y = 12; break;
- case 0x4c53: x = 4; y = 12; break;
- case 0x4d53: x = 5; y = 12; break;
- case 0x4e53: x = 6; y = 12; break;
- case 0x4f53: x = 7; y = 12; break;
- case 0x5253: x = 8; y = 12; break;
- case 0x5453: x = 9; y = 12; break;
- case 0x5653: x = 10; y = 12; break;
- case 0x5953: x = 11; y = 12; break;
- case 0x5a53: x = 12; y = 12; break;
- case 0x4354: x = 13; y = 12; break;
- case 0x4454: x = 14; y = 12; break;
- case 0x4654: x = 15; y = 12; break;
- case 0x4754: x = 0; y = 13; break;
- case 0x4854: x = 1; y = 13; break;
- case 0x4a54: x = 2; y = 13; break;
- case 0x4b54: x = 3; y = 13; break;
- case 0x4c54: x = 4; y = 13; break;
- case 0x4d54: x = 5; y = 13; break;
- case 0x4e54: x = 6; y = 13; break;
- case 0x4f54: x = 7; y = 13; break;
- case 0x5254: x = 8; y = 13; break;
- case 0x5454: x = 9; y = 13; break;
- case 0x5654: x = 10; y = 13; break;
- case 0x5754: x = 11; y = 13; break;
- case 0x5a54: x = 12; y = 13; break;
- case 0x4155: x = 13; y = 13; break;
- case 0x4755: x = 14; y = 13; break;
- case 0x4d55: x = 15; y = 13; break;
- case 0x5355: x = 0; y = 14; break;
- case 0x5955: x = 1; y = 14; break;
- case 0x5a55: x = 2; y = 14; break;
- case 0x4156: x = 3; y = 14; break;
- case 0x4356: x = 4; y = 14; break;
- case 0x4556: x = 5; y = 14; break;
- case 0x4756: x = 6; y = 14; break;
- case 0x4956: x = 7; y = 14; break;
- case 0x4e56: x = 8; y = 14; break;
- case 0x5556: x = 9; y = 14; break;
- case 0x4657: x = 10; y = 14; break;
- case 0x5357: x = 11; y = 14; break;
- case 0x4559: x = 12; y = 14; break;
- case 0x5459: x = 13; y = 14; break;
- case 0x415a: x = 14; y = 14; break;
- case 0x4d5a: x = 15; y = 14; break;
- case 0x575a: x = 0; y = 15; break;
- default:
- return false;
- }
- renderer.DrawImage(atlas, AABB2(pos.x - 8.f, pos.y - 8.f, 16.f, 16.f),
- AABB2(float(x) * 16.f, float(y) * 16.f, 16.f, 16.f));
- return true;
- }
- }
+ class FlagIconRenderer {
+ private Image @atlas;
+ private Renderer @renderer;
+ FlagIconRenderer(Renderer @renderer) {
+ @atlas = renderer.RegisterImage("Gfx/UI/Flags.png");
+ @this.renderer = renderer;
+ }
+
+ bool DrawIcon(string name, Vector2 pos) {
+ int x = -1, y = 1;
+ int code = 0;
+ for (uint i = 0; i < name.length; i++) {
+ code += int(name[i]) << (i * 8);
+ }
+ switch (code) {
+ case 0x4441:
+ x = 0;
+ y = 0;
+ break;
+ case 0x4541:
+ x = 1;
+ y = 0;
+ break;
+ case 0x4641:
+ x = 2;
+ y = 0;
+ break;
+ case 0x4741:
+ x = 3;
+ y = 0;
+ break;
+ case 0x4941:
+ x = 4;
+ y = 0;
+ break;
+ case 0x4c41:
+ x = 5;
+ y = 0;
+ break;
+ case 0x4d41:
+ x = 6;
+ y = 0;
+ break;
+ case 0x4e41:
+ x = 7;
+ y = 0;
+ break;
+ case 0x4f41:
+ x = 8;
+ y = 0;
+ break;
+ case 0x5241:
+ x = 9;
+ y = 0;
+ break;
+ case 0x5341:
+ x = 10;
+ y = 0;
+ break;
+ case 0x5441:
+ x = 11;
+ y = 0;
+ break;
+ case 0x5541:
+ x = 12;
+ y = 0;
+ break;
+ case 0x5741:
+ x = 13;
+ y = 0;
+ break;
+ case 0x5841:
+ x = 14;
+ y = 0;
+ break;
+ case 0x5a41:
+ x = 15;
+ y = 0;
+ break;
+ case 0x4142:
+ x = 0;
+ y = 1;
+ break;
+ case 0x4242:
+ x = 1;
+ y = 1;
+ break;
+ case 0x4442:
+ x = 2;
+ y = 1;
+ break;
+ case 0x4542:
+ x = 3;
+ y = 1;
+ break;
+ case 0x4642:
+ x = 4;
+ y = 1;
+ break;
+ case 0x4742:
+ x = 5;
+ y = 1;
+ break;
+ case 0x4842:
+ x = 6;
+ y = 1;
+ break;
+ case 0x4942:
+ x = 7;
+ y = 1;
+ break;
+ case 0x4a42:
+ x = 8;
+ y = 1;
+ break;
+ case 0x4d42:
+ x = 9;
+ y = 1;
+ break;
+ case 0x4e42:
+ x = 10;
+ y = 1;
+ break;
+ case 0x4f42:
+ x = 11;
+ y = 1;
+ break;
+ case 0x5242:
+ x = 12;
+ y = 1;
+ break;
+ case 0x5342:
+ x = 13;
+ y = 1;
+ break;
+ case 0x5442:
+ x = 14;
+ y = 1;
+ break;
+ case 0x5642:
+ x = 15;
+ y = 1;
+ break;
+ case 0x5742:
+ x = 0;
+ y = 2;
+ break;
+ case 0x5942:
+ x = 1;
+ y = 2;
+ break;
+ case 0x5a42:
+ x = 2;
+ y = 2;
+ break;
+ case 0x4143:
+ x = 3;
+ y = 2;
+ break;
+ case 0x4343:
+ x = 4;
+ y = 2;
+ break;
+ case 0x4443:
+ x = 5;
+ y = 2;
+ break;
+ case 0x4643:
+ x = 6;
+ y = 2;
+ break;
+ case 0x4743:
+ x = 7;
+ y = 2;
+ break;
+ case 0x4843:
+ x = 8;
+ y = 2;
+ break;
+ case 0x4943:
+ x = 9;
+ y = 2;
+ break;
+ case 0x4b43:
+ x = 10;
+ y = 2;
+ break;
+ case 0x4c43:
+ x = 11;
+ y = 2;
+ break;
+ case 0x4d43:
+ x = 12;
+ y = 2;
+ break;
+ case 0x4e43:
+ x = 13;
+ y = 2;
+ break;
+ case 0x4f43:
+ x = 14;
+ y = 2;
+ break;
+ case 0x5243:
+ x = 15;
+ y = 2;
+ break;
+ case 0x5343:
+ x = 0;
+ y = 3;
+ break;
+ case 0x5543:
+ x = 1;
+ y = 3;
+ break;
+ case 0x5643:
+ x = 2;
+ y = 3;
+ break;
+ case 0x5843:
+ x = 3;
+ y = 3;
+ break;
+ case 0x5943:
+ x = 4;
+ y = 3;
+ break;
+ case 0x5a43:
+ x = 5;
+ y = 3;
+ break;
+ case 0x4544:
+ x = 6;
+ y = 3;
+ break;
+ case 0x4a44:
+ x = 7;
+ y = 3;
+ break;
+ case 0x4b44:
+ x = 8;
+ y = 3;
+ break;
+ case 0x4d44:
+ x = 9;
+ y = 3;
+ break;
+ case 0x4f44:
+ x = 10;
+ y = 3;
+ break;
+ case 0x5a44:
+ x = 11;
+ y = 3;
+ break;
+ case 0x4345:
+ x = 12;
+ y = 3;
+ break;
+ case 0x4545:
+ x = 13;
+ y = 3;
+ break;
+ case 0x4745:
+ x = 14;
+ y = 3;
+ break;
+ case 0x4845:
+ x = 15;
+ y = 3;
+ break;
+ case 0x5245:
+ x = 0;
+ y = 4;
+ break;
+ case 0x5345:
+ x = 1;
+ y = 4;
+ break;
+ case 0x5445:
+ x = 2;
+ y = 4;
+ break;
+ case 0x4946:
+ x = 3;
+ y = 4;
+ break;
+ case 0x4a46:
+ x = 4;
+ y = 4;
+ break;
+ case 0x4b46:
+ x = 5;
+ y = 4;
+ break;
+ case 0x4d46:
+ x = 6;
+ y = 4;
+ break;
+ case 0x4f46:
+ x = 7;
+ y = 4;
+ break;
+ case 0x5246:
+ x = 8;
+ y = 4;
+ break;
+ case 0x4147:
+ x = 9;
+ y = 4;
+ break;
+ case 0x4247:
+ x = 10;
+ y = 4;
+ break;
+ case 0x4447:
+ x = 11;
+ y = 4;
+ break;
+ case 0x4547:
+ x = 12;
+ y = 4;
+ break;
+ case 0x4647:
+ x = 13;
+ y = 4;
+ break;
+ case 0x4847:
+ x = 14;
+ y = 4;
+ break;
+ case 0x4947:
+ x = 15;
+ y = 4;
+ break;
+ case 0x4c47:
+ x = 0;
+ y = 5;
+ break;
+ case 0x4d47:
+ x = 1;
+ y = 5;
+ break;
+ case 0x4e47:
+ x = 2;
+ y = 5;
+ break;
+ case 0x5047:
+ x = 3;
+ y = 5;
+ break;
+ case 0x5147:
+ x = 4;
+ y = 5;
+ break;
+ case 0x5247:
+ x = 5;
+ y = 5;
+ break;
+ case 0x5347:
+ x = 6;
+ y = 5;
+ break;
+ case 0x5447:
+ x = 7;
+ y = 5;
+ break;
+ case 0x5547:
+ x = 8;
+ y = 5;
+ break;
+ case 0x5747:
+ x = 9;
+ y = 5;
+ break;
+ case 0x5947:
+ x = 10;
+ y = 5;
+ break;
+ case 0x4b48:
+ x = 11;
+ y = 5;
+ break;
+ case 0x4d48:
+ x = 12;
+ y = 5;
+ break;
+ case 0x4e48:
+ x = 13;
+ y = 5;
+ break;
+ case 0x5248:
+ x = 14;
+ y = 5;
+ break;
+ case 0x5448:
+ x = 15;
+ y = 5;
+ break;
+ case 0x5548:
+ x = 0;
+ y = 6;
+ break;
+ case 0x4449:
+ x = 1;
+ y = 6;
+ break;
+ case 0x4549:
+ x = 2;
+ y = 6;
+ break;
+ case 0x4c49:
+ x = 3;
+ y = 6;
+ break;
+ case 0x4e49:
+ x = 4;
+ y = 6;
+ break;
+ case 0x4f49:
+ x = 5;
+ y = 6;
+ break;
+ case 0x5149:
+ x = 6;
+ y = 6;
+ break;
+ case 0x5249:
+ x = 7;
+ y = 6;
+ break;
+ case 0x5349:
+ x = 8;
+ y = 6;
+ break;
+ case 0x5449:
+ x = 9;
+ y = 6;
+ break;
+ case 0x4d4a:
+ x = 10;
+ y = 6;
+ break;
+ case 0x4f4a:
+ x = 11;
+ y = 6;
+ break;
+ case 0x504a:
+ x = 12;
+ y = 6;
+ break;
+ case 0x454b:
+ x = 13;
+ y = 6;
+ break;
+ case 0x474b:
+ x = 14;
+ y = 6;
+ break;
+ case 0x484b:
+ x = 15;
+ y = 6;
+ break;
+ case 0x494b:
+ x = 0;
+ y = 7;
+ break;
+ case 0x4d4b:
+ x = 1;
+ y = 7;
+ break;
+ case 0x4e4b:
+ x = 2;
+ y = 7;
+ break;
+ case 0x504b:
+ x = 3;
+ y = 7;
+ break;
+ case 0x524b:
+ x = 4;
+ y = 7;
+ break;
+ case 0x574b:
+ x = 5;
+ y = 7;
+ break;
+ case 0x594b:
+ x = 6;
+ y = 7;
+ break;
+ case 0x5a4b:
+ x = 7;
+ y = 7;
+ break;
+ case 0x414c:
+ x = 8;
+ y = 7;
+ break;
+ case 0x424c:
+ x = 9;
+ y = 7;
+ break;
+ case 0x434c:
+ x = 10;
+ y = 7;
+ break;
+ case 0x494c:
+ x = 11;
+ y = 7;
+ break;
+ case 0x4b4c:
+ x = 12;
+ y = 7;
+ break;
+ case 0x524c:
+ x = 13;
+ y = 7;
+ break;
+ case 0x534c:
+ x = 14;
+ y = 7;
+ break;
+ case 0x544c:
+ x = 15;
+ y = 7;
+ break;
+ case 0x554c:
+ x = 0;
+ y = 8;
+ break;
+ case 0x564c:
+ x = 1;
+ y = 8;
+ break;
+ case 0x594c:
+ x = 2;
+ y = 8;
+ break;
+ case 0x414d:
+ x = 3;
+ y = 8;
+ break;
+ case 0x434d:
+ x = 4;
+ y = 8;
+ break;
+ case 0x444d:
+ x = 5;
+ y = 8;
+ break;
+ case 0x454d:
+ x = 6;
+ y = 8;
+ break;
+ case 0x474d:
+ x = 7;
+ y = 8;
+ break;
+ case 0x484d:
+ x = 8;
+ y = 8;
+ break;
+ case 0x4b4d:
+ x = 9;
+ y = 8;
+ break;
+ case 0x4c4d:
+ x = 10;
+ y = 8;
+ break;
+ case 0x4d4d:
+ x = 11;
+ y = 8;
+ break;
+ case 0x4e4d:
+ x = 12;
+ y = 8;
+ break;
+ case 0x4f4d:
+ x = 13;
+ y = 8;
+ break;
+ case 0x504d:
+ x = 14;
+ y = 8;
+ break;
+ case 0x514d:
+ x = 15;
+ y = 8;
+ break;
+ case 0x524d:
+ x = 0;
+ y = 9;
+ break;
+ case 0x534d:
+ x = 1;
+ y = 9;
+ break;
+ case 0x544d:
+ x = 2;
+ y = 9;
+ break;
+ case 0x554d:
+ x = 3;
+ y = 9;
+ break;
+ case 0x564d:
+ x = 4;
+ y = 9;
+ break;
+ case 0x574d:
+ x = 5;
+ y = 9;
+ break;
+ case 0x584d:
+ x = 6;
+ y = 9;
+ break;
+ case 0x594d:
+ x = 7;
+ y = 9;
+ break;
+ case 0x5a4d:
+ x = 8;
+ y = 9;
+ break;
+ case 0x414e:
+ x = 9;
+ y = 9;
+ break;
+ case 0x434e:
+ x = 10;
+ y = 9;
+ break;
+ case 0x454e:
+ x = 11;
+ y = 9;
+ break;
+ case 0x464e:
+ x = 12;
+ y = 9;
+ break;
+ case 0x474e:
+ x = 13;
+ y = 9;
+ break;
+ case 0x494e:
+ x = 14;
+ y = 9;
+ break;
+ case 0x4c4e:
+ x = 15;
+ y = 9;
+ break;
+ case 0x4f4e:
+ x = 0;
+ y = 10;
+ break;
+ case 0x504e:
+ x = 1;
+ y = 10;
+ break;
+ case 0x524e:
+ x = 2;
+ y = 10;
+ break;
+ case 0x554e:
+ x = 3;
+ y = 10;
+ break;
+ case 0x5a4e:
+ x = 4;
+ y = 10;
+ break;
+ case 0x4d4f:
+ x = 5;
+ y = 10;
+ break;
+ case 0x4150:
+ x = 6;
+ y = 10;
+ break;
+ case 0x4550:
+ x = 7;
+ y = 10;
+ break;
+ case 0x4650:
+ x = 8;
+ y = 10;
+ break;
+ case 0x4750:
+ x = 9;
+ y = 10;
+ break;
+ case 0x4850:
+ x = 10;
+ y = 10;
+ break;
+ case 0x4b50:
+ x = 11;
+ y = 10;
+ break;
+ case 0x4c50:
+ x = 12;
+ y = 10;
+ break;
+ case 0x4d50:
+ x = 13;
+ y = 10;
+ break;
+ case 0x4e50:
+ x = 14;
+ y = 10;
+ break;
+ case 0x5250:
+ x = 15;
+ y = 10;
+ break;
+ case 0x5350:
+ x = 0;
+ y = 11;
+ break;
+ case 0x5450:
+ x = 1;
+ y = 11;
+ break;
+ case 0x5750:
+ x = 2;
+ y = 11;
+ break;
+ case 0x5950:
+ x = 3;
+ y = 11;
+ break;
+ case 0x4151:
+ x = 4;
+ y = 11;
+ break;
+ case 0x4552:
+ x = 5;
+ y = 11;
+ break;
+ case 0x4f52:
+ x = 6;
+ y = 11;
+ break;
+ case 0x5352:
+ x = 7;
+ y = 11;
+ break;
+ case 0x5552:
+ x = 8;
+ y = 11;
+ break;
+ case 0x5752:
+ x = 9;
+ y = 11;
+ break;
+ case 0x4153:
+ x = 10;
+ y = 11;
+ break;
+ case 0x4253:
+ x = 11;
+ y = 11;
+ break;
+ case 0x4353:
+ x = 12;
+ y = 11;
+ break;
+ case 0x4453:
+ x = 13;
+ y = 11;
+ break;
+ case 0x4553:
+ x = 14;
+ y = 11;
+ break;
+ case 0x4753:
+ x = 15;
+ y = 11;
+ break;
+ case 0x4853:
+ x = 0;
+ y = 12;
+ break;
+ case 0x4953:
+ x = 1;
+ y = 12;
+ break;
+ case 0x4a53:
+ x = 2;
+ y = 12;
+ break;
+ case 0x4b53:
+ x = 3;
+ y = 12;
+ break;
+ case 0x4c53:
+ x = 4;
+ y = 12;
+ break;
+ case 0x4d53:
+ x = 5;
+ y = 12;
+ break;
+ case 0x4e53:
+ x = 6;
+ y = 12;
+ break;
+ case 0x4f53:
+ x = 7;
+ y = 12;
+ break;
+ case 0x5253:
+ x = 8;
+ y = 12;
+ break;
+ case 0x5453:
+ x = 9;
+ y = 12;
+ break;
+ case 0x5653:
+ x = 10;
+ y = 12;
+ break;
+ case 0x5953:
+ x = 11;
+ y = 12;
+ break;
+ case 0x5a53:
+ x = 12;
+ y = 12;
+ break;
+ case 0x4354:
+ x = 13;
+ y = 12;
+ break;
+ case 0x4454:
+ x = 14;
+ y = 12;
+ break;
+ case 0x4654:
+ x = 15;
+ y = 12;
+ break;
+ case 0x4754:
+ x = 0;
+ y = 13;
+ break;
+ case 0x4854:
+ x = 1;
+ y = 13;
+ break;
+ case 0x4a54:
+ x = 2;
+ y = 13;
+ break;
+ case 0x4b54:
+ x = 3;
+ y = 13;
+ break;
+ case 0x4c54:
+ x = 4;
+ y = 13;
+ break;
+ case 0x4d54:
+ x = 5;
+ y = 13;
+ break;
+ case 0x4e54:
+ x = 6;
+ y = 13;
+ break;
+ case 0x4f54:
+ x = 7;
+ y = 13;
+ break;
+ case 0x5254:
+ x = 8;
+ y = 13;
+ break;
+ case 0x5454:
+ x = 9;
+ y = 13;
+ break;
+ case 0x5654:
+ x = 10;
+ y = 13;
+ break;
+ case 0x5754:
+ x = 11;
+ y = 13;
+ break;
+ case 0x5a54:
+ x = 12;
+ y = 13;
+ break;
+ case 0x4155:
+ x = 13;
+ y = 13;
+ break;
+ case 0x4755:
+ x = 14;
+ y = 13;
+ break;
+ case 0x4d55:
+ x = 15;
+ y = 13;
+ break;
+ case 0x5355:
+ x = 0;
+ y = 14;
+ break;
+ case 0x5955:
+ x = 1;
+ y = 14;
+ break;
+ case 0x5a55:
+ x = 2;
+ y = 14;
+ break;
+ case 0x4156:
+ x = 3;
+ y = 14;
+ break;
+ case 0x4356:
+ x = 4;
+ y = 14;
+ break;
+ case 0x4556:
+ x = 5;
+ y = 14;
+ break;
+ case 0x4756:
+ x = 6;
+ y = 14;
+ break;
+ case 0x4956:
+ x = 7;
+ y = 14;
+ break;
+ case 0x4e56:
+ x = 8;
+ y = 14;
+ break;
+ case 0x5556:
+ x = 9;
+ y = 14;
+ break;
+ case 0x4657:
+ x = 10;
+ y = 14;
+ break;
+ case 0x5357:
+ x = 11;
+ y = 14;
+ break;
+ case 0x4559:
+ x = 12;
+ y = 14;
+ break;
+ case 0x5459:
+ x = 13;
+ y = 14;
+ break;
+ case 0x415a:
+ x = 14;
+ y = 14;
+ break;
+ case 0x4d5a:
+ x = 15;
+ y = 14;
+ break;
+ case 0x575a:
+ x = 0;
+ y = 15;
+ break;
+ default: return false;
+ }
+ renderer.DrawImage(atlas, AABB2(pos.x - 8.f, pos.y - 8.f, 16.f, 16.f),
+ AABB2(float(x) * 16.f, float(y) * 16.f, 16.f, 16.f));
+ return true;
+ }
+ }
}
diff --git a/Resources/Scripts/Gui/MainScreen/CreateProfileScreen.as b/Resources/Scripts/Gui/MainScreen/CreateProfileScreen.as
index 2cbbff79..e3d60f59 100644
--- a/Resources/Scripts/Gui/MainScreen/CreateProfileScreen.as
+++ b/Resources/Scripts/Gui/MainScreen/CreateProfileScreen.as
@@ -19,19 +19,19 @@
*/
namespace spades {
- class CreateProfileScreen: spades::ui::UIElement {
+ class CreateProfileScreen : spades::ui::UIElement {
private float contentsTop, contentsHeight;
- spades::ui::EventHandler@ Closed;
- private spades::ui::UIElement@ owner;
- private spades::ui::Field@ nameField;
- private spades::ui::Button@ okButton;
+ spades::ui::EventHandler @Closed;
+ private spades::ui::UIElement @owner;
+ private spades::ui::Field @nameField;
+ private spades::ui::Button @okButton;
private ConfigItem cg_playerName("cg_playerName", "Deuce");
private ConfigItem cg_playerNameIsSet("cg_playerNameIsSet", "0");
- CreateProfileScreen(spades::ui::UIElement@ owner) {
+ CreateProfileScreen(spades::ui::UIElement @owner) {
super(owner.Manager);
@this.owner = owner;
@Font = Manager.RootElement.Font;
@@ -56,10 +56,8 @@ namespace spades {
{
spades::ui::Button button(Manager);
button.Caption = _Tr("CreateProfileScreen", "OK");
- button.Bounds = AABB2(
- contentsLeft + contentsWidth - 140.f,
- contentsTop + contentsHeight - 40.f
- , 140.f, 30.f);
+ button.Bounds = AABB2(contentsLeft + contentsWidth - 140.f,
+ contentsTop + contentsHeight - 40.f, 140.f, 30.f);
@button.Activated = spades::ui::EventHandler(this.OnOkPressed);
button.Enable = false;
AddChild(button);
@@ -68,10 +66,8 @@ namespace spades {
{
spades::ui::Button button(Manager);
button.Caption = _Tr("CreateProfileScreen", "Decide later");
- button.Bounds = AABB2(
- contentsLeft,
- contentsTop + contentsHeight - 40.f
- , 140.f, 30.f);
+ button.Bounds =
+ AABB2(contentsLeft, contentsTop + contentsHeight - 40.f, 140.f, 30.f);
@button.Activated = spades::ui::EventHandler(this.OnChooseLater);
AddChild(button);
}
@@ -101,7 +97,8 @@ namespace spades {
}
{
spades::ui::Label label(Manager);
- label.Text = _Tr("CreateProfileScreen", "You can change it later in the Setup dialog.");
+ label.Text =
+ _Tr("CreateProfileScreen", "You can change it later in the Setup dialog.");
label.Bounds = AABB2(contentsLeft, contentsTop + 106.f, contentsWidth, 32.f);
label.Alignment = Vector2(0.f, 0.5f);
AddChild(label);
@@ -109,7 +106,7 @@ namespace spades {
}
private void OnClosed() {
- if(Closed !is null) {
+ if (Closed !is null) {
Closed(this);
}
}
@@ -126,7 +123,7 @@ namespace spades {
@Manager.ActiveElement = nameField;
}
- private void OnOkPressed(spades::ui::UIElement@ sender) {
+ private void OnOkPressed(spades::ui::UIElement @sender) {
if (nameField.Text.length == 0) {
return;
}
@@ -135,16 +132,14 @@ namespace spades {
Close();
}
- private void OnChooseLater(spades::ui::UIElement@ sender) {
- Close();
- }
+ private void OnChooseLater(spades::ui::UIElement @sender) { Close(); }
- private void OnNameChanged(spades::ui::UIElement@ sender) {
+ private void OnNameChanged(spades::ui::UIElement @sender) {
okButton.Enable = nameField.Text.length > 0;
}
void HotKey(string key) {
- if(IsEnabled and (key == "Enter" or key == "Escape")) {
+ if (IsEnabled and(key == "Enter" or key == "Escape")) {
if (key == "Enter") {
OnOkPressed(this);
} else if (key == "Escape") {
@@ -158,22 +153,19 @@ namespace spades {
void Render() {
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Renderer@ r = Manager.Renderer;
- Image@ img = r.RegisterImage("Gfx/White.tga");
+ Renderer @r = Manager.Renderer;
+ Image @img = r.RegisterImage("Gfx/White.tga");
r.ColorNP = Vector4(1, 1, 1, 0.08f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + contentsTop - 15.f, size.x, 1.f));
r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop - 15.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop + contentsHeight + 15.f, size.x, 1.f));
+ AABB2(pos.x, pos.y + contentsTop + contentsHeight + 15.f, size.x, 1.f));
r.ColorNP = Vector4(1, 1, 1, 0.2f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + contentsTop - 14.f, size.x, 1.f));
r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop - 14.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop + contentsHeight + 14.f, size.x, 1.f));
+ AABB2(pos.x, pos.y + contentsTop + contentsHeight + 14.f, size.x, 1.f));
UIElement::Render();
}
-
}
}
diff --git a/Resources/Scripts/Gui/MainScreen/MainMenu.as b/Resources/Scripts/Gui/MainScreen/MainMenu.as
index 81cd0166..bfe2d295 100644
--- a/Resources/Scripts/Gui/MainScreen/MainMenu.as
+++ b/Resources/Scripts/Gui/MainScreen/MainMenu.as
@@ -23,68 +23,66 @@
namespace spades {
- class RefreshButton: spades::ui::SimpleButton {
- RefreshButton(spades::ui::UIManager@ manager){
- super(manager);
- }
+ class RefreshButton : spades::ui::SimpleButton {
+ RefreshButton(spades::ui::UIManager @manager) { super(manager); }
void Render() {
SimpleButton::Render();
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/UI/Refresh.png");
+ Image @img = renderer.RegisterImage("Gfx/UI/Refresh.png");
renderer.DrawImage(img, pos + (size - Vector2(16.f, 16.f)) * 0.5f);
}
}
- class ProtocolButton: spades::ui::SimpleButton {
- ProtocolButton(spades::ui::UIManager@ manager){
+ class ProtocolButton : spades::ui::SimpleButton {
+ ProtocolButton(spades::ui::UIManager @manager) {
super(manager);
Toggle = true;
}
}
uint8 ToLower(uint8 c) {
- if(c >= uint8(0x41) and c <= uint8(0x5a)) {
+ if (c >= uint8(0x41) and c <= uint8(0x5a)) {
return uint8(c - 0x41 + 0x61);
} else {
return c;
}
}
bool StringContainsCaseInsensitive(string text, string pattern) {
- for(int i = text.length - 1; i >= 0; i--)
+ for (int i = text.length - 1; i >= 0; i--)
text[i] = ToLower(text[i]);
- for(int i = pattern.length - 1; i >= 0; i--)
+ for (int i = pattern.length - 1; i >= 0; i--)
pattern[i] = ToLower(pattern[i]);
return text.findFirst(pattern) >= 0;
}
- class MainScreenMainMenu: spades::ui::UIElement {
+ class MainScreenMainMenu : spades::ui::UIElement {
- MainScreenUI@ ui;
- MainScreenHelper@ helper;
- spades::ui::Field@ addressField;
+ MainScreenUI @ui;
+ MainScreenHelper @helper;
+ spades::ui::Field @addressField;
- spades::ui::Button@ protocol3Button;
- spades::ui::Button@ protocol4Button;
+ spades::ui::Button @protocol3Button;
+ spades::ui::Button @protocol4Button;
- spades::ui::Button@ filterProtocol3Button;
- spades::ui::Button@ filterProtocol4Button;
- spades::ui::Button@ filterEmptyButton;
- spades::ui::Button@ filterFullButton;
- spades::ui::Field@ filterField;
+ spades::ui::Button @filterProtocol3Button;
+ spades::ui::Button @filterProtocol4Button;
+ spades::ui::Button @filterEmptyButton;
+ spades::ui::Button @filterFullButton;
+ spades::ui::Field @filterField;
- spades::ui::ListView@ serverList;
- MainScreenServerListLoadingView@ loadingView;
- MainScreenServerListErrorView@ errorView;
+ spades::ui::ListView @serverList;
+ MainScreenServerListLoadingView @loadingView;
+ MainScreenServerListErrorView @errorView;
bool loading = false, loaded = false;
private ConfigItem cg_protocolVersion("cg_protocolVersion", "3");
private ConfigItem cg_lastQuickConnectHost("cg_lastQuickConnectHost", "127.0.0.1");
private ConfigItem cg_serverlistSort("cg_serverlistSort", "16385");
- MainScreenMainMenu(MainScreenUI@ ui) {
+ MainScreenMainMenu(MainScreenUI @ui) {
super(ui.manager);
@this.ui = ui;
@this.helper = ui.helper;
@@ -109,8 +107,8 @@ namespace spades {
}
{
@protocol3Button = ProtocolButton(Manager);
- protocol3Button.Bounds = AABB2(contentsLeft + contentsWidth - 240.f + 6.f, 200,
- 40.f, 30.f);
+ protocol3Button.Bounds =
+ AABB2(contentsLeft + contentsWidth - 240.f + 6.f, 200, 40.f, 30.f);
protocol3Button.Caption = _Tr("MainScreen", "0.75");
@protocol3Button.Activated = spades::ui::EventHandler(this.OnProtocol3Pressed);
protocol3Button.Toggle = true;
@@ -119,8 +117,8 @@ namespace spades {
}
{
@protocol4Button = ProtocolButton(Manager);
- protocol4Button.Bounds = AABB2(contentsLeft + contentsWidth - 200.f + 6.f, 200,
- 40.f, 30.f);
+ protocol4Button.Bounds =
+ AABB2(contentsLeft + contentsWidth - 200.f + 6.f, 200, 40.f, 30.f);
protocol4Button.Caption = _Tr("MainScreen", "0.76");
@protocol4Button.Activated = spades::ui::EventHandler(this.OnProtocol4Pressed);
protocol4Button.Toggle = true;
@@ -163,26 +161,25 @@ namespace spades {
}
{
@filterProtocol3Button = ProtocolButton(Manager);
- filterProtocol3Button.Bounds = AABB2(contentsLeft + 50.f, footerPos,
- 40.f, 30.f);
+ filterProtocol3Button.Bounds = AABB2(contentsLeft + 50.f, footerPos, 40.f, 30.f);
filterProtocol3Button.Caption = _Tr("MainScreen", "0.75");
- @filterProtocol3Button.Activated = spades::ui::EventHandler(this.OnFilterProtocol3Pressed);
+ @filterProtocol3Button.Activated
+ = spades::ui::EventHandler(this.OnFilterProtocol3Pressed);
filterProtocol3Button.Toggle = true;
AddChild(filterProtocol3Button);
}
{
@filterProtocol4Button = ProtocolButton(Manager);
- filterProtocol4Button.Bounds = AABB2(contentsLeft + 90.f, footerPos,
- 40.f, 30.f);
+ filterProtocol4Button.Bounds = AABB2(contentsLeft + 90.f, footerPos, 40.f, 30.f);
filterProtocol4Button.Caption = _Tr("MainScreen", "0.76");
- @filterProtocol4Button.Activated = spades::ui::EventHandler(this.OnFilterProtocol4Pressed);
+ @filterProtocol4Button.Activated
+ = spades::ui::EventHandler(this.OnFilterProtocol4Pressed);
filterProtocol4Button.Toggle = true;
AddChild(filterProtocol4Button);
}
{
@filterEmptyButton = ProtocolButton(Manager);
- filterEmptyButton.Bounds = AABB2(contentsLeft + 135.f, footerPos,
- 50.f, 30.f);
+ filterEmptyButton.Bounds = AABB2(contentsLeft + 135.f, footerPos, 50.f, 30.f);
filterEmptyButton.Caption = _Tr("MainScreen", "Empty");
@filterEmptyButton.Activated = spades::ui::EventHandler(this.OnFilterEmptyPressed);
filterEmptyButton.Toggle = true;
@@ -190,8 +187,7 @@ namespace spades {
}
{
@filterFullButton = ProtocolButton(Manager);
- filterFullButton.Bounds = AABB2(contentsLeft + 185.f, footerPos,
- 70.f, 30.f);
+ filterFullButton.Bounds = AABB2(contentsLeft + 185.f, footerPos, 70.f, 30.f);
filterFullButton.Caption = _Tr("MainScreen", "Not Full");
@filterFullButton.Activated = spades::ui::EventHandler(this.OnFilterFullPressed);
filterFullButton.Toggle = true;
@@ -267,7 +263,7 @@ namespace spades {
}
void LoadServerList() {
- if(loading) {
+ if (loading) {
return;
}
loaded = false;
@@ -278,54 +274,42 @@ namespace spades {
helper.StartQuery();
}
- void ServerListItemActivated(ServerListModel@ sender, MainScreenServerItem@ item) {
+ void ServerListItemActivated(ServerListModel @sender, MainScreenServerItem @item) {
addressField.Text = item.Address;
cg_lastQuickConnectHost = addressField.Text;
- if(item.Protocol == "0.75") {
+ if (item.Protocol == "0.75") {
SetProtocolVersion(3);
- }else if(item.Protocol == "0.76") {
+ } else if (item.Protocol == "0.76") {
SetProtocolVersion(4);
}
addressField.SelectAll();
}
- void ServerListItemDoubleClicked(ServerListModel@ sender, MainScreenServerItem@ item) {
+ void ServerListItemDoubleClicked(ServerListModel @sender, MainScreenServerItem @item) {
ServerListItemActivated(sender, item);
// Double-click to connect
Connect();
}
- void ServerListItemRightClicked(ServerListModel@ sender, MainScreenServerItem@ item) {
+ void ServerListItemRightClicked(ServerListModel @sender, MainScreenServerItem @item) {
helper.SetServerFavorite(item.Address, !item.Favorite);
UpdateServerList();
}
- private void SortServerListByPing(spades::ui::UIElement@ sender) {
- SortServerList(0);
- }
- private void SortServerListByNumPlayers(spades::ui::UIElement@ sender) {
+ private void SortServerListByPing(spades::ui::UIElement @sender) { SortServerList(0); }
+ private void SortServerListByNumPlayers(spades::ui::UIElement @sender) {
SortServerList(1);
}
- private void SortServerListByName(spades::ui::UIElement@ sender) {
- SortServerList(2);
- }
- private void SortServerListByMapName(spades::ui::UIElement@ sender) {
- SortServerList(3);
- }
- private void SortServerListByGameMode(spades::ui::UIElement@ sender) {
- SortServerList(4);
- }
- private void SortServerListByProtocol(spades::ui::UIElement@ sender) {
- SortServerList(5);
- }
- private void SortServerListByCountry(spades::ui::UIElement@ sender) {
- SortServerList(6);
- }
+ private void SortServerListByName(spades::ui::UIElement @sender) { SortServerList(2); }
+ private void SortServerListByMapName(spades::ui::UIElement @sender) { SortServerList(3); }
+ private void SortServerListByGameMode(spades::ui::UIElement @sender) { SortServerList(4); }
+ private void SortServerListByProtocol(spades::ui::UIElement @sender) { SortServerList(5); }
+ private void SortServerListByCountry(spades::ui::UIElement @sender) { SortServerList(6); }
private void SortServerList(int keyId) {
int sort = cg_serverlistSort.IntValue;
- if(int(sort & 0xfff) == keyId) {
+ if (int(sort & 0xfff) == keyId) {
sort ^= int(0x4000);
} else {
sort = keyId;
@@ -336,7 +320,7 @@ namespace spades {
private void UpdateServerList() {
string key = "";
- switch(cg_serverlistSort.IntValue & 0xfff) {
+ switch (cg_serverlistSort.IntValue & 0xfff) {
case 0: key = "Ping"; break;
case 1: key = "NumPlayers"; break;
case 2: key = "Name"; break;
@@ -345,9 +329,9 @@ namespace spades {
case 5: key = "Protocol"; break;
case 6: key = "Country"; break;
}
- MainScreenServerItem@[]@ list = helper.GetServerList(key,
- (cg_serverlistSort.IntValue & 0x4000) != 0);
- if((list is null) or (loading)){
+ MainScreenServerItem @[] @list =
+ helper.GetServerList(key, (cg_serverlistSort.IntValue & 0x4000) != 0);
+ if ((list is null)or(loading)) {
@serverList.Model = spades::ui::ListViewModel(); // empty
return;
}
@@ -358,25 +342,25 @@ namespace spades {
bool filterEmpty = filterEmptyButton.Toggled;
bool filterFull = filterFullButton.Toggled;
string filterText = filterField.Text;
- MainScreenServerItem@[]@ list2 = array();
- for(int i = 0, count = list.length; i < count; i++) {
- MainScreenServerItem@ item = list[i];
- if(filterProtocol3 and (item.Protocol != "0.75")) {
+ MainScreenServerItem @[] @list2 = array();
+ for (int i = 0, count = list.length; i < count; i++) {
+ MainScreenServerItem @item = list[i];
+ if (filterProtocol3 and(item.Protocol != "0.75")) {
continue;
}
- if(filterProtocol4 and (item.Protocol != "0.76")) {
+ if (filterProtocol4 and(item.Protocol != "0.76")) {
continue;
}
- if(filterEmpty and (item.NumPlayers > 0)) {
+ if (filterEmpty and(item.NumPlayers > 0)) {
continue;
}
- if(filterFull and (item.NumPlayers >= item.MaxPlayers)) {
+ if (filterFull and(item.NumPlayers >= item.MaxPlayers)) {
continue;
}
- if(filterText.length > 0) {
- if(not (StringContainsCaseInsensitive(item.Name, filterText) or
- StringContainsCaseInsensitive(item.MapName, filterText) or
- StringContainsCaseInsensitive(item.GameMode, filterText))) {
+ if (filterText.length > 0) {
+ if (not(StringContainsCaseInsensitive(item.Name, filterText)
+ or StringContainsCaseInsensitive(item.MapName, filterText)
+ or StringContainsCaseInsensitive(item.GameMode, filterText))) {
continue;
}
}
@@ -392,12 +376,13 @@ namespace spades {
}
private void CheckServerList() {
- if(helper.PollServerListState()) {
- MainScreenServerItem@[]@ list = helper.GetServerList("", false);
- if(list is null or list.length == 0) {
+ if (helper.PollServerListState()) {
+ MainScreenServerItem @[] @list = helper.GetServerList("", false);
+ if (list is null or list.length == 0) {
// failed.
// FIXME: show error message?
- loaded = false; loading = false;
+ loaded = false;
+ loading = false;
errorView.Visible = true;
loadingView.Visible = false;
@serverList.Model = spades::ui::ListViewModel(); // empty
@@ -411,7 +396,7 @@ namespace spades {
}
}
- private void OnAddressChanged(spades::ui::UIElement@ sender) {
+ private void OnAddressChanged(spades::ui::UIElement @sender) {
cg_lastQuickConnectHost = addressField.Text;
}
@@ -421,69 +406,58 @@ namespace spades {
cg_protocolVersion = ver;
}
- private void OnProtocol3Pressed(spades::ui::UIElement@ sender) {
- SetProtocolVersion(3);
- }
+ private void OnProtocol3Pressed(spades::ui::UIElement @sender) { SetProtocolVersion(3); }
- private void OnProtocol4Pressed(spades::ui::UIElement@ sender) {
- SetProtocolVersion(4);
- }
+ private void OnProtocol4Pressed(spades::ui::UIElement @sender) { SetProtocolVersion(4); }
- private void OnFilterProtocol3Pressed(spades::ui::UIElement@ sender) {
+ private void OnFilterProtocol3Pressed(spades::ui::UIElement @sender) {
filterProtocol4Button.Toggled = false;
UpdateServerList();
}
- private void OnFilterProtocol4Pressed(spades::ui::UIElement@ sender) {
+ private void OnFilterProtocol4Pressed(spades::ui::UIElement @sender) {
filterProtocol3Button.Toggled = false;
UpdateServerList();
}
- private void OnFilterFullPressed(spades::ui::UIElement@ sender) {
+ private void OnFilterFullPressed(spades::ui::UIElement @sender) {
filterEmptyButton.Toggled = false;
UpdateServerList();
}
- private void OnFilterEmptyPressed(spades::ui::UIElement@ sender) {
+ private void OnFilterEmptyPressed(spades::ui::UIElement @sender) {
filterFullButton.Toggled = false;
UpdateServerList();
}
- private void OnFilterTextChanged(spades::ui::UIElement@ sender) {
- UpdateServerList();
- }
+ private void OnFilterTextChanged(spades::ui::UIElement @sender) { UpdateServerList(); }
- private void OnRefreshServerListPressed(spades::ui::UIElement@ sender) {
- LoadServerList();
- }
+ private void OnRefreshServerListPressed(spades::ui::UIElement @sender) { LoadServerList(); }
- private void OnQuitPressed(spades::ui::UIElement@ sender) {
- ui.shouldExit = true;
- }
+ private void OnQuitPressed(spades::ui::UIElement @sender) { ui.shouldExit = true; }
- private void OnCreditsPressed(spades::ui::UIElement@ sender) {
- AlertScreen al(this, ui.helper.Credits, Min(500.f, Manager.Renderer.ScreenHeight - 100.f));
+ private void OnCreditsPressed(spades::ui::UIElement @sender) {
+ AlertScreen al(this, ui.helper.Credits,
+ Min(500.f, Manager.Renderer.ScreenHeight - 100.f));
al.Run();
}
- private void OnSetupPressed(spades::ui::UIElement@ sender) {
+ private void OnSetupPressed(spades::ui::UIElement @sender) {
PreferenceView al(this, PreferenceViewOptions(), ui.fontManager);
al.Run();
}
private void Connect() {
string msg = helper.ConnectServer(addressField.Text, cg_protocolVersion.IntValue);
- if(msg.length > 0) {
+ if (msg.length > 0) {
// failde to initialize client.
AlertScreen al(this, msg);
al.Run();
}
}
- private void OnConnectPressed(spades::ui::UIElement@ sender) {
- Connect();
- }
+ private void OnConnectPressed(spades::ui::UIElement @sender) { Connect(); }
void HotKey(string key) {
- if(IsEnabled and key == "Enter") {
+ if (IsEnabled and key == "Enter") {
Connect();
- } else if(IsEnabled and key == "Escape") {
+ } else if (IsEnabled and key == "Escape") {
ui.shouldExit = true;
} else {
UIElement::HotKey(key);
@@ -495,17 +469,21 @@ namespace spades {
UIElement::Render();
// check for client error message.
- if(IsEnabled) {
+ if (IsEnabled) {
string msg = helper.GetPendingErrorMessage();
- if(msg.length > 0) {
+ if (msg.length > 0) {
// try to maek the "disconnected" message more friendly.
- if(msg.findFirst("Disconnected:") >= 0) {
+ if (msg.findFirst("Disconnected:") >= 0) {
int ind1 = msg.findFirst("Disconnected:");
int ind2 = msg.findFirst("\n", ind1);
- if(ind2 < 0) ind2 = msg.length;
+ if (ind2 < 0)
+ ind2 = msg.length;
ind1 += "Disconnected:".length;
msg = msg.substr(ind1, ind2 - ind1);
- msg = _Tr("MainScreen", "You were disconnected from the server because of the following reason:\n\n{0}", msg);
+ msg = _Tr(
+ "MainScreen",
+ "You were disconnected from the server because of the following reason:\n\n{0}",
+ msg);
}
// failed to connect.
diff --git a/Resources/Scripts/Gui/MainScreen/MainScreenUI.as b/Resources/Scripts/Gui/MainScreen/MainScreenUI.as
index afc17d5f..3bc8dcca 100644
--- a/Resources/Scripts/Gui/MainScreen/MainScreenUI.as
+++ b/Resources/Scripts/Gui/MainScreen/MainScreenUI.as
@@ -24,14 +24,14 @@
namespace spades {
class MainScreenUI {
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- FontManager@ fontManager;
- MainScreenHelper@ helper;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ FontManager @fontManager;
+ MainScreenHelper @helper;
- spades::ui::UIManager@ manager;
+ spades::ui::UIManager @manager;
- MainScreenMainMenu@ mainMenu;
+ MainScreenMainMenu @mainMenu;
bool shouldExit = false;
@@ -40,7 +40,8 @@ namespace spades {
private ConfigItem cg_playerName("cg_playerName");
private ConfigItem cg_playerNameIsSet("cg_playerNameIsSet", "0");
- MainScreenUI(Renderer@ renderer, AudioDevice@ audioDevice, FontManager@ fontManager, MainScreenHelper@ helper) {
+ MainScreenUI(Renderer @renderer, AudioDevice @audioDevice, FontManager @fontManager,
+ MainScreenHelper @helper) {
@this.renderer = renderer;
@this.audioDevice = audioDevice;
@this.fontManager = fontManager;
@@ -56,15 +57,13 @@ namespace spades {
manager.RootElement.AddChild(mainMenu);
// Let the new player choose their IGN
- if (cg_playerName.StringValue != "" &&
- cg_playerName.StringValue != "Deuce") {
+ if (cg_playerName.StringValue != "" && cg_playerName.StringValue != "Deuce") {
cg_playerNameIsSet.IntValue = 1;
}
if (cg_playerNameIsSet.IntValue == 0) {
CreateProfileScreen al(mainMenu);
al.Run();
}
-
}
void SetupRenderer() {
@@ -75,43 +74,31 @@ namespace spades {
time = -1.f;
// returned from the client game, so reload the server list.
- if(mainMenu !is null)
+ if (mainMenu !is null)
mainMenu.LoadServerList();
- if(manager !is null)
+ if (manager !is null)
manager.KeyPanic();
}
- void MouseEvent(float x, float y) {
- manager.MouseEvent(x, y);
- }
+ void MouseEvent(float x, float y) { manager.MouseEvent(x, y); }
- void WheelEvent(float x, float y) {
- manager.WheelEvent(x, y);
- }
+ void WheelEvent(float x, float y) { manager.WheelEvent(x, y); }
- void KeyEvent(string key, bool down) {
- manager.KeyEvent(key, down);
- }
+ void KeyEvent(string key, bool down) { manager.KeyEvent(key, down); }
- void TextInputEvent(string text) {
- manager.TextInputEvent(text);
- }
+ void TextInputEvent(string text) { manager.TextInputEvent(text); }
void TextEditingEvent(string text, int start, int len) {
manager.TextEditingEvent(text, start, len);
}
- bool AcceptsTextInput() {
- return manager.AcceptsTextInput;
- }
+ bool AcceptsTextInput() { return manager.AcceptsTextInput; }
- AABB2 GetTextInputRect() {
- return manager.TextInputRect;
- }
+ AABB2 GetTextInputRect() { return manager.TextInputRect; }
- private SceneDefinition SetupCamera(SceneDefinition sceneDef,
- Vector3 eye, Vector3 at, Vector3 up, float fov) {
+ private SceneDefinition SetupCamera(SceneDefinition sceneDef, Vector3 eye, Vector3 at,
+ Vector3 up, float fov) {
Vector3 dir = (at - eye).Normalized;
Vector3 side = Cross(dir, up).Normalized;
up = -Cross(dir, side);
@@ -120,12 +107,14 @@ namespace spades {
sceneDef.viewAxisY = up;
sceneDef.viewAxisZ = dir;
sceneDef.fovY = fov * 3.141592654f / 180.f;
- sceneDef.fovX = atan(tan(sceneDef.fovY * 0.5f) * renderer.ScreenWidth / renderer.ScreenHeight) * 2.f;
+ sceneDef.fovX =
+ atan(tan(sceneDef.fovY * 0.5f) * renderer.ScreenWidth / renderer.ScreenHeight) *
+ 2.f;
return sceneDef;
}
void RunFrame(float dt) {
- if(time < 0.f) {
+ if (time < 0.f) {
time = 0.f;
}
@@ -133,9 +122,9 @@ namespace spades {
float cameraX = time;
cameraX -= floor(cameraX / 512.f) * 512.f;
cameraX = 512.f - cameraX;
- sceneDef = SetupCamera(sceneDef,
- Vector3(cameraX, 256.f, 12.f), Vector3(cameraX + .1f, 257.f, 12.5f), Vector3(0.f, 0.f, -1.f),
- 30.f);
+ sceneDef =
+ SetupCamera(sceneDef, Vector3(cameraX, 256.f, 12.f),
+ Vector3(cameraX + .1f, 257.f, 12.5f), Vector3(0.f, 0.f, -1.f), 30.f);
sceneDef.zNear = 0.1f;
sceneDef.zFar = 222.f;
sceneDef.time = int(time * 1000.f);
@@ -148,7 +137,7 @@ namespace spades {
// fade the map
float fade = Clamp((time - 1.f) / 2.2f, 0.f, 1.f);
sceneDef.globalBlur = Clamp((1.f - (time - 1.f) / 2.5f), 0.f, 1.f);
- if(!mainMenu.IsEnabled) {
+ if (!mainMenu.IsEnabled) {
sceneDef.globalBlur = Max(sceneDef.globalBlur, 0.5f);
}
@@ -156,14 +145,14 @@ namespace spades {
renderer.EndScene();
// fade the map (draw)
- if(fade < 1.f) {
+ if (fade < 1.f) {
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 1.f - fade);
renderer.DrawImage(renderer.RegisterImage("Gfx/White.tga"),
- AABB2(0.f, 0.f, renderer.ScreenWidth, renderer.ScreenHeight));
+ AABB2(0.f, 0.f, renderer.ScreenWidth, renderer.ScreenHeight));
}
// draw title logo
- Image@ img = renderer.RegisterImage("Gfx/Title/Logo.png");
+ Image @img = renderer.RegisterImage("Gfx/Title/Logo.png");
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 1.f);
renderer.DrawImage(img, Vector2((renderer.ScreenWidth - img.Width) * 0.5f, 64.f));
@@ -175,20 +164,16 @@ namespace spades {
time += Min(dt, 0.05f);
}
- void Closing() {
- shouldExit = true;
- }
+ void Closing() { shouldExit = true; }
- bool WantsToBeClosed() {
- return shouldExit;
- }
+ bool WantsToBeClosed() { return shouldExit; }
}
/**
* The entry point of the main screen.
*/
- MainScreenUI@ CreateMainScreenUI(Renderer@ renderer, AudioDevice@ audioDevice,
- FontManager@ fontManager, MainScreenHelper@ helper) {
+ MainScreenUI @CreateMainScreenUI(Renderer @renderer, AudioDevice @audioDevice,
+ FontManager @fontManager, MainScreenHelper @helper) {
return MainScreenUI(renderer, audioDevice, fontManager, helper);
}
diff --git a/Resources/Scripts/Gui/MainScreen/ServerList.as b/Resources/Scripts/Gui/MainScreen/ServerList.as
index 1ede2855..9789b1ab 100644
--- a/Resources/Scripts/Gui/MainScreen/ServerList.as
+++ b/Resources/Scripts/Gui/MainScreen/ServerList.as
@@ -22,29 +22,29 @@
namespace spades {
- class ServerListItem: spades::ui::ButtonBase {
- MainScreenServerItem@ item;
- FlagIconRenderer@ flagIconRenderer;
- ServerListItem(spades::ui::UIManager@ manager, MainScreenServerItem@ item){
+ class ServerListItem : spades::ui::ButtonBase {
+ MainScreenServerItem @item;
+ FlagIconRenderer @flagIconRenderer;
+ ServerListItem(spades::ui::UIManager @manager, MainScreenServerItem @item) {
super(manager);
@this.item = item;
@flagIconRenderer = FlagIconRenderer(manager.Renderer);
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
Vector4 bgcolor = Vector4(1.f, 1.f, 1.f, 0.0f);
Vector4 fgcolor = Vector4(1.f, 1.f, 1.f, 1.f);
- if(item.Favorite) {
+ if (item.Favorite) {
bgcolor = Vector4(0.3f, 0.3f, 1.f, 0.1f);
- fgcolor = Vector4(220.f/255.f,220.f/255.f,0,1);
+ fgcolor = Vector4(220.f / 255.f, 220.f / 255.f, 0, 1);
}
- if(Pressed && Hover) {
+ if (Pressed && Hover) {
bgcolor.w += 0.3;
- } else if(Hover) {
+ } else if (Hover) {
bgcolor.w += 0.15;
}
renderer.ColorNP = bgcolor;
@@ -52,125 +52,125 @@ namespace spades {
Font.Draw(item.Name, ScreenPosition + Vector2(4.f, 2.f), 1.f, fgcolor);
string playersStr = ToString(item.NumPlayers) + "/" + ToString(item.MaxPlayers);
- Vector4 col(1,1,1,1);
- if(item.NumPlayers >= item.MaxPlayers) col = Vector4(1,0.7f,0.7f,1);
- else if(item.NumPlayers >= item.MaxPlayers * 3 / 4) col = Vector4(1,1,0.7f,1);
- else if(item.NumPlayers == 0) col = Vector4(0.7f,0.7f,1,1);
- Font.Draw(playersStr, ScreenPosition + Vector2(340.f-Font.Measure(playersStr).x * 0.5f, 2.f), 1.f, col);
- Font.Draw(item.MapName, ScreenPosition + Vector2(400.f, 2.f), 1.f, Vector4(1,1,1,1));
- Font.Draw(item.GameMode, ScreenPosition + Vector2(550.f, 2.f), 1.f, Vector4(1,1,1,1));
- Font.Draw(item.Protocol, ScreenPosition + Vector2(630.f, 2.f), 1.f, Vector4(1,1,1,1));
- if(not flagIconRenderer.DrawIcon(item.Country, ScreenPosition + Vector2(700.f, size.y * 0.5f))) {
- Font.Draw(item.Country, ScreenPosition + Vector2(680.f, 2.f), 1.f, Vector4(1,1,1,1));
+ Vector4 col(1, 1, 1, 1);
+ if (item.NumPlayers >= item.MaxPlayers)
+ col = Vector4(1, 0.7f, 0.7f, 1);
+ else if (item.NumPlayers >= item.MaxPlayers * 3 / 4)
+ col = Vector4(1, 1, 0.7f, 1);
+ else if (item.NumPlayers == 0)
+ col = Vector4(0.7f, 0.7f, 1, 1);
+ Font.Draw(playersStr,
+ ScreenPosition + Vector2(340.f - Font.Measure(playersStr).x * 0.5f, 2.f), 1.f,
+ col);
+ Font.Draw(item.MapName, ScreenPosition + Vector2(400.f, 2.f), 1.f, Vector4(1, 1, 1, 1));
+ Font.Draw(item.GameMode, ScreenPosition + Vector2(550.f, 2.f), 1.f,
+ Vector4(1, 1, 1, 1));
+ Font.Draw(item.Protocol, ScreenPosition + Vector2(630.f, 2.f), 1.f,
+ Vector4(1, 1, 1, 1));
+ if (not flagIconRenderer.DrawIcon(item.Country,
+ ScreenPosition + Vector2(700.f, size.y * 0.5f))) {
+ Font.Draw(item.Country, ScreenPosition + Vector2(680.f, 2.f), 1.f,
+ Vector4(1, 1, 1, 1));
}
}
}
- funcdef void ServerListItemEventHandler(ServerListModel@ sender, MainScreenServerItem@ item);
+ funcdef void ServerListItemEventHandler(ServerListModel @sender, MainScreenServerItem @item);
- class ServerListModel: spades::ui::ListViewModel {
- spades::ui::UIManager@ manager;
- MainScreenServerItem@[]@ list;
+ class ServerListModel : spades::ui::ListViewModel {
+ spades::ui::UIManager @manager;
+ MainScreenServerItem @[] @list;
- ServerListItemEventHandler@ ItemActivated;
- ServerListItemEventHandler@ ItemDoubleClicked;
- ServerListItemEventHandler@ ItemRightClicked;
+ ServerListItemEventHandler @ItemActivated;
+ ServerListItemEventHandler @ItemDoubleClicked;
+ ServerListItemEventHandler @ItemRightClicked;
- ServerListModel(spades::ui::UIManager@ manager, MainScreenServerItem@[]@ list) {
+ ServerListModel(spades::ui::UIManager @manager, MainScreenServerItem @[] @list) {
@this.manager = manager;
@this.list = list;
}
int NumRows {
get { return int(list.length); }
}
- private void OnItemClicked(spades::ui::UIElement@ sender){
- ServerListItem@ item = cast(sender);
- if(ItemActivated !is null) {
+ private void OnItemClicked(spades::ui::UIElement @sender) {
+ ServerListItem @item = cast(sender);
+ if (ItemActivated !is null) {
ItemActivated(this, item.item);
}
}
- private void OnItemDoubleClicked(spades::ui::UIElement@ sender){
- ServerListItem@ item = cast(sender);
- if(ItemDoubleClicked !is null) {
+ private void OnItemDoubleClicked(spades::ui::UIElement @sender) {
+ ServerListItem @item = cast(sender);
+ if (ItemDoubleClicked !is null) {
ItemDoubleClicked(this, item.item);
}
}
- private void OnItemRightClicked(spades::ui::UIElement@ sender){
- ServerListItem@ item = cast(sender);
- if(ItemRightClicked !is null) {
+ private void OnItemRightClicked(spades::ui::UIElement @sender) {
+ ServerListItem @item = cast(sender);
+ if (ItemRightClicked !is null) {
ItemRightClicked(this, item.item);
}
}
- spades::ui::UIElement@ CreateElement(int row) {
+ spades::ui::UIElement @CreateElement(int row) {
ServerListItem i(manager, list[row]);
@i.Activated = spades::ui::EventHandler(this.OnItemClicked);
@i.DoubleClicked = spades::ui::EventHandler(this.OnItemDoubleClicked);
@i.RightClicked = spades::ui::EventHandler(this.OnItemRightClicked);
return i;
}
- void RecycleElement(spades::ui::UIElement@ elem) {}
+ void RecycleElement(spades::ui::UIElement @elem) {}
}
-
- class ServerListHeader: spades::ui::ButtonBase {
+ class ServerListHeader : spades::ui::ButtonBase {
string Text;
- ServerListHeader(spades::ui::UIManager@ manager){
- super(manager);
- }
- void OnActivated() {
- ButtonBase::OnActivated();
- }
+ ServerListHeader(spades::ui::UIManager @manager) { super(manager); }
+ void OnActivated() { ButtonBase::OnActivated(); }
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- if(Pressed && Hover) {
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ if (Pressed && Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.3f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.15f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.0f);
}
renderer.DrawImage(img, AABB2(pos.x - 2.f, pos.y, size.x, size.y));
- Font.Draw(Text, ScreenPosition + Vector2(0.f, 2.f), 1.f, Vector4(1,1,1,1));
+ Font.Draw(Text, ScreenPosition + Vector2(0.f, 2.f), 1.f, Vector4(1, 1, 1, 1));
}
}
- class MainScreenServerListLoadingView: spades::ui::UIElement {
- MainScreenServerListLoadingView(spades::ui::UIManager@ manager) {
- super(manager);
- }
+ class MainScreenServerListLoadingView : spades::ui::UIElement {
+ MainScreenServerListLoadingView(spades::ui::UIManager @manager) { super(manager); }
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Font@ font = this.Font;
+ Font @font = this.Font;
string text = _Tr("MainScreen", "Loading...");
Vector2 txtSize = font.Measure(text);
Vector2 txtPos;
txtPos = pos + (size - txtSize) * 0.5f;
- font.Draw(text, txtPos, 1.f, Vector4(1,1,1,0.8));
+ font.Draw(text, txtPos, 1.f, Vector4(1, 1, 1, 0.8));
}
}
- class MainScreenServerListErrorView: spades::ui::UIElement {
- MainScreenServerListErrorView(spades::ui::UIManager@ manager) {
- super(manager);
- }
+ class MainScreenServerListErrorView : spades::ui::UIElement {
+ MainScreenServerListErrorView(spades::ui::UIManager @manager) { super(manager); }
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Font@ font = this.Font;
+ Font @font = this.Font;
string text = _Tr("MainScreen", "Failed to fetch the server list.");
Vector2 txtSize = font.Measure(text);
Vector2 txtPos;
txtPos = pos + (size - txtSize) * 0.5f;
- font.Draw(text, txtPos, 1.f, Vector4(1,1,1,0.8));
+ font.Draw(text, txtPos, 1.f, Vector4(1, 1, 1, 0.8));
}
}
diff --git a/Resources/Scripts/Gui/MessageBox.as b/Resources/Scripts/Gui/MessageBox.as
index 3aae7383..92bed591 100644
--- a/Resources/Scripts/Gui/MessageBox.as
+++ b/Resources/Scripts/Gui/MessageBox.as
@@ -19,143 +19,138 @@
*/
namespace spades {
- class MessageBoxScreen: spades::ui::UIElement {
+ class MessageBoxScreen : spades::ui::UIElement {
- private float contentsTop, contentsHeight;
+ private float contentsTop, contentsHeight;
- spades::ui::EventHandler@ Closed;
- int ResultIndex = -1;
+ spades::ui::EventHandler @Closed;
+ int ResultIndex = -1;
- private spades::ui::UIElement@ owner;
+ private spades::ui::UIElement @owner;
- MessageBoxScreen(spades::ui::UIElement@ owner, string text, string[]@ buttons, float height = 200.f) {
- super(owner.Manager);
- @this.owner = owner;
- @Font = Manager.RootElement.Font;
- this.Bounds = owner.Bounds;
+ MessageBoxScreen(spades::ui::UIElement @owner, string text, string[] @buttons,
+ float height = 200.f) {
+ super(owner.Manager);
+ @this.owner = owner;
+ @Font = Manager.RootElement.Font;
+ this.Bounds = owner.Bounds;
- float contentsWidth = 700.f;
- float contentsLeft = (Manager.Renderer.ScreenWidth - contentsWidth) * 0.5f;
- contentsHeight = height;
- contentsTop = (Manager.Renderer.ScreenHeight - contentsHeight) * 0.5f;
- {
- spades::ui::Label label(Manager);
- label.BackgroundColor = Vector4(0, 0, 0, 0.4f);
- label.Bounds = Bounds;
- AddChild(label);
- }
- {
- spades::ui::Label label(Manager);
- label.BackgroundColor = Vector4(0, 0, 0, 0.8f);
- label.Bounds = AABB2(0.f, contentsTop - 13.f, Size.x, contentsHeight + 27.f);
- AddChild(label);
- }
- for (uint i = 0; i < buttons.length; ++i) {
- spades::ui::Button button(Manager);
- button.Caption = buttons[i];
- button.Bounds = AABB2(
- contentsLeft + contentsWidth - (150.f + 10.f) * (buttons.length - i) + 10.f,
- contentsTop + contentsHeight - 30.f
- , 150.f, 30.f);
+ float contentsWidth = 700.f;
+ float contentsLeft = (Manager.Renderer.ScreenWidth - contentsWidth) * 0.5f;
+ contentsHeight = height;
+ contentsTop = (Manager.Renderer.ScreenHeight - contentsHeight) * 0.5f;
+ {
+ spades::ui::Label label(Manager);
+ label.BackgroundColor = Vector4(0, 0, 0, 0.4f);
+ label.Bounds = Bounds;
+ AddChild(label);
+ }
+ {
+ spades::ui::Label label(Manager);
+ label.BackgroundColor = Vector4(0, 0, 0, 0.8f);
+ label.Bounds = AABB2(0.f, contentsTop - 13.f, Size.x, contentsHeight + 27.f);
+ AddChild(label);
+ }
+ for (uint i = 0; i < buttons.length; ++i) {
+ spades::ui::Button button(Manager);
+ button.Caption = buttons[i];
+ button.Bounds = AABB2(contentsLeft + contentsWidth -
+ (150.f + 10.f) * (buttons.length - i) + 10.f,
+ contentsTop + contentsHeight - 30.f, 150.f, 30.f);
- MessageBoxScreenButtonHandler handler;
- @handler.screen = this;
- handler.resultIndex = int(i);
- @button.Activated = spades::ui::EventHandler(handler.OnPressed);
- AddChild(button);
- }
- {
- spades::ui::TextViewer viewer(Manager);
- AddChild(viewer);
- viewer.Bounds = AABB2(contentsLeft, contentsTop, contentsWidth, contentsHeight - 40.f);
- viewer.Text = text;
- }
- }
+ MessageBoxScreenButtonHandler handler;
+ @handler.screen = this;
+ handler.resultIndex = int(i);
+ @button.Activated = spades::ui::EventHandler(handler.OnPressed);
+ AddChild(button);
+ }
+ {
+ spades::ui::TextViewer viewer(Manager);
+ AddChild(viewer);
+ viewer.Bounds =
+ AABB2(contentsLeft, contentsTop, contentsWidth, contentsHeight - 40.f);
+ viewer.Text = text;
+ }
+ }
- private void OnClosed() {
- if(Closed !is null) {
- Closed(this);
- }
- }
+ private void OnClosed() {
+ if (Closed !is null) {
+ Closed(this);
+ }
+ }
- void EndDialog(int result) {
- ResultIndex = result;
- Close();
- }
+ void EndDialog(int result) {
+ ResultIndex = result;
+ Close();
+ }
- void Close() {
- owner.Enable = true;
- owner.Parent.RemoveChild(this);
- OnClosed();
- }
+ void Close() {
+ owner.Enable = true;
+ owner.Parent.RemoveChild(this);
+ OnClosed();
+ }
- void Run() {
- owner.Enable = false;
- owner.Parent.AddChild(this);
- }
+ void Run() {
+ owner.Enable = false;
+ owner.Parent.AddChild(this);
+ }
- void Render() {
- Vector2 pos = ScreenPosition;
- Vector2 size = Size;
- Renderer@ r = Manager.Renderer;
- Image@ img = r.RegisterImage("Gfx/White.tga");
+ void Render() {
+ Vector2 pos = ScreenPosition;
+ Vector2 size = Size;
+ Renderer @r = Manager.Renderer;
+ Image @img = r.RegisterImage("Gfx/White.tga");
- r.ColorNP = Vector4(1, 1, 1, 0.08f);
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop - 15.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop + contentsHeight + 15.f, size.x, 1.f));
- r.ColorNP = Vector4(1, 1, 1, 0.2f);
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop - 14.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + contentsTop + contentsHeight + 14.f, size.x, 1.f));
+ r.ColorNP = Vector4(1, 1, 1, 0.08f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + contentsTop - 15.f, size.x, 1.f));
+ r.DrawImage(img,
+ AABB2(pos.x, pos.y + contentsTop + contentsHeight + 15.f, size.x, 1.f));
+ r.ColorNP = Vector4(1, 1, 1, 0.2f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + contentsTop - 14.f, size.x, 1.f));
+ r.DrawImage(img,
+ AABB2(pos.x, pos.y + contentsTop + contentsHeight + 14.f, size.x, 1.f));
- UIElement::Render();
- }
+ UIElement::Render();
+ }
+ }
- }
+ class MessageBoxScreenButtonHandler {
+ MessageBoxScreen @screen;
+ int resultIndex;
- class MessageBoxScreenButtonHandler {
- MessageBoxScreen@ screen;
- int resultIndex;
+ void OnPressed(spades::ui::UIElement @) { screen.EndDialog(resultIndex); }
+ }
- void OnPressed(spades::ui::UIElement@) {
- screen.EndDialog(resultIndex);
- }
- }
+ class AlertScreen : MessageBoxScreen {
+ AlertScreen(spades::ui::UIElement @owner, string text, float height = 200.f) {
+ super(owner, text, array = {_Tr("MessageBox", "OK")}, height);
+ }
- class AlertScreen: MessageBoxScreen {
- AlertScreen(spades::ui::UIElement@ owner, string text, float height = 200.f) {
- super(owner, text, array = {_Tr("MessageBox", "OK")}, height);
- }
+ void HotKey(string key) {
+ if (IsEnabled and(key == "Enter" or key == "Escape")) {
+ EndDialog(0);
+ } else {
+ UIElement::HotKey(key);
+ }
+ }
+ }
- void HotKey(string key) {
- if(IsEnabled and (key == "Enter" or key == "Escape")) {
- EndDialog(0);
- } else {
- UIElement::HotKey(key);
- }
- }
- }
+ class ConfirmScreen : MessageBoxScreen {
+ ConfirmScreen(spades::ui::UIElement @owner, string text, float height = 200.f) {
+ super(owner, text,
+ array = {_Tr("MessageBox", "OK"), _Tr("MessageBox", "Cancel")}, height);
+ }
- class ConfirmScreen: MessageBoxScreen {
- ConfirmScreen(spades::ui::UIElement@ owner, string text, float height = 200.f) {
- super(owner, text, array = {_Tr("MessageBox", "OK"), _Tr("MessageBox", "Cancel")}, height);
- }
+ bool get_Result() { return ResultIndex == 0; }
- bool get_Result() {
- return ResultIndex == 0;
- }
-
- void HotKey(string key) {
- if(IsEnabled and key == "Enter") {
- EndDialog(0);
- } else if(IsEnabled and key == "Escape") {
- EndDialog(1);
- } else {
- UIElement::HotKey(key);
- }
- }
- }
+ void HotKey(string key) {
+ if (IsEnabled and key == "Enter") {
+ EndDialog(0);
+ } else if (IsEnabled and key == "Escape") {
+ EndDialog(1);
+ } else {
+ UIElement::HotKey(key);
+ }
+ }
+ }
}
diff --git a/Resources/Scripts/Gui/Preferences.as b/Resources/Scripts/Gui/Preferences.as
index 735a037d..80dee63d 100644
--- a/Resources/Scripts/Gui/Preferences.as
+++ b/Resources/Scripts/Gui/Preferences.as
@@ -20,749 +20,748 @@
namespace spades {
- class PreferenceViewOptions {
- bool GameActive = false;
- }
-
- class PreferenceView: spades::ui::UIElement {
- private spades::ui::UIElement@ owner;
-
- private PreferenceTab@[] tabs;
- float ContentsLeft, ContentsWidth;
- float ContentsTop, ContentsHeight;
-
- int SelectedTabIndex = 0;
-
- spades::ui::EventHandler@ Closed;
-
- PreferenceView(spades::ui::UIElement@ owner, PreferenceViewOptions@ options, FontManager@ fontManager) {
- super(owner.Manager);
- @this.owner = owner;
- this.Bounds = owner.Bounds;
- ContentsWidth = 800.f;
- ContentsLeft = (Manager.Renderer.ScreenWidth - ContentsWidth) * 0.5f;
- ContentsHeight = 550.f;
- ContentsTop = (Manager.Renderer.ScreenHeight - ContentsHeight) * 0.5f;
-
- {
- spades::ui::Label label(Manager);
- label.BackgroundColor = Vector4(0, 0, 0, 0.4f);
- label.Bounds = Bounds;
- AddChild(label);
- }
- {
- spades::ui::Label label(Manager);
- label.BackgroundColor = Vector4(0, 0, 0, 0.8f);
- label.Bounds = AABB2(0.f, ContentsTop - 13.f, Size.x, ContentsHeight + 27.f);
- AddChild(label);
- }
-
- AddTab(GameOptionsPanel(Manager, options, fontManager), _Tr("Preferences", "Game Options"));
- AddTab(ControlOptionsPanel(Manager, options, fontManager), _Tr("Preferences", "Controls"));
- AddTab(MiscOptionsPanel(Manager, options, fontManager), _Tr("Preferences", "Misc"));
-
- {
- PreferenceTabButton button(Manager);
- button.Caption = _Tr("Preferences", "Back");
- button.Bounds = AABB2(
- ContentsLeft + 10.f,
- ContentsTop + 10.f + float(tabs.length) * 32.f + 5.f
- , 150.f, 30.f);
- button.Alignment = Vector2(0.f, 0.5f);
- @button.Activated = spades::ui::EventHandler(this.OnClosePressed);
- AddChild(button);
- }
-
- UpdateTabs();
- }
-
- private void AddTab(spades::ui::UIElement@ view, string caption) {
- PreferenceTab tab(this, view);
- int order = int(tabs.length);
- tab.TabButton.Bounds = AABB2(ContentsLeft + 10.f, ContentsTop + 10.f + float(order) * 32.f, 150.f, 30.f);
- tab.TabButton.Caption = caption;
- tab.View.Bounds = AABB2(ContentsLeft + 170.f, ContentsTop + 10.f, ContentsWidth - 180.f, ContentsHeight - 20.f);
- tab.View.Visible = false;
- @tab.TabButton.Activated = spades::ui::EventHandler(this.OnTabButtonActivated);
- AddChild(tab.View);
- AddChild(tab.TabButton);
- tabs.insertLast(tab);
- }
-
- private void OnTabButtonActivated(spades::ui::UIElement@ sender) {
- for(uint i = 0; i < tabs.length; i++) {
- if(cast(tabs[i].TabButton) is sender) {
- SelectedTabIndex = i;
- UpdateTabs();
- }
- }
- }
-
- private void UpdateTabs() {
- for(uint i = 0; i < tabs.length; i++) {
- PreferenceTab@ tab = tabs[i];
- bool selected = SelectedTabIndex == int(i);
- tab.TabButton.Toggled = selected;
- tab.View.Visible = selected;
- }
- }
-
- private void OnClosePressed(spades::ui::UIElement@ sender) {
- Close();
- }
-
- private void OnClosed() {
- if(Closed !is null) Closed(this);
- }
-
- void HotKey(string key) {
- if(key == "Escape") {
- Close();
- } else {
- UIElement::HotKey(key);
- }
- }
-
- void Render() {
- Vector2 pos = ScreenPosition;
- Vector2 size = Size;
- Renderer@ r = Manager.Renderer;
- Image@ img = r.RegisterImage("Gfx/White.tga");
-
- r.ColorNP = Vector4(1, 1, 1, 0.08f);
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop - 15.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 15.f, size.x, 1.f));
- r.ColorNP = Vector4(1, 1, 1, 0.2f);
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop - 14.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 14.f, size.x, 1.f));
-
- UIElement::Render();
- }
-
-
- void Close() {
- owner.Enable = true;
- @this.Parent = null;
- OnClosed();
- }
-
- void Run() {
- owner.Enable = false;
- owner.Parent.AddChild(this);
- }
-
-
- }
-
- class PreferenceTabButton: spades::ui::Button {
- PreferenceTabButton(spades::ui::UIManager@ manager) {
- super(manager);
- Alignment = Vector2(0.f, 0.5f);
- }
- /*
- void Render() {
- Renderer@ renderer = Manager.Renderer;
- Vector2 pos = ScreenPosition;
- Vector2 size = Size;
-
- Vector4 color = Vector4(0.2f, 0.2f, 0.2f, 0.5f);
- if(Toggled or (Pressed and Hover)) {
- color = Vector4(0.7f, 0.7f, 0.7f, 0.9f);
- }else if(Hover) {
- color = Vector4(0.4f, 0.4f, 0.4f, 0.7f);
- }
-
- Font@ font = this.Font;
- string text = this.Caption;
- Vector2 txtSize = font.Measure(text);
- Vector2 txtPos;
- txtPos.y = pos.y + (size.y - txtSize.y) * 0.5f;
-
- font.DrawShadow(text, txtPos, 1.f,
- color, Vector4(0.f, 0.f, 0.f, 0.4f));
- }*/
-
- }
-
- class PreferenceTab {
- spades::ui::UIElement@ View;
- PreferenceTabButton@ TabButton;
-
- PreferenceTab(PreferenceView@ parent, spades::ui::UIElement@ view) {
- @View = view;
- @TabButton = PreferenceTabButton(parent.Manager);
- TabButton.Toggle = true;
- }
- }
-
- class ConfigField: spades::ui::Field {
- ConfigItem@ config;
- ConfigField(spades::ui::UIManager manager, string configName) {
- super(manager);
- @config = ConfigItem(configName);
- this.Text = config.StringValue;
- }
-
- void OnChanged() {
- Field::OnChanged();
- config = this.Text;
- }
- }
-
- class ConfigNumberFormatter {
- int digits;
- string suffix;
- string prefix;
- ConfigNumberFormatter(int digits, string suffix) {
- this.digits = digits;
- this.suffix = suffix;
- this.prefix = "";
- }
- ConfigNumberFormatter(int digits, string suffix, string prefix) {
- this.digits = digits;
- this.suffix = suffix;
- this.prefix = prefix;
- }
- private string FormatInternal(float value) {
- if(value < 0.f) {
- return "-" + Format(-value);
- }
-
- // do rounding
- float rounding = 0.5f;
- for(int i = digits; i > 0; i--)
- rounding *= 0.1f;
- value += rounding;
-
- int intPart = int(value);
- string s = ToString(intPart);
- if(digits > 0){
- s += ".";
- for(int i = digits; i > 0; i--) {
- value -= float(intPart);
- value *= 10.f;
- intPart = int(value);
- if(intPart > 9) intPart = 9;
- s += ToString(intPart);
- }
- }
- s += suffix;
- return s;
- }
- string Format(float value) {
- return prefix + FormatInternal(value);
- }
- }
-
- class ConfigSlider: spades::ui::Slider {
- ConfigItem@ config;
- float stepSize;
- spades::ui::Label@ label;
- ConfigNumberFormatter@ formatter;
-
- ConfigSlider(spades::ui::UIManager manager, string configName,
- float minValue, float maxValue, float stepValue,
- ConfigNumberFormatter@ formatter) {
- super(manager);
- @config = ConfigItem(configName);
- this.MinValue = minValue;
- this.MaxValue = maxValue;
- this.Value = Clamp(config.FloatValue, minValue, maxValue);
- this.stepSize = stepValue;
- @this.formatter = formatter;
-
- // compute large change
- int steps = int((maxValue - minValue) / stepValue);
- steps = (steps + 9) / 10;
- this.LargeChange = float(steps) * stepValue;
-
- @label = spades::ui::Label(Manager);
- label.Alignment = Vector2(1.f, 0.5f);
- AddChild(label);
- UpdateLabel();
- }
-
- void OnResized() {
- Slider::OnResized();
- label.Bounds = AABB2(Size.x, 0.f, 80.f, Size.y);
- }
-
- void UpdateLabel() {
- label.Text = formatter.Format(config.FloatValue);
- }
-
- void DoRounding() {
- float v = float(this.Value - this.MinValue);
- v = floor((v / stepSize) + 0.5) * stepSize;
- v += float(this.MinValue);
- this.Value = v;
- }
-
- void OnChanged() {
- Slider::OnChanged();
- DoRounding();
- config = this.Value;
- UpdateLabel();
- }
- }
-
- uint8 ToUpper(uint8 c) {
- if(c >= uint8(0x61) and c <= uint8(0x7a)) {
- return uint8(c - 0x61 + 0x41);
- } else {
- return c;
- }
- }
- class ConfigHotKeyField: spades::ui::UIElement {
- ConfigItem@ config;
- private bool hover;
- spades::ui::EventHandler@ KeyBound;
-
- ConfigHotKeyField(spades::ui::UIManager manager, string configName) {
- super(manager);
- @config = ConfigItem(configName);
- IsMouseInteractive = true;
- }
-
- string BoundKey {
- get { return config.StringValue; }
- set { config = value; }
- }
-
- void KeyDown(string key) {
- if(IsFocused) {
- if(key != "Escape") {
- if(key == " ") {
- key = "Space";
- } else if(key == "BackSpace" or key == "Delete") {
- key = ""; // unbind
- }
- config = key;
- KeyBound(this);
- }
- @Manager.ActiveElement = null;
- AcceptsFocus = false;
- } else {
- UIElement::KeyDown(key);
- }
- }
-
- void MouseDown(spades::ui::MouseButton button, Vector2 clientPosition) {
- if(not AcceptsFocus) {
- AcceptsFocus = true;
- @Manager.ActiveElement = this;
- return;
- }
- if(IsFocused) {
- if(button == spades::ui::MouseButton::LeftMouseButton) {
- config = "LeftMouseButton";
- }else if(button == spades::ui::MouseButton::RightMouseButton) {
- config = "RightMouseButton";
- }else if(button == spades::ui::MouseButton::MiddleMouseButton) {
- config = "MiddleMouseButton";
- }else if(button == spades::ui::MouseButton::MouseButton4) {
- config = "MouseButton4";
- }else if(button == spades::ui::MouseButton::MouseButton5) {
- config = "MouseButton5";
- }
- KeyBound(this);
- @Manager.ActiveElement = null;
- AcceptsFocus = false;
- }
- }
-
- void MouseEnter() {
- hover = true;
- }
- void MouseLeave() {
- hover = false;
- }
-
- void Render() {
- // render background
- Renderer@ renderer = Manager.Renderer;
- Vector2 pos = ScreenPosition;
- Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- renderer.ColorNP = Vector4(0.f, 0.f, 0.f, IsFocused ? 0.3f : 0.1f);
- renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
-
- if(IsFocused) {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- }else if(hover) {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.1f);
- } else {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.06f);
- }
- renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
- renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
- renderer.DrawImage(img, AABB2(pos.x, pos.y + 1.f, 1.f, size.y - 2.f));
- renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y + 1.f, 1.f, size.y - 2.f));
-
- Font@ font = this.Font;
- string text = IsFocused ? _Tr("Preferences", "Press Key to Bind or [Escape] to Cancel...") : config.StringValue;
-
- Vector4 color(1,1,1,1);
-
- if(IsFocused) {
- color.w = abs(sin(Manager.Time * 2.f));
- }else{
- AcceptsFocus = false;
- }
-
- if(text == " " or text == "Space") {
- text = _Tr("Preferences", "Space");
- }else if(text.length == 0) {
- text = _Tr("Preferences", "Unbound");
- color.w *= 0.3f;
- }else if(text == "Shift") {
- text = _Tr("Preferences", "Shift");
- }else if(text == "Control") {
- text = _Tr("Preferences", "Control");
- }else if(text == "Meta") {
- text = _Tr("Preferences", "Meta");
- }else if(text == "Alt") {
- text = _Tr("Preferences", "Alt");
- }else if(text == "LeftMouseButton") {
- text = _Tr("Preferences", "Left Mouse Button");
- }else if(text == "RightMouseButton") {
- text = _Tr("Preferences", "Right Mouse Button");
- }else if(text == "MiddleMouseButton") {
- text = _Tr("Preferences", "Middle Mouse Button");
- }else if(text == "MouseButton4") {
- text = _Tr("Preferences", "Mouse Button 4");
- }else if(text == "MouseButton5") {
- text = _Tr("Preferences", "Mouse Button 5");
- }else{
- for(uint i = 0, len = text.length; i < len; i++)
- text[i] = ToUpper(text[i]);
- }
-
- Vector2 txtSize = font.Measure(text);
- Vector2 txtPos;
- txtPos = pos + (size - txtSize) * 0.5f;
-
-
-
- font.Draw(text, txtPos, 1.f, color);
- }
- }
-
- class ConfigSimpleToggleButton: spades::ui::RadioButton {
- ConfigItem@ config;
- int value;
- ConfigSimpleToggleButton(spades::ui::UIManager manager, string caption, string configName, int value) {
- super(manager);
- @config = ConfigItem(configName);
- this.Caption = caption;
- this.value = value;
- this.Toggle = true;
- this.Toggled = config.IntValue == value;
- }
-
- void OnActivated() {
- RadioButton::OnActivated();
- this.Toggled = true;
- config = value;
- }
-
- void Render() {
- this.Toggled = config.IntValue == value;
- RadioButton::Render();
- }
- }
-
- class StandardPreferenceLayouterModel: spades::ui::ListViewModel {
- private spades::ui::UIElement@[]@ items;
- StandardPreferenceLayouterModel(spades::ui::UIElement@[]@ items) {
- @this.items = items;
- }
- int NumRows {
- get { return int(items.length); }
- }
- spades::ui::UIElement@ CreateElement(int row) {
- return items[row];
- }
- void RecycleElement(spades::ui::UIElement@ elem) {
- }
- }
- class StandardPreferenceLayouter {
- spades::ui::UIElement@ Parent;
- private float FieldX = 250.f;
- private float FieldWidth = 310.f;
- private spades::ui::UIElement@[] items;
- private ConfigHotKeyField@[] hotkeyItems;
- private FontManager@ fontManager;
-
- StandardPreferenceLayouter(spades::ui::UIElement@ parent, FontManager@ fontManager) {
- @Parent = parent;
- @this.fontManager = fontManager;
- }
-
- private spades::ui::UIElement@ CreateItem() {
- spades::ui::UIElement elem(Parent.Manager);
- elem.Size = Vector2(300.f, 32.f);
- items.insertLast(elem);
- return elem;
- }
-
- private void OnKeyBound(spades::ui::UIElement@ sender) {
- // unbind already bound key
- ConfigHotKeyField@ bindField = cast(sender);
- string key = bindField.BoundKey;
- for(uint i = 0; i < hotkeyItems.length; i++) {
- ConfigHotKeyField@ f = hotkeyItems[i];
- if(f !is bindField) {
- if(f.BoundKey == key) {
- f.BoundKey = "";
- }
- }
- }
- }
-
- void AddHeading(string text) {
- spades::ui::UIElement@ container = CreateItem();
-
- spades::ui::Label label(Parent.Manager);
- label.Text = text;
- label.Alignment = Vector2(0.f, 1.f);
- @label.Font = fontManager.HeadingFont;
- label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
- container.AddChild(label);
- }
-
- ConfigField@ AddInputField(string caption, string configName, bool enabled = true) {
- spades::ui::UIElement@ container = CreateItem();
-
- spades::ui::Label label(Parent.Manager);
- label.Text = caption;
- label.Alignment = Vector2(0.f, 0.5f);
- label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
- container.AddChild(label);
-
- ConfigField field(Parent.Manager, configName);
- field.Bounds = AABB2(FieldX, 1.f, FieldWidth, 30.f);
- field.Enable = enabled;
- container.AddChild(field);
-
- return field;
- }
-
- ConfigSlider@ AddSliderField(string caption, string configName,
- float minRange, float maxRange, float step,
- ConfigNumberFormatter@ formatter, bool enabled = true) {
- spades::ui::UIElement@ container = CreateItem();
-
- spades::ui::Label label(Parent.Manager);
- label.Text = caption;
- label.Alignment = Vector2(0.f, 0.5f);
- label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
- container.AddChild(label);
-
- ConfigSlider slider(Parent.Manager, configName, minRange, maxRange, step,
- formatter);
- slider.Bounds = AABB2(FieldX, 8.f, FieldWidth - 80.f, 16.f);
- slider.Enable = enabled;
- container.AddChild(slider);
-
- return slider;
- }
-
- void AddControl(string caption, string configName, bool enabled = true) {
- spades::ui::UIElement@ container = CreateItem();
-
- spades::ui::Label label(Parent.Manager);
- label.Text = caption;
- label.Alignment = Vector2(0.f, 0.5f);
- label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
- container.AddChild(label);
-
- ConfigHotKeyField field(Parent.Manager, configName);
- field.Bounds = AABB2(FieldX, 1.f, FieldWidth, 30.f);
- field.Enable = enabled;
- container.AddChild(field);
-
- @field.KeyBound = spades::ui::EventHandler(OnKeyBound);
- hotkeyItems.insertLast(field);
- }
-
- void AddChoiceField(string caption, string configName, array labels, array values, bool enabled = true) {
- spades::ui::UIElement@ container = CreateItem();
-
- spades::ui::Label label(Parent.Manager);
- label.Text = caption;
- label.Alignment = Vector2(0.f, 0.5f);
- label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
- container.AddChild(label);
-
- for (uint i = 0; i < labels.length; ++i) {
- ConfigSimpleToggleButton field(Parent.Manager, labels[i], configName, values[i]);
- field.Bounds = AABB2(FieldX + FieldWidth / labels.length * i,
- 1.f, FieldWidth / labels.length, 30.f);
- field.Enable = enabled;
- container.AddChild(field);
- }
- }
-
- void AddToggleField(string caption, string configName, bool enabled = true) {
- AddChoiceField(caption, configName,
- array = {_Tr("Preferences", "ON"), _Tr("Preferences", "OFF")},
- array = {1, 0}, enabled);
- }
-
- void AddPlusMinusField(string caption, string configName, bool enabled = true) {
- AddChoiceField(caption, configName,
- array = {_Tr("Preferences", "ON"), _Tr("Preferences", "REVERSED"), _Tr("Preferences", "OFF")},
- array = {1, -1, 0}, enabled);
- }
-
- void FinishLayout() {
- spades::ui::ListView list(Parent.Manager);
- @list.Model = StandardPreferenceLayouterModel(items);
- list.RowHeight = 32.f;
- list.Bounds = AABB2(0.f, 0.f, 580.f, 530.f);
- Parent.AddChild(list);
- }
- }
-
- class GameOptionsPanel: spades::ui::UIElement {
- GameOptionsPanel(spades::ui::UIManager@ manager, PreferenceViewOptions@ options, FontManager@ fontManager) {
- super(manager);
-
- StandardPreferenceLayouter layouter(this, fontManager);
- layouter.AddHeading(_Tr("Preferences", "Player Information"));
- ConfigField@ nameField = layouter.AddInputField(_Tr("Preferences", "Player Name"), "cg_playerName", not options.GameActive);
- nameField.MaxLength = 15;
- nameField.DenyNonAscii = true;
-
- layouter.AddHeading(_Tr("Preferences", "Effects"));
- layouter.AddToggleField(_Tr("Preferences", "Blood"), "cg_blood");
- layouter.AddToggleField(_Tr("Preferences", "Ejecting Brass"), "cg_ejectBrass");
- layouter.AddToggleField(_Tr("Preferences", "Ragdoll"), "cg_ragdoll");
- layouter.AddToggleField(_Tr("Preferences", "Animations"), "cg_animations");
- layouter.AddChoiceField(_Tr("Preferences", "Camera Shake"), "cg_shake",
- array = {_Tr("Preferences", "MORE"), _Tr("Preferences", "NORMAL"), _Tr("Preferences", "OFF")},
- array = {2, 1, 0});
- layouter.AddChoiceField(_Tr("Preferences", "Particles"), "cg_particles",
- array = {_Tr("Preferences", "NORMAL"), _Tr("Preferences", "LESS"), _Tr("Preferences", "OFF")},
- array = {2, 1, 0});
-
- layouter.AddHeading(_Tr("Preferences", "Feedbacks"));
- layouter.AddToggleField(_Tr("Preferences", "Chat Notify Sounds"), "cg_chatBeep");
- layouter.AddToggleField(_Tr("Preferences", "Hit Indicator"), "cg_hitIndicator");
- layouter.AddToggleField(_Tr("Preferences", "Show Alerts"), "cg_alerts");
-
- layouter.AddHeading(_Tr("Preferences", "AoS 0.75/0.76 Compatibility"));
- layouter.AddToggleField(_Tr("Preferences", "Allow Unicode"), "cg_unicode");
- layouter.AddToggleField(_Tr("Preferences", "Server Alert"), "cg_serverAlert");
-
- layouter.AddHeading(_Tr("Preferences", "Misc"));
- layouter.AddSliderField(_Tr("Preferences", "Field of View"), "cg_fov", 45, 90, 1,
- ConfigNumberFormatter(0, " deg"));
- layouter.AddSliderField(_Tr("Preferences", "Minimap size"), "cg_minimapSize", 128, 256, 8,
- ConfigNumberFormatter(0, " px"));
- layouter.AddToggleField(_Tr("Preferences", "Show Statistics"), "cg_stats");
- layouter.FinishLayout();
- }
- }
-
- class ControlOptionsPanel: spades::ui::UIElement {
- ControlOptionsPanel(spades::ui::UIManager@ manager, PreferenceViewOptions@ options, FontManager@ fontManager) {
- super(manager);
-
- StandardPreferenceLayouter layouter(this, fontManager);
- layouter.AddHeading(_Tr("Preferences", "Weapons/Tools"));
- layouter.AddControl(_Tr("Preferences", "Attack"), "cg_keyAttack");
- layouter.AddControl(_Tr("Preferences", "Alt. Attack"), "cg_keyAltAttack");
- layouter.AddToggleField(_Tr("Preferences", "Hold Aim Down Sight"), "cg_holdAimDownSight");
- layouter.AddSliderField(_Tr("Preferences", "Mouse Sensitivity"), "cg_mouseSensitivity", 0.1, 10, 0.1,
- ConfigNumberFormatter(1, "x"));
- layouter.AddSliderField(_Tr("Preferences", "ADS Mouse Sens. Scale"), "cg_zoomedMouseSensScale", 0.05, 3, 0.05,
- ConfigNumberFormatter(2, "x"));
- layouter.AddSliderField(_Tr("Preferences", "Exponential Power"), "cg_mouseExpPower", 0.5, 1.5, 0.02,
- ConfigNumberFormatter(2, "", "^"));
- layouter.AddToggleField(_Tr("Preferences", "Invert Y-axis Mouse Input"), "cg_invertMouseY");
- layouter.AddControl(_Tr("Preferences", "Reload"), "cg_keyReloadWeapon");
- layouter.AddControl(_Tr("Preferences", "Capture Color"), "cg_keyCaptureColor");
- layouter.AddControl(_Tr("Preferences", "Equip Spade"), "cg_keyToolSpade");
- layouter.AddControl(_Tr("Preferences", "Equip Block"), "cg_keyToolBlock");
- layouter.AddControl(_Tr("Preferences", "Equip Weapon"), "cg_keyToolWeapon");
- layouter.AddControl(_Tr("Preferences", "Equip Grenade"), "cg_keyToolGrenade");
- layouter.AddControl(_Tr("Preferences", "Last Used Tool"), "cg_keyLastTool");
- layouter.AddPlusMinusField(_Tr("Preferences", "Switch Tools by Wheel"), "cg_switchToolByWheel");
-
- layouter.AddHeading(_Tr("Preferences", "Movement"));
- layouter.AddControl(_Tr("Preferences", "Walk Forward"), "cg_keyMoveForward");
- layouter.AddControl(_Tr("Preferences", "Backpedal"), "cg_keyMoveBackward");
- layouter.AddControl(_Tr("Preferences", "Move Left"), "cg_keyMoveLeft");
- layouter.AddControl(_Tr("Preferences", "Move Right"), "cg_keyMoveRight");
- layouter.AddControl(_Tr("Preferences", "Crouch"), "cg_keyCrouch");
- layouter.AddControl(_Tr("Preferences", "Sneak"), "cg_keySneak");
- layouter.AddControl(_Tr("Preferences", "Jump"), "cg_keyJump");
- layouter.AddControl(_Tr("Preferences", "Sprint"), "cg_keySprint");
-
- layouter.AddHeading(_Tr("Preferences", "Misc"));
- layouter.AddControl(_Tr("Preferences", "Minimap Scale"), "cg_keyChangeMapScale");
- layouter.AddControl(_Tr("Preferences", "Toggle Map"), "cg_keyToggleMapZoom");
- layouter.AddControl(_Tr("Preferences", "Flashlight"), "cg_keyFlashlight");
- layouter.AddControl(_Tr("Preferences", "Global Chat"), "cg_keyGlobalChat");
- layouter.AddControl(_Tr("Preferences", "Team Chat"), "cg_keyTeamChat");
- layouter.AddControl(_Tr("Preferences", "Limbo Menu"), "cg_keyLimbo");
- layouter.AddControl(_Tr("Preferences", "Save Map"), "cg_keySaveMap");
- layouter.AddControl(_Tr("Preferences", "Save Sceneshot"), "cg_keySceneshot");
- layouter.AddControl(_Tr("Preferences", "Save Screenshot"), "cg_keyScreenshot");
-
- layouter.FinishLayout();
- }
- }
-
-
- class MiscOptionsPanel: spades::ui::UIElement {
- spades::ui::Label@ msgLabel;
- spades::ui::Button@ enableButton;
-
- private ConfigItem cl_showStartupWindow("cl_showStartupWindow");
-
- MiscOptionsPanel(spades::ui::UIManager@ manager, PreferenceViewOptions@ options, FontManager@ fontManager) {
- super(manager);
-
- {
- spades::ui::Button e(Manager);
- e.Bounds = AABB2(10.f, 10.f, 400.f, 30.f);
- e.Caption = _Tr("Preferences", "Enable Startup Window");
- @e.Activated = spades::ui::EventHandler(this.OnEnableClicked);
- AddChild(e);
- @enableButton = e;
- }
-
- {
- spades::ui::Label label(Manager);
- label.Bounds = AABB2(10.f, 50.f, 0.f, 0.f);
- label.Text = "Hoge";
- AddChild(label);
- @msgLabel = label;
- }
-
- UpdateState();
- }
-
- void UpdateState() {
- bool enabled = cl_showStartupWindow.IntValue != 0;
-
- msgLabel.Text = enabled ?
- _Tr("Preferences", "Quit and restart OpenSpades to access the startup window."):
- _Tr("Preferences", "Some settings only can be changed in the startup window.");
- enableButton.Enable = not enabled;
- }
-
- private void OnEnableClicked(spades::ui::UIElement@) {
- cl_showStartupWindow.IntValue = 1;
- UpdateState();
- }
-
- }
+ class PreferenceViewOptions {
+ bool GameActive = false;
+ }
+
+ class PreferenceView : spades::ui::UIElement {
+ private spades::ui::UIElement @owner;
+
+ private PreferenceTab @[] tabs;
+ float ContentsLeft, ContentsWidth;
+ float ContentsTop, ContentsHeight;
+
+ int SelectedTabIndex = 0;
+
+ spades::ui::EventHandler @Closed;
+
+ PreferenceView(spades::ui::UIElement @owner, PreferenceViewOptions @options,
+ FontManager @fontManager) {
+ super(owner.Manager);
+ @this.owner = owner;
+ this.Bounds = owner.Bounds;
+ ContentsWidth = 800.f;
+ ContentsLeft = (Manager.Renderer.ScreenWidth - ContentsWidth) * 0.5f;
+ ContentsHeight = 550.f;
+ ContentsTop = (Manager.Renderer.ScreenHeight - ContentsHeight) * 0.5f;
+
+ {
+ spades::ui::Label label(Manager);
+ label.BackgroundColor = Vector4(0, 0, 0, 0.4f);
+ label.Bounds = Bounds;
+ AddChild(label);
+ }
+ {
+ spades::ui::Label label(Manager);
+ label.BackgroundColor = Vector4(0, 0, 0, 0.8f);
+ label.Bounds = AABB2(0.f, ContentsTop - 13.f, Size.x, ContentsHeight + 27.f);
+ AddChild(label);
+ }
+
+ AddTab(GameOptionsPanel(Manager, options, fontManager),
+ _Tr("Preferences", "Game Options"));
+ AddTab(ControlOptionsPanel(Manager, options, fontManager),
+ _Tr("Preferences", "Controls"));
+ AddTab(MiscOptionsPanel(Manager, options, fontManager), _Tr("Preferences", "Misc"));
+
+ {
+ PreferenceTabButton button(Manager);
+ button.Caption = _Tr("Preferences", "Back");
+ button.Bounds =
+ AABB2(ContentsLeft + 10.f, ContentsTop + 10.f + float(tabs.length) * 32.f + 5.f,
+ 150.f, 30.f);
+ button.Alignment = Vector2(0.f, 0.5f);
+ @button.Activated = spades::ui::EventHandler(this.OnClosePressed);
+ AddChild(button);
+ }
+
+ UpdateTabs();
+ }
+
+ private void AddTab(spades::ui::UIElement @view, string caption) {
+ PreferenceTab tab(this, view);
+ int order = int(tabs.length);
+ tab.TabButton.Bounds =
+ AABB2(ContentsLeft + 10.f, ContentsTop + 10.f + float(order) * 32.f, 150.f, 30.f);
+ tab.TabButton.Caption = caption;
+ tab.View.Bounds = AABB2(ContentsLeft + 170.f, ContentsTop + 10.f, ContentsWidth - 180.f,
+ ContentsHeight - 20.f);
+ tab.View.Visible = false;
+ @tab.TabButton.Activated = spades::ui::EventHandler(this.OnTabButtonActivated);
+ AddChild(tab.View);
+ AddChild(tab.TabButton);
+ tabs.insertLast(tab);
+ }
+
+ private void OnTabButtonActivated(spades::ui::UIElement @sender) {
+ for (uint i = 0; i < tabs.length; i++) {
+ if (cast(tabs[i].TabButton) is sender) {
+ SelectedTabIndex = i;
+ UpdateTabs();
+ }
+ }
+ }
+
+ private void UpdateTabs() {
+ for (uint i = 0; i < tabs.length; i++) {
+ PreferenceTab @tab = tabs[i];
+ bool selected = SelectedTabIndex == int(i);
+ tab.TabButton.Toggled = selected;
+ tab.View.Visible = selected;
+ }
+ }
+
+ private void OnClosePressed(spades::ui::UIElement @sender) { Close(); }
+
+ private void OnClosed() {
+ if (Closed !is null)
+ Closed(this);
+ }
+
+ void HotKey(string key) {
+ if (key == "Escape") {
+ Close();
+ } else {
+ UIElement::HotKey(key);
+ }
+ }
+
+ void Render() {
+ Vector2 pos = ScreenPosition;
+ Vector2 size = Size;
+ Renderer @r = Manager.Renderer;
+ Image @img = r.RegisterImage("Gfx/White.tga");
+
+ r.ColorNP = Vector4(1, 1, 1, 0.08f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + ContentsTop - 15.f, size.x, 1.f));
+ r.DrawImage(img,
+ AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 15.f, size.x, 1.f));
+ r.ColorNP = Vector4(1, 1, 1, 0.2f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + ContentsTop - 14.f, size.x, 1.f));
+ r.DrawImage(img,
+ AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 14.f, size.x, 1.f));
+
+ UIElement::Render();
+ }
+
+ void Close() {
+ owner.Enable = true;
+ @this.Parent = null;
+ OnClosed();
+ }
+
+ void Run() {
+ owner.Enable = false;
+ owner.Parent.AddChild(this);
+ }
+ }
+
+ class PreferenceTabButton : spades::ui::Button {
+ PreferenceTabButton(spades::ui::UIManager @manager) {
+ super(manager);
+ Alignment = Vector2(0.f, 0.5f);
+ }
+ /*
+ void Render() {
+ Renderer@ renderer = Manager.Renderer;
+ Vector2 pos = ScreenPosition;
+ Vector2 size = Size;
+
+ Vector4 color = Vector4(0.2f, 0.2f, 0.2f, 0.5f);
+ if(Toggled or (Pressed and Hover)) {
+ color = Vector4(0.7f, 0.7f, 0.7f, 0.9f);
+ }else if(Hover) {
+ color = Vector4(0.4f, 0.4f, 0.4f, 0.7f);
+ }
+
+ Font@ font = this.Font;
+ string text = this.Caption;
+ Vector2 txtSize = font.Measure(text);
+ Vector2 txtPos;
+ txtPos.y = pos.y + (size.y - txtSize.y) * 0.5f;
+
+ font.DrawShadow(text, txtPos, 1.f,
+ color, Vector4(0.f, 0.f, 0.f, 0.4f));
+ }*/
+ }
+
+ class PreferenceTab {
+ spades::ui::UIElement @View;
+ PreferenceTabButton @TabButton;
+
+ PreferenceTab(PreferenceView @parent, spades::ui::UIElement @view) {
+ @View = view;
+ @TabButton = PreferenceTabButton(parent.Manager);
+ TabButton.Toggle = true;
+ }
+ }
+
+ class ConfigField : spades::ui::Field {
+ ConfigItem @config;
+ ConfigField(spades::ui::UIManager manager, string configName) {
+ super(manager);
+ @config = ConfigItem(configName);
+ this.Text = config.StringValue;
+ }
+
+ void OnChanged() {
+ Field::OnChanged();
+ config = this.Text;
+ }
+ }
+
+ class ConfigNumberFormatter {
+ int digits;
+ string suffix;
+ string prefix;
+ ConfigNumberFormatter(int digits, string suffix) {
+ this.digits = digits;
+ this.suffix = suffix;
+ this.prefix = "";
+ }
+ ConfigNumberFormatter(int digits, string suffix, string prefix) {
+ this.digits = digits;
+ this.suffix = suffix;
+ this.prefix = prefix;
+ }
+ private string FormatInternal(float value) {
+ if (value < 0.f) {
+ return "-" + Format(-value);
+ }
+
+ // do rounding
+ float rounding = 0.5f;
+ for (int i = digits; i > 0; i--)
+ rounding *= 0.1f;
+ value += rounding;
+
+ int intPart = int(value);
+ string s = ToString(intPart);
+ if (digits > 0) {
+ s += ".";
+ for (int i = digits; i > 0; i--) {
+ value -= float(intPart);
+ value *= 10.f;
+ intPart = int(value);
+ if (intPart > 9)
+ intPart = 9;
+ s += ToString(intPart);
+ }
+ }
+ s += suffix;
+ return s;
+ }
+ string Format(float value) { return prefix + FormatInternal(value); }
+ }
+
+ class ConfigSlider : spades::ui::Slider {
+ ConfigItem @config;
+ float stepSize;
+ spades::ui::Label @label;
+ ConfigNumberFormatter @formatter;
+
+ ConfigSlider(spades::ui::UIManager manager, string configName, float minValue,
+ float maxValue, float stepValue, ConfigNumberFormatter @formatter) {
+ super(manager);
+ @config = ConfigItem(configName);
+ this.MinValue = minValue;
+ this.MaxValue = maxValue;
+ this.Value = Clamp(config.FloatValue, minValue, maxValue);
+ this.stepSize = stepValue;
+ @this.formatter = formatter;
+
+ // compute large change
+ int steps = int((maxValue - minValue) / stepValue);
+ steps = (steps + 9) / 10;
+ this.LargeChange = float(steps) * stepValue;
+
+ @label = spades::ui::Label(Manager);
+ label.Alignment = Vector2(1.f, 0.5f);
+ AddChild(label);
+ UpdateLabel();
+ }
+
+ void OnResized() {
+ Slider::OnResized();
+ label.Bounds = AABB2(Size.x, 0.f, 80.f, Size.y);
+ }
+
+ void UpdateLabel() { label.Text = formatter.Format(config.FloatValue); }
+
+ void DoRounding() {
+ float v = float(this.Value - this.MinValue);
+ v = floor((v / stepSize) + 0.5) * stepSize;
+ v += float(this.MinValue);
+ this.Value = v;
+ }
+
+ void OnChanged() {
+ Slider::OnChanged();
+ DoRounding();
+ config = this.Value;
+ UpdateLabel();
+ }
+ }
+
+ uint8 ToUpper(uint8 c) {
+ if (c >= uint8(0x61) and c <= uint8(0x7a)) {
+ return uint8(c - 0x61 + 0x41);
+ } else {
+ return c;
+ }
+ }
+ class ConfigHotKeyField : spades::ui::UIElement {
+ ConfigItem @config;
+ private bool hover;
+ spades::ui::EventHandler @KeyBound;
+
+ ConfigHotKeyField(spades::ui::UIManager manager, string configName) {
+ super(manager);
+ @config = ConfigItem(configName);
+ IsMouseInteractive = true;
+ }
+
+ string BoundKey {
+ get { return config.StringValue; }
+ set { config = value; }
+ }
+
+ void KeyDown(string key) {
+ if (IsFocused) {
+ if (key != "Escape") {
+ if (key == " ") {
+ key = "Space";
+ } else if (key == "BackSpace" or key == "Delete") {
+ key = ""; // unbind
+ }
+ config = key;
+ KeyBound(this);
+ }
+ @Manager.ActiveElement = null;
+ AcceptsFocus = false;
+ } else {
+ UIElement::KeyDown(key);
+ }
+ }
+
+ void MouseDown(spades::ui::MouseButton button, Vector2 clientPosition) {
+ if (not AcceptsFocus) {
+ AcceptsFocus = true;
+ @Manager.ActiveElement = this;
+ return;
+ }
+ if (IsFocused) {
+ if (button == spades::ui::MouseButton::LeftMouseButton) {
+ config = "LeftMouseButton";
+ } else if (button == spades::ui::MouseButton::RightMouseButton) {
+ config = "RightMouseButton";
+ } else if (button == spades::ui::MouseButton::MiddleMouseButton) {
+ config = "MiddleMouseButton";
+ } else if (button == spades::ui::MouseButton::MouseButton4) {
+ config = "MouseButton4";
+ } else if (button == spades::ui::MouseButton::MouseButton5) {
+ config = "MouseButton5";
+ }
+ KeyBound(this);
+ @Manager.ActiveElement = null;
+ AcceptsFocus = false;
+ }
+ }
+
+ void MouseEnter() { hover = true; }
+ void MouseLeave() { hover = false; }
+
+ void Render() {
+ // render background
+ Renderer @renderer = Manager.Renderer;
+ Vector2 pos = ScreenPosition;
+ Vector2 size = Size;
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ renderer.ColorNP = Vector4(0.f, 0.f, 0.f, IsFocused ? 0.3f : 0.1f);
+ renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
+
+ if (IsFocused) {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
+ } else if (hover) {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.1f);
+ } else {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.06f);
+ }
+ renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y + 1.f, 1.f, size.y - 2.f));
+ renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y + 1.f, 1.f, size.y - 2.f));
+
+ Font @font = this.Font;
+ string text = IsFocused
+ ? _Tr("Preferences", "Press Key to Bind or [Escape] to Cancel...")
+ : config.StringValue;
+
+ Vector4 color(1, 1, 1, 1);
+
+ if (IsFocused) {
+ color.w = abs(sin(Manager.Time * 2.f));
+ } else {
+ AcceptsFocus = false;
+ }
+
+ if (text == " " or text == "Space") {
+ text = _Tr("Preferences", "Space");
+ } else if (text.length == 0) {
+ text = _Tr("Preferences", "Unbound");
+ color.w *= 0.3f;
+ } else if (text == "Shift") {
+ text = _Tr("Preferences", "Shift");
+ } else if (text == "Control") {
+ text = _Tr("Preferences", "Control");
+ } else if (text == "Meta") {
+ text = _Tr("Preferences", "Meta");
+ } else if (text == "Alt") {
+ text = _Tr("Preferences", "Alt");
+ } else if (text == "LeftMouseButton") {
+ text = _Tr("Preferences", "Left Mouse Button");
+ } else if (text == "RightMouseButton") {
+ text = _Tr("Preferences", "Right Mouse Button");
+ } else if (text == "MiddleMouseButton") {
+ text = _Tr("Preferences", "Middle Mouse Button");
+ } else if (text == "MouseButton4") {
+ text = _Tr("Preferences", "Mouse Button 4");
+ } else if (text == "MouseButton5") {
+ text = _Tr("Preferences", "Mouse Button 5");
+ } else {
+ for (uint i = 0, len = text.length; i < len; i++)
+ text[i] = ToUpper(text[i]);
+ }
+
+ Vector2 txtSize = font.Measure(text);
+ Vector2 txtPos;
+ txtPos = pos + (size - txtSize) * 0.5f;
+
+ font.Draw(text, txtPos, 1.f, color);
+ }
+ }
+
+ class ConfigSimpleToggleButton : spades::ui::RadioButton {
+ ConfigItem @config;
+ int value;
+ ConfigSimpleToggleButton(spades::ui::UIManager manager, string caption, string configName,
+ int value) {
+ super(manager);
+ @config = ConfigItem(configName);
+ this.Caption = caption;
+ this.value = value;
+ this.Toggle = true;
+ this.Toggled = config.IntValue == value;
+ }
+
+ void OnActivated() {
+ RadioButton::OnActivated();
+ this.Toggled = true;
+ config = value;
+ }
+
+ void Render() {
+ this.Toggled = config.IntValue == value;
+ RadioButton::Render();
+ }
+ }
+
+ class StandardPreferenceLayouterModel : spades::ui::ListViewModel {
+ private spades::ui::UIElement @[] @items;
+ StandardPreferenceLayouterModel(spades::ui::UIElement @[] @items) { @this.items = items; }
+ int NumRows {
+ get { return int(items.length); }
+ }
+ spades::ui::UIElement @CreateElement(int row) { return items[row]; }
+ void RecycleElement(spades::ui::UIElement @elem) {}
+ }
+ class StandardPreferenceLayouter {
+ spades::ui::UIElement @Parent;
+ private float FieldX = 250.f;
+ private float FieldWidth = 310.f;
+ private spades::ui::UIElement @[] items;
+ private ConfigHotKeyField @[] hotkeyItems;
+ private FontManager @fontManager;
+
+ StandardPreferenceLayouter(spades::ui::UIElement @parent, FontManager @fontManager) {
+ @Parent = parent;
+ @this.fontManager = fontManager;
+ }
+
+ private spades::ui::UIElement @CreateItem() {
+ spades::ui::UIElement elem(Parent.Manager);
+ elem.Size = Vector2(300.f, 32.f);
+ items.insertLast(elem);
+ return elem;
+ }
+
+ private void OnKeyBound(spades::ui::UIElement @sender) {
+ // unbind already bound key
+ ConfigHotKeyField @bindField = cast(sender);
+ string key = bindField.BoundKey;
+ for (uint i = 0; i < hotkeyItems.length; i++) {
+ ConfigHotKeyField @f = hotkeyItems[i];
+ if (f !is bindField) {
+ if (f.BoundKey == key) {
+ f.BoundKey = "";
+ }
+ }
+ }
+ }
+
+ void AddHeading(string text) {
+ spades::ui::UIElement @container = CreateItem();
+
+ spades::ui::Label label(Parent.Manager);
+ label.Text = text;
+ label.Alignment = Vector2(0.f, 1.f);
+ @label.Font = fontManager.HeadingFont;
+ label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
+ container.AddChild(label);
+ }
+
+ ConfigField @AddInputField(string caption, string configName, bool enabled = true) {
+ spades::ui::UIElement @container = CreateItem();
+
+ spades::ui::Label label(Parent.Manager);
+ label.Text = caption;
+ label.Alignment = Vector2(0.f, 0.5f);
+ label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
+ container.AddChild(label);
+
+ ConfigField field(Parent.Manager, configName);
+ field.Bounds = AABB2(FieldX, 1.f, FieldWidth, 30.f);
+ field.Enable = enabled;
+ container.AddChild(field);
+
+ return field;
+ }
+
+ ConfigSlider
+ @AddSliderField(string caption, string configName, float minRange, float maxRange,
+ float step, ConfigNumberFormatter @formatter, bool enabled = true) {
+ spades::ui::UIElement @container = CreateItem();
+
+ spades::ui::Label label(Parent.Manager);
+ label.Text = caption;
+ label.Alignment = Vector2(0.f, 0.5f);
+ label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
+ container.AddChild(label);
+
+ ConfigSlider slider(Parent.Manager, configName, minRange, maxRange, step, formatter);
+ slider.Bounds = AABB2(FieldX, 8.f, FieldWidth - 80.f, 16.f);
+ slider.Enable = enabled;
+ container.AddChild(slider);
+
+ return slider;
+ }
+
+ void AddControl(string caption, string configName, bool enabled = true) {
+ spades::ui::UIElement @container = CreateItem();
+
+ spades::ui::Label label(Parent.Manager);
+ label.Text = caption;
+ label.Alignment = Vector2(0.f, 0.5f);
+ label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
+ container.AddChild(label);
+
+ ConfigHotKeyField field(Parent.Manager, configName);
+ field.Bounds = AABB2(FieldX, 1.f, FieldWidth, 30.f);
+ field.Enable = enabled;
+ container.AddChild(field);
+
+ @field.KeyBound = spades::ui::EventHandler(OnKeyBound);
+ hotkeyItems.insertLast(field);
+ }
+
+ void AddChoiceField(string caption, string configName, array labels,
+ array values, bool enabled = true) {
+ spades::ui::UIElement @container = CreateItem();
+
+ spades::ui::Label label(Parent.Manager);
+ label.Text = caption;
+ label.Alignment = Vector2(0.f, 0.5f);
+ label.Bounds = AABB2(10.f, 0.f, 300.f, 32.f);
+ container.AddChild(label);
+
+ for (uint i = 0; i < labels.length; ++i) {
+ ConfigSimpleToggleButton field(Parent.Manager, labels[i], configName, values[i]);
+ field.Bounds = AABB2(FieldX + FieldWidth / labels.length * i, 1.f,
+ FieldWidth / labels.length, 30.f);
+ field.Enable = enabled;
+ container.AddChild(field);
+ }
+ }
+
+ void AddToggleField(string caption, string configName, bool enabled = true) {
+ AddChoiceField(caption, configName,
+ array = {_Tr("Preferences", "ON"), _Tr("Preferences", "OFF")},
+ array = {1, 0}, enabled);
+ }
+
+ void AddPlusMinusField(string caption, string configName, bool enabled = true) {
+ AddChoiceField(caption, configName,
+ array = {_Tr("Preferences", "ON"),
+ _Tr("Preferences", "REVERSED"),
+ _Tr("Preferences", "OFF")},
+ array = {1, -1, 0}, enabled);
+ }
+
+ void FinishLayout() {
+ spades::ui::ListView list(Parent.Manager);
+ @list.Model = StandardPreferenceLayouterModel(items);
+ list.RowHeight = 32.f;
+ list.Bounds = AABB2(0.f, 0.f, 580.f, 530.f);
+ Parent.AddChild(list);
+ }
+ }
+
+ class GameOptionsPanel : spades::ui::UIElement {
+ GameOptionsPanel(spades::ui::UIManager @manager, PreferenceViewOptions @options,
+ FontManager @fontManager) {
+ super(manager);
+
+ StandardPreferenceLayouter layouter(this, fontManager);
+ layouter.AddHeading(_Tr("Preferences", "Player Information"));
+ ConfigField @nameField = layouter.AddInputField(
+ _Tr("Preferences", "Player Name"), "cg_playerName", not options.GameActive);
+ nameField.MaxLength = 15;
+ nameField.DenyNonAscii = true;
+
+ layouter.AddHeading(_Tr("Preferences", "Effects"));
+ layouter.AddToggleField(_Tr("Preferences", "Blood"), "cg_blood");
+ layouter.AddToggleField(_Tr("Preferences", "Ejecting Brass"), "cg_ejectBrass");
+ layouter.AddToggleField(_Tr("Preferences", "Ragdoll"), "cg_ragdoll");
+ layouter.AddToggleField(_Tr("Preferences", "Animations"), "cg_animations");
+ layouter.AddChoiceField(_Tr("Preferences", "Camera Shake"), "cg_shake",
+ array = {_Tr("Preferences", "MORE"),
+ _Tr("Preferences", "NORMAL"),
+ _Tr("Preferences", "OFF")},
+ array = {2, 1, 0});
+ layouter.AddChoiceField(_Tr("Preferences", "Particles"), "cg_particles",
+ array = {_Tr("Preferences", "NORMAL"),
+ _Tr("Preferences", "LESS"),
+ _Tr("Preferences", "OFF")},
+ array = {2, 1, 0});
+
+ layouter.AddHeading(_Tr("Preferences", "Feedbacks"));
+ layouter.AddToggleField(_Tr("Preferences", "Chat Notify Sounds"), "cg_chatBeep");
+ layouter.AddToggleField(_Tr("Preferences", "Hit Indicator"), "cg_hitIndicator");
+ layouter.AddToggleField(_Tr("Preferences", "Show Alerts"), "cg_alerts");
+
+ layouter.AddHeading(_Tr("Preferences", "AoS 0.75/0.76 Compatibility"));
+ layouter.AddToggleField(_Tr("Preferences", "Allow Unicode"), "cg_unicode");
+ layouter.AddToggleField(_Tr("Preferences", "Server Alert"), "cg_serverAlert");
+
+ layouter.AddHeading(_Tr("Preferences", "Misc"));
+ layouter.AddSliderField(_Tr("Preferences", "Field of View"), "cg_fov", 45, 90, 1,
+ ConfigNumberFormatter(0, " deg"));
+ layouter.AddSliderField(_Tr("Preferences", "Minimap size"), "cg_minimapSize", 128, 256,
+ 8, ConfigNumberFormatter(0, " px"));
+ layouter.AddToggleField(_Tr("Preferences", "Show Statistics"), "cg_stats");
+ layouter.FinishLayout();
+ }
+ }
+
+ class ControlOptionsPanel : spades::ui::UIElement {
+ ControlOptionsPanel(spades::ui::UIManager @manager, PreferenceViewOptions @options,
+ FontManager @fontManager) {
+ super(manager);
+
+ StandardPreferenceLayouter layouter(this, fontManager);
+ layouter.AddHeading(_Tr("Preferences", "Weapons/Tools"));
+ layouter.AddControl(_Tr("Preferences", "Attack"), "cg_keyAttack");
+ layouter.AddControl(_Tr("Preferences", "Alt. Attack"), "cg_keyAltAttack");
+ layouter.AddToggleField(_Tr("Preferences", "Hold Aim Down Sight"),
+ "cg_holdAimDownSight");
+ layouter.AddSliderField(_Tr("Preferences", "Mouse Sensitivity"), "cg_mouseSensitivity",
+ 0.1, 10, 0.1, ConfigNumberFormatter(1, "x"));
+ layouter.AddSliderField(_Tr("Preferences", "ADS Mouse Sens. Scale"),
+ "cg_zoomedMouseSensScale", 0.05, 3, 0.05,
+ ConfigNumberFormatter(2, "x"));
+ layouter.AddSliderField(_Tr("Preferences", "Exponential Power"), "cg_mouseExpPower",
+ 0.5, 1.5, 0.02, ConfigNumberFormatter(2, "", "^"));
+ layouter.AddToggleField(_Tr("Preferences", "Invert Y-axis Mouse Input"),
+ "cg_invertMouseY");
+ layouter.AddControl(_Tr("Preferences", "Reload"), "cg_keyReloadWeapon");
+ layouter.AddControl(_Tr("Preferences", "Capture Color"), "cg_keyCaptureColor");
+ layouter.AddControl(_Tr("Preferences", "Equip Spade"), "cg_keyToolSpade");
+ layouter.AddControl(_Tr("Preferences", "Equip Block"), "cg_keyToolBlock");
+ layouter.AddControl(_Tr("Preferences", "Equip Weapon"), "cg_keyToolWeapon");
+ layouter.AddControl(_Tr("Preferences", "Equip Grenade"), "cg_keyToolGrenade");
+ layouter.AddControl(_Tr("Preferences", "Last Used Tool"), "cg_keyLastTool");
+ layouter.AddPlusMinusField(_Tr("Preferences", "Switch Tools by Wheel"),
+ "cg_switchToolByWheel");
+
+ layouter.AddHeading(_Tr("Preferences", "Movement"));
+ layouter.AddControl(_Tr("Preferences", "Walk Forward"), "cg_keyMoveForward");
+ layouter.AddControl(_Tr("Preferences", "Backpedal"), "cg_keyMoveBackward");
+ layouter.AddControl(_Tr("Preferences", "Move Left"), "cg_keyMoveLeft");
+ layouter.AddControl(_Tr("Preferences", "Move Right"), "cg_keyMoveRight");
+ layouter.AddControl(_Tr("Preferences", "Crouch"), "cg_keyCrouch");
+ layouter.AddControl(_Tr("Preferences", "Sneak"), "cg_keySneak");
+ layouter.AddControl(_Tr("Preferences", "Jump"), "cg_keyJump");
+ layouter.AddControl(_Tr("Preferences", "Sprint"), "cg_keySprint");
+
+ layouter.AddHeading(_Tr("Preferences", "Misc"));
+ layouter.AddControl(_Tr("Preferences", "Minimap Scale"), "cg_keyChangeMapScale");
+ layouter.AddControl(_Tr("Preferences", "Toggle Map"), "cg_keyToggleMapZoom");
+ layouter.AddControl(_Tr("Preferences", "Flashlight"), "cg_keyFlashlight");
+ layouter.AddControl(_Tr("Preferences", "Global Chat"), "cg_keyGlobalChat");
+ layouter.AddControl(_Tr("Preferences", "Team Chat"), "cg_keyTeamChat");
+ layouter.AddControl(_Tr("Preferences", "Limbo Menu"), "cg_keyLimbo");
+ layouter.AddControl(_Tr("Preferences", "Save Map"), "cg_keySaveMap");
+ layouter.AddControl(_Tr("Preferences", "Save Sceneshot"), "cg_keySceneshot");
+ layouter.AddControl(_Tr("Preferences", "Save Screenshot"), "cg_keyScreenshot");
+
+ layouter.FinishLayout();
+ }
+ }
+
+ class MiscOptionsPanel : spades::ui::UIElement {
+ spades::ui::Label @msgLabel;
+ spades::ui::Button @enableButton;
+
+ private ConfigItem cl_showStartupWindow("cl_showStartupWindow");
+
+ MiscOptionsPanel(spades::ui::UIManager @manager, PreferenceViewOptions @options,
+ FontManager @fontManager) {
+ super(manager);
+
+ {
+ spades::ui::Button e(Manager);
+ e.Bounds = AABB2(10.f, 10.f, 400.f, 30.f);
+ e.Caption = _Tr("Preferences", "Enable Startup Window");
+ @e.Activated = spades::ui::EventHandler(this.OnEnableClicked);
+ AddChild(e);
+ @enableButton = e;
+ }
+
+ {
+ spades::ui::Label label(Manager);
+ label.Bounds = AABB2(10.f, 50.f, 0.f, 0.f);
+ label.Text = "Hoge";
+ AddChild(label);
+ @msgLabel = label;
+ }
+
+ UpdateState();
+ }
+
+ void UpdateState() {
+ bool enabled = cl_showStartupWindow.IntValue != 0;
+
+ msgLabel.Text = enabled
+ ? _Tr("Preferences",
+ "Quit and restart OpenSpades to access the startup window.")
+ : _Tr("Preferences",
+ "Some settings only can be changed in the startup window.");
+ enableButton.Enable = not enabled;
+ }
+
+ private void OnEnableClicked(spades::ui::UIElement @) {
+ cl_showStartupWindow.IntValue = 1;
+ UpdateState();
+ }
+ }
}
diff --git a/Resources/Scripts/Gui/StartupScreen/ConfigViewFramework.as b/Resources/Scripts/Gui/StartupScreen/ConfigViewFramework.as
index b05f080b..597f3e94 100644
--- a/Resources/Scripts/Gui/StartupScreen/ConfigViewFramework.as
+++ b/Resources/Scripts/Gui/StartupScreen/ConfigViewFramework.as
@@ -24,48 +24,50 @@ namespace spades {
funcdef void HelpTextHandler(string text);
class ChainedEventHandler {
- spades::ui::EventHandler@ h;
- spades::ui::EventHandler@ h2;
- ChainedEventHandler(spades::ui::EventHandler@ h, spades::ui::EventHandler@ h2) {
+ spades::ui::EventHandler @h;
+ spades::ui::EventHandler @h2;
+ ChainedEventHandler(spades::ui::EventHandler @h, spades::ui::EventHandler @h2) {
@this.h = h;
@this.h2 = h2;
}
- void Handler(spades::ui::UIElement@ e) {
- h(e); h2(e);
+ void Handler(spades::ui::UIElement @e) {
+ h(e);
+ h2(e);
}
}
class HelpHandler {
- private HelpTextHandler@ handler;
- private spades::ui::TextViewer@ helpView;
+ private HelpTextHandler @handler;
+ private spades::ui::TextViewer @helpView;
private string text;
- HelpHandler(spades::ui::TextViewer@ helpView, string text) {
+ HelpHandler(spades::ui::TextViewer @helpView, string text) {
this.text = text;
@this.helpView = helpView;
}
- HelpHandler(HelpTextHandler@ handler, string text) {
+ HelpHandler(HelpTextHandler @handler, string text) {
this.text = text;
@this.handler = handler;
}
- private void OnMouseHover(spades::ui::UIElement@ elm) {
- if(helpView !is null) {
+ private void OnMouseHover(spades::ui::UIElement @elm) {
+ if (helpView !is null) {
helpView.Text = text;
}
- if(handler !is null) {
+ if (handler !is null) {
handler(text);
}
}
- void Watch(spades::ui::UIElement@ elm) {
+ void Watch(spades::ui::UIElement @elm) {
@elm.MouseEntered = spades::ui::EventHandler(this.OnMouseHover);
}
- void WatchDeep(spades::ui::UIElement@ elm) {
- if(elm.MouseEntered !is null) {
- ChainedEventHandler chain(elm.MouseEntered, spades::ui::EventHandler(this.OnMouseHover));
+ void WatchDeep(spades::ui::UIElement @elm) {
+ if (elm.MouseEntered !is null) {
+ ChainedEventHandler chain(elm.MouseEntered,
+ spades::ui::EventHandler(this.OnMouseHover));
@elm.MouseEntered = spades::ui::EventHandler(chain.Handler);
- }else{
+ } else {
Watch(elm);
}
spades::ui::UIElementIterator it(elm);
- while(it.MoveNext()) {
+ while (it.MoveNext()) {
WatchDeep(it.Current);
}
}
@@ -75,53 +77,51 @@ namespace spades {
private void AddLabel(float x, float y, float h, string text) {
spades::ui::Label label(Manager);
- Font@ font = ui.fontManager.GuiFont;
+ Font @font = ui.fontManager.GuiFont;
Vector2 siz = font.Measure(text);
label.Text = text;
label.Alignment = Vector2(0.f, 0.5f);
label.Bounds = AABB2(x, y, siz.x, h);
AddChild(label);
}
-
}
- class StartupScreenConfigViewModel: spades::ui::ListViewModel {
- spades::ui::UIElement@[] items;
- spades::ui::UIElement@[]@ items2;
- StartupScreenConfigViewModel() {
- }
+ class StartupScreenConfigViewModel : spades::ui::ListViewModel {
+ spades::ui::UIElement @[] items;
+ spades::ui::UIElement @[] @items2;
+ StartupScreenConfigViewModel() {}
int NumRows {
get {
- if(items2 !is null)
+ if (items2 !is null)
return int(items2.length);
return int(items.length);
}
}
void Filter(string text) {
- if(text.length == 0) {
+ if (text.length == 0) {
@items2 = null;
return;
}
- spades::ui::UIElement@[] newItems;
- for(uint i = 0, count = items.length; i < count; i++) {
- StartupScreenConfigItemEditor@ editor =
+ spades::ui::UIElement @[] newItems;
+ for (uint i = 0, count = items.length; i < count; i++) {
+ StartupScreenConfigItemEditor @editor =
cast(items[i]);
- if(editor is null) continue;
+ if (editor is null)
+ continue;
string label = editor.GetLabel();
- if(StringContainsCaseInsensitive(label, text)) {
+ if (StringContainsCaseInsensitive(label, text)) {
newItems.insertLast(items[i]);
}
}
@items2 = newItems;
}
- spades::ui::UIElement@ CreateElement(int row) {
- if(items2 !is null)
+ spades::ui::UIElement @CreateElement(int row) {
+ if (items2 !is null)
return items2[row];
return items[row];
}
- void RecycleElement(spades::ui::UIElement@ elem) {
- }
+ void RecycleElement(spades::ui::UIElement @elem) {}
}
interface StartupScreenGenericConfig {
@@ -131,58 +131,53 @@ namespace spades {
string CheckValueCapability(string);
}
- class StartupScreenConfig: StartupScreenGenericConfig {
- private StartupScreenUI@ ui;
- private ConfigItem@ cfg;
+ class StartupScreenConfig : StartupScreenGenericConfig {
+ private StartupScreenUI @ui;
+ private ConfigItem @cfg;
private string cfgName;
- StartupScreenConfig(StartupScreenUI@ ui, string cfg) {
+ StartupScreenConfig(StartupScreenUI @ui, string cfg) {
@this.ui = ui;
@this.cfg = ConfigItem(cfg);
cfgName = cfg;
}
- string GetValue() {
- return cfg.StringValue;
- }
- void SetValue(string v) {
- cfg.StringValue = v;
- }
+ string GetValue() { return cfg.StringValue; }
+ void SetValue(string v) { cfg.StringValue = v; }
string CheckValueCapability(string v) {
return ui.helper.CheckConfigCapability(cfgName, v);
}
}
class StartupScreenConfigSetter {
- StartupScreenGenericConfig@ c;
+ StartupScreenGenericConfig @c;
string value;
- StartupScreenConfigSetter(StartupScreenGenericConfig@ c, string value) {
+ StartupScreenConfigSetter(StartupScreenGenericConfig @c, string value) {
@this.c = c;
this.value = value;
}
- void Set(spades::ui::UIElement@) {
- c.SetValue(this.value);
- }
+ void Set(spades::ui::UIElement @) { c.SetValue(this.value); }
}
interface StartupScreenConfigItemEditor {
void LoadConfig();
- StartupScreenGenericConfig@ GetConfig();
- void SetHelpTextHandler(HelpTextHandler@);
+ StartupScreenGenericConfig @GetConfig();
+ void SetHelpTextHandler(HelpTextHandler @);
string GetLabel();
}
+ class StartupScreenConfigSelectItemEditor : spades::ui::UIElement,
+ LabelAddable,
+ StartupScreenConfigItemEditor,
+ StartupScreenConfigItemEditor {
- class StartupScreenConfigSelectItemEditor: spades::ui::UIElement, LabelAddable, StartupScreenConfigItemEditor, StartupScreenConfigItemEditor {
-
- protected StartupScreenUI@ ui;
- private string[]@ descs;
- private string[]@ values;
- protected StartupScreenGenericConfig@ config;
- protected spades::ui::RadioButton@[] buttons;
+ protected StartupScreenUI @ui;
+ private string[] @descs;
+ private string[] @values;
+ protected StartupScreenGenericConfig @config;
+ protected spades::ui::RadioButton @[] buttons;
private string label;
- StartupScreenConfigSelectItemEditor(StartupScreenUI@ ui,
- StartupScreenGenericConfig@ cfg,
- string values, string descs) {
+ StartupScreenConfigSelectItemEditor(StartupScreenUI @ui, StartupScreenGenericConfig @cfg,
+ string values, string descs) {
super(ui.manager);
@this.ui = ui;
@this.descs = descs.split("|");
@@ -192,19 +187,18 @@ namespace spades {
{
string desc = this.descs[0];
int idx = desc.findFirst(":");
- if(idx >= 0) {
+ if (idx >= 0) {
desc = desc.substr(0, idx);
}
AddLabel(0, 0, 24.f, desc);
this.label = desc;
}
-
- for(uint i = 0; i < this.values.length; i++) {
+ for (uint i = 0; i < this.values.length; i++) {
spades::ui::RadioButton b(Manager);
string desc = this.descs[i + 1];
int idx = desc.findFirst(":");
- if(idx >= 0) {
+ if (idx >= 0) {
desc = desc.substr(0, idx);
}
b.Caption = desc;
@@ -217,28 +211,22 @@ namespace spades {
}
}
- string GetLabel() {
- return label;
- }
+ string GetLabel() { return label; }
void LoadConfig() {
string val = config.GetValue();
- for(uint i = 0, count = values.length; i < count; i++) {
+ for (uint i = 0, count = values.length; i < count; i++) {
buttons[i].Toggled = (values[i] == val);
buttons[i].Enable = CheckValueCapability(values[i]).length == 0;
}
}
- string CheckValueCapability(string v) {
- return config.CheckValueCapability(v);
- }
- StartupScreenGenericConfig@ GetConfig() {
- return config;
- }
- void SetHelpTextHandler(HelpTextHandler@ handler) {
- for(uint i = 0, count = values.length; i < count; i++) {
+ string CheckValueCapability(string v) { return config.CheckValueCapability(v); }
+ StartupScreenGenericConfig @GetConfig() { return config; }
+ void SetHelpTextHandler(HelpTextHandler @handler) {
+ for (uint i = 0, count = values.length; i < count; i++) {
string desc = descs[i + 1];
int idx = desc.findFirst(":");
- if(idx < 0) {
+ if (idx < 0) {
desc = descs[0];
idx = desc.findFirst(":");
}
@@ -252,8 +240,8 @@ namespace spades {
Vector2 size = this.Size;
float h = 24.f;
float x = size.x;
- for(uint i = buttons.length; i > 0; i--) {
- spades::ui::RadioButton@ b = buttons[i - 1];
+ for (uint i = buttons.length; i > 0; i--) {
+ spades::ui::RadioButton @b = buttons[i - 1];
float w = ui.fontManager.GuiFont.Measure(b.Caption).x + 26.f;
x -= w + 2.f;
b.Bounds = AABB2(x, 0.f, w, h);
@@ -261,19 +249,20 @@ namespace spades {
}
}
- class StartupScreenConfigCheckItemEditor: spades::ui::UIElement, StartupScreenConfigItemEditor {
+ class StartupScreenConfigCheckItemEditor : spades::ui::UIElement,
+ StartupScreenConfigItemEditor {
- protected StartupScreenUI@ ui;
+ protected StartupScreenUI @ui;
private string desc;
private string valueOff;
private string valueOn;
- private StartupScreenGenericConfig@ config;
- private spades::ui::CheckBox@ button;
+ private StartupScreenGenericConfig @config;
+ private spades::ui::CheckBox @button;
private string label;
- StartupScreenConfigCheckItemEditor(StartupScreenUI@ ui,
- StartupScreenGenericConfig@ cfg,
- string valueOff, string valueOn, string label, string desc) {
+ StartupScreenConfigCheckItemEditor(StartupScreenUI @ui, StartupScreenGenericConfig @cfg,
+ string valueOff, string valueOn, string label,
+ string desc) {
super(ui.manager);
@this.ui = ui;
@config = cfg;
@@ -289,25 +278,19 @@ namespace spades {
this.AddChild(b);
}
- string GetLabel() {
- return label;
- }
+ string GetLabel() { return label; }
void LoadConfig() {
string val = config.GetValue();
button.Toggled = (val != valueOff);
button.Enable = CheckValueCapability(valueOn).length == 0;
}
- string CheckValueCapability(string v) {
- return config.CheckValueCapability(v);
- }
- StartupScreenGenericConfig@ GetConfig() {
- return config;
- }
- private void StateChanged(spades::ui::UIElement@) {
+ string CheckValueCapability(string v) { return config.CheckValueCapability(v); }
+ StartupScreenGenericConfig @GetConfig() { return config; }
+ private void StateChanged(spades::ui::UIElement @) {
config.SetValue(button.Toggled ? valueOn : valueOff);
}
- void SetHelpTextHandler(HelpTextHandler@ handler) {
+ void SetHelpTextHandler(HelpTextHandler @handler) {
HelpHandler(handler, desc).Watch(button);
}
@@ -319,21 +302,23 @@ namespace spades {
}
}
- class StartupScreenConfigSliderItemEditor: spades::ui::UIElement, StartupScreenConfigItemEditor, LabelAddable {
+ class StartupScreenConfigSliderItemEditor : spades::ui::UIElement,
+ StartupScreenConfigItemEditor,
+ LabelAddable {
- private StartupScreenUI@ ui;
+ private StartupScreenUI @ui;
private string desc;
private double stepSize;
- private StartupScreenGenericConfig@ config;
- private spades::ui::Slider@ slider;
- private spades::ui::Label@ valueLabel;
- private ConfigNumberFormatter@ formatter;
+ private StartupScreenGenericConfig @config;
+ private spades::ui::Slider @slider;
+ private spades::ui::Label @valueLabel;
+ private ConfigNumberFormatter @formatter;
private string label;
- StartupScreenConfigSliderItemEditor(StartupScreenUI@ ui,
- StartupScreenGenericConfig@ cfg,
- double minValue, double maxValue, double stepSize, string label, string desc,
- ConfigNumberFormatter@ formatter) {
+ StartupScreenConfigSliderItemEditor(StartupScreenUI @ui, StartupScreenGenericConfig @cfg,
+ double minValue, double maxValue, double stepSize,
+ string label, string desc,
+ ConfigNumberFormatter @formatter) {
super(ui.manager);
@this.ui = ui;
@config = cfg;
@@ -371,9 +356,7 @@ namespace spades {
valueLabel.Text = s;
}
- string GetLabel() {
- return label;
- }
+ string GetLabel() { return label; }
void LoadConfig() {
string val = config.GetValue();
@@ -385,11 +368,9 @@ namespace spades {
UpdateLabel();
}
string CheckValueCapability(string v) {
- return ""; //FIXME: config.CheckValueCapability(v);
- }
- StartupScreenGenericConfig@ GetConfig() {
- return config;
+ return ""; // FIXME: config.CheckValueCapability(v);
}
+ StartupScreenGenericConfig @GetConfig() { return config; }
void DoRounding() {
double v = double(slider.Value - slider.MinValue);
@@ -397,12 +378,12 @@ namespace spades {
v += double(slider.MinValue);
slider.Value = v;
}
- private void StateChanged(spades::ui::UIElement@) {
+ private void StateChanged(spades::ui::UIElement @) {
DoRounding();
config.SetValue(ToString(slider.Value));
UpdateLabel();
}
- void SetHelpTextHandler(HelpTextHandler@ handler) {
+ void SetHelpTextHandler(HelpTextHandler @handler) {
HelpHandler(handler, desc).WatchDeep(slider);
}
@@ -415,19 +396,19 @@ namespace spades {
}
}
+ class StartupScreenConfigFieldItemEditor : spades::ui::UIElement,
+ StartupScreenConfigItemEditor,
+ LabelAddable {
- class StartupScreenConfigFieldItemEditor: spades::ui::UIElement, StartupScreenConfigItemEditor, LabelAddable {
-
- private StartupScreenUI@ ui;
+ private StartupScreenUI @ui;
private string desc;
private double stepSize;
- private StartupScreenGenericConfig@ config;
- private spades::ui::Field@ field;
+ private StartupScreenGenericConfig @config;
+ private spades::ui::Field @field;
private string label;
- StartupScreenConfigFieldItemEditor(StartupScreenUI@ ui,
- StartupScreenGenericConfig@ cfg,
- string label, string desc) {
+ StartupScreenConfigFieldItemEditor(StartupScreenUI @ui, StartupScreenGenericConfig @cfg,
+ string label, string desc) {
super(ui.manager);
@this.ui = ui;
@config = cfg;
@@ -441,28 +422,19 @@ namespace spades {
@b.Changed = spades::ui::EventHandler(this.StateChanged);
@field = b;
this.AddChild(b);
-
}
- string GetLabel() {
- return label;
- }
+ string GetLabel() { return label; }
void LoadConfig() {
string val = config.GetValue();
field.Text = val;
}
- string CheckValueCapability(string v) {
- return config.CheckValueCapability(v);
- }
- StartupScreenGenericConfig@ GetConfig() {
- return config;
- }
+ string CheckValueCapability(string v) { return config.CheckValueCapability(v); }
+ StartupScreenGenericConfig @GetConfig() { return config; }
- private void StateChanged(spades::ui::UIElement@) {
- config.SetValue(field.Text);
- }
- void SetHelpTextHandler(HelpTextHandler@ handler) {
+ private void StateChanged(spades::ui::UIElement @) { config.SetValue(field.Text); }
+ void SetHelpTextHandler(HelpTextHandler @handler) {
HelpHandler(handler, desc).WatchDeep(field);
}
@@ -475,15 +447,15 @@ namespace spades {
}
// Maps multiple configs to {"0", "1", ...} or "custom"
- class StartupScreenComplexConfig: StartupScreenGenericConfig {
- StartupScreenConfigItemEditor@[] editors;
- StartupScreenComplexConfigPreset@[] presets;
+ class StartupScreenComplexConfig : StartupScreenGenericConfig {
+ StartupScreenConfigItemEditor @[] editors;
+ StartupScreenComplexConfigPreset @[] presets;
- void AddEditor(StartupScreenConfigItemEditor@ editor) {
+ void AddEditor(StartupScreenConfigItemEditor @editor) {
Assert(presets.length == 0);
editors.insertLast(editor);
}
- void AddPreset(StartupScreenComplexConfigPreset@ preset) {
+ void AddPreset(StartupScreenComplexConfigPreset @preset) {
Assert(preset.Values.length == editors.length);
presets.insertLast(preset);
}
@@ -491,42 +463,42 @@ namespace spades {
string GetValue() {
string[] values;
- for(uint i = 0; i < editors.length; i++) {
+ for (uint i = 0; i < editors.length; i++) {
values.insertLast(editors[i].GetConfig().GetValue());
}
- for(uint i = 0; i < presets.length; i++) {
- string[]@ pval = presets[i].Values;
+ for (uint i = 0; i < presets.length; i++) {
+ string[] @pval = presets[i].Values;
uint j = 0;
uint jc = pval.length;
- for(; j < jc; j++) {
- if(values[j] != pval[j]) {
+ for (; j < jc; j++) {
+ if (values[j] != pval[j]) {
break;
}
}
- if(j == jc) {
+ if (j == jc) {
return ToString(int(i));
}
}
return "custom";
}
void SetValue(string v) {
- if(v == "custom") {
+ if (v == "custom") {
return;
}
uint pId = uint(ParseInt(v));
- string[]@ pval = presets[pId].Values;
- for(uint i = 0; i < pval.length; i++) {
+ string[] @pval = presets[pId].Values;
+ for (uint i = 0; i < pval.length; i++) {
editors[i].GetConfig().SetValue(pval[i]);
}
}
string CheckValueCapability(string v) {
- if(v == "custom") {
+ if (v == "custom") {
return "";
}
uint pId = uint(ParseInt(v));
- string[]@ pval = presets[pId].Values;
+ string[] @pval = presets[pId].Values;
string ret = "";
- for(uint i = 0; i < pval.length; i++) {
+ for (uint i = 0; i < pval.length; i++) {
ret += editors[i].GetConfig().CheckValueCapability(pval[i]);
}
return ret;
@@ -535,7 +507,7 @@ namespace spades {
// used for StartupScreenConfigSelectItemEditor's ctor param
string GetValuesString() {
string[] lst;
- for(uint i = 0; i < presets.length; i++) {
+ for (uint i = 0; i < presets.length; i++) {
lst.insertLast(ToString(int(i)));
}
lst.insertLast("custom");
@@ -544,7 +516,7 @@ namespace spades {
// used for StartupScreenConfigSelectItemEditor's ctor param
string GetDescriptionsString() {
string[] lst;
- for(uint i = 0; i < presets.length; i++) {
+ for (uint i = 0; i < presets.length; i++) {
lst.insertLast(presets[i].Name);
}
lst.insertLast(_Tr("StartupScreen", "Custom"));
@@ -561,88 +533,80 @@ namespace spades {
}
}
- class StartupScreenConfigComplexItemEditor: StartupScreenConfigSelectItemEditor {
+ class StartupScreenConfigComplexItemEditor : StartupScreenConfigSelectItemEditor {
private string dlgTitle;
- StartupScreenConfigComplexItemEditor(StartupScreenUI@ ui,
- StartupScreenComplexConfig@ cfg,
- string label, string desc) {
+ StartupScreenConfigComplexItemEditor(StartupScreenUI @ui, StartupScreenComplexConfig @cfg,
+ string label, string desc) {
super(ui, cfg, cfg.GetValuesString(),
- label + ":" + desc + "|" + cfg.GetDescriptionsString());
+ label + ":" + desc + "|" + cfg.GetDescriptionsString());
dlgTitle = label;
@buttons[buttons.length - 1].Activated = spades::ui::EventHandler(this.CustomClicked);
}
- private void CustomClicked(spades::ui::UIElement@) {
- RunDialog();
- }
+ private void CustomClicked(spades::ui::UIElement @) { RunDialog(); }
- private void DialogDone(spades::ui::UIElement@) {
- LoadConfig();
- }
+ private void DialogDone(spades::ui::UIElement @) { LoadConfig(); }
private void RunDialog() {
- StartupScreenComplexConfigDialog dlg(ui.manager, cast(config));
+ StartupScreenComplexConfigDialog dlg(ui.manager,
+ cast(config));
@dlg.DialogDone = spades::ui::EventHandler(this.DialogDone);
dlg.Title = dlgTitle;
dlg.RunDialog();
}
}
- class StartupScreenConfigView: spades::ui::ListViewBase {
+ class StartupScreenConfigView : spades::ui::ListViewBase {
private StartupScreenConfigViewModel vmodel;
- StartupScreenConfigView(spades::ui::UIManager@ manager) {
+ StartupScreenConfigView(spades::ui::UIManager @manager) {
super(manager);
this.RowHeight = 30.f;
}
- void Finalize() {
- @this.Model = vmodel;
- }
- void AddRow(spades::ui::UIElement@ elm) {
- vmodel.items.insertLast(elm);
- }
+ void Finalize() { @this.Model = vmodel; }
+ void AddRow(spades::ui::UIElement @elm) { vmodel.items.insertLast(elm); }
void Filter(string text) {
vmodel.Filter(text);
Reload();
}
- void SetHelpTextHandler(HelpTextHandler@ handler) {
- spades::ui::UIElement@[]@ elms = vmodel.items;
- for(uint i = 0; i < elms.length; i++) {
- StartupScreenConfigItemEditor@ item = cast(elms[i]);
- if(item !is null) {
+ void SetHelpTextHandler(HelpTextHandler @handler) {
+ spades::ui::UIElement @[] @elms = vmodel.items;
+ for (uint i = 0; i < elms.length; i++) {
+ StartupScreenConfigItemEditor @item = cast(elms[i]);
+ if (item !is null) {
item.SetHelpTextHandler(handler);
}
}
}
void LoadConfig() {
- spades::ui::UIElement@[]@ elms = vmodel.items;
- for(uint i = 0; i < elms.length; i++) {
- StartupScreenConfigItemEditor@ item = cast(elms[i]);
- if(item !is null) {
+ spades::ui::UIElement @[] @elms = vmodel.items;
+ for (uint i = 0; i < elms.length; i++) {
+ StartupScreenConfigItemEditor @item = cast(elms[i]);
+ if (item !is null) {
item.LoadConfig();
}
}
}
}
- class StartupScreenComplexConfigDialog: spades::ui::UIElement {
- StartupScreenComplexConfig@ config;
+ class StartupScreenComplexConfigDialog : spades::ui::UIElement {
+ StartupScreenComplexConfig @config;
float ContentsTop = 50.f;
float ContentsHeight;
string Title;
- spades::ui::TextViewer@ helpView;
- StartupScreenConfigView@ configView;
+ spades::ui::TextViewer @helpView;
+ StartupScreenConfigView @configView;
- spades::ui::EventHandler@ DialogDone;
+ spades::ui::EventHandler @DialogDone;
- private spades::ui::UIElement@ oldRoot;
+ private spades::ui::UIElement @oldRoot;
- StartupScreenComplexConfigDialog(spades::ui::UIManager@ manager,
- StartupScreenComplexConfig@ config) {
+ StartupScreenComplexConfigDialog(spades::ui::UIManager @manager,
+ StartupScreenComplexConfig @config) {
super(manager);
@this.config = config;
Vector2 size = manager.RootElement.Size;
@@ -651,7 +615,8 @@ namespace spades {
float mainWidth = size.x - 250.f;
{
spades::ui::TextViewer e(Manager);
- e.Bounds = AABB2(mainWidth, ContentsTop + 30.f, size.x - mainWidth - 10.f, ContentsHeight - 60.f);
+ e.Bounds = AABB2(mainWidth, ContentsTop + 30.f, size.x - mainWidth - 10.f,
+ ContentsHeight - 60.f);
AddChild(e);
@helpView = e;
}
@@ -659,14 +624,15 @@ namespace spades {
{
StartupScreenConfigView cfg(Manager);
- StartupScreenConfigItemEditor@[]@ editors = config.editors;
+ StartupScreenConfigItemEditor @[] @editors = config.editors;
- for(uint i = 0; i < editors.length; i++)
+ for (uint i = 0; i < editors.length; i++)
cfg.AddRow(cast(editors[i]));
cfg.Finalize();
cfg.SetHelpTextHandler(HelpTextHandler(this.HandleHelpText));
- cfg.Bounds = AABB2(10.f, ContentsTop + 30.f, mainWidth - 20.f, ContentsHeight - 60.f);
+ cfg.Bounds =
+ AABB2(10.f, ContentsTop + 30.f, mainWidth - 20.f, ContentsHeight - 60.f);
AddChild(cfg);
@configView = cfg;
}
@@ -674,15 +640,15 @@ namespace spades {
{
spades::ui::Button button(Manager);
button.Caption = _Tr("StartupScreen", "Close");
- button.Bounds = AABB2(size.x - 160.f, ContentsTop + ContentsHeight - 30.f, 150.f, 30.f);
+ button.Bounds =
+ AABB2(size.x - 160.f, ContentsTop + ContentsHeight - 30.f, 150.f, 30.f);
@button.Activated = spades::ui::EventHandler(this.CloseActivated);
AddChild(button);
}
-
}
- private void CloseActivated(spades::ui::UIElement@) {
- if(oldRoot !is null) {
+ private void CloseActivated(spades::ui::UIElement @) {
+ if (oldRoot !is null) {
oldRoot.Enable = true;
@oldRoot = null;
}
@@ -690,17 +656,15 @@ namespace spades {
DialogDone(this);
}
- private void HandleHelpText(string s) {
- helpView.Text = s;
- }
+ private void HandleHelpText(string s) { helpView.Text = s; }
void RunDialog() {
- spades::ui::UIElement@ root = Manager.RootElement;
+ spades::ui::UIElement @root = Manager.RootElement;
spades::ui::UIElementIterator iterator(root);
- while(iterator.MoveNext()) {
- spades::ui::UIElement@ e = iterator.Current;
- if(e.Enable and e.Visible) {
+ while (iterator.MoveNext()) {
+ spades::ui::UIElement @e = iterator.Current;
+ if (e.Enable and e.Visible) {
@oldRoot = e;
e.Enable = false;
break;
@@ -716,39 +680,34 @@ namespace spades {
void Render() {
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Renderer@ r = Manager.Renderer;
- Image@ img = r.RegisterImage("Gfx/White.tga");
+ Renderer @r = Manager.Renderer;
+ Image @img = r.RegisterImage("Gfx/White.tga");
r.ColorNP = Vector4(0, 0, 0, 0.8f);
- r.DrawImage(img,
- AABB2(pos.x, pos.y, size.x, ContentsTop - 15.f));
- r.DrawImage(img,
- AABB2(pos.x, ContentsTop + ContentsHeight + 15.f, size.x, ContentsTop - 15.f));
+ r.DrawImage(img, AABB2(pos.x, pos.y, size.x, ContentsTop - 15.f));
+ r.DrawImage(
+ img, AABB2(pos.x, ContentsTop + ContentsHeight + 15.f, size.x, ContentsTop - 15.f));
r.ColorNP = Vector4(0, 0, 0, 0.95f);
- r.DrawImage(img,
- AABB2(pos.x, ContentsTop - 15.f, size.x, ContentsHeight + 30.f));
+ r.DrawImage(img, AABB2(pos.x, ContentsTop - 15.f, size.x, ContentsHeight + 30.f));
r.ColorNP = Vector4(1, 1, 1, 0.08f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + ContentsTop - 15.f, size.x, 1.f));
r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop - 15.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 15.f, size.x, 1.f));
+ AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 15.f, size.x, 1.f));
r.ColorNP = Vector4(1, 1, 1, 0.2f);
+ r.DrawImage(img, AABB2(pos.x, pos.y + ContentsTop - 14.f, size.x, 1.f));
r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop - 14.f, size.x, 1.f));
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 14.f, size.x, 1.f));
+ AABB2(pos.x, pos.y + ContentsTop + ContentsHeight + 14.f, size.x, 1.f));
- Font@ font = Font;
+ Font @font = Font;
r.ColorNP = Vector4(0.8f, 0.8f, 0.8f, 1.f);
- r.DrawImage(img,
- AABB2(pos.x, pos.y + ContentsTop, size.x, 20.f));
- font.Draw(Title, Vector2(pos.x + 10.f, pos.y + ContentsTop), 1.f, Vector4(0.f, 0.f, 0.f, 1.f));
+ r.DrawImage(img, AABB2(pos.x, pos.y + ContentsTop, size.x, 20.f));
+ font.Draw(Title, Vector2(pos.x + 10.f, pos.y + ContentsTop), 1.f,
+ Vector4(0.f, 0.f, 0.f, 1.f));
UIElement::Render();
}
-
}
}
diff --git a/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as b/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as
index 3a3e1970..31aa379d 100644
--- a/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as
+++ b/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as
@@ -25,24 +25,24 @@
namespace spades {
- class StartupScreenGraphicsTab: spades::ui::UIElement, LabelAddable {
- StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ class StartupScreenGraphicsTab : spades::ui::UIElement, LabelAddable {
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
- StartupScreenGraphicsDisplayResolutionEditor@ resEdit;
+ StartupScreenGraphicsDisplayResolutionEditor @resEdit;
- spades::ui::CheckBox@ fullscreenCheck;
- spades::ui::RadioButton@ driverOpenGL;
- spades::ui::RadioButton@ driverSoftware;
+ spades::ui::CheckBox @fullscreenCheck;
+ spades::ui::RadioButton @driverOpenGL;
+ spades::ui::RadioButton @driverSoftware;
- spades::ui::TextViewer@ helpView;
- StartupScreenConfigView@ configViewGL;
- StartupScreenConfigView@ configViewSoftware;
+ spades::ui::TextViewer @helpView;
+ StartupScreenConfigView @configViewGL;
+ StartupScreenConfigView @configViewSoftware;
private ConfigItem r_renderer("r_renderer");
private ConfigItem r_fullscreen("r_fullscreen");
- StartupScreenGraphicsTab(StartupScreenUI@ ui, Vector2 size) {
+ StartupScreenGraphicsTab(StartupScreenUI @ui, Vector2 size) {
super(ui.manager);
@this.ui = ui;
@helper = ui.helper;
@@ -70,9 +70,11 @@ namespace spades {
spades::ui::CheckBox e(Manager);
e.Caption = _Tr("StartupScreen", "Fullscreen Mode");
e.Bounds = AABB2(230.f, 0.f, 200.f, 24.f);
- HelpHandler(helpView,
- _Tr("StartupScreen", "By running in fullscreen mode OpenSpades occupies the "
- "screen, making it easier for you to concentrate on playing the game.")).Watch(e);
+ HelpHandler(
+ helpView,
+ _Tr("StartupScreen",
+ "By running in fullscreen mode OpenSpades occupies the " "screen, making it easier for you to concentrate on playing the game."))
+ .Watch(e);
@e.Activated = spades::ui::EventHandler(this.OnFullscreenCheck);
AddChild(e);
@fullscreenCheck = e;
@@ -84,9 +86,11 @@ namespace spades {
e.Caption = _Tr("StartupScreen", "OpenGL");
e.Bounds = AABB2(100.f, 30.f, 140.f, 24.f);
e.GroupName = "driver";
- HelpHandler(helpView,
- _Tr("StartupScreen", "OpenGL renderer uses your computer's graphics "
- "accelerator to generate the game screen.")).Watch(e);
+ HelpHandler(
+ helpView,
+ _Tr("StartupScreen",
+ "OpenGL renderer uses your computer's graphics " "accelerator to generate the game screen."))
+ .Watch(e);
@e.Activated = spades::ui::EventHandler(this.OnDriverOpenGL);
AddChild(e);
@driverOpenGL = e;
@@ -96,10 +100,11 @@ namespace spades {
e.Caption = _Tr("StartupScreen", "Software");
e.Bounds = AABB2(250.f, 30.f, 140.f, 24.f);
e.GroupName = "driver";
- HelpHandler(helpView,
- _Tr("StartupScreen", "Software renderer uses CPU to generate the game "
- "screen. Its quality and performance might be inferior to OpenGL "
- "renderer, but it works even with an unsupported GPU.")).Watch(e);
+ HelpHandler(
+ helpView,
+ _Tr("StartupScreen",
+ "Software renderer uses CPU to generate the game " "screen. Its quality and performance might be inferior to OpenGL " "renderer, but it works even with an unsupported GPU."))
+ .Watch(e);
@e.Activated = spades::ui::EventHandler(this.OnDriverSoftware);
AddChild(e);
@driverSoftware = e;
@@ -108,126 +113,142 @@ namespace spades {
{
StartupScreenConfigView cfg(Manager);
- cfg.AddRow(StartupScreenConfigSelectItemEditor(ui,
- StartupScreenGraphicsAntialiasConfig(ui), "0|2|4|fxaa",
+ cfg.AddRow(StartupScreenConfigSelectItemEditor(
+ ui, StartupScreenGraphicsAntialiasConfig(ui), "0|2|4|fxaa",
_Tr("StartupScreen",
- "Antialias:Enables a technique to improve the appearance of high-contrast edges.\n\n"
- "MSAA: Performs antialiasing by generating an intermediate high-resolution image. "
- "Looks best, but doesn't cope with some settings.\n\n"
- "FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|"
- "Off|MSAA 2x|4x|FXAA")));
+ "Antialias:Enables a technique to improve the appearance of high-contrast edges.\n\n" "MSAA: Performs antialiasing by generating an intermediate high-resolution image. " "Looks best, but doesn't cope with some settings.\n\n" "FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|" "Off|MSAA 2x|4x|FXAA")));
- cfg.AddRow(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_radiosity"), "0", "1", _Tr("StartupScreen", "Global Illumination"),
+ cfg.AddRow(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_radiosity"), "0", "1",
+ _Tr("StartupScreen", "Global Illumination"),
_Tr("StartupScreen",
- "Enables a physically based simulation of light path for more realistic lighting.")));
+ "Enables a physically based simulation of light path for more realistic lighting.")));
- cfg.AddRow(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_hdr"), "0", "1", _Tr("StartupScreen", "Linear HDR Rendering"),
+ cfg.AddRow(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_hdr"), "0", "1",
+ _Tr("StartupScreen", "Linear HDR Rendering"),
_Tr("StartupScreen",
- "Uses a number representation which allows wider dynamic range during rendering process. "
- "Additionally, this allows color calculation whose value is in linear correspondence with actual energy, "
- "that is, physically accurate blending can be achieved.")));
+ "Uses a number representation which allows wider dynamic range during rendering process. " "Additionally, this allows color calculation whose value is in linear correspondence with actual energy, " "that is, physically accurate blending can be achieved.")));
{
StartupScreenComplexConfig cplx;
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_cameraBlur"), "0", "1", _Tr("StartupScreen", "Camera Blur"),
- _Tr("StartupScreen", "Blurs the screen when you turn quickly.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_lens"), "0", "1", _Tr("StartupScreen", "Lens Effect"),
- _Tr("StartupScreen", "Simulates distortion caused by a real camera lens.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_bloom"), "0", "1", _Tr("StartupScreen", "Lens Scattering Filter"),
- _Tr("StartupScreen", "Simulates light being scattered by dust on the camera lens.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_cameraBlur"), "0", "1",
+ _Tr("StartupScreen", "Camera Blur"),
+ _Tr("StartupScreen", "Blurs the screen when you turn quickly.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_lens"), "0", "1",
+ _Tr("StartupScreen", "Lens Effect"),
+ _Tr("StartupScreen",
+ "Simulates distortion caused by a real camera lens.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_bloom"), "0", "1",
+ _Tr("StartupScreen", "Lens Scattering Filter"),
+ _Tr("StartupScreen",
+ "Simulates light being scattered by dust on the camera lens.")));
// r_lens is currently no-op
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_lensFlare"), "0", "1", _Tr("StartupScreen", "Lens Flare"),
- _Tr("StartupScreen", "The Sun causes lens flare.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_lensFlareDynamic"), "0", "1", _Tr("StartupScreen", "Flares for Dynamic Lights"),
- _Tr("StartupScreen", "Enables lens flare for light sources other than the Sun.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_colorCorrection"), "0", "1", _Tr("StartupScreen", "Color Correction"),
- _Tr("StartupScreen", "Applies cinematic color correction to make the image look better.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_depthOfField"), "0", "1", _Tr("StartupScreen", "Depth of Field"),
- _Tr("StartupScreen", "Blurs out-of-focus objects.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_ssao"), "0", "1", _Tr("StartupScreen", "Screen Space Ambient Occlusion"),
- _Tr("StartupScreen", "Simulates soft shadows that occur between nearby objects.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_lensFlare"), "0", "1",
+ _Tr("StartupScreen", "Lens Flare"),
+ _Tr("StartupScreen", "The Sun causes lens flare.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_lensFlareDynamic"), "0", "1",
+ _Tr("StartupScreen", "Flares for Dynamic Lights"),
+ _Tr("StartupScreen",
+ "Enables lens flare for light sources other than the Sun.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_colorCorrection"), "0", "1",
+ _Tr("StartupScreen", "Color Correction"),
+ _Tr("StartupScreen",
+ "Applies cinematic color correction to make the image look better.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_depthOfField"), "0", "1",
+ _Tr("StartupScreen", "Depth of Field"),
+ _Tr("StartupScreen", "Blurs out-of-focus objects.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_ssao"), "0", "1",
+ _Tr("StartupScreen", "Screen Space Ambient Occlusion"),
+ _Tr("StartupScreen",
+ "Simulates soft shadows that occur between nearby objects.")));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Low"), "0|0|0|0|0|0|0|0"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Medium"), "1|0|0|1|0|1|0|0"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "High"), "1|1|1|1|1|1|1|0"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Ultra"), "1|1|1|1|1|1|1|1"));
+ cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Low"),
+ "0|0|0|0|0|0|0|0"));
+ cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Medium"),
+ "1|0|0|1|0|1|0|0"));
+ cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "High"),
+ "1|1|1|1|1|1|1|0"));
+ cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Ultra"),
+ "1|1|1|1|1|1|1|1"));
- cfg.AddRow(StartupScreenConfigComplexItemEditor(ui, cplx,
- _Tr("StartupScreen", "Post-process"),
- _Tr("StartupScreen", "Post-process modifies the image to make it look better and "
- "more realistic.")));
+ cfg.AddRow(StartupScreenConfigComplexItemEditor(
+ ui, cplx, _Tr("StartupScreen", "Post-process"),
+ _Tr("StartupScreen",
+ "Post-process modifies the image to make it look better and " "more realistic.")));
}
- cfg.AddRow(StartupScreenConfigSelectItemEditor(ui,
- StartupScreenConfig(ui, "r_softParticles"), "0|1|2",
+ cfg.AddRow(StartupScreenConfigSelectItemEditor(
+ ui, StartupScreenConfig(ui, "r_softParticles"), "0|1|2",
_Tr("StartupScreen",
- "Particles|"
- "Low:Artifact occurs when a particle intersects other objects.|"
- "Medium:Particle intersects objects smoothly.|"
- "High:Particle intersects objects smoothly, and some objects casts "
- "their shadow to particles.")));
+ "Particles|" "Low:Artifact occurs when a particle intersects other objects.|" "Medium:Particle intersects objects smoothly.|" "High:Particle intersects objects smoothly, and some objects casts " "their shadow to particles.")));
{
StartupScreenComplexConfig cplx;
// r_mapSoftShadow is currently no-op
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_dlights"), "0", "1", _Tr("StartupScreen", "Dynamic Lights"),
- _Tr("StartupScreen",
- "Gives some objects an ability to emit light to give them "
- "an energy-emitting impression.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_modelShadows"), "0", "1", _Tr("StartupScreen", "Shadows"),
- _Tr("StartupScreen", "Non-static object casts a shadow.")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_fogShadow"), "0", "1", _Tr("StartupScreen", "Volumetric Fog"),
- _Tr("StartupScreen", "Simulates shadow being casted to the fog particles using a "
- "super highly computationally demanding algorithm. ")));
- cplx.AddEditor(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "r_physicalLighting"), "0", "1", _Tr("StartupScreen", "Physically Based Lighting"),
- _Tr("StartupScreen", "Uses more accurate approximation techniques to decide the brightness of objects.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_dlights"), "0", "1",
+ _Tr("StartupScreen", "Dynamic Lights"),
+ _Tr("StartupScreen",
+ "Gives some objects an ability to emit light to give them " "an energy-emitting impression.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_modelShadows"), "0", "1",
+ _Tr("StartupScreen", "Shadows"),
+ _Tr("StartupScreen", "Non-static object casts a shadow.")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_fogShadow"), "0", "1",
+ _Tr("StartupScreen", "Volumetric Fog"),
+ _Tr("StartupScreen",
+ "Simulates shadow being casted to the fog particles using a " "super highly computationally demanding algorithm. ")));
+ cplx.AddEditor(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "r_physicalLighting"), "0", "1",
+ _Tr("StartupScreen", "Physically Based Lighting"),
+ _Tr("StartupScreen",
+ "Uses more accurate approximation techniques to decide the brightness of objects.")));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Low"), "1|0|0|0"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Medium"), "1|1|0|0"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "High"), "1|1|0|1"));
+ cplx.AddPreset(
+ StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Low"), "1|0|0|0"));
+ cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Medium"),
+ "1|1|0|0"));
+ cplx.AddPreset(
+ StartupScreenComplexConfigPreset(_Tr("StartupScreen", "High"), "1|1|0|1"));
- cfg.AddRow(StartupScreenConfigComplexItemEditor(ui, cplx,
- _Tr("StartupScreen", "Direct Lights"),
- _Tr("StartupScreen", "Controls how light encounting a material and atmosphere directly "
- "affects its appearance.")));
+ cfg.AddRow(StartupScreenConfigComplexItemEditor(
+ ui, cplx, _Tr("StartupScreen", "Direct Lights"),
+ _Tr("StartupScreen",
+ "Controls how light encounting a material and atmosphere directly " "affects its appearance.")));
}
{
StartupScreenComplexConfig cplx;
- cplx.AddEditor(StartupScreenConfigSelectItemEditor(ui,
- StartupScreenConfig(ui, "r_water"), "0|1|2|3",
+ cplx.AddEditor(StartupScreenConfigSelectItemEditor(
+ ui, StartupScreenConfig(ui, "r_water"), "0|1|2|3",
_Tr("StartupScreen",
- "Water Shader|"
- "None:Water is rendered in the same way that normal blocks are done.|"
- "Level 1:Refraction and the reflected Sun are simulated.|"
- "Level 2:Waving water is simulated as well as reflection and refraction.|"
- "Level 3:Reflections and refractions are rendered at the highest quality using screen-space techniques.")));
+ "Water Shader|" "None:Water is rendered in the same way that normal blocks are done.|" "Level 1:Refraction and the reflected Sun are simulated.|" "Level 2:Waving water is simulated as well as reflection and refraction.|" "Level 3:Reflections and refractions are rendered at the highest quality using screen-space techniques.")));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Low"), "0"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Med"), "1"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "High"), "2"));
- cplx.AddPreset(StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Ultra"), "3"));
+ cplx.AddPreset(
+ StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Low"), "0"));
+ cplx.AddPreset(
+ StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Med"), "1"));
+ cplx.AddPreset(
+ StartupScreenComplexConfigPreset(_Tr("StartupScreen", "High"), "2"));
+ cplx.AddPreset(
+ StartupScreenComplexConfigPreset(_Tr("StartupScreen", "Ultra"), "3"));
- cfg.AddRow(StartupScreenConfigComplexItemEditor(ui, cplx,
- _Tr("StartupScreen", "Shader Effects"), _Tr("StartupScreen", "Special effects.")));
+ cfg.AddRow(StartupScreenConfigComplexItemEditor(
+ ui, cplx, _Tr("StartupScreen", "Shader Effects"),
+ _Tr("StartupScreen", "Special effects.")));
}
-
cfg.Finalize();
cfg.SetHelpTextHandler(HelpTextHandler(this.HandleHelpText));
cfg.Bounds = AABB2(0.f, 60.f, mainWidth, size.y - 60.f);
@@ -238,12 +259,10 @@ namespace spades {
{
StartupScreenConfigView cfg(Manager);
- cfg.AddRow(StartupScreenConfigSelectItemEditor(ui,
- StartupScreenConfig(ui, "r_swUndersampling"), "0|1|2",
+ cfg.AddRow(StartupScreenConfigSelectItemEditor(
+ ui, StartupScreenConfig(ui, "r_swUndersampling"), "0|1|2",
_Tr("StartupScreen",
- "Fast Mode:Reduces the image resolution to make the rendering faster.|"
- "Off|2x|4x")));
-
+ "Fast Mode:Reduces the image resolution to make the rendering faster.|" "Off|2x|4x")));
cfg.Finalize();
cfg.SetHelpTextHandler(HelpTextHandler(this.HandleHelpText));
@@ -251,26 +270,30 @@ namespace spades {
AddChild(cfg);
@configViewSoftware = cfg;
}
-
}
- private void HandleHelpText(string text) {
- helpView.Text = text;
+ private void HandleHelpText(string text) { helpView.Text = text; }
+
+ private void OnDriverOpenGL(spades::ui::UIElement @) {
+ r_renderer.StringValue = "gl";
+ LoadConfig();
+ }
+ private void OnDriverSoftware(spades::ui::UIElement @) {
+ r_renderer.StringValue = "sw";
+ LoadConfig();
}
- private void OnDriverOpenGL(spades::ui::UIElement@){ r_renderer.StringValue = "gl"; LoadConfig(); }
- private void OnDriverSoftware(spades::ui::UIElement@){ r_renderer.StringValue = "sw"; LoadConfig(); }
-
- private void OnFullscreenCheck(spades::ui::UIElement@)
- { r_fullscreen.IntValue = fullscreenCheck.Toggled ? 1 : 0; }
+ private void OnFullscreenCheck(spades::ui::UIElement @) {
+ r_fullscreen.IntValue = fullscreenCheck.Toggled ? 1 : 0;
+ }
void LoadConfig() {
resEdit.LoadConfig();
- if(r_renderer.StringValue == "sw") {
+ if (r_renderer.StringValue == "sw") {
driverSoftware.Check();
configViewGL.Visible = false;
configViewSoftware.Visible = true;
- }else{
+ } else {
driverOpenGL.Check();
configViewGL.Visible = true;
configViewSoftware.Visible = false;
@@ -283,30 +306,28 @@ namespace spades {
}
}
- class StartupScreenComboBoxDropdownButton: spades::ui::SimpleButton {
- StartupScreenComboBoxDropdownButton(spades::ui::UIManager@ manager) {
- super(manager);
- }
+ class StartupScreenComboBoxDropdownButton : spades::ui::SimpleButton {
+ StartupScreenComboBoxDropdownButton(spades::ui::UIManager @manager) { super(manager); }
void Render() {
SimpleButton::Render();
- Renderer@ renderer = Manager.Renderer;
- Image@ image = renderer.RegisterImage("Gfx/UI/ScrollArrow.png");
+ Renderer @renderer = Manager.Renderer;
+ Image @image = renderer.RegisterImage("Gfx/UI/ScrollArrow.png");
AABB2 bnd = ScreenBounds;
Vector2 p = (bnd.min + bnd.max) * 0.5f + Vector2(-8.f, 8.f);
renderer.DrawImage(image, AABB2(p.x, p.y, 16.f, -16.f));
}
}
- class StartupScreenGraphicsDisplayResolutionEditor: spades::ui::UIElement {
- spades::ui::Field@ widthField;
- spades::ui::Field@ heightField;
- spades::ui::Button@ dropdownButton;
+ class StartupScreenGraphicsDisplayResolutionEditor : spades::ui::UIElement {
+ spades::ui::Field @widthField;
+ spades::ui::Field @heightField;
+ spades::ui::Button @dropdownButton;
private ConfigItem r_videoWidth("r_videoWidth");
private ConfigItem r_videoHeight("r_videoHeight");
- StartupScreenHelper@ helper;
+ StartupScreenHelper @helper;
- StartupScreenGraphicsDisplayResolutionEditor(StartupScreenUI@ ui) {
+ StartupScreenGraphicsDisplayResolutionEditor(StartupScreenUI @ui) {
super(ui.manager);
@helper = ui.helper;
{
@@ -342,17 +363,16 @@ namespace spades {
void SaveConfig() {
int w = ParseInt(widthField.Text);
int h = ParseInt(heightField.Text);
- if(w < 640 or h < 480 or w > 8192 or h > 8192) return;
+ if (w<640 or h<480 or w> 8192 or h> 8192)
+ return;
r_videoWidth.IntValue = w;
r_videoHeight.IntValue = h;
}
- private void ValueEditHandler(spades::ui::UIElement@) {
- SaveConfig();
- }
+ private void ValueEditHandler(spades::ui::UIElement @) { SaveConfig(); }
private void DropdownHandler(int index) {
- if(index >= 0) {
+ if (index >= 0) {
widthField.Text = ToString(helper.GetVideoModeWidth(index));
heightField.Text = ToString(helper.GetVideoModeHeight(index));
@@ -360,44 +380,47 @@ namespace spades {
}
}
- private void ShowDropdown(spades::ui::UIElement@) {
+ private void ShowDropdown(spades::ui::UIElement @) {
string[] items = {};
int cnt = helper.GetNumVideoModes();
- for(int i = 0; i < cnt; i++) {
+ for (int i = 0; i < cnt; i++) {
int w = helper.GetVideoModeWidth(i);
int h = helper.GetVideoModeHeight(i);
string s = ToString(w) + "x" + ToString(h);
items.insertLast(s);
}
- spades::ui::ShowDropDownList(this, items, spades::ui::DropDownListHandler(this.DropdownHandler));
+ spades::ui::ShowDropDownList(this, items,
+ spades::ui::DropDownListHandler(this.DropdownHandler));
}
void Render() {
- Font@ font = this.Font;
+ Font @font = this.Font;
font.Draw("x", Vector2(45.f, 0.f) + ScreenPosition, 1.f, Vector4(1.f, 1.f, 1.f, 1.f));
UIElement::Render();
}
}
- class StartupScreenGraphicsAntialiasConfig: StartupScreenGenericConfig {
- private StartupScreenUI@ ui;
- private ConfigItem@ msaaConfig;
- private ConfigItem@ fxaaConfig;
- StartupScreenGraphicsAntialiasConfig(StartupScreenUI@ ui) {
+ class StartupScreenGraphicsAntialiasConfig : StartupScreenGenericConfig {
+ private StartupScreenUI @ui;
+ private ConfigItem @msaaConfig;
+ private ConfigItem @fxaaConfig;
+ StartupScreenGraphicsAntialiasConfig(StartupScreenUI @ui) {
@this.ui = ui;
@msaaConfig = ConfigItem("r_multisamples");
@fxaaConfig = ConfigItem("r_fxaa");
}
string GetValue() {
- if(fxaaConfig.IntValue != 0) {
+ if (fxaaConfig.IntValue != 0) {
return "fxaa";
- }else{
+ } else {
int v = msaaConfig.IntValue;
- if(v < 2) return "0";
- else return msaaConfig.StringValue;
+ if (v < 2)
+ return "0";
+ else
+ return msaaConfig.StringValue;
}
}
void SetValue(string v) {
- if(v == "fxaa") {
+ if (v == "fxaa") {
msaaConfig.StringValue = "0";
fxaaConfig.StringValue = "1";
} else if (v == "0" || v == "1") {
@@ -409,37 +432,35 @@ namespace spades {
}
}
string CheckValueCapability(string v) {
- if(v == "fxaa") {
+ if (v == "fxaa") {
return ui.helper.CheckConfigCapability("r_multisamples", "0") +
- ui.helper.CheckConfigCapability("r_fxaa", "1");
+ ui.helper.CheckConfigCapability("r_fxaa", "1");
} else if (v == "0" || v == "1") {
return ui.helper.CheckConfigCapability("r_multisamples", "0") +
- ui.helper.CheckConfigCapability("r_fxaa", "0");
+ ui.helper.CheckConfigCapability("r_fxaa", "0");
} else {
return ui.helper.CheckConfigCapability("r_multisamples", v) +
- ui.helper.CheckConfigCapability("r_fxaa", "0");
+ ui.helper.CheckConfigCapability("r_fxaa", "0");
}
-
}
}
+ class StartupScreenAudioTab : spades::ui::UIElement, LabelAddable {
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
- class StartupScreenAudioTab: spades::ui::UIElement, LabelAddable {
- StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ spades::ui::RadioButton @driverOpenAL;
+ spades::ui::RadioButton @driverYSR;
+ spades::ui::RadioButton @driverNull;
- spades::ui::RadioButton@ driverOpenAL;
- spades::ui::RadioButton@ driverYSR;
- spades::ui::RadioButton@ driverNull;
-
- spades::ui::TextViewer@ helpView;
- StartupScreenConfigView@ configViewOpenAL;
- StartupScreenConfigView@ configViewYSR;
+ spades::ui::TextViewer @helpView;
+ StartupScreenConfigView @configViewOpenAL;
+ StartupScreenConfigView @configViewYSR;
private ConfigItem s_audioDriver("s_audioDriver");
private ConfigItem s_eax("s_eax");
- StartupScreenAudioTab(StartupScreenUI@ ui, Vector2 size) {
+ StartupScreenAudioTab(StartupScreenUI @ui, Vector2 size) {
super(ui.manager);
@this.ui = ui;
@helper = ui.helper;
@@ -455,17 +476,17 @@ namespace spades {
@helpView = e;
}
-
AddLabel(0.f, 0.f, 24.f, _Tr("StartupScreen", "Backend"));
{
spades::ui::RadioButton e(Manager);
e.Caption = _Tr("StartupScreen", "OpenAL");
e.Bounds = AABB2(100.f, 0.f, 100.f, 24.f);
e.GroupName = "driver";
- HelpHandler(helpView,
- _Tr("StartupScreen", "Uses an OpenAL-capable sound card to process sound. "
- "In most cases where there isn't such a sound card, software emulation is "
- "used.")).Watch(e);
+ HelpHandler(
+ helpView,
+ _Tr("StartupScreen",
+ "Uses an OpenAL-capable sound card to process sound. " "In most cases where there isn't such a sound card, software emulation is " "used."))
+ .Watch(e);
@e.Activated = spades::ui::EventHandler(this.OnDriverOpenAL);
AddChild(e);
@driverOpenAL = e;
@@ -475,11 +496,11 @@ namespace spades {
e.Caption = _Tr("StartupScreen", "YSR");
e.Bounds = AABB2(210.f, 0.f, 100.f, 24.f);
e.GroupName = "driver";
- HelpHandler(helpView,
- _Tr("StartupScreen", "YSR is an experimental 3D HDR sound engine optimized "
- "for OpenSpades. It features several enhanced features including "
- "automatic load control, dynamics compressor, HRTF-based "
- "3D audio, and high quality reverb.")).Watch(e);
+ HelpHandler(
+ helpView,
+ _Tr("StartupScreen",
+ "YSR is an experimental 3D HDR sound engine optimized " "for OpenSpades. It features several enhanced features including " "automatic load control, dynamics compressor, HRTF-based " "3D audio, and high quality reverb."))
+ .Watch(e);
@e.Activated = spades::ui::EventHandler(this.OnDriverYSR);
AddChild(e);
@driverYSR = e;
@@ -490,8 +511,7 @@ namespace spades {
e.Caption = _Tr("StartupScreen", "Null");
e.Bounds = AABB2(320.f, 0.f, 100.f, 24.f);
e.GroupName = "driver";
- HelpHandler(helpView,
- _Tr("StartupScreen", "Disables audio output.")).Watch(e);
+ HelpHandler(helpView, _Tr("StartupScreen", "Disables audio output.")).Watch(e);
@e.Activated = spades::ui::EventHandler(this.OnDriverNull);
AddChild(e);
@driverNull = e;
@@ -500,19 +520,17 @@ namespace spades {
{
StartupScreenConfigView cfg(Manager);
- cfg.AddRow(StartupScreenConfigSliderItemEditor(ui,
- StartupScreenConfig(ui, "s_maxPolyphonics"), 16.0, 256.0, 8.0,
- _Tr("StartupScreen", "Polyphonics"), _Tr("StartupScreen",
- "Specifies how many sounds can be played simultaneously. "
- "Higher value needs more processing power, so setting this too high might "
- "cause an overload (especially with a software emulation)."),
+ cfg.AddRow(StartupScreenConfigSliderItemEditor(
+ ui, StartupScreenConfig(ui, "s_maxPolyphonics"), 16.0, 256.0, 8.0,
+ _Tr("StartupScreen", "Polyphonics"),
+ _Tr("StartupScreen",
+ "Specifies how many sounds can be played simultaneously. " "Higher value needs more processing power, so setting this too high might " "cause an overload (especially with a software emulation)."),
ConfigNumberFormatter(0, " poly")));
- cfg.AddRow(StartupScreenConfigCheckItemEditor(ui,
- StartupScreenConfig(ui, "s_eax"), "0", "1",
- _Tr("StartupScreen", "EAX"), _Tr("StartupScreen",
- "Enables extended features provided by the OpenAL driver to create "
- "more ambience.")));
+ cfg.AddRow(StartupScreenConfigCheckItemEditor(
+ ui, StartupScreenConfig(ui, "s_eax"), "0", "1", _Tr("StartupScreen", "EAX"),
+ _Tr("StartupScreen",
+ "Enables extended features provided by the OpenAL driver to create " "more ambience.")));
cfg.Finalize();
cfg.SetHelpTextHandler(HelpTextHandler(this.HandleHelpText));
@@ -524,65 +542,67 @@ namespace spades {
{
StartupScreenConfigView cfg(Manager);
- cfg.AddRow(StartupScreenConfigSliderItemEditor(ui,
- StartupScreenConfig(ui, "s_maxPolyphonics"), 16.0, 256.0, 8.0,
- _Tr("StartupScreen", "Polyphonics"), _Tr("StartupScreen",
- "Specifies how many sounds can be played simultaneously. "
- "No matter what value is set, YSR might reduce the number of sounds "
- "when an overload is detected."),
+ cfg.AddRow(StartupScreenConfigSliderItemEditor(
+ ui, StartupScreenConfig(ui, "s_maxPolyphonics"), 16.0, 256.0, 8.0,
+ _Tr("StartupScreen", "Polyphonics"),
+ _Tr("StartupScreen",
+ "Specifies how many sounds can be played simultaneously. " "No matter what value is set, YSR might reduce the number of sounds " "when an overload is detected."),
ConfigNumberFormatter(0, " poly")));
-
cfg.Finalize();
cfg.SetHelpTextHandler(HelpTextHandler(this.HandleHelpText));
cfg.Bounds = AABB2(0.f, 30.f, mainWidth, size.y - 30.f);
AddChild(cfg);
@configViewYSR = cfg;
}
-
}
- private void HandleHelpText(string text) {
- helpView.Text = text;
- }
+ private void HandleHelpText(string text) { helpView.Text = text; }
- private void OnDriverOpenAL(spades::ui::UIElement@){ s_audioDriver.StringValue = "openal"; LoadConfig(); }
- private void OnDriverYSR(spades::ui::UIElement@){ s_audioDriver.StringValue = "ysr"; LoadConfig(); }
- private void OnDriverNull(spades::ui::UIElement@){ s_audioDriver.StringValue = "null"; LoadConfig(); }
+ private void OnDriverOpenAL(spades::ui::UIElement @) {
+ s_audioDriver.StringValue = "openal";
+ LoadConfig();
+ }
+ private void OnDriverYSR(spades::ui::UIElement @) {
+ s_audioDriver.StringValue = "ysr";
+ LoadConfig();
+ }
+ private void OnDriverNull(spades::ui::UIElement @) {
+ s_audioDriver.StringValue = "null";
+ LoadConfig();
+ }
void LoadConfig() {
- if(s_audioDriver.StringValue == "ysr") {
+ if (s_audioDriver.StringValue == "ysr") {
driverYSR.Check();
configViewOpenAL.Visible = false;
configViewYSR.Visible = true;
- }else if(s_audioDriver.StringValue == "openal"){
+ } else if (s_audioDriver.StringValue == "openal") {
driverOpenAL.Check();
configViewOpenAL.Visible = true;
configViewYSR.Visible = false;
- }else if(s_audioDriver.StringValue == "null"){
+ } else if (s_audioDriver.StringValue == "null") {
driverNull.Check();
configViewOpenAL.Visible = false;
configViewYSR.Visible = false;
}
- driverOpenAL.Enable = ui.helper.CheckConfigCapability("s_audioDriver", "openal").length == 0;
+ driverOpenAL.Enable =
+ ui.helper.CheckConfigCapability("s_audioDriver", "openal").length == 0;
driverYSR.Enable = ui.helper.CheckConfigCapability("s_audioDriver", "ysr").length == 0;
- driverNull.Enable = ui.helper.CheckConfigCapability("s_audioDriver", "null").length == 0;
+ driverNull.Enable =
+ ui.helper.CheckConfigCapability("s_audioDriver", "null").length == 0;
configViewOpenAL.LoadConfig();
configViewYSR.LoadConfig();
-
}
-
-
-
}
- class StartupScreenGenericTab: spades::ui::UIElement, LabelAddable {
- StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ class StartupScreenGenericTab : spades::ui::UIElement, LabelAddable {
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
- StartupScreenLocaleEditor@ locale;
+ StartupScreenLocaleEditor @locale;
- StartupScreenGenericTab(StartupScreenUI@ ui, Vector2 size) {
+ StartupScreenGenericTab(StartupScreenUI @ui, Vector2 size) {
super(ui.manager);
@this.ui = ui;
@helper = ui.helper;
@@ -623,33 +643,37 @@ namespace spades {
}
}
- void LoadConfig() {
- locale.LoadConfig();
- }
+ void LoadConfig() { locale.LoadConfig(); }
- private void OnBrowseUserDirectoryPressed(spades::ui::UIElement@) {
+ private void OnBrowseUserDirectoryPressed(spades::ui::UIElement @) {
if (helper.BrowseUserDirectory()) {
return;
}
- string msg = _Tr("StartupScreen", "An unknown error has occurred while opening the config directory.");
+ string msg = _Tr("StartupScreen",
+ "An unknown error has occurred while opening the config directory.");
AlertScreen al(Parent, msg, 100.f);
al.Run();
}
- private void OnResetSettingsPressed(spades::ui::UIElement@) {
- string msg = _Tr("StartupScreen", "Are you sure to reset all settings? They include (but are not limited to):") + "\n" +
- "- " + _Tr("StartupScreen", "All graphics/audio settings") + "\n" +
- "- " + _Tr("StartupScreen", "All key bindings") + "\n" +
- "- " + _Tr("StartupScreen", "Your player name") + "\n" +
- "- " + _Tr("StartupScreen", "Other advanced settings only accessible through '{0}' tab and in-game commands",
+ private void OnResetSettingsPressed(spades::ui::UIElement @) {
+ string msg =
+ _Tr("StartupScreen",
+ "Are you sure to reset all settings? They include (but are not limited to):") +
+ "\n"
+ + "- " + _Tr("StartupScreen", "All graphics/audio settings") + "\n"
+ + "- " + _Tr("StartupScreen", "All key bindings") + "\n"
+ + "- " + _Tr("StartupScreen", "Your player name") + "\n"
+ + "- " +
+ _Tr("StartupScreen",
+ "Other advanced settings only accessible through '{0}' tab and in-game commands",
_Tr("StartupScreen", "Advanced"));
ConfirmScreen al(Parent, msg, 200.f);
@al.Closed = spades::ui::EventHandler(OnResetSettingsConfirmed);
al.Run();
}
- private void OnResetSettingsConfirmed(spades::ui::UIElement@ sender) {
+ private void OnResetSettingsConfirmed(spades::ui::UIElement @sender) {
if (!cast(sender).Result) {
return;
}
@@ -661,9 +685,9 @@ namespace spades {
}
private void ResetAllSettings() {
- string[]@ names = GetAllConfigNames();
+ string[] @names = GetAllConfigNames();
- for(uint i = 0, count = names.length; i < count; i++) {
+ for (uint i = 0, count = names.length; i < count; i++) {
ConfigItem item(names[i]);
item.StringValue = item.DefaultValue;
}
@@ -671,19 +695,18 @@ namespace spades {
// Some of default values may be infeasible for the user's system.
helper.FixConfigs();
}
-
}
- class StartupScreenDropdownListDropdownButton: spades::ui::SimpleButton {
- StartupScreenDropdownListDropdownButton(spades::ui::UIManager@ manager) {
+ class StartupScreenDropdownListDropdownButton : spades::ui::SimpleButton {
+ StartupScreenDropdownListDropdownButton(spades::ui::UIManager @manager) {
super(manager);
Alignment = Vector2(0.f, 0.5f);
}
void Render() {
SimpleButton::Render();
- Renderer@ renderer = Manager.Renderer;
- Image@ arrowImg = renderer.RegisterImage("Gfx/UI/ScrollArrow.png");
+ Renderer @renderer = Manager.Renderer;
+ Image @arrowImg = renderer.RegisterImage("Gfx/UI/ScrollArrow.png");
AABB2 bnd = ScreenBounds;
Vector2 p = (bnd.min + bnd.max) * 0.5f + Vector2(-8.f, 8.f);
@@ -691,13 +714,14 @@ namespace spades {
}
}
- class StartupScreenLocaleEditor: spades::ui::UIElement, LabelAddable {StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ class StartupScreenLocaleEditor : spades::ui::UIElement, LabelAddable {
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
private ConfigItem core_locale("core_locale");
- spades::ui::Button@ dropdownButton;
+ spades::ui::Button @dropdownButton;
- StartupScreenLocaleEditor(StartupScreenUI@ ui) {
+ StartupScreenLocaleEditor(StartupScreenUI @ui) {
super(ui.manager);
@this.ui = ui;
@helper = ui.helper;
@@ -718,27 +742,30 @@ namespace spades {
}
int cnt = helper.GetNumLocales();
- for(int i = 0; i < cnt; i++) {
+ for (int i = 0; i < cnt; i++) {
if (locale == helper.GetLocale(i)) {
- name = helper.GetLocaleDescriptionNative(i) + " / " + helper.GetLocaleDescriptionEnglish(i);
+ name = helper.GetLocaleDescriptionNative(i) + " / " +
+ helper.GetLocaleDescriptionEnglish(i);
}
}
dropdownButton.Caption = name;
}
- private void ShowDropdown(spades::ui::UIElement@) {
+ private void ShowDropdown(spades::ui::UIElement @) {
string[] items = {_Tr("StartupScreen", "System default")};
int cnt = helper.GetNumLocales();
- for(int i = 0; i < cnt; i++) {
- string s = helper.GetLocaleDescriptionNative(i) + " / " + helper.GetLocaleDescriptionEnglish(i);
+ for (int i = 0; i < cnt; i++) {
+ string s = helper.GetLocaleDescriptionNative(i) + " / " +
+ helper.GetLocaleDescriptionEnglish(i);
items.insertLast(s);
}
- spades::ui::ShowDropDownList(this, items, spades::ui::DropDownListHandler(this.DropdownHandler));
+ spades::ui::ShowDropDownList(this, items,
+ spades::ui::DropDownListHandler(this.DropdownHandler));
}
private void DropdownHandler(int index) {
- if(index >= 0) {
+ if (index >= 0) {
if (index == 0) {
core_locale = "";
} else {
@@ -751,13 +778,13 @@ namespace spades {
}
}
- class StartupScreenSystemInfoTab: spades::ui::UIElement, LabelAddable {
- StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ class StartupScreenSystemInfoTab : spades::ui::UIElement, LabelAddable {
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
- spades::ui::TextViewer@ helpView;
+ spades::ui::TextViewer @helpView;
- StartupScreenSystemInfoTab(StartupScreenUI@ ui, Vector2 size) {
+ StartupScreenSystemInfoTab(StartupScreenUI @ui, Vector2 size) {
super(ui.manager);
@this.ui = ui;
@helper = ui.helper;
@@ -767,7 +794,7 @@ namespace spades {
e.Bounds = AABB2(0.f, 0.f, size.x, size.y - 30.f);
@e.Font = ui.fontManager.GuiFont;
AddChild(e);
- for(int i = 0, count = helper.GetNumReportLines(); i < count; i++) {
+ for (int i = 0, count = helper.GetNumReportLines(); i < count; i++) {
string text = helper.GetReportLineText(i);
Vector4 col = helper.GetReportLineColor(i);
e.AddLine(text, true, col);
@@ -782,27 +809,20 @@ namespace spades {
@button.Activated = spades::ui::EventHandler(this.OnCopyReport);
AddChild(button);
}
-
}
- private void OnCopyReport(spades::ui::UIElement@){
- Manager.Copy(helper.GetReport());
- }
-
-
-
+ private void OnCopyReport(spades::ui::UIElement @) { Manager.Copy(helper.GetReport()); }
}
+ class StartupScreenAdvancedTab : spades::ui::UIElement, LabelAddable {
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
- class StartupScreenAdvancedTab: spades::ui::UIElement, LabelAddable {
- StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ spades::ui::Field @filter;
- spades::ui::Field@ filter;
+ spades::ui::TextViewer @helpView;
+ StartupScreenConfigView @configView;
- spades::ui::TextViewer@ helpView;
- StartupScreenConfigView@ configView;
-
- StartupScreenAdvancedTab(StartupScreenUI@ ui, Vector2 size) {
+ StartupScreenAdvancedTab(StartupScreenUI @ui, Vector2 size) {
super(ui.manager);
@this.ui = ui;
@helper = ui.helper;
@@ -819,7 +839,6 @@ namespace spades {
@helpView = e;
}
-
{
spades::ui::Field e(Manager);
e.Placeholder = _Tr("StartupScreen", "Filter");
@@ -832,12 +851,12 @@ namespace spades {
{
StartupScreenConfigView cfg(Manager);
- string[]@ names = GetAllConfigNames();
+ string[] @names = GetAllConfigNames();
- for(uint i = 0, count = names.length; i < count; i++) {
+ for (uint i = 0, count = names.length; i < count; i++) {
- cfg.AddRow(StartupScreenConfigFieldItemEditor(ui,
- StartupScreenConfig(ui, names[i]), names[i], ""));
+ cfg.AddRow(StartupScreenConfigFieldItemEditor(
+ ui, StartupScreenConfig(ui, names[i]), names[i], ""));
}
cfg.Finalize();
@@ -848,21 +867,11 @@ namespace spades {
}
}
- private void HandleHelpText(string text) {
- helpView.Text = text;
- }
-
- private void OnFilterChanged(spades::ui::UIElement@){
- configView.Filter(filter.Text);
- }
-
- void LoadConfig() {
- configView.LoadConfig();
-
- }
-
+ private void HandleHelpText(string text) { helpView.Text = text; }
+ private void OnFilterChanged(spades::ui::UIElement @) { configView.Filter(filter.Text); }
+ void LoadConfig() { configView.LoadConfig(); }
}
}
diff --git a/Resources/Scripts/Gui/StartupScreen/MainMenu.as b/Resources/Scripts/Gui/StartupScreen/MainMenu.as
index f31c685c..6a8d87ad 100644
--- a/Resources/Scripts/Gui/StartupScreen/MainMenu.as
+++ b/Resources/Scripts/Gui/StartupScreen/MainMenu.as
@@ -27,24 +27,24 @@ namespace spades {
int ActiveTabIndex;
}
- class StartupScreenMainMenu: spades::ui::UIElement {
+ class StartupScreenMainMenu : spades::ui::UIElement {
- StartupScreenUI@ ui;
- StartupScreenHelper@ helper;
+ StartupScreenUI @ui;
+ StartupScreenHelper @helper;
- spades::ui::ListView@ serverList;
- spades::ui::CheckBox@ bypassStartupWindowCheck;
+ spades::ui::ListView @serverList;
+ spades::ui::CheckBox @bypassStartupWindowCheck;
- StartupScreenGraphicsTab@ graphicsTab;
- StartupScreenAudioTab@ audioTab;
- StartupScreenGenericTab@ genericTab;
- StartupScreenSystemInfoTab@ systemInfoTab;
- StartupScreenAdvancedTab@ advancedTab;
+ StartupScreenGraphicsTab @graphicsTab;
+ StartupScreenAudioTab @audioTab;
+ StartupScreenGenericTab @genericTab;
+ StartupScreenSystemInfoTab @systemInfoTab;
+ StartupScreenAdvancedTab @advancedTab;
private ConfigItem cl_showStartupWindow("cl_showStartupWindow", "-1");
private bool advancedTabVisible = false;
- StartupScreenMainMenu(StartupScreenUI@ ui) {
+ StartupScreenMainMenu(StartupScreenUI @ui) {
super(ui.manager);
@this.ui = ui;
@this.helper = ui.helper;
@@ -63,10 +63,12 @@ namespace spades {
{
spades::ui::CheckBox button(Manager);
button.Caption = _Tr("StartupScreen", "Skip this screen next time");
- button.Bounds = AABB2(360.f, 62.f, width - 380.f, 20.f); // note: this is updated later soon
+ button.Bounds = AABB2(360.f, 62.f, width - 380.f,
+ 20.f); // note: this is updated later soon
AddChild(button);
@bypassStartupWindowCheck = button;
- @button.Activated = spades::ui::EventHandler(this.OnBypassStartupWindowCheckChanged);
+ @button.Activated
+ = spades::ui::EventHandler(this.OnBypassStartupWindowCheckChanged);
}
{
UpdateCheckView view(Manager, ui.helper.PackageUpdateManager);
@@ -114,34 +116,28 @@ namespace spades {
@tabStrip.Changed = spades::ui::EventHandler(this.OnTabChanged);
// Reposition the "Skip this screen next time" check box
- spades::ui::UIElement@[]@ tabStripItems = tabStrip.GetChildren();
+ spades::ui::UIElement @[] @tabStripItems = tabStrip.GetChildren();
float right = tabStripItems[tabStripItems.length - 1].Bounds.max.x +
- tabStrip.Bounds.min.x + 10.f;
+ tabStrip.Bounds.min.x + 10.f;
bypassStartupWindowCheck.Bounds = AABB2(right, 62.f, width - right - 20.f, 20.f);
}
LoadConfig();
}
- private void OnTabChanged(spades::ui::UIElement@) {
+ private void OnTabChanged(spades::ui::UIElement @) {
bool v = advancedTab.Visible;
- if(advancedTabVisible and not v) {
+ if (advancedTabVisible and not v) {
LoadConfig();
}
advancedTabVisible = v;
}
void LoadConfig() {
- switch(cl_showStartupWindow.IntValue) {
- case -1:
- bypassStartupWindowCheck.Toggled = false;
- break;
- case 0:
- bypassStartupWindowCheck.Toggled = true;
- break;
- default:
- bypassStartupWindowCheck.Toggled = false;
- break;
+ switch (cl_showStartupWindow.IntValue) {
+ case -1: bypassStartupWindowCheck.Toggled = false; break;
+ case 0: bypassStartupWindowCheck.Toggled = true; break;
+ default: bypassStartupWindowCheck.Toggled = false; break;
}
this.graphicsTab.LoadConfig();
@@ -150,7 +146,7 @@ namespace spades {
this.advancedTab.LoadConfig();
}
- StartupScreenMainMenuState@ GetState() {
+ StartupScreenMainMenuState @GetState() {
StartupScreenMainMenuState state;
if (this.graphicsTab.Visible) {
state.ActiveTabIndex = 0;
@@ -166,7 +162,7 @@ namespace spades {
return state;
}
- void SetState(StartupScreenMainMenuState@ state) {
+ void SetState(StartupScreenMainMenuState @state) {
this.graphicsTab.Visible = state.ActiveTabIndex == 0;
this.audioTab.Visible = state.ActiveTabIndex == 1;
this.genericTab.Visible = state.ActiveTabIndex == 2;
@@ -174,26 +170,26 @@ namespace spades {
this.advancedTab.Visible = state.ActiveTabIndex == 4;
}
- private void OnBypassStartupWindowCheckChanged(spades::ui::UIElement@ sender) {
+ private void OnBypassStartupWindowCheckChanged(spades::ui::UIElement @sender) {
cl_showStartupWindow.IntValue = (bypassStartupWindowCheck.Toggled ? 0 : 1);
}
- private void OnShowUpdateDetailsPressed(spades::ui::UIElement@ sender) {
+ private void OnShowUpdateDetailsPressed(spades::ui::UIElement @sender) {
if (ui.helper.OpenUpdateInfoURL()) {
return;
}
- string msg = _Tr("StartupScreen", "An unknown error has occurred while opening the update info website.");
+ string msg =
+ _Tr("StartupScreen",
+ "An unknown error has occurred while opening the update info website.");
msg += "\n\n" + ui.helper.PackageUpdateManager.LatestVersionInfoPageURL;
AlertScreen al(Parent, msg, 100.f);
al.Run();
}
- private void OnQuitPressed(spades::ui::UIElement@ sender) {
- ui.shouldExit = true;
- }
+ private void OnQuitPressed(spades::ui::UIElement @sender) { ui.shouldExit = true; }
- private void OnSetupPressed(spades::ui::UIElement@ sender) {
+ private void OnSetupPressed(spades::ui::UIElement @sender) {
PreferenceView al(this, PreferenceViewOptions(), ui.fontManager);
al.Run();
}
@@ -203,24 +199,19 @@ namespace spades {
ui.shouldExit = true; // we have to exit from the startup screen to start the game
}
- private void OnStartPressed(spades::ui::UIElement@ sender) {
- Start();
- }
+ private void OnStartPressed(spades::ui::UIElement @sender) { Start(); }
void HotKey(string key) {
- if(IsEnabled and key == "Enter") {
+ if (IsEnabled and key == "Enter") {
Start();
- } else if(IsEnabled and key == "Escape") {
+ } else if (IsEnabled and key == "Escape") {
ui.shouldExit = true;
} else {
UIElement::HotKey(key);
}
}
- void Render() {
- UIElement::Render();
-
- }
+ void Render() { UIElement::Render(); }
}
}
diff --git a/Resources/Scripts/Gui/StartupScreen/StartupScreenUI.as b/Resources/Scripts/Gui/StartupScreen/StartupScreenUI.as
index 71e55410..1864cfca 100644
--- a/Resources/Scripts/Gui/StartupScreen/StartupScreenUI.as
+++ b/Resources/Scripts/Gui/StartupScreen/StartupScreenUI.as
@@ -22,20 +22,20 @@
namespace spades {
-
class StartupScreenUI {
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- FontManager@ fontManager;
- StartupScreenHelper@ helper;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ FontManager @fontManager;
+ StartupScreenHelper @helper;
- spades::ui::UIManager@ manager;
+ spades::ui::UIManager @manager;
- StartupScreenMainMenu@ mainMenu;
+ StartupScreenMainMenu @mainMenu;
bool shouldExit = false;
- StartupScreenUI(Renderer@ renderer, AudioDevice@ audioDevice, FontManager@ fontManager, StartupScreenHelper@ helper) {
+ StartupScreenUI(Renderer @renderer, AudioDevice @audioDevice, FontManager @fontManager,
+ StartupScreenHelper @helper) {
@this.renderer = renderer;
@this.audioDevice = audioDevice;
@this.fontManager = fontManager;
@@ -58,52 +58,41 @@ namespace spades {
// Delete StartupScreenMainMenu
@manager.RootElement.GetChildren()[0].Parent = null;
- // Reload entire the startup screen while preserving the state as much as possible
- auto@ state = mainMenu.GetState();
+ // Reload entire the startup screen while preserving the state as much
+ // as possible
+ auto @state = mainMenu.GetState();
Init();
mainMenu.SetState(state);
}
void SetupRenderer() {
- if(manager !is null)
+ if (manager !is null)
manager.KeyPanic();
}
- void MouseEvent(float x, float y) {
- manager.MouseEvent(x, y);
- }
+ void MouseEvent(float x, float y) { manager.MouseEvent(x, y); }
- void WheelEvent(float x, float y) {
- manager.WheelEvent(x, y);
- }
+ void WheelEvent(float x, float y) { manager.WheelEvent(x, y); }
- void KeyEvent(string key, bool down) {
- manager.KeyEvent(key, down);
- }
+ void KeyEvent(string key, bool down) { manager.KeyEvent(key, down); }
- void TextInputEvent(string text) {
- manager.TextInputEvent(text);
- }
+ void TextInputEvent(string text) { manager.TextInputEvent(text); }
void TextEditingEvent(string text, int start, int len) {
manager.TextEditingEvent(text, start, len);
}
- bool AcceptsTextInput() {
- return manager.AcceptsTextInput;
- }
+ bool AcceptsTextInput() { return manager.AcceptsTextInput; }
- AABB2 GetTextInputRect() {
- return manager.TextInputRect;
- }
+ AABB2 GetTextInputRect() { return manager.TextInputRect; }
void RunFrame(float dt) {
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 1.f);
renderer.DrawImage(renderer.RegisterImage("Gfx/White.tga"),
- AABB2(0.f, 0.f, renderer.ScreenWidth, renderer.ScreenHeight));
+ AABB2(0.f, 0.f, renderer.ScreenWidth, renderer.ScreenHeight));
// draw title logo
- Image@ img = renderer.RegisterImage("Gfx/Title/LogoSmall.png");
+ Image @img = renderer.RegisterImage("Gfx/Title/LogoSmall.png");
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 1.f);
renderer.DrawImage(img, AABB2(10.f, 10.f, img.Width, img.Height));
@@ -114,17 +103,13 @@ namespace spades {
renderer.Flip();
}
- void Closing() {
- shouldExit = true;
- }
+ void Closing() { shouldExit = true; }
- bool WantsToBeClosed() {
- return shouldExit;
- }
+ bool WantsToBeClosed() { return shouldExit; }
}
- StartupScreenUI@ CreateStartupScreenUI(Renderer@ renderer, AudioDevice@ audioDevice,
- FontManager@ fontManager, StartupScreenHelper@ helper) {
+ StartupScreenUI @CreateStartupScreenUI(Renderer @renderer, AudioDevice @audioDevice,
+ FontManager @fontManager, StartupScreenHelper @helper) {
return StartupScreenUI(renderer, audioDevice, fontManager, helper);
}
diff --git a/Resources/Scripts/Gui/StartupScreen/UpdateCheckView.as b/Resources/Scripts/Gui/StartupScreen/UpdateCheckView.as
index ddb9ce1b..b138a6b8 100644
--- a/Resources/Scripts/Gui/StartupScreen/UpdateCheckView.as
+++ b/Resources/Scripts/Gui/StartupScreen/UpdateCheckView.as
@@ -21,17 +21,18 @@
#include "../UIFramework/UIControls.as"
namespace spades {
- class UpdateCheckView: spades::ui::UIElement {
- spades::ui::EventHandler@ OpenUpdateInfoURL;
+ class UpdateCheckView : spades::ui::UIElement {
+ spades::ui::EventHandler @OpenUpdateInfoURL;
- private PackageUpdateManager@ packageUpdateManager;
+ private PackageUpdateManager @packageUpdateManager;
- private spades::ui::Button@ enableCheckButton;
- private spades::ui::Button@ showDetailsButton;
+ private spades::ui::Button @enableCheckButton;
+ private spades::ui::Button @showDetailsButton;
private ConfigItem cl_checkForUpdates("cl_checkForUpdates");
- UpdateCheckView(spades::ui::UIManager@ manager, PackageUpdateManager@ packageUpdateManager) {
+ UpdateCheckView(spades::ui::UIManager @manager,
+ PackageUpdateManager @packageUpdateManager) {
super(manager);
@this.packageUpdateManager = packageUpdateManager;
@@ -56,15 +57,15 @@ namespace spades {
float viewWidth = Size.x;
float viewHeight = Size.y;
- enableCheckButton.Bounds = AABB2(
- viewWidth - 160.f, (viewHeight - 30.f) * 0.5f, 150.f, 30.f);
- showDetailsButton.Bounds = AABB2(
- viewWidth - 160.f, (viewHeight - 30.f) * 0.5f, 150.f, 30.f);
+ enableCheckButton.Bounds =
+ AABB2(viewWidth - 160.f, (viewHeight - 30.f) * 0.5f, 150.f, 30.f);
+ showDetailsButton.Bounds =
+ AABB2(viewWidth - 160.f, (viewHeight - 30.f) * 0.5f, 150.f, 30.f);
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ white = renderer.RegisterImage("Gfx/White.tga");
+ Image @white = renderer.RegisterImage("Gfx/White.tga");
Vector4 background = Vector4(0.0f, 0.0f, 0.0f, 1.0f);
switch (state) {
@@ -89,8 +90,8 @@ namespace spades {
float phase = fraction(Manager.Time) * 80.0f;
renderer.ColorNP = Vector4(0.15f, 0.15f, 0.15f, 1.0f);
for (float x = phase - 160.0f; x < size.x + 160.0f; x += 80.0f) {
- renderer.DrawImage(white, Vector2(x, pos.y), Vector2(x + 40.f, pos.y), Vector2(x - 20.f, pos.y + size.y),
- AABB2(0, 0, 0, 0));
+ renderer.DrawImage(white, Vector2(x, pos.y), Vector2(x + 40.f, pos.y),
+ Vector2(x - 20.f, pos.y + size.y), AABB2(0, 0, 0, 0));
}
}
@@ -99,11 +100,14 @@ namespace spades {
switch (state) {
case PackageUpdateManagerReadyState::Loaded:
if (packageUpdateManager.UpdateAvailable) {
- text = _Tr("UpdateCheck", "Version {0} is available! (You currently have {1})",
- packageUpdateManager.LatestVersionInfo.Text, packageUpdateManager.CurrentVersionInfo.Text);
+ text =
+ _Tr("UpdateCheck", "Version {0} is available! (You currently have {1})",
+ packageUpdateManager.LatestVersionInfo.Text,
+ packageUpdateManager.CurrentVersionInfo.Text);
} else {
- text = _Tr("UpdateCheck", "You're using the latest version of OpenSpades. ({0})",
- packageUpdateManager.CurrentVersionInfo.Text);
+ text = _Tr("UpdateCheck",
+ "You're using the latest version of OpenSpades. ({0})",
+ packageUpdateManager.CurrentVersionInfo.Text);
}
break;
case PackageUpdateManagerReadyState::Loading:
@@ -120,7 +124,7 @@ namespace spades {
break;
}
- Font@ font = this.Font;
+ Font @font = this.Font;
Vector2 txtSize = font.Measure(text);
Vector2 txtPos = pos + (size - txtSize) * Vector2(0.0f, 0.5f) + Vector2(10.0f, 0.0f);
font.Draw(text, txtPos, 1.0f, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
@@ -142,12 +146,10 @@ namespace spades {
UIElement::Render();
}
- private void OnEnableCheckPressed(spades::ui::UIElement@) {
+ private void OnEnableCheckPressed(spades::ui::UIElement @) {
cl_checkForUpdates.IntValue = 1;
packageUpdateManager.CheckForUpdate();
}
- private void OnShowDetailsPressed(spades::ui::UIElement@) {
- OpenUpdateInfoURL(this);
- }
+ private void OnShowDetailsPressed(spades::ui::UIElement @) { OpenUpdateInfoURL(this); }
}
}
diff --git a/Resources/Scripts/Gui/UIFramework/Button.as b/Resources/Scripts/Gui/UIFramework/Button.as
index 0b59ddf9..5bcc1799 100644
--- a/Resources/Scripts/Gui/UIFramework/Button.as
+++ b/Resources/Scripts/Gui/UIFramework/Button.as
@@ -23,7 +23,7 @@
namespace spades {
namespace ui {
- class ButtonBase: UIElement {
+ class ButtonBase : UIElement {
bool Pressed = false;
bool Hover = false;
bool Toggled = false;
@@ -32,59 +32,55 @@ namespace spades {
bool Repeat = false;
bool ActivateOnMouseDown = false;
- EventHandler@ Activated;
- EventHandler@ DoubleClicked;
- EventHandler@ RightClicked;
+ EventHandler @Activated;
+ EventHandler @DoubleClicked;
+ EventHandler @RightClicked;
string Caption;
string ActivateHotKey;
- private Timer@ repeatTimer;
+ private Timer @repeatTimer;
// for double click detection
private float lastActivate = -1.f;
private Vector2 lastActivatePosition = Vector2();
- ButtonBase(UIManager@ manager) {
+ ButtonBase(UIManager @manager) {
super(manager);
IsMouseInteractive = true;
@repeatTimer = Timer(Manager);
@repeatTimer.Tick = TimerTickEventHandler(this.RepeatTimerFired);
}
- void PlayMouseEnterSound() {
- Manager.PlaySound("Sounds/Feedback/Limbo/Hover.opus");
- }
+ void PlayMouseEnterSound() { Manager.PlaySound("Sounds/Feedback/Limbo/Hover.opus"); }
- void PlayActivateSound() {
- Manager.PlaySound("Sounds/Feedback/Limbo/Select.opus");
- }
+ void PlayActivateSound() { Manager.PlaySound("Sounds/Feedback/Limbo/Select.opus"); }
void OnActivated() {
- if(Activated !is null) {
+ if (Activated !is null) {
Activated(this);
}
}
void OnDoubleClicked() {
- if(DoubleClicked !is null) {
+ if (DoubleClicked !is null) {
DoubleClicked(this);
}
}
void OnRightClicked() {
- if(RightClicked !is null) {
+ if (RightClicked !is null) {
RightClicked(this);
}
}
- private void RepeatTimerFired(Timer@ timer) {
+ private void RepeatTimerFired(Timer @timer) {
OnActivated();
timer.Interval = 0.1f;
}
void MouseDown(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton &&
- button != spades::ui::MouseButton::RightMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton &&
+ button != spades::ui::MouseButton::RightMouseButton) {
return;
}
@@ -97,20 +93,20 @@ namespace spades {
Pressed = true;
Hover = true;
- if(Repeat or ActivateOnMouseDown) {
+ if (Repeat or ActivateOnMouseDown) {
OnActivated();
- if(Repeat) {
+ if (Repeat) {
repeatTimer.Interval = 0.3f;
repeatTimer.Start();
}
}
}
void MouseMove(Vector2 clientPosition) {
- if(Pressed) {
+ if (Pressed) {
bool newHover = AABB2(Vector2(0.f, 0.f), Size).Contains(clientPosition);
- if(newHover != Hover) {
- if(Repeat) {
- if(newHover) {
+ if (newHover != Hover) {
+ if (Repeat) {
+ if (newHover) {
OnActivated();
repeatTimer.Interval = 0.3f;
repeatTimer.Start();
@@ -123,14 +119,14 @@ namespace spades {
}
}
void MouseUp(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton &&
- button != spades::ui::MouseButton::RightMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton &&
+ button != spades::ui::MouseButton::RightMouseButton) {
return;
}
- if(Pressed) {
+ if (Pressed) {
Pressed = false;
- if(Hover and not (Repeat or ActivateOnMouseDown)) {
- if(Toggle) {
+ if (Hover and not(Repeat or ActivateOnMouseDown)) {
+ if (Toggle) {
Toggled = not Toggled;
}
OnActivated();
@@ -142,14 +138,14 @@ namespace spades {
lastActivatePosition = clientPosition;
}
- if(Repeat and Hover){
+ if (Repeat and Hover) {
repeatTimer.Stop();
}
}
}
void MouseEnter() {
Hover = true;
- if(not Pressed) {
+ if (not Pressed) {
PlayMouseEnterSound();
}
UIElement::MouseEnter();
@@ -160,96 +156,91 @@ namespace spades {
}
void KeyDown(string key) {
- if(key == " ") {
+ if (key == " ") {
OnActivated();
}
UIElement::KeyDown(key);
}
- void KeyUp(string key) {
- UIElement::KeyUp(key);
- }
+ void KeyUp(string key) { UIElement::KeyUp(key); }
void HotKey(string key) {
- if(key == ActivateHotKey) {
+ if (key == ActivateHotKey) {
OnActivated();
}
}
-
}
- class SimpleButton: spades::ui::Button {
- SimpleButton(spades::ui::UIManager@ manager){
- super(manager);
- }
+ class SimpleButton : spades::ui::Button {
+ SimpleButton(spades::ui::UIManager @manager) { super(manager); }
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- if((Pressed && Hover) || Toggled) {
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ if ((Pressed && Hover) || Toggled) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.12f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
}
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
- if((Pressed && Hover) || Toggled) {
+ if ((Pressed && Hover) || Toggled) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.1f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.03f);
}
renderer.DrawImage(img, AABB2(pos.x, pos.y, 1.f, size.y));
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
- renderer.DrawImage(img, AABB2(pos.x+size.x-1.f, pos.y, 1.f, size.y));
- renderer.DrawImage(img, AABB2(pos.x, pos.y+size.y-1.f, size.x, 1.f));
+ renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y, 1.f, size.y));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
Vector2 txtSize = Font.Measure(Caption);
float margin = 4.f;
- Font.DrawShadow(Caption, pos + Vector2(margin, margin) +
- (size - txtSize - Vector2(margin * 2.f, margin * 2.f)) * Alignment,
- 1.f, Vector4(1,1,1,1), Vector4(0,0,0,0.4f));
+ Font.DrawShadow(Caption,
+ pos + Vector2(margin, margin) +
+ (size - txtSize - Vector2(margin * 2.f, margin * 2.f)) *
+ Alignment,
+ 1.f, Vector4(1, 1, 1, 1), Vector4(0, 0, 0, 0.4f));
}
}
-
- class CheckBox: spades::ui::Button {
- CheckBox(spades::ui::UIManager@ manager){
+ class CheckBox : spades::ui::Button {
+ CheckBox(spades::ui::UIManager @manager) {
super(manager);
this.Toggle = true;
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- if(Pressed && Hover) {
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ if (Pressed && Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.12f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.00f);
}
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
Vector2 txtSize = Font.Measure(Caption);
- Font.DrawShadow(Caption, pos + (size - txtSize) * Vector2(0.f, 0.5f) + Vector2(16.f, 0.f),
- 1.f, Vector4(1,1,1,1), Vector4(0,0,0,0.2f));
+ Font.DrawShadow(Caption,
+ pos + (size - txtSize) * Vector2(0.f, 0.5f) + Vector2(16.f, 0.f),
+ 1.f, Vector4(1, 1, 1, 1), Vector4(0, 0, 0, 0.2f));
@img = renderer.RegisterImage("Gfx/UI/CheckBox.png");
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, Toggled ? .9f : 0.6f);
renderer.DrawImage(img, AABB2(pos.x, pos.y + (size.y - 16.f) * 0.5f, 16.f, 16.f),
- AABB2(Toggled ? 16.f : 0.f, 0.f, 16.f, 16.f));
-
+ AABB2(Toggled ? 16.f : 0.f, 0.f, 16.f, 16.f));
}
}
-
- class RadioButton: spades::ui::Button {
+ class RadioButton : spades::ui::Button {
string GroupName;
- RadioButton(spades::ui::UIManager@ manager){
+ RadioButton(spades::ui::UIManager @manager) {
super(manager);
this.Toggle = true;
}
@@ -257,13 +248,14 @@ namespace spades {
this.Toggled = true;
// uncheck others
- if(GroupName.length > 0) {
- UIElement@[]@ children = this.Parent.GetChildren();
- for(uint i = 0, count = children.length; i < children.length; i++) {
- RadioButton@ btn = cast(children[i]);
- if(btn is this) continue;
- if(btn !is null) {
- if(GroupName == btn.GroupName) {
+ if (GroupName.length > 0) {
+ UIElement @[] @children = this.Parent.GetChildren();
+ for (uint i = 0, count = children.length; i < children.length; i++) {
+ RadioButton @btn = cast(children[i]);
+ if (btn is this)
+ continue;
+ if (btn !is null) {
+ if (GroupName == btn.GroupName) {
btn.Toggled = false;
}
}
@@ -276,76 +268,76 @@ namespace spades {
Button::OnActivated();
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- if(!this.Enable) {
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ if (!this.Enable) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
- } else if((Pressed && Hover) || Toggled) {
+ } else if ((Pressed && Hover) || Toggled) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.12f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
}
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
- if(!this.Enable) {
+ if (!this.Enable) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.03f);
- } if((Pressed && Hover) || Toggled) {
+ }
+ if ((Pressed && Hover) || Toggled) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.1f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.03f);
}
renderer.DrawImage(img, AABB2(pos.x, pos.y, 1.f, size.y));
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
- renderer.DrawImage(img, AABB2(pos.x+size.x-1.f, pos.y, 1.f, size.y));
- renderer.DrawImage(img, AABB2(pos.x, pos.y+size.y-1.f, size.x, 1.f));
+ renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y, 1.f, size.y));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
Vector2 txtSize = Font.Measure(Caption);
Font.DrawShadow(Caption, pos + (size - txtSize) * 0.5f + Vector2(8.f, 0.f), 1.f,
- Vector4(1,1,1,this.Enable ? 1.f : 0.4f), Vector4(0,0,0,0.4f));
+ Vector4(1, 1, 1, this.Enable ? 1.f : 0.4f), Vector4(0, 0, 0, 0.4f));
- if(Toggled) {
+ if (Toggled) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.6f);
- renderer.DrawImage(img, AABB2(pos.x + 4.f, pos.y + (size.y - 8.f) * 0.5f, 8.f, 8.f));
+ renderer.DrawImage(img,
+ AABB2(pos.x + 4.f, pos.y + (size.y - 8.f) * 0.5f, 8.f, 8.f));
}
-
-
}
}
- class Button: ButtonBase {
- private Image@ image;
+ class Button : ButtonBase {
+ private Image @image;
Vector2 Alignment = Vector2(0.5f, 0.5f);
- Button(UIManager@ manager) {
+ Button(UIManager @manager) {
super(manager);
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
@image = renderer.RegisterImage("Gfx/UI/Button.png");
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
Vector4 color = Vector4(0.2f, 0.2f, 0.2f, 0.5f);
- if(Toggled or (Pressed and Hover)) {
+ if (Toggled or(Pressed and Hover)) {
color = Vector4(0.7f, 0.7f, 0.7f, 0.9f);
- }else if(Hover) {
+ } else if (Hover) {
color = Vector4(0.4f, 0.4f, 0.4f, 0.7f);
}
- if(!IsEnabled) {
+ if (!IsEnabled) {
color.w *= 0.5f;
}
renderer.ColorNP = color;
DrawSliceImage(renderer, image, pos.x, pos.y, size.x, size.y, 12.f);
- Font@ font = this.Font;
+ Font @font = this.Font;
string text = this.Caption;
Vector2 txtSize = font.Measure(text);
Vector2 txtPos;
@@ -353,15 +345,14 @@ namespace spades {
size -= Vector2(16.f, 16.f);
txtPos = pos + (size - txtSize) * Alignment;
- if(IsEnabled){
- font.DrawShadow(text, txtPos, 1.f,
- Vector4(1.f, 1.f, 1.f, 1.f), Vector4(0.f, 0.f, 0.f, 0.4f));
- }else{
- font.DrawShadow(text, txtPos, 1.f,
- Vector4(1.f, 1.f, 1.f, 0.5f), Vector4(0.f, 0.f, 0.f, 0.1f));
+ if (IsEnabled) {
+ font.DrawShadow(text, txtPos, 1.f, Vector4(1.f, 1.f, 1.f, 1.f),
+ Vector4(0.f, 0.f, 0.f, 0.4f));
+ } else {
+ font.DrawShadow(text, txtPos, 1.f, Vector4(1.f, 1.f, 1.f, 0.5f),
+ Vector4(0.f, 0.f, 0.f, 0.1f));
}
}
-
}
}
diff --git a/Resources/Scripts/Gui/UIFramework/DropDownList.as b/Resources/Scripts/Gui/UIFramework/DropDownList.as
index 13590bf7..c5a13a34 100644
--- a/Resources/Scripts/Gui/UIFramework/DropDownList.as
+++ b/Resources/Scripts/Gui/UIFramework/DropDownList.as
@@ -1,174 +1,167 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
- namespace ui {
-
- class DropDownViewItem: spades::ui::Button {
- int index;
- DropDownViewItem(spades::ui::UIManager@ manager){
- super(manager);
- }
- void Render() {
- Renderer@ renderer = Manager.Renderer;
- Vector2 pos = ScreenPosition;
- Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- if(Hover) {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.12f);
- } else {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.00f);
- }
- renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
- if(Hover) {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
- } else {
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.00f);
- }
- renderer.DrawImage(img, AABB2(pos.x, pos.y, 1.f, size.y));
- renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
- renderer.DrawImage(img, AABB2(pos.x+size.x-1.f, pos.y, 1.f, size.y));
- renderer.DrawImage(img, AABB2(pos.x, pos.y+size.y-1.f, size.x, 1.f));
- Vector2 txtSize = Font.Measure(Caption);
- Font.DrawShadow(Caption, pos + (size - txtSize) * Vector2(0.f, 0.5f) +
- Vector2(4.f, 0.f), 1.f, Vector4(1,1,1,1), Vector4(0,0,0,0.4f));
- }
- }
-
- class DropDownViewModel: spades::ui::ListViewModel {
- spades::ui::UIManager@ manager;
- string[]@ list;
-
- DropDownListHandler@ Handler;
-
- DropDownViewModel(spades::ui::UIManager@ manager, string[]@ list) {
- @this.manager = manager;
- @this.list = list;
- }
- int NumRows {
- get { return int(list.length); }
- }
- private void ItemClicked(spades::ui::UIElement@ sender){
- Handler(cast(sender).index);
- }
- spades::ui::UIElement@ CreateElement(int row) {
- DropDownViewItem i(manager);
- i.Caption = list[row];
- i.index = row;
- @i.Activated = spades::ui::EventHandler(this.ItemClicked);
- return i;
- }
- void RecycleElement(spades::ui::UIElement@ elem) {}
- }
-
- class DropDownBackground: UIElement {
- DropDownView@ view;
- UIElement@ oldRoot;
- DropDownBackground(UIManager@ manager, DropDownView@ view) {
- super(manager);
- IsMouseInteractive = true;
- @this.view = view;
- }
- void Destroy() {
- @Parent = null;
- if(oldRoot !is null) {
- oldRoot.Enable = true;
- }
- }
- void MouseDown(MouseButton button, Vector2 clientPosition) {
- view.Destroy();
- view.handler(-1);
- }
- void Render() {
- Renderer@ renderer = Manager.Renderer;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 0.5f);
- renderer.DrawImage(img, ScreenBounds);
- UIElement::Render();
- }
- }
-
- class DropDownView: ListView {
-
- DropDownListHandler@ handler;
- DropDownBackground@ bg;
-
- DropDownView(UIManager@ manager,
- DropDownListHandler@ handler,
- string[]@ items) {
- super(manager);
- @this.handler = handler;
-
- DropDownViewModel model(manager, items);
- @model.Handler = DropDownListHandler(this.ItemActivated);
- @this.Model = model;
-
- }
-
- void Destroy() {
- bg.Destroy();
- }
-
- private void ItemActivated(int index) {
- Destroy();
- handler(index);
- }
- }
-
- funcdef void DropDownListHandler(int index);
-
- void ShowDropDownList(UIManager@ manager, float x, float y, float width,
- string[]@ items, DropDownListHandler@ handler) {
-
- DropDownView view(manager, handler, items);
- DropDownBackground bg(manager, view);
- @view.bg = bg;
-
- UIElement@ root = manager.RootElement;
- Vector2 size = root.Size;
-
- float maxHeight = size.y - y;
- float height = 24.f * float(items.length);
- if(height > maxHeight) height = maxHeight;
-
- bg.Bounds = AABB2(0.f, 0.f, size.x, size.y);
- view.Bounds = AABB2(x, y, width, height);
-
- UIElement@[]@ roots = root.GetChildren();
- /*for(uint i = 0; i < roots.length; i++) {
- UIElement@ r = roots[i];
- if(r.Enable) {
- @bg.oldRoot = r;
- r.Enable = false;
- break;
- }
- }*/
-
- root.AddChild(bg);
- bg.AddChild(view);
- }
- void ShowDropDownList(UIElement@ e,
- string[]@ items, DropDownListHandler@ handler) {
- AABB2 b = e.ScreenBounds;
- ShowDropDownList(e.Manager, b.min.x, b.max.y, b.max.x - b.min.x,
- items, handler);
- }
- }
+ namespace ui {
+
+ class DropDownViewItem : spades::ui::Button {
+ int index;
+ DropDownViewItem(spades::ui::UIManager @manager) { super(manager); }
+ void Render() {
+ Renderer @renderer = Manager.Renderer;
+ Vector2 pos = ScreenPosition;
+ Vector2 size = Size;
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ if (Hover) {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.12f);
+ } else {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.00f);
+ }
+ renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
+ if (Hover) {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.07f);
+ } else {
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.00f);
+ }
+ renderer.DrawImage(img, AABB2(pos.x, pos.y, 1.f, size.y));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
+ renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y, 1.f, size.y));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
+ Vector2 txtSize = Font.Measure(Caption);
+ Font.DrawShadow(Caption,
+ pos + (size - txtSize) * Vector2(0.f, 0.5f) + Vector2(4.f, 0.f),
+ 1.f, Vector4(1, 1, 1, 1), Vector4(0, 0, 0, 0.4f));
+ }
+ }
+
+ class DropDownViewModel : spades::ui::ListViewModel {
+ spades::ui::UIManager @manager;
+ string[] @list;
+
+ DropDownListHandler @Handler;
+
+ DropDownViewModel(spades::ui::UIManager @manager, string[] @list) {
+ @this.manager = manager;
+ @this.list = list;
+ }
+ int NumRows {
+ get { return int(list.length); }
+ }
+ private void ItemClicked(spades::ui::UIElement @sender) {
+ Handler(cast(sender).index);
+ }
+ spades::ui::UIElement @CreateElement(int row) {
+ DropDownViewItem i(manager);
+ i.Caption = list[row];
+ i.index = row;
+ @i.Activated = spades::ui::EventHandler(this.ItemClicked);
+ return i;
+ }
+ void RecycleElement(spades::ui::UIElement @elem) {}
+ }
+
+ class DropDownBackground : UIElement {
+ DropDownView @view;
+ UIElement @oldRoot;
+ DropDownBackground(UIManager @manager, DropDownView @view) {
+ super(manager);
+ IsMouseInteractive = true;
+ @this.view = view;
+ }
+ void Destroy() {
+ @Parent = null;
+ if (oldRoot !is null) {
+ oldRoot.Enable = true;
+ }
+ }
+ void MouseDown(MouseButton button, Vector2 clientPosition) {
+ view.Destroy();
+ view.handler(-1);
+ }
+ void Render() {
+ Renderer @renderer = Manager.Renderer;
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 0.5f);
+ renderer.DrawImage(img, ScreenBounds);
+ UIElement::Render();
+ }
+ }
+
+ class DropDownView : ListView {
+
+ DropDownListHandler @handler;
+ DropDownBackground @bg;
+
+ DropDownView(UIManager @manager, DropDownListHandler @handler, string[] @items) {
+ super(manager);
+ @this.handler = handler;
+
+ DropDownViewModel model(manager, items);
+ @model.Handler = DropDownListHandler(this.ItemActivated);
+ @this.Model = model;
+ }
+
+ void Destroy() { bg.Destroy(); }
+
+ private void ItemActivated(int index) {
+ Destroy();
+ handler(index);
+ }
+ }
+
+ funcdef void DropDownListHandler(int index);
+
+ void ShowDropDownList(UIManager @manager, float x, float y, float width, string[] @items,
+ DropDownListHandler @handler) {
+
+ DropDownView view(manager, handler, items);
+ DropDownBackground bg(manager, view);
+ @view.bg = bg;
+
+ UIElement @root = manager.RootElement;
+ Vector2 size = root.Size;
+
+ float maxHeight = size.y - y;
+ float height = 24.f * float(items.length);
+ if (height > maxHeight)
+ height = maxHeight;
+
+ bg.Bounds = AABB2(0.f, 0.f, size.x, size.y);
+ view.Bounds = AABB2(x, y, width, height);
+
+ UIElement @[] @roots = root.GetChildren();
+ /*for(uint i = 0; i < roots.length; i++) {
+ UIElement@ r = roots[i];
+ if(r.Enable) {
+ @bg.oldRoot = r;
+ r.Enable = false;
+ break;
+ }
+ }*/
+
+ root.AddChild(bg);
+ bg.AddChild(view);
+ }
+ void ShowDropDownList(UIElement @e, string[] @items, DropDownListHandler @handler) {
+ AABB2 b = e.ScreenBounds;
+ ShowDropDownList(e.Manager, b.min.x, b.max.y, b.max.x - b.min.x, items, handler);
+ }
+ }
}
diff --git a/Resources/Scripts/Gui/UIFramework/Field.as b/Resources/Scripts/Gui/UIFramework/Field.as
index c1ce90fa..52b9adfc 100644
--- a/Resources/Scripts/Gui/UIFramework/Field.as
+++ b/Resources/Scripts/Gui/UIFramework/Field.as
@@ -29,9 +29,9 @@ namespace spades {
string newString;
}
- class FieldBase: UIElement {
+ class FieldBase : UIElement {
bool Dragging = false;
- EventHandler@ Changed;
+ EventHandler @Changed;
string Placeholder;
int MarkPosition = 0;
int CursorPosition = 0;
@@ -39,7 +39,7 @@ namespace spades {
bool DenyNonAscii = false;
private string text;
- private FieldCommand@[] history;
+ private FieldCommand @[] history;
private int historyPos = 0; // index to insert next command
Vector4 TextColor = Vector4(1.f, 1.f, 1.f, 1.f);
@@ -50,11 +50,13 @@ namespace spades {
Vector2 TextOrigin = Vector2(0.f, 0.f);
float TextScale = 1.f;
- FieldBase(UIManager@ manager) {
+ FieldBase(UIManager @manager) {
super(manager);
IsMouseInteractive = true;
AcceptsFocus = true;
- @this.Cursor = Cursor(Manager, manager.Renderer.RegisterImage("Gfx/UI/IBeam.png"), Vector2(16.f, 16.f));
+ @this.Cursor
+ = Cursor(Manager, manager.Renderer.RegisterImage("Gfx/UI/IBeam.png"),
+ Vector2(16.f, 16.f));
}
string Text {
@@ -62,7 +64,7 @@ namespace spades {
set {
text = value;
EraseUndoHistory();
- }
+ }
}
private void EraseUndoHistory() {
@@ -71,10 +73,10 @@ namespace spades {
}
private bool CheckCharType(string s) {
- if(DenyNonAscii) {
- for(uint i = 0, len = s.length; i < len; i++) {
+ if (DenyNonAscii) {
+ for (uint i = 0, len = s.length; i < len; i++) {
int c = s[i];
- if((c & 0x80) != 0) {
+ if ((c & 0x80) != 0) {
return false;
}
}
@@ -83,84 +85,71 @@ namespace spades {
}
void OnChanged() {
- if(Changed !is null) {
+ if (Changed !is null) {
Changed(this);
}
}
int SelectionStart {
get final { return Min(MarkPosition, CursorPosition); }
- set {
- Select(value, SelectionEnd - value);
- }
+ set { Select(value, SelectionEnd - value); }
}
int SelectionEnd {
- get final {
- return Max(MarkPosition, CursorPosition);
- }
- set {
- Select(SelectionStart, value - SelectionStart);
- }
+ get final { return Max(MarkPosition, CursorPosition); }
+ set { Select(SelectionStart, value - SelectionStart); }
}
int SelectionLength {
- get final {
- return SelectionEnd - SelectionStart;
- }
- set {
- Select(SelectionStart, value);
- }
+ get final { return SelectionEnd - SelectionStart; }
+ set { Select(SelectionStart, value); }
}
string SelectedText {
- get final {
- return Text.substr(SelectionStart, SelectionLength);
- }
+ get final { return Text.substr(SelectionStart, SelectionLength); }
set {
- if(!CheckCharType(value)) {
+ if (!CheckCharType(value)) {
return;
}
FieldCommand cmd;
cmd.oldString = this.SelectedText;
- if(cmd.oldString == value) return; // no change
+ if (cmd.oldString == value)
+ return; // no change
cmd.newString = value;
cmd.index = this.SelectionStart;
RunFieldCommand(cmd, true, true);
}
}
- private void RunFieldCommand(FieldCommand@ cmd, bool autoSelect, bool addHistory) {
+ private void RunFieldCommand(FieldCommand @cmd, bool autoSelect, bool addHistory) {
text = text.substr(0, cmd.index) + cmd.newString +
- text.substr(cmd.index + cmd.oldString.length);
- if(autoSelect)
+ text.substr(cmd.index + cmd.oldString.length);
+ if (autoSelect)
Select(cmd.index, cmd.newString.length);
- if(addHistory) {
+ if (addHistory) {
history.length = historyPos;
history.insertLast(cmd);
historyPos += 1;
// limit history length
}
-
}
- private void UndoFieldCommand(FieldCommand@ cmd, bool autoSelect) {
+ private void UndoFieldCommand(FieldCommand @cmd, bool autoSelect) {
text = text.substr(0, cmd.index) + cmd.oldString +
- text.substr(cmd.index + cmd.newString.length);
- if(autoSelect)
+ text.substr(cmd.index + cmd.newString.length);
+ if (autoSelect)
Select(cmd.index, cmd.oldString.length);
-
}
private void SetHistoryPos(int index) {
int p = historyPos;
- FieldCommand@[]@ h = history;
- while(p < index) {
+ FieldCommand @[] @h = history;
+ while (p < index) {
RunFieldCommand(h[p], true, false);
p++;
}
- while(p > index) {
+ while (p > index) {
p--;
UndoFieldCommand(h[p], true);
}
@@ -168,13 +157,15 @@ namespace spades {
}
bool Undo() {
- if(historyPos == 0) return false;
+ if (historyPos == 0)
+ return false;
SetHistoryPos(historyPos - 1);
return true;
}
bool Redo() {
- if(historyPos >= int(history.length)) return false;
+ if (historyPos >= int(history.length))
+ return false;
SetHistoryPos(historyPos + 1);
return true;
}
@@ -185,61 +176,56 @@ namespace spades {
Vector2 siz = this.Size;
string text = Text;
int cursorPos = CursorPosition;
- Font@ font = this.Font;
+ Font @font = this.Font;
float width = font.Measure(text.substr(0, cursorPos)).x;
float fontHeight = font.Measure("A").y;
- return AABB2(textPos.x + width, textPos.y,
- siz.x - textPos.x - width, fontHeight);
+ return AABB2(textPos.x + width, textPos.y, siz.x - textPos.x - width,
+ fontHeight);
}
}
private int PointToCharIndex(float x) {
x -= TextOrigin.x;
- if(x < 0.f) return 0;
+ if (x < 0.f)
+ return 0;
x /= TextScale;
string text = Text;
int len = text.length;
float lastWidth = 0.f;
- Font@ font = this.Font;
+ Font @font = this.Font;
// FIXME: use binary search for better performance?
int idx = 0;
- for(int i = 1; i <= len; i++) {
+ for (int i = 1; i <= len; i++) {
int lastIdx = idx;
idx = GetByteIndexForString(text, 1, idx);
float width = font.Measure(text.substr(0, idx)).x;
- if(width > x) {
- if(x < (lastWidth + width) * 0.5f) {
+ if (width > x) {
+ if (x < (lastWidth + width) * 0.5f) {
return lastIdx;
} else {
return idx;
}
}
lastWidth = width;
- if(idx >= len) {
+ if (idx >= len) {
return len;
}
}
return len;
}
- int PointToCharIndex(Vector2 pt) {
- return PointToCharIndex(pt.x);
- }
+ int PointToCharIndex(Vector2 pt) { return PointToCharIndex(pt.x); }
- int ClampCursorPosition(int pos) {
- return Clamp(pos, 0, Text.length);
- }
+ int ClampCursorPosition(int pos) { return Clamp(pos, 0, Text.length); }
void Select(int start, int length = 0) {
MarkPosition = ClampCursorPosition(start);
CursorPosition = ClampCursorPosition(start + length);
}
- void SelectAll() {
- Select(0, Text.length);
- }
+ void SelectAll() { Select(0, Text.length); }
void BackSpace() {
- if(SelectionLength > 0) {
+ if (SelectionLength > 0) {
SelectedText = "";
} else {
int pos = CursorPosition;
@@ -252,9 +238,9 @@ namespace spades {
}
void Delete() {
- if(SelectionLength > 0) {
+ if (SelectionLength > 0) {
SelectedText = "";
- } else if(CursorPosition < int(Text.length)) {
+ } else if (CursorPosition < int(Text.length)) {
int pos = CursorPosition;
int cIdx = GetCharIndexForString(Text, CursorPosition);
int bIdx = GetByteIndexForString(Text, cIdx + 1);
@@ -265,14 +251,14 @@ namespace spades {
}
void Insert(string text) {
- if(!CheckCharType(text)) {
+ if (!CheckCharType(text)) {
return;
}
string oldText = SelectedText;
SelectedText = text;
// if text overflows, deny the insertion
- if((not FitsInBox(Text)) or (int(Text.length) > MaxLength)) {
+ if ((not FitsInBox(Text))or(int(Text.length) > MaxLength)) {
SelectedText = oldText;
return;
}
@@ -282,16 +268,16 @@ namespace spades {
}
void KeyDown(string key) {
- if(key == "BackSpace") {
+ if (key == "BackSpace") {
BackSpace();
- }else if(key == "Delete") {
+ } else if (key == "Delete") {
Delete();
- }else if(key == "Left") {
- if(Manager.IsShiftPressed) {
+ } else if (key == "Left") {
+ if (Manager.IsShiftPressed) {
int cIdx = GetCharIndexForString(Text, CursorPosition);
CursorPosition = ClampCursorPosition(GetByteIndexForString(Text, cIdx - 1));
- }else {
- if(SelectionLength == 0) {
+ } else {
+ if (SelectionLength == 0) {
int cIdx = GetCharIndexForString(Text, CursorPosition);
Select(GetByteIndexForString(Text, cIdx - 1));
} else {
@@ -299,12 +285,12 @@ namespace spades {
}
}
return;
- }else if(key == "Right") {
- if(Manager.IsShiftPressed) {
+ } else if (key == "Right") {
+ if (Manager.IsShiftPressed) {
int cIdx = GetCharIndexForString(Text, CursorPosition);
CursorPosition = ClampCursorPosition(GetByteIndexForString(Text, cIdx + 1));
- }else {
- if(SelectionLength == 0) {
+ } else {
+ if (SelectionLength == 0) {
int cIdx = GetCharIndexForString(Text, CursorPosition);
Select(GetByteIndexForString(Text, cIdx + 1));
} else {
@@ -313,60 +299,59 @@ namespace spades {
}
return;
}
- if(Manager.IsControlPressed or
- Manager.IsMetaPressed /* for OSX; Cmd + [a-z] */) {
- if(key == "A") {
+ if (Manager.IsControlPressed or Manager.IsMetaPressed /* for OSX; Cmd + [a-z] */) {
+ if (key == "A") {
SelectAll();
return;
- }else if(key == "V") {
+ } else if (key == "V") {
Manager.Paste(PasteClipboardEventHandler(this.Insert));
- }else if(key == "C") {
+ } else if (key == "C") {
Manager.Copy(this.SelectedText);
- }else if(key == "X") {
+ } else if (key == "X") {
Manager.Copy(this.SelectedText);
this.SelectedText = "";
OnChanged();
- }else if(key == "Z") {
- if(Manager.IsShiftPressed){
- if(Redo()) OnChanged();
- }else{
- if(Undo()) OnChanged();
+ } else if (key == "Z") {
+ if (Manager.IsShiftPressed) {
+ if (Redo())
+ OnChanged();
+ } else {
+ if (Undo())
+ OnChanged();
}
- }else if(key == "W") {
- if(Redo()) {
+ } else if (key == "W") {
+ if (Redo()) {
OnChanged();
}
}
}
Manager.ProcessHotKey(key);
}
- void KeyUp(string key) {
- }
+ void KeyUp(string key) {}
void KeyPress(string text) {
- if(!(Manager.IsControlPressed or
- Manager.IsMetaPressed)) {
+ if (!(Manager.IsControlPressed or Manager.IsMetaPressed)) {
Insert(text);
}
}
void MouseDown(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
Dragging = true;
- if(Manager.IsShiftPressed) {
+ if (Manager.IsShiftPressed) {
MouseMove(clientPosition);
} else {
Select(PointToCharIndex(clientPosition));
}
}
void MouseMove(Vector2 clientPosition) {
- if(Dragging) {
+ if (Dragging) {
CursorPosition = PointToCharIndex(clientPosition);
}
}
void MouseUp(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
Dragging = false;
@@ -377,36 +362,36 @@ namespace spades {
}
void DrawHighlight(float x, float y, float w, float h) {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.DrawImage(img, AABB2(x, y, w, h));
}
void DrawBeam(float x, float y, float h) {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
float pulse = sin(Manager.Time * 5.f);
pulse = abs(pulse);
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, pulse);
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.DrawImage(img, AABB2(x - 1.f, y, 2, h));
}
void DrawEditingLine(float x, float y, float w, float h) {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, .3f);
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.DrawImage(img, AABB2(x, y + h, w, 2.f));
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Font@ font = this.Font;
+ Font @font = this.Font;
Vector2 textPos = TextOrigin + pos;
string text = Text;
@@ -417,28 +402,29 @@ namespace spades {
int markStart = SelectionStart;
int markEnd = SelectionEnd;
- if(composition.length > 0){
+ if (composition.length > 0) {
this.SelectedText = "";
markStart = SelectionStart + editStart;
markEnd = markStart + editLen;
- text = text.substr(0, SelectionStart) + composition + text.substr(SelectionStart);
+ text =
+ text.substr(0, SelectionStart) + composition + text.substr(SelectionStart);
}
- if(text.length == 0){
- if(IsEnabled) {
+ if (text.length == 0) {
+ if (IsEnabled) {
font.Draw(Placeholder, textPos, TextScale, PlaceholderColor);
}
- }else{
+ } else {
font.Draw(text, textPos, TextScale, IsEnabled ? TextColor : DisabledTextColor);
}
- if(IsFocused){
+ if (IsFocused) {
float fontHeight = font.Measure("A").y;
// draw selection
int start = markStart;
int end = markEnd;
- if(end == start) {
+ if (end == start) {
float x = font.Measure(text.substr(0, start)).x;
DrawBeam(x + textPos.x, textPos.y, fontHeight);
} else {
@@ -448,7 +434,7 @@ namespace spades {
}
// draw composition underline
- if(composition.length > 0) {
+ if (composition.length > 0) {
start = SelectionStart;
end = start + composition.length;
float x1 = font.Measure(text.substr(0, start)).x;
@@ -461,9 +447,9 @@ namespace spades {
}
}
- class Field: FieldBase {
+ class Field : FieldBase {
private bool hover;
- Field(UIManager@ manager) {
+ Field(UIManager @manager) {
super(manager);
TextOrigin = Vector2(2.f, 2.f);
}
@@ -477,16 +463,16 @@ namespace spades {
}
void Render() {
// render background
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, IsFocused ? 0.3f : 0.1f);
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
- if(IsFocused) {
+ if (IsFocused) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- }else if(hover) {
+ } else if (hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.1f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.06f);
@@ -494,7 +480,8 @@ namespace spades {
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
renderer.DrawImage(img, AABB2(pos.x, pos.y + 1.f, 1.f, size.y - 2.f));
- renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y + 1.f, 1.f, size.y - 2.f));
+ renderer.DrawImage(img,
+ AABB2(pos.x + size.x - 1.f, pos.y + 1.f, 1.f, size.y - 2.f));
FieldBase::Render();
}
diff --git a/Resources/Scripts/Gui/UIFramework/Label.as b/Resources/Scripts/Gui/UIFramework/Label.as
index badd3a3f..eec4a181 100644
--- a/Resources/Scripts/Gui/UIFramework/Label.as
+++ b/Resources/Scripts/Gui/UIFramework/Label.as
@@ -23,29 +23,27 @@
namespace spades {
namespace ui {
- class Label: UIElement {
+ class Label : UIElement {
string Text;
Vector4 BackgroundColor = Vector4(0, 0, 0, 0);
Vector4 TextColor = Vector4(1, 1, 1, 1);
Vector2 Alignment = Vector2(0.f, 0.0f);
float TextScale = 1.f;
- Label(UIManager@ manager) {
- super(manager);
- }
+ Label(UIManager @manager) { super(manager); }
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- if(BackgroundColor.w > 0.f) {
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ if (BackgroundColor.w > 0.f) {
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.ColorNP = BackgroundColor;
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
}
- if(Text.length > 0) {
- Font@ font = this.Font;
+ if (Text.length > 0) {
+ Font @font = this.Font;
string text = this.Text;
Vector2 txtSize = font.Measure(text) * TextScale;
Vector2 txtPos;
diff --git a/Resources/Scripts/Gui/UIFramework/ListView.as b/Resources/Scripts/Gui/UIFramework/ListView.as
index 3193af1f..1077cad6 100644
--- a/Resources/Scripts/Gui/UIFramework/ListView.as
+++ b/Resources/Scripts/Gui/UIFramework/ListView.as
@@ -24,21 +24,23 @@ namespace spades {
namespace ui {
class ListViewModel {
- int NumRows { get { return 0; } }
- UIElement@ CreateElement(int row) { return null; }
- void RecycleElement(UIElement@ elem) {}
+ int NumRows {
+ get { return 0; }
+ }
+ UIElement @CreateElement(int row) { return null; }
+ void RecycleElement(UIElement @elem) {}
}
/** Simple virtual stack panel implementation. */
- class ListViewBase: UIElement {
- private ScrollBar@ scrollBar;
- private ListViewModel@ model;
+ class ListViewBase : UIElement {
+ private ScrollBar @scrollBar;
+ private ListViewModel @model;
float RowHeight = 24.f;
float ScrollBarWidth = 16.f;
private UIElementDeque items;
private int loadedStartIndex = 0;
- ListViewBase(UIManager@ manager) {
+ ListViewBase(UIManager @manager) {
super(manager);
@scrollBar = ScrollBar(Manager);
scrollBar.Bounds = AABB2();
@@ -49,20 +51,14 @@ namespace spades {
@model = ListViewModel();
}
- private void OnScrolled(UIElement@ sender) {
- Layout();
- }
+ private void OnScrolled(UIElement @sender) { Layout(); }
int NumVisibleRows {
- get final {
- return int(floor(Size.y / RowHeight));
- }
+ get final { return int(floor(Size.y / RowHeight)); }
}
int MaxTopRowIndex {
- get final {
- return Max(0, model.NumRows - NumVisibleRows);
- }
+ get final { return Max(0, model.NumRows - NumVisibleRows); }
}
int TopRowIndex {
@@ -90,33 +86,33 @@ namespace spades {
int loadedStart = loadedStartIndex;
int loadedEnd = loadedStartIndex + items.Count;
- if(items.Count == 0 or visibleStart >= loadedEnd or visibleEnd <= loadedStart) {
+ if (items.Count == 0 or visibleStart >= loadedEnd or visibleEnd <= loadedStart) {
// full reload
UnloadAll();
- for(int i = visibleStart; i < visibleEnd; i++) {
+ for (int i = visibleStart; i < visibleEnd; i++) {
items.PushBack(model.CreateElement(i));
AddChild(items.Back);
}
loadedStartIndex = visibleStart;
} else {
- while(loadedStart < visibleStart) {
+ while (loadedStart < visibleStart) {
RemoveChild(items.Front);
model.RecycleElement(items.Front);
items.PopFront();
loadedStart++;
}
- while(loadedEnd > visibleEnd) {
+ while (loadedEnd > visibleEnd) {
RemoveChild(items.Back);
model.RecycleElement(items.Back);
items.PopBack();
loadedEnd--;
}
- while(visibleStart < loadedStart) {
+ while (visibleStart < loadedStart) {
loadedStart--;
items.PushFront(model.CreateElement(loadedStart));
AddChild(items.Front);
}
- while(visibleEnd > loadedEnd) {
+ while (visibleEnd > loadedEnd) {
items.PushBack(model.CreateElement(loadedEnd));
AddChild(items.Back);
loadedEnd++;
@@ -125,11 +121,11 @@ namespace spades {
}
// relayout items
- UIElementDeque@ items = this.items;
+ UIElementDeque @items = this.items;
int count = items.Count;
float y = 0.f;
float w = ItemWidth;
- for(int i = 0; i < count; i++){
+ for (int i = 0; i < count; i++) {
items[i].Bounds = AABB2(0.f, y, w, RowHeight);
y += RowHeight;
}
@@ -139,14 +135,10 @@ namespace spades {
}
float ItemWidth {
- get {
- return Size.x - ScrollBarWidth;
- }
+ get { return Size.x - ScrollBarWidth; }
}
- void MouseWheel(float delta) {
- scrollBar.ScrollBy(delta);
- }
+ void MouseWheel(float delta) { scrollBar.ScrollBy(delta); }
void Reload() {
UnloadAll();
@@ -154,19 +146,19 @@ namespace spades {
}
private void UnloadAll() {
- UIElementDeque@ items = this.items;
+ UIElementDeque @items = this.items;
int count = items.Count;
- for(int i = 0; i < count; i++){
+ for (int i = 0; i < count; i++) {
RemoveChild(items[i]);
model.RecycleElement(items[i]);
}
items.Clear();
}
- ListViewModel@ Model {
+ ListViewModel @Model {
get final { return model; }
set {
- if(model is value) {
+ if (model is value) {
return;
}
UnloadAll();
@@ -175,26 +167,19 @@ namespace spades {
}
}
- void ScrollToTop() {
- scrollBar.ScrollTo(0.0);
- }
+ void ScrollToTop() { scrollBar.ScrollTo(0.0); }
- void ScrollToEnd() {
- scrollBar.ScrollTo(scrollBar.MaxValue);
- }
+ void ScrollToEnd() { scrollBar.ScrollTo(scrollBar.MaxValue); }
}
-
- class ListView: ListViewBase {
- ListView(UIManager@ manager) {
- super(manager);
- }
+ class ListView : ListViewBase {
+ ListView(UIManager @manager) { super(manager); }
void Render() {
// render background
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 0.2f);
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, size.y));
@@ -202,7 +187,8 @@ namespace spades {
renderer.DrawImage(img, AABB2(pos.x, pos.y, size.x, 1.f));
renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y - 1.f, size.x, 1.f));
renderer.DrawImage(img, AABB2(pos.x, pos.y + 1.f, 1.f, size.y - 2.f));
- renderer.DrawImage(img, AABB2(pos.x + size.x - 1.f, pos.y + 1.f, 1.f, size.y - 2.f));
+ renderer.DrawImage(img,
+ AABB2(pos.x + size.x - 1.f, pos.y + 1.f, 1.f, size.y - 2.f));
ListViewBase::Render();
}
diff --git a/Resources/Scripts/Gui/UIFramework/ScrollBar.as b/Resources/Scripts/Gui/UIFramework/ScrollBar.as
index e02ae8a7..9480eb04 100644
--- a/Resources/Scripts/Gui/UIFramework/ScrollBar.as
+++ b/Resources/Scripts/Gui/UIFramework/ScrollBar.as
@@ -23,30 +23,23 @@
namespace spades {
namespace ui {
- enum ScrollBarOrientation {
- Horizontal,
- Vertical
- }
+ enum ScrollBarOrientation { Horizontal, Vertical }
- class ScrollBarBase: UIElement {
+ class ScrollBarBase : UIElement {
double MinValue = 0.0;
double MaxValue = 100.0;
double Value = 0.0;
double SmallChange = 1.0;
double LargeChange = 20.0;
- EventHandler@ Changed;
+ EventHandler @Changed;
- ScrollBarBase(UIManager@ manager) {
- super(manager);
- }
+ ScrollBarBase(UIManager @manager) { super(manager); }
- void ScrollBy(double delta) {
- ScrollTo(Value + delta);
- }
+ void ScrollBy(double delta) { ScrollTo(Value + delta); }
void ScrollTo(double val) {
val = Clamp(val, MinValue, MaxValue);
- if(val == Value) {
+ if (val == Value) {
return;
}
Value = val;
@@ -54,39 +47,37 @@ namespace spades {
}
void OnChanged() {
- if(Changed !is null) {
+ if (Changed !is null) {
Changed(this);
}
}
ScrollBarOrientation Orientation {
get {
- if(Size.x > Size.y) {
+ if (Size.x > Size.y) {
return spades::ui::ScrollBarOrientation::Horizontal;
} else {
return spades::ui::ScrollBarOrientation::Vertical;
}
}
}
-
-
}
- class ScrollBarTrackBar: UIElement {
- private ScrollBar@ scrollBar;
+ class ScrollBarTrackBar : UIElement {
+ private ScrollBar @scrollBar;
private bool dragging = false;
private double startValue;
private float startCursorPos;
private bool hover = false;
- ScrollBarTrackBar(ScrollBar@ scrollBar) {
+ ScrollBarTrackBar(ScrollBar @scrollBar) {
super(scrollBar.Manager);
@this.scrollBar = scrollBar;
IsMouseInteractive = true;
}
private float GetCursorPos(Vector2 pos) {
- if(scrollBar.Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
+ if (scrollBar.Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
return pos.x + Position.x;
} else {
return pos.y + Position.y;
@@ -94,10 +85,10 @@ namespace spades {
}
void MouseDown(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
- if(scrollBar.TrackBarMovementRange < 0.0001f) {
+ if (scrollBar.TrackBarMovementRange < 0.0001f) {
// immobile
return;
}
@@ -106,16 +97,16 @@ namespace spades {
startCursorPos = GetCursorPos(clientPosition);
}
void MouseMove(Vector2 clientPosition) {
- if(dragging) {
+ if (dragging) {
double val = startValue;
float delta = GetCursorPos(clientPosition) - startCursorPos;
val += delta * (scrollBar.MaxValue - scrollBar.MinValue) /
- double(scrollBar.TrackBarMovementRange);
+ double(scrollBar.TrackBarMovementRange);
scrollBar.ScrollTo(val);
}
}
void MouseUp(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
dragging = false;
@@ -130,18 +121,20 @@ namespace spades {
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
- if(scrollBar.Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
- pos.y += 4.f; size.y -= 8.f;
+ if (scrollBar.Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
+ pos.y += 4.f;
+ size.y -= 8.f;
} else {
- pos.x += 4.f; size.x -= 8.f;
+ pos.x += 4.f;
+ size.x -= 8.f;
}
- if(dragging) {
+ if (dragging) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.4f);
} else if (hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
@@ -152,11 +145,11 @@ namespace spades {
}
}
- class ScrollBarFill: ButtonBase {
- private ScrollBarBase@ scrollBar;
+ class ScrollBarFill : ButtonBase {
+ private ScrollBarBase @scrollBar;
private bool up;
- ScrollBarFill(ScrollBarBase@ scrollBar, bool up) {
+ ScrollBarFill(ScrollBarBase @scrollBar, bool up) {
super(scrollBar.Manager);
@this.scrollBar = scrollBar;
IsMouseInteractive = true;
@@ -177,12 +170,12 @@ namespace spades {
}
}
- class ScrollBarButton: ButtonBase {
- private ScrollBar@ scrollBar;
+ class ScrollBarButton : ButtonBase {
+ private ScrollBar @scrollBar;
private bool up;
- private Image@ image;
+ private Image @image;
- ScrollBarButton(ScrollBar@ scrollBar, bool up) {
+ ScrollBarButton(ScrollBar @scrollBar, bool up) {
super(scrollBar.Manager);
@this.scrollBar = scrollBar;
IsMouseInteractive = true;
@@ -200,14 +193,14 @@ namespace spades {
}
void Render() {
- Renderer@ r = Manager.Renderer;
+ Renderer @r = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
pos += size * 0.5f;
float siz = image.Width * 0.5f;
AABB2 srcRect(0.f, 0.f, image.Width, image.Height);
- if(Pressed and Hover) {
+ if (Pressed and Hover) {
r.ColorNP = Vector4(1.f, 1.f, 1.f, 0.6f);
} else if (Hover) {
r.ColorNP = Vector4(1.f, 1.f, 1.f, 0.4f);
@@ -215,41 +208,41 @@ namespace spades {
r.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
}
- if(scrollBar.Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
- if(up) {
- r.DrawImage(image,
- Vector2(pos.x + siz, pos.y - siz), Vector2(pos.x + siz, pos.y + siz), Vector2(pos.x - siz, pos.y - siz),
- srcRect);
+ if (scrollBar.Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
+ if (up) {
+ r.DrawImage(image, Vector2(pos.x + siz, pos.y - siz),
+ Vector2(pos.x + siz, pos.y + siz),
+ Vector2(pos.x - siz, pos.y - siz), srcRect);
} else {
- r.DrawImage(image,
- Vector2(pos.x - siz, pos.y + siz), Vector2(pos.x - siz, pos.y - siz), Vector2(pos.x + siz, pos.y + siz),
- srcRect);
+ r.DrawImage(image, Vector2(pos.x - siz, pos.y + siz),
+ Vector2(pos.x - siz, pos.y - siz),
+ Vector2(pos.x + siz, pos.y + siz), srcRect);
}
} else {
- if(up) {
- r.DrawImage(image,
- Vector2(pos.x + siz, pos.y + siz), Vector2(pos.x - siz, pos.y + siz), Vector2(pos.x + siz, pos.y - siz),
- srcRect);
+ if (up) {
+ r.DrawImage(image, Vector2(pos.x + siz, pos.y + siz),
+ Vector2(pos.x - siz, pos.y + siz),
+ Vector2(pos.x + siz, pos.y - siz), srcRect);
} else {
- r.DrawImage(image,
- Vector2(pos.x - siz, pos.y - siz), Vector2(pos.x + siz, pos.y - siz), Vector2(pos.x - siz, pos.y + siz),
- srcRect);
+ r.DrawImage(image, Vector2(pos.x - siz, pos.y - siz),
+ Vector2(pos.x + siz, pos.y - siz),
+ Vector2(pos.x - siz, pos.y + siz), srcRect);
}
}
}
}
- class ScrollBar: ScrollBarBase {
+ class ScrollBar : ScrollBarBase {
- private ScrollBarTrackBar@ trackBar;
- private ScrollBarFill@ fill1;
- private ScrollBarFill@ fill2;
- private ScrollBarButton@ button1;
- private ScrollBarButton@ button2;
+ private ScrollBarTrackBar @trackBar;
+ private ScrollBarFill @fill1;
+ private ScrollBarFill @fill2;
+ private ScrollBarButton @button1;
+ private ScrollBarButton @button2;
private float ButtonSize = 16.f;
- ScrollBar(UIManager@ manager) {
+ ScrollBar(UIManager @manager) {
super(manager);
@trackBar = ScrollBarTrackBar(this);
@@ -270,18 +263,10 @@ namespace spades {
AddChild(button2);
}
- private void LargeDown(UIElement@ e) {
- ScrollBy(-LargeChange);
- }
- private void LargeUp(UIElement@ e) {
- ScrollBy(LargeChange);
- }
- private void SmallDown(UIElement@ e) {
- ScrollBy(-SmallChange);
- }
- private void SmallUp(UIElement@ e) {
- ScrollBy(SmallChange);
- }
+ private void LargeDown(UIElement @e) { ScrollBy(-LargeChange); }
+ private void LargeUp(UIElement @e) { ScrollBy(LargeChange); }
+ private void SmallDown(UIElement @e) { ScrollBy(-SmallChange); }
+ private void SmallUp(UIElement @e) { ScrollBy(SmallChange); }
void OnChanged() {
Layout();
@@ -293,17 +278,19 @@ namespace spades {
Vector2 size = Size;
float tPos = TrackBarPosition;
float tLen = TrackBarLength;
- if(Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
+ if (Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
button1.Bounds = AABB2(0.f, 0.f, ButtonSize, size.y);
button2.Bounds = AABB2(size.x - ButtonSize, 0.f, ButtonSize, size.y);
fill1.Bounds = AABB2(ButtonSize, 0.f, tPos - ButtonSize, size.y);
- fill2.Bounds = AABB2(tPos + tLen, 0.f, size.x - ButtonSize - tPos - tLen, size.y);
+ fill2.Bounds =
+ AABB2(tPos + tLen, 0.f, size.x - ButtonSize - tPos - tLen, size.y);
trackBar.Bounds = AABB2(tPos, 0.f, tLen, size.y);
} else {
button1.Bounds = AABB2(0.f, 0.f, size.x, ButtonSize);
button2.Bounds = AABB2(0.f, size.y - ButtonSize, size.x, ButtonSize);
fill1.Bounds = AABB2(0.f, ButtonSize, size.x, tPos - ButtonSize);
- fill2.Bounds = AABB2(0.f, tPos + tLen, size.x, size.y - ButtonSize - tPos - tLen);
+ fill2.Bounds =
+ AABB2(0.f, tPos + tLen, size.x, size.y - ButtonSize - tPos - tLen);
trackBar.Bounds = AABB2(0.f, tPos, size.x, tLen);
}
}
@@ -315,7 +302,7 @@ namespace spades {
float Length {
get {
- if(Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
+ if (Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
return Size.x;
} else {
return Size.y;
@@ -324,30 +311,29 @@ namespace spades {
}
float TrackBarAreaLength {
- get {
- return Length - ButtonSize - ButtonSize;
- }
+ get { return Length - ButtonSize - ButtonSize; }
}
float TrackBarLength {
get {
return Max(TrackBarAreaLength *
- (LargeChange / (MaxValue - MinValue + LargeChange)), 40.f);
+ (LargeChange / (MaxValue - MinValue + LargeChange)),
+ 40.f);
}
}
float TrackBarMovementRange {
- get {
- return TrackBarAreaLength - TrackBarLength;
- }
+ get { return TrackBarAreaLength - TrackBarLength; }
}
float TrackBarPosition {
get {
- if(MaxValue == MinValue) {
+ if (MaxValue == MinValue) {
return ButtonSize;
}
- return float((Value - MinValue) / (MaxValue - MinValue) * TrackBarMovementRange) + ButtonSize;
+ return float((Value - MinValue) / (MaxValue - MinValue) *
+ TrackBarMovementRange) +
+ ButtonSize;
}
}
diff --git a/Resources/Scripts/Gui/UIFramework/Slider.as b/Resources/Scripts/Gui/UIFramework/Slider.as
index 263e09ea..8400a808 100644
--- a/Resources/Scripts/Gui/UIFramework/Slider.as
+++ b/Resources/Scripts/Gui/UIFramework/Slider.as
@@ -23,25 +23,23 @@
namespace spades {
namespace ui {
- class SliderKnob: UIElement {
- private Slider@ slider;
+ class SliderKnob : UIElement {
+ private Slider @slider;
private bool dragging = false;
private double startValue;
private float startCursorPos;
private bool hover = false;
- SliderKnob(Slider@ slider) {
+ SliderKnob(Slider @slider) {
super(slider.Manager);
@this.slider = slider;
IsMouseInteractive = true;
}
- private float GetCursorPos(Vector2 pos) {
- return pos.x + Position.x;
- }
+ private float GetCursorPos(Vector2 pos) { return pos.x + Position.x; }
void MouseDown(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
dragging = true;
@@ -49,16 +47,16 @@ namespace spades {
startCursorPos = GetCursorPos(clientPosition);
}
void MouseMove(Vector2 clientPosition) {
- if(dragging) {
+ if (dragging) {
double val = startValue;
float delta = GetCursorPos(clientPosition) - startCursorPos;
val += delta * (slider.MaxValue - slider.MinValue) /
- double(slider.TrackBarMovementRange);
+ double(slider.TrackBarMovementRange);
slider.ScrollTo(val);
}
}
void MouseUp(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
dragging = false;
@@ -73,34 +71,31 @@ namespace spades {
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
if (hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.5f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.3f);
}
- renderer.DrawImage(img,
- AABB2(pos.x + size.x * 0.5f - 3.f, pos.y,
- 6.f, size.y));
+ renderer.DrawImage(img, AABB2(pos.x + size.x * 0.5f - 3.f, pos.y, 6.f, size.y));
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 0.6f);
- renderer.DrawImage(img,
- AABB2(pos.x + size.x * 0.5f - 2.f, pos.y + 1.f,
- 4.f, size.y - 2.f));
+ renderer.DrawImage(
+ img, AABB2(pos.x + size.x * 0.5f - 2.f, pos.y + 1.f, 4.f, size.y - 2.f));
}
}
- class Slider: ScrollBarBase {
+ class Slider : ScrollBarBase {
- private SliderKnob@ knob;
- private ScrollBarFill@ fill1;
- private ScrollBarFill@ fill2;
+ private SliderKnob @knob;
+ private ScrollBarFill @fill1;
+ private ScrollBarFill @fill2;
- Slider(UIManager@ manager) {
+ Slider(UIManager @manager) {
super(manager);
@knob = SliderKnob(this);
@@ -112,21 +107,18 @@ namespace spades {
@fill2 = ScrollBarFill(this, true);
@fill2.Activated = EventHandler(this.LargeUp);
AddChild(fill2);
-
}
- private void LargeDown(UIElement@ e) {
- ScrollBy(-LargeChange);
- }
- private void LargeUp(UIElement@ e) {
+ private void LargeDown(UIElement @e) { ScrollBy(-LargeChange); }
+ private void LargeUp(UIElement @e) {
ScrollBy(LargeChange);
- }/*
- private void SmallDown(UIElement@ e) {
- ScrollBy(-SmallChange);
- }
- private void SmallUp(UIElement@ e) {
- ScrollBy(SmallChange);
- }*/
+ } /*
+ private void SmallDown(UIElement@ e) {
+ ScrollBy(-SmallChange);
+ }
+ private void SmallUp(UIElement@ e) {
+ ScrollBy(SmallChange);
+ }*/
void OnChanged() {
Layout();
@@ -150,7 +142,7 @@ namespace spades {
float Length {
get {
- if(Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
+ if (Orientation == spades::ui::ScrollBarOrientation::Horizontal) {
return Size.x;
} else {
return Size.y;
@@ -159,46 +151,38 @@ namespace spades {
}
float TrackBarAreaLength {
- get {
- return Length;
- }
+ get { return Length; }
}
float TrackBarLength {
- get {
- return 16.f;
- }
+ get { return 16.f; }
}
float TrackBarMovementRange {
- get {
- return TrackBarAreaLength - TrackBarLength;
- }
+ get { return TrackBarAreaLength - TrackBarLength; }
}
float TrackBarPosition {
get {
- return float((Value - MinValue) / (MaxValue - MinValue) * TrackBarMovementRange);
+ return float((Value - MinValue) / (MaxValue - MinValue) *
+ TrackBarMovementRange);
}
}
void Render() {
Layout();
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.1f);
- renderer.DrawImage(img,
- AABB2(pos.x, pos.y + size.y * 0.5f - 3.f,
- size.x, 6.f));
+ renderer.DrawImage(img, AABB2(pos.x, pos.y + size.y * 0.5f - 3.f, size.x, 6.f));
renderer.ColorNP = Vector4(0.f, 0.f, 0.f, 0.2f);
- renderer.DrawImage(img,
- AABB2(pos.x + 1.f, pos.y + size.y * 0.5f - 2.f,
- size.x - 2.f, 4.f));
+ renderer.DrawImage(
+ img, AABB2(pos.x + 1.f, pos.y + size.y * 0.5f - 2.f, size.x - 2.f, 4.f));
ScrollBarBase::Render();
}
diff --git a/Resources/Scripts/Gui/UIFramework/TabStrip.as b/Resources/Scripts/Gui/UIFramework/TabStrip.as
index e7f9698b..9f43da3e 100644
--- a/Resources/Scripts/Gui/UIFramework/TabStrip.as
+++ b/Resources/Scripts/Gui/UIFramework/TabStrip.as
@@ -23,10 +23,10 @@
namespace spades {
namespace ui {
- class SimpleTabStripItem: ButtonBase {
- UIElement@ linkedElement;
+ class SimpleTabStripItem : ButtonBase {
+ UIElement @linkedElement;
- SimpleTabStripItem(UIManager@ manager, UIElement@ linkedElement) {
+ SimpleTabStripItem(UIManager @manager, UIElement @linkedElement) {
super(manager);
@this.linkedElement = linkedElement;
}
@@ -39,15 +39,15 @@ namespace spades {
void Render() {
this.Toggled = linkedElement.Visible;
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
Vector4 textColor(0.9f, 0.9f, 0.9f, 1.0f);
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
- if(Toggled) {
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
+ if (Toggled) {
renderer.ColorNP = Vector4(0.9f, 0.9f, 0.9f, 1.0f);
textColor = Vector4(0.0f, 0.0f, 0.0f, 1.0f);
- } else if(Hover) {
+ } else if (Hover) {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.3f);
} else {
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.0f);
@@ -59,33 +59,31 @@ namespace spades {
}
}
- class SimpleTabStrip: UIElement {
+ class SimpleTabStrip : UIElement {
private float nextX = 0.f;
- EventHandler@ Changed;
+ EventHandler @Changed;
- SimpleTabStrip(UIManager@ manager) {
- super(manager);
- }
+ SimpleTabStrip(UIManager @manager) { super(manager); }
private void OnChanged() {
- if(Changed !is null) {
+ if (Changed !is null) {
Changed(this);
}
}
- private void OnItemActivated(UIElement@ sender) {
- SimpleTabStripItem@ item = cast(sender);
- UIElement@ linked = item.linkedElement;
- UIElement@[]@ children = this.GetChildren();
- for(uint i = 0, count = children.length; i < count; i++) {
- SimpleTabStripItem@ otherItem = cast(children[i]);
+ private void OnItemActivated(UIElement @sender) {
+ SimpleTabStripItem @item = cast(sender);
+ UIElement @linked = item.linkedElement;
+ UIElement @[] @children = this.GetChildren();
+ for (uint i = 0, count = children.length; i < count; i++) {
+ SimpleTabStripItem @otherItem = cast(children[i]);
otherItem.linkedElement.Visible = (otherItem.linkedElement is linked);
}
OnChanged();
}
- void AddItem(string title, UIElement@ linkedElement) {
+ void AddItem(string title, UIElement @linkedElement) {
SimpleTabStripItem item(this.Manager, linkedElement);
item.Caption = title;
float w = this.Font.Measure(title).x + 18.f;
@@ -95,20 +93,18 @@ namespace spades {
@item.Activated = EventHandler(this.OnItemActivated);
this.AddChild(item);
-
}
void Render() {
UIElement::Render();
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.ColorNP = Vector4(0.9f, 0.9f, 0.9f, 1.0f);
renderer.DrawImage(img, AABB2(pos.x, pos.y + 24.f, size.x, 1.f));
}
-
}
}
diff --git a/Resources/Scripts/Gui/UIFramework/TextViewer.as b/Resources/Scripts/Gui/UIFramework/TextViewer.as
index 473fcbc8..f734afda 100644
--- a/Resources/Scripts/Gui/UIFramework/TextViewer.as
+++ b/Resources/Scripts/Gui/UIFramework/TextViewer.as
@@ -23,31 +23,28 @@
namespace spades {
namespace ui {
class TextViewerSelectionState {
- UIElement@ FocusElement;
+ UIElement @FocusElement;
int MarkPosition = 0;
int CursorPosition = 0;
int SelectionStart {
- get final {
- return Min(MarkPosition, CursorPosition);
- }
+ get final { return Min(MarkPosition, CursorPosition); }
}
int SelectionEnd {
- get final {
- return Max(MarkPosition, CursorPosition);
- }
+ get final { return Max(MarkPosition, CursorPosition); }
}
}
- class TextViewerItemUI: UIElement {
+ class TextViewerItemUI : UIElement {
private string text;
private Vector4 textColor;
private int index;
- private TextViewerSelectionState@ selection;
+ private TextViewerSelectionState @selection;
- TextViewerItemUI(UIManager@ manager, TextViewerItem@ item, TextViewerSelectionState@ selection) {
+ TextViewerItemUI(UIManager @manager, TextViewerItem @item,
+ TextViewerSelectionState @selection) {
super(manager);
text = item.Text;
@@ -57,21 +54,21 @@ namespace spades {
}
void DrawHighlight(float x, float y, float w, float h) {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 0.2f);
- Image@ img = renderer.RegisterImage("Gfx/White.tga");
+ Image @img = renderer.RegisterImage("Gfx/White.tga");
renderer.DrawImage(img, AABB2(x, y, w, h));
}
void Render() {
- Renderer@ renderer = Manager.Renderer;
+ Renderer @renderer = Manager.Renderer;
Vector2 pos = ScreenPosition;
Vector2 size = Size;
float textScale = 1.0f;
- Font@ font = this.Font;
+ Font @font = this.Font;
- if(text.length > 0) {
+ if (text.length > 0) {
Vector2 txtSize = font.Measure(text) * textScale;
Vector2 txtPos;
txtPos = pos + (size - txtSize) * Vector2(0.0f, 0.0f);
@@ -89,7 +86,7 @@ namespace spades {
if (end > int(text.length) + 1) {
end = int(text.length) + 1;
}
- if(end > start) {
+ if (end > start) {
float x1 = font.Measure(text.substr(0, start)).x;
float x2 = font.Measure(text.substr(0, end)).x;
@@ -115,12 +112,12 @@ namespace spades {
}
}
- class TextViewerModel: ListViewModel {
- UIManager@ manager;
- TextViewerItem@[] lines = {};
- Font@ font;
+ class TextViewerModel : ListViewModel {
+ UIManager @manager;
+ TextViewerItem @[] lines = {};
+ Font @font;
float width;
- TextViewerSelectionState@ selection;
+ TextViewerSelectionState @selection;
int contentLength;
void AddLine(string text, Vector4 color) {
@@ -136,13 +133,13 @@ namespace spades {
bool charMode = false;
while (startPos < len) {
int nextPos = pos + 1;
- if(charMode) {
+ if (charMode) {
// skip to the next UTF-8 character boundary
- while(nextPos < len && ((text[nextPos] & 0x80) != 0) &&
- ((text[nextPos] & 0xc0) != 0xc0))
+ while (nextPos < len && ((text[nextPos] & 0x80) != 0) &&
+ ((text[nextPos] & 0xc0) != 0xc0))
nextPos++;
} else {
- while(nextPos < len && text[nextPos] != 0x20)
+ while (nextPos < len && text[nextPos] != 0x20)
nextPos++;
}
if (font.Measure(text.substr(startPos, nextPos - startPos)).x > width) {
@@ -154,7 +151,8 @@ namespace spades {
}
continue;
} else {
- lines.insertLast(TextViewerItem(text.substr(startPos, pos - startPos), color, contentLength));
+ lines.insertLast(TextViewerItem(text.substr(startPos, pos - startPos),
+ color, contentLength));
contentLength += pos - startPos;
startPos = pos;
while (startPos < len && text[startPos] == 0x20) {
@@ -167,50 +165,58 @@ namespace spades {
} else {
pos = nextPos;
if (nextPos >= len) {
- lines.insertLast(TextViewerItem(text.substr(startPos, nextPos - startPos), color, contentLength));
+ lines.insertLast(TextViewerItem(
+ text.substr(startPos, nextPos - startPos), color, contentLength));
contentLength += nextPos - startPos + 1;
break;
}
}
}
-
}
- TextViewerModel(UIManager@ manager, string text, Font@ font, float width, TextViewerSelectionState@ selection) {
+ TextViewerModel(UIManager @manager, string text, Font @font, float width,
+ TextViewerSelectionState @selection) {
@this.manager = manager;
@this.font = font;
this.width = width;
@this.selection = selection;
- string[]@ lines = text.split("\n");
+ string[] @lines = text.split("\n");
for (uint i = 0; i < lines.length; i++)
AddLine(lines[i], Vector4(1.f, 1.f, 1.f, 1.f));
}
- int NumRows { get { return int(lines.length); } }
+ int NumRows {
+ get { return int(lines.length); }
+ }
- UIElement@ CreateElement(int row) {
+ UIElement @CreateElement(int row) {
return TextViewerItemUI(manager, lines[row], selection);
}
- void RecycleElement(UIElement@ elem) {}
+ void RecycleElement(UIElement @elem) {}
}
- class TextViewer: ListViewBase {
+ class TextViewer : ListViewBase {
private string text;
- private TextViewerModel@ textmodel;
+ private TextViewerModel @textmodel;
private TextViewerSelectionState selection;
private bool dragging = false;
- TextViewer(UIManager@ manager) {
+ TextViewer(UIManager @manager) {
super(manager);
@selection.FocusElement = this;
AcceptsFocus = true;
IsMouseInteractive = true;
- @this.Cursor = Cursor(Manager, manager.Renderer.RegisterImage("Gfx/UI/IBeam.png"), Vector2(16.f, 16.f));
+ @this.Cursor
+ = Cursor(Manager, manager.Renderer.RegisterImage("Gfx/UI/IBeam.png"),
+ Vector2(16.f, 16.f));
}
- /** Sets the displayed text. Ensure TextViewer.Font is not null before setting this proeprty. */
+ /**
+ * Sets the displayed text. Ensure TextViewer.Font is not null before
+ * setting this proeprty.
+ */
string Text {
get final { return text; }
set {
@@ -232,27 +238,27 @@ namespace spades {
float x = clientPosition.x;
string text = textmodel.lines[line].Text;
int lineStartIndex = textmodel.lines[line].Index;
- if(x < 0.f) {
+ if (x < 0.f) {
return lineStartIndex;
}
int len = text.length;
float lastWidth = 0.f;
- Font@ font = this.Font;
+ Font @font = this.Font;
// FIXME: use binary search for better performance?
int idx = 0;
- for(int i = 1; i <= len; i++) {
+ for (int i = 1; i <= len; i++) {
int lastIdx = idx;
idx = GetByteIndexForString(text, 1, idx);
float width = font.Measure(text.substr(0, idx)).x;
- if(width > x) {
- if(x < (lastWidth + width) * 0.5f) {
+ if (width > x) {
+ if (x < (lastWidth + width) * 0.5f) {
return lastIdx + lineStartIndex;
} else {
return idx + lineStartIndex;
}
}
lastWidth = width;
- if(idx >= len) {
+ if (idx >= len) {
return len + lineStartIndex;
}
}
@@ -260,33 +266,33 @@ namespace spades {
}
void MouseDown(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
dragging = true;
- if(Manager.IsShiftPressed) {
+ if (Manager.IsShiftPressed) {
MouseMove(clientPosition);
} else {
- selection.MarkPosition = selection.CursorPosition = PointToCharIndex(clientPosition);
+ selection.MarkPosition = selection.CursorPosition =
+ PointToCharIndex(clientPosition);
}
}
void MouseMove(Vector2 clientPosition) {
- if(dragging) {
+ if (dragging) {
selection.CursorPosition = PointToCharIndex(clientPosition);
}
}
void MouseUp(MouseButton button, Vector2 clientPosition) {
- if(button != spades::ui::MouseButton::LeftMouseButton) {
+ if (button != spades::ui::MouseButton::LeftMouseButton) {
return;
}
dragging = false;
}
void KeyDown(string key) {
- if(Manager.IsControlPressed or
- Manager.IsMetaPressed /* for OSX; Cmd + [a-z] */) {
+ if (Manager.IsControlPressed or Manager.IsMetaPressed /* for OSX; Cmd + [a-z] */) {
if (key == "C" && this.selection.SelectionEnd > this.selection.SelectionStart) {
Manager.Copy(this.SelectedText);
return;
@@ -305,7 +311,7 @@ namespace spades {
int start = this.selection.SelectionStart;
int end = this.selection.SelectionEnd;
- auto@ lines = textmodel.lines;
+ auto @lines = textmodel.lines;
for (uint i = 0, count = lines.length; i < count; ++i) {
string line = lines[i].Text;
@@ -330,18 +336,19 @@ namespace spades {
}
}
- void AddLine(string line, bool autoscroll = false, Vector4 color = Vector4(1.f, 1.f, 1.f, 1.f)) {
- if(textmodel is null) {
+ void AddLine(string line, bool autoscroll = false,
+ Vector4 color = Vector4(1.f, 1.f, 1.f, 1.f)) {
+ if (textmodel is null) {
this.Text = "";
}
- if(autoscroll){
+ if (autoscroll) {
this.Layout();
- if(this.scrollBar.Value < this.scrollBar.MaxValue) {
+ if (this.scrollBar.Value < this.scrollBar.MaxValue) {
autoscroll = false;
}
}
textmodel.AddLine(line, color);
- if(autoscroll) {
+ if (autoscroll) {
this.Layout();
this.ScrollToEnd();
}
diff --git a/Resources/Scripts/Gui/UIFramework/UIFramework.as b/Resources/Scripts/Gui/UIFramework/UIFramework.as
index 985a5f19..d25d337a 100644
--- a/Resources/Scripts/Gui/UIFramework/UIFramework.as
+++ b/Resources/Scripts/Gui/UIFramework/UIFramework.as
@@ -19,983 +19,949 @@
*/
namespace spades {
- namespace ui {
-
- funcdef void EventHandler(UIElement@ sender);
- funcdef void PasteClipboardEventHandler(string text);
-
- /** Manages all input/output and rendering of the UI framework. */
- class UIManager {
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
-
- Vector2 MouseCursorPosition;
- UIElement@ RootElement;
- UIElement@ ActiveElement;
- Cursor@ DefaultCursor;
- float Time = 0.f;
- bool IsControlPressed = false;
- bool IsShiftPressed = false;
- bool IsAltPressed = false;
- bool IsMetaPressed = false;
-
- // IME (Input Method Editor) support
- string EditingText;
- int EditingStart = 0;
- int EditingLength = 0;
-
- private UIElement@ mouseCapturedElement;
- private UIElement@ mouseHoverElement;
-
- private PasteClipboardEventHandler@ clipboardEventHandler;
-
- private Timer@[] timers = {};
- private KeyRepeatManager keyRepeater;
- private KeyRepeatManager charRepeater;
-
- Renderer@ Renderer {
- get final { return renderer; }
- }
-
- AudioDevice@ AudioDevice {
- get final { return audioDevice; }
- }
-
- UIManager(Renderer@ renderer, AudioDevice@ audioDevice) {
- @this.renderer = renderer;
- @this.audioDevice = audioDevice;
-
- @RootElement = UIElement(this);
- RootElement.Size = Vector2(renderer.ScreenWidth, renderer.ScreenHeight);
-
- @DefaultCursor = Cursor(this, renderer.RegisterImage("Gfx/UI/Cursor.png"), Vector2(8.f, 8.f));
- MouseCursorPosition = Vector2(renderer.ScreenWidth * 0.5f, renderer.ScreenHeight * 0.5f);
-
- @keyRepeater.handler = KeyRepeatEventHandler(this.HandleKeyInner);
- @charRepeater.handler = KeyRepeatEventHandler(this.HandleCharInner);
- }
-
- private MouseButton TranslateMouseButton(string key){
- if(key == "LeftMouseButton") {
- return spades::ui::MouseButton::LeftMouseButton;
- }else if(key == "RightMouseButton") {
- return spades::ui::MouseButton::RightMouseButton;
- }else if(key == "MiddleMouseButton") {
- return spades::ui::MouseButton::MiddleMouseButton;
- }else if(key == "MouseButton4") {
- return spades::ui::MouseButton::MouseButton4;
- }else if(key == "MouseButton5") {
- return spades::ui::MouseButton::MouseButton5;
- }else {
- return spades::ui::MouseButton::None;
- }
- }
-
- private UIElement@ GetMouseActiveElement() {
- if(mouseCapturedElement !is null){
- return mouseCapturedElement;
- }
- if(not RootElement.Enable) {
- return null;
- }
- UIElement@ elm = RootElement.MouseHitTest(MouseCursorPosition);
- return elm;
- }
-
- private Cursor@ GetCurrentCursor() {
- UIElement@ e = GetMouseActiveElement();
- if(e is null) {
- return DefaultCursor;
- }
- return e.Cursor;
- }
-
- void WheelEvent(float x, float y) {
- UIElement@ e = GetMouseActiveElement();
- if(e !is null) {
- e.MouseWheel(y);
- }
- }
-
- private void MouseEventDone() {
- UIElement@ e = GetMouseActiveElement();
- if(e !is null) {
- e.MouseMove(e.ScreenToClient(MouseCursorPosition));
- }
-
- // check for mouse enter/leave
- if(e is null) {
- @e = RootElement.MouseHitTest(MouseCursorPosition);
- }
- if(e !is mouseHoverElement) {
- if(mouseHoverElement !is null) {
- mouseHoverElement.MouseLeave();
- }
- @mouseHoverElement = e;
- if(e !is null) {
- e.MouseEnter();
- }
- }
- }
-
- void MouseEvent(float x, float y) {
- /*
- MouseCursorPosition = Vector2(
- Clamp(MouseCursorPosition.x + x, 0.f, renderer.ScreenWidth),
- Clamp(MouseCursorPosition.y + y, 0.f, renderer.ScreenHeight)
- );
- */
- // in current version, absolute mouse mode is supported.
- MouseCursorPosition = Vector2(
- Clamp(x, 0.f, renderer.ScreenWidth),
- Clamp(y, 0.f, renderer.ScreenHeight)
- );
-
- MouseEventDone();
- }
-
- // forces key repeat to stop.
- void KeyPanic() {
- keyRepeater.KeyUp();
- charRepeater.KeyUp();
- EditingText = "";
- EditingStart = 0;
- EditingLength = 0;
- IsShiftPressed = false;
- IsControlPressed = false;
- IsAltPressed = false;
- IsMetaPressed = false;
- }
-
- void KeyEvent(string key, bool down) {
- if(key.length == 0){
- if(!down) {
- keyRepeater.KeyUp();
- charRepeater.KeyUp();
- }
- return;
- }
- if(key == "Shift") {
- IsShiftPressed = down;
- }
- if(key == "Control") {
- IsControlPressed = down;
- }
- if(key == "Alt") {
- IsAltPressed = down;
- }
- if(key == "Meta") {
- IsMetaPressed = down;
- }
- if(key == "WheelUp") {
- UIElement@ e = GetMouseActiveElement();
- if(e !is null) {
- e.MouseWheel(-1.f);
- }
- return;
- }
- if(key == "WheelDown") {
- UIElement@ e = GetMouseActiveElement();
- if(e !is null) {
- e.MouseWheel(1.f);
- }
- return;
- }
-
- MouseButton mb = TranslateMouseButton(key);
- if(mb != spades::ui::MouseButton::None) {
- UIElement@ e = GetMouseActiveElement();
- if(e !is null) {
- if(down) {
- @mouseCapturedElement = e;
- if(e.AcceptsFocus) {
- // give keyboard focus, too
- @ActiveElement = e;
- }
- e.MouseDown(mb, e.ScreenToClient(MouseCursorPosition));
- } else {
- // FIXME: release the mouse capture when all button are released?
- @mouseCapturedElement = null;
- e.MouseUp(mb, e.ScreenToClient(MouseCursorPosition));
- MouseEventDone();
- }
- }
- return;
- }
-
- if(down) {
- HandleKeyInner(key);
- keyRepeater.KeyDown(key);
- }else{
- keyRepeater.KeyUp();
- charRepeater.KeyUp();
- UIElement@ e = ActiveElement;
- if(e !is null) {
- e.KeyUp(key);
- }
- }
- }
-
- void TextInputEvent(string chr) {
- charRepeater.KeyDown(chr);
- HandleCharInner(chr);
- }
-
- void TextEditingEvent(string chr, int start, int len) {
- EditingText = chr;
- EditingStart = GetByteIndexForString(chr, start);
- EditingLength = GetByteIndexForString(chr, len, EditingStart) - EditingStart;
- }
-
- bool AcceptsTextInput {
- get {
- if(ActiveElement is null) {
- EditingText = "";
- EditingStart = 0;
- EditingLength = 0;
- }
- return ActiveElement !is null;
- }
- }
-
- AABB2 TextInputRect {
- get {
- UIElement@ e = ActiveElement;
- if(e !is null) {
- AABB2 rt = e.TextInputRect;
- Vector2 off = e.ScreenPosition;
- rt.min += off;
- rt.max += off;
- return rt;
- }else{
- return AABB2();
- }
- }
- }
-
- private void HandleKeyInner(string key) {
- {
- UIElement@ e = ActiveElement;
- if(EditingText.length > 0) {
- // now text is being composed by IME.
- // ignore some keys to resolve confliction.
- if(key == "Escape" || key == "BackSpace" || key == "Left" || key == "Right" ||
- key == "Space" || key == "Enter" || key == "Up" || key == "Down" ||
- key == "Tab") {
- return;
- }
- }
- if(e !is null) {
- e.KeyDown(key);
- } else {
- ProcessHotKey(key);
- }
- }
- }
-
- private void HandleCharInner(string chr) {
- UIElement@ e = ActiveElement;
- if(e !is null) {
- e.KeyPress(chr);
- }
- }
-
-
- void ProcessHotKey(string key) {
- if(RootElement.Visible) {
- RootElement.HotKey(key);
- }
- }
-
- void AddTimer(Timer@ timer) {
- timers.insertLast(timer);
- }
-
- void RemoveTimer(Timer@ timer) {
- int idx = -1;
- Timer@[]@ t = timers;
- for(int i = t.length - 1; i >= 0; i--){
- if(t[i] is timer) {
- idx = i;
- break;
- }
- }
- if(idx >= 0){
- timers.removeAt(idx);
- }
- }
-
- void PlaySound(string filename) {
- if(audioDevice !is null) {
- audioDevice.PlayLocal(audioDevice.RegisterSound(filename), AudioParam());
- }
- }
-
- void RunFrame(float dt) {
- if(ActiveElement !is null) {
- if(not (ActiveElement.IsVisible and ActiveElement.IsEnabled)) {
- @ActiveElement = null;
- }
- }
-
- if(clipboardEventHandler !is null) {
- if(GotClipboardData()) {
- clipboardEventHandler(GetClipboardData());
- @clipboardEventHandler = null;
- }
- }
-
- Timer@[]@ timers = this.timers;
- for(int i = timers.length - 1; i >= 0; i--) {
- timers[i].RunFrame(dt);
- }
- keyRepeater.RunFrame(dt);
- charRepeater.RunFrame(dt);
- Time += dt;
- }
-
- void Render() {
- if(RootElement.Visible) {
- RootElement.Render();
- }
-
- // render cursor
- Cursor@ c = GetCurrentCursor();
- if(c !is null) {
- c.Render(MouseCursorPosition);
- }
- }
-
- void Copy(string text) {
- SetClipboardData(text);
- }
-
- void Paste(PasteClipboardEventHandler@ handler) {
- RequestClipboardData();
- @clipboardEventHandler = handler;
- }
- }
-
- funcdef void KeyRepeatEventHandler(string key);
- class KeyRepeatManager {
- string lastKey;
- float nextDelay;
- KeyRepeatEventHandler@ handler;
-
- void KeyDown(string key) {
- lastKey = key;
- nextDelay = 0.2f;
- }
- void KeyUp() {
- lastKey = "";
- }
-
- void RunFrame(float dt) {
- if(lastKey.length == 0)
- return;
- nextDelay -= dt;
- if(nextDelay < 0.f) {
- handler(lastKey);
- nextDelay = Max(nextDelay + 0.06f, 0.f);
- }
- }
- }
-
- funcdef void TimerTickEventHandler(Timer@);
- class Timer {
- private UIManager@ manager;
- TimerTickEventHandler@ Tick;
-
- /** Minimum interval with which the timer fires. */
- float Interval = 1.f;
-
- bool AutoReset = true;
-
- private float nextDelay;
-
- Timer(UIManager@ manager) {
- @this.manager = manager;
- }
-
- UIManager@ Manager {
- get final {
- return manager;
- }
- }
-
- void OnTick() {
- if(Tick !is null) {
- Tick(this);
- }
- }
-
- /** Called by UIManager. */
- void RunFrame(float dt) {
- nextDelay -= dt;
- if(nextDelay < 0.f) {
- OnTick();
- if(AutoReset) {
- nextDelay = Max(nextDelay + Interval, 0.f);
- } else {
- Stop();
- }
- }
- }
-
- void Start() {
- nextDelay = Interval;
- manager.AddTimer(this);
- }
-
- void Stop() {
- manager.RemoveTimer(this);
- }
-
- }
-
- enum MouseButton {
- None,
- LeftMouseButton,
- RightMouseButton,
- MiddleMouseButton,
- MouseButton4,
- MouseButton5
- }
-
- class UIElementIterator {
- private bool initial = true;
- private UIElement@ e;
- UIElementIterator(UIElement@ parent) {
- @e = parent;
- }
- UIElement@ Current {
- get { return initial ? null : e; }
- }
- bool MoveNext() {
- if(initial) {
- @e = e.FirstChild;
- initial = false;
- } else {
- @e = e.NextSibling;
- }
- return @e !is null;
- }
- }
-
- class UIElementReverseIterator {
- private bool initial = true;
- private UIElement@ e;
- UIElementReverseIterator(UIElement@ parent) {
- @e = parent;
- }
- UIElement@ Current {
- get { return initial ? null : e; }
- }
- bool MoveNext() {
- if(initial) {
- @e = e.LastChild;
- initial = false;
- } else {
- @e = e.PrevSibling;
- }
- return @e !is null;
- }
- }
-
- class UIElement {
- private UIManager@ manager;
- private UIElement@ parent;
- //private UIElement@[] children = {};
- private UIElement@ firstChild, lastChild;
- private UIElement@ prevSibling, nextSibling;
- private Font@ fontOverride;
- private Cursor@ cursorOverride;
-
- EventHandler@ MouseEntered;
- EventHandler@ MouseLeft;
-
- bool Visible = true;
- bool Enable = true;
-
- /** When AcceptsFocus is set to true, this element can be activated when
- * it receives a mouse event. */
- bool AcceptsFocus = false;
-
- /** When IsMouseInteractive is set to true, this element receives mouse events. */
- bool IsMouseInteractive = false;
-
- /** When this is set to true, all mouse interraction outside the client area is
- * ignored for all sub-elements, reducing the CPU load. The visual is not clipped. */
- bool ClipMouse = true;
-
- Vector2 Position;
- Vector2 Size;
-
-
- UIElement(UIManager@ manager) {
- @this.manager = manager;
- }
-
- UIElement@ Parent {
- get final { return parent; }
- set final {
- if(value is this.Parent){
- return;
- }
-
- // remove from old container
- if(parent !is null){
- parent.RemoveChild(this);
- }
-
- // add to new container
- if(value !is null){
- value.AddChild(this);
- }
- }
- }
-
- UIManager@ Manager {
- get final { return manager; }
- }
-
- // used by UIElementIterator. Do not use.
- UIElement@ FirstChild {
- get final { return firstChild; }
- }
- // used by UIElementIterator. Do not use.
- UIElement@ LastChild {
- get final { return lastChild; }
- }
-
- // used by UIElementIterator. Do not use.
- UIElement@ NextSibling {
- get final { return nextSibling; }
- }
- // used by UIElementIterator. Do not use.
- UIElement@ PrevSibling {
- get final { return prevSibling; }
- }
-
- UIElement@[]@ GetChildren() final {
- UIElement@[] elems = {};
- UIElement@ e = firstChild;
- while(e !is null) {
- elems.insertLast(e);
- @e = e.nextSibling;
- }
- return elems;
- //return array(children);
- }
-
- void AppendChild(UIElement@ element) {
-
- UIElement@ oldParent = element.Parent;
- if(oldParent is this){
- return;
- }else if(oldParent !is null){
- @element.Parent = null;
- }
-
- if(firstChild is null) {
- @firstChild = element;
- @lastChild = element;
- @element.parent = this;
- } else {
- @element.prevSibling = @lastChild;
- @lastChild.nextSibling = @element;
- @lastChild = @element;
- @element.parent = this;
- }
- }
- void PrependChild(UIElement@ element) {
-
- UIElement@ oldParent = element.Parent;
- if(oldParent is this){
- return;
- }else if(oldParent !is null){
- @element.Parent = null;
- }
-
- if(firstChild is null) {
- @firstChild = element;
- @lastChild = element;
- @element.parent = this;
- } else {
- @element.nextSibling = @firstChild;
- @firstChild.prevSibling = @element;
- @firstChild = @element;
- @element.parent = this;
- }
- }
-
- void AddChild(UIElement@ element) {
- AppendChild(element);
- }
-
- void RemoveChild(UIElement@ element) {
- if(element.parent !is this) {
- return;
- }
-
- if(firstChild is element) {
- if(lastChild is element) {
- @firstChild = null;
- @lastChild = null;
- } else {
- @firstChild = element.nextSibling;
- @firstChild.prevSibling = null;
- }
- } else if(lastChild is element) {
- @lastChild = element.prevSibling;
- @lastChild.nextSibling = null;
- } else {
- @element.prevSibling.nextSibling = @element.nextSibling;
- @element.nextSibling.prevSibling = @element.prevSibling;
- }
- @element.prevSibling = null;
- @element.nextSibling = null;
- @element.parent = null;
-
- /*
- int index = -1;
- UIElement@[]@ c = children;
- for(int i = c.length - 1; i >= 0; i--) {
- if(c[i] is element) {
- index = i;
- break;
- }
- }
-
- if(index >= 0){
- children.removeAt(index);
- @element.parent = null;
- }*/
- }
-
- Font@ Font {
- get final {
- if(fontOverride !is null) {
- return fontOverride;
- }
- if(parent is null) {
- return null;
- }
- return parent.Font;
- }
- set {
- @fontOverride = value;
- }
- }
-
- Cursor@ Cursor {
- get final {
- if(cursorOverride !is null) {
- return cursorOverride;
- }
- if(parent is null) {
- return Manager.DefaultCursor;
- }
- return parent.Cursor;
- }
- set {
- @cursorOverride = value;
- }
- }
-
- bool IsVisible {
- get final {
- if(not Visible) return false;
- if(parent is null) return this is Manager.RootElement;
- return parent.IsVisible;
- }
- }
-
- bool IsEnabled {
- get final {
- if(not Enable) return false;
- if(parent is null) return true;
- return parent.IsEnabled;
- }
- }
-
- bool IsFocused {
- get final {
- return manager.ActiveElement is this;
- }
- }
-
- Vector2 ScreenPosition {
- get final {
- if(parent is null) {
- return Position;
- }
- return Position + parent.ScreenPosition;
- }
- }
-
- AABB2 Bounds {
- get final {
- return AABB2(Position, Position + Size);
- }
- set {
- Position = value.min;
- Size = value.max - value.min;
- OnResized();
- }
- }
-
- AABB2 ScreenBounds {
- get final {
- Vector2 screenPos = ScreenPosition;
- return AABB2(screenPos, screenPos + Size);
- }
- }
-
- // IME supports
-
- AABB2 TextInputRect {
- get {
- return AABB2(0.f, 0.f, Size.x, Size.y);
- }
- }
-
- int TextEditingRangeStart {
- get final {
- if(this.IsFocused) {
- return Manager.EditingStart;
- }else{
- return 0;
- }
- }
- }
-
- int TextEditingRangeLength {
- get final {
- if(this.IsFocused) {
- return Manager.EditingLength;
- }else{
- return 0;
- }
- }
- }
-
- string EditingText {
- get final {
- if(this.IsFocused) {
- return Manager.EditingText;
- }else{
- return "";
- }
- }
- }
-
- void OnResized() {
- }
-
- // relativePos is parent relative
- UIElement@ MouseHitTest(Vector2 relativePos) final {
- if(ClipMouse) {
- if(not Bounds.Contains(relativePos)) {
- return null;
- }
- }
-
-
- Vector2 p = relativePos - Position;
-
- UIElementReverseIterator iterator(this);
- while(iterator.MoveNext()) {
- UIElement@ e = iterator.Current;
- if(not (e.Visible and e.Enable)) {
- continue;
- }
- UIElement@ elem = e.MouseHitTest(p);
- if(elem !is null){
- return elem;
- }
- }
-
- if(IsMouseInteractive) {
- if(Bounds.Contains(relativePos)) {
- return this;
- }
- }
-
- return null;
- }
-
- Vector2 ScreenToClient(Vector2 scr) final {
- return scr - ScreenPosition;
- }
-
- void MouseWheel(float delta) {
- if(Parent !is null) {
- Parent.MouseWheel(delta);
- }
- }
- void MouseDown(MouseButton button, Vector2 clientPosition) {
- if(Parent !is null) {
- Parent.MouseDown(button, clientPosition);
- }
- }
- void MouseMove(Vector2 clientPosition) {
- if(Parent !is null) {
- Parent.MouseMove(clientPosition);
- }
- }
- void MouseUp(MouseButton button, Vector2 clientPosition) {
- if(Parent !is null) {
- Parent.MouseUp(button, clientPosition);
- }
- }
- void MouseEnter() {
- if(MouseEntered !is null) {
- MouseEntered(this);
- }
- }
- void MouseLeave() {
- if(MouseLeft !is null) {
- MouseLeft(this);
- }
- }
-
- void KeyDown(string key) {
- manager.ProcessHotKey(key);
- }
- void KeyUp(string key) {
- }
-
- void KeyPress(string text) {
- }
-
- void HotKey(string key) {
- UIElementReverseIterator iterator(this);
- while(iterator.MoveNext()) {
- if(iterator.Current.Visible and iterator.Current.Enable) {
- iterator.Current.HotKey(key);
- }
- }
- }
-
- void Render() {
- UIElementIterator iterator(this);
- while(iterator.MoveNext()) {
- if(iterator.Current.Visible) {
- iterator.Current.Render();
- }
- }
- }
- }
-
- class Cursor {
- private UIManager@ manager;
- private Image@ image;
- private Vector2 hotSpot;
-
- Cursor(UIManager@ manager, Image@ image, Vector2 hotSpot) {
- @this.manager = manager;
- @this.image = image;
- this.hotSpot = hotSpot;
- }
-
- void Render(Vector2 pos) {
- Renderer@ renderer = manager.Renderer;
- renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 1.f);
- renderer.DrawImage(image, Vector2(pos.x - hotSpot.x, pos.y - hotSpot.y));
- }
- }
-
-
- class UIElementDeque {
- private UIElement@[]@ arr;
- private int startIndex = 0;
- private int count = 0;
-
- UIElementDeque() {
- @arr = array(4);
- }
-
- private int MapIndex(int idx) const {
- idx += startIndex;
- if(idx >= int(arr.length))
- idx -= int(arr.length);
- return idx;
- }
-
- UIElement@ get_opIndex(int idx) const {
- return arr[MapIndex(idx)];
- }
- void set_opIndex(int idx, UIElement@ e) {
- @arr[MapIndex(idx)] = e;
- }
-
- void Reserve(int c) {
- if(int(arr.length) >= c){
- return;
- }
- int newCount = int(arr.length);
- while(newCount < c) {
- newCount *= 2;
- }
-
- UIElement@[] newarr = array(newCount);
- UIElement@[] oldarr = arr;
- int len = int(oldarr.length);
- int idx = startIndex;
- for(int i = 0; i < count; i++) {
- @newarr[i] = oldarr[idx];
- idx += 1;
- if(idx >= len) {
- idx = 0;
- }
- }
- @arr = newarr;
- startIndex = 0;
- }
-
- void PushFront(UIElement@ elem) {
- Reserve(count + 1);
- startIndex = (startIndex == 0) ? (arr.length - 1) : (startIndex - 1);
- count++;
- @this.Front = elem;
- }
-
- void PushBack(UIElement@ elem) {
- Reserve(count + 1);
- count++;
- @this.Back = elem;
- }
-
- void PopFront() {
- @this.Front = null;
- startIndex = MapIndex(1);
- count--;
- }
-
- void PopBack() {
- @this.Back = null;
- count--;
- }
-
- int Count {
- get { return count; }
- }
-
- void Clear() {
- @arr = array(4);
- count = 0;
- startIndex = 0;
- }
-
- UIElement@ Front {
- get const { return arr[startIndex]; }
- set { @arr[startIndex] = value; }
- }
- UIElement@ Back {
- get const { return arr[MapIndex(count - 1)]; }
- set { @arr[MapIndex(count - 1)] = value; }
- }
- }
- }
-}
\ No newline at end of file
+ namespace ui {
+
+ funcdef void EventHandler(UIElement @sender);
+ funcdef void PasteClipboardEventHandler(string text);
+
+ /** Manages all input/output and rendering of the UI framework. */
+ class UIManager {
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+
+ Vector2 MouseCursorPosition;
+ UIElement @RootElement;
+ UIElement @ActiveElement;
+ Cursor @DefaultCursor;
+ float Time = 0.f;
+ bool IsControlPressed = false;
+ bool IsShiftPressed = false;
+ bool IsAltPressed = false;
+ bool IsMetaPressed = false;
+
+ // IME (Input Method Editor) support
+ string EditingText;
+ int EditingStart = 0;
+ int EditingLength = 0;
+
+ private UIElement @mouseCapturedElement;
+ private UIElement @mouseHoverElement;
+
+ private PasteClipboardEventHandler @clipboardEventHandler;
+
+ private Timer @[] timers = {};
+ private KeyRepeatManager keyRepeater;
+ private KeyRepeatManager charRepeater;
+
+ Renderer @Renderer {
+ get final { return renderer; }
+ }
+
+ AudioDevice @AudioDevice {
+ get final { return audioDevice; }
+ }
+
+ UIManager(Renderer @renderer, AudioDevice @audioDevice) {
+ @this.renderer = renderer;
+ @this.audioDevice = audioDevice;
+
+ @RootElement = UIElement(this);
+ RootElement.Size = Vector2(renderer.ScreenWidth, renderer.ScreenHeight);
+
+ @DefaultCursor
+ = Cursor(this, renderer.RegisterImage("Gfx/UI/Cursor.png"), Vector2(8.f, 8.f));
+ MouseCursorPosition =
+ Vector2(renderer.ScreenWidth * 0.5f, renderer.ScreenHeight * 0.5f);
+
+ @keyRepeater.handler = KeyRepeatEventHandler(this.HandleKeyInner);
+ @charRepeater.handler = KeyRepeatEventHandler(this.HandleCharInner);
+ }
+
+ private MouseButton TranslateMouseButton(string key) {
+ if (key == "LeftMouseButton") {
+ return spades::ui::MouseButton::LeftMouseButton;
+ } else if (key == "RightMouseButton") {
+ return spades::ui::MouseButton::RightMouseButton;
+ } else if (key == "MiddleMouseButton") {
+ return spades::ui::MouseButton::MiddleMouseButton;
+ } else if (key == "MouseButton4") {
+ return spades::ui::MouseButton::MouseButton4;
+ } else if (key == "MouseButton5") {
+ return spades::ui::MouseButton::MouseButton5;
+ } else {
+ return spades::ui::MouseButton::None;
+ }
+ }
+
+ private UIElement @GetMouseActiveElement() {
+ if (mouseCapturedElement !is null) {
+ return mouseCapturedElement;
+ }
+ if (not RootElement.Enable) {
+ return null;
+ }
+ UIElement @elm = RootElement.MouseHitTest(MouseCursorPosition);
+ return elm;
+ }
+
+ private Cursor @GetCurrentCursor() {
+ UIElement @e = GetMouseActiveElement();
+ if (e is null) {
+ return DefaultCursor;
+ }
+ return e.Cursor;
+ }
+
+ void WheelEvent(float x, float y) {
+ UIElement @e = GetMouseActiveElement();
+ if (e !is null) {
+ e.MouseWheel(y);
+ }
+ }
+
+ private void MouseEventDone() {
+ UIElement @e = GetMouseActiveElement();
+ if (e !is null) {
+ e.MouseMove(e.ScreenToClient(MouseCursorPosition));
+ }
+
+ // check for mouse enter/leave
+ if (e is null) {
+ @e = RootElement.MouseHitTest(MouseCursorPosition);
+ }
+ if (e !is mouseHoverElement) {
+ if (mouseHoverElement !is null) {
+ mouseHoverElement.MouseLeave();
+ }
+ @mouseHoverElement = e;
+ if (e !is null) {
+ e.MouseEnter();
+ }
+ }
+ }
+
+ void MouseEvent(float x, float y) {
+ /*
+ MouseCursorPosition = Vector2(
+ Clamp(MouseCursorPosition.x + x, 0.f, renderer.ScreenWidth),
+ Clamp(MouseCursorPosition.y + y, 0.f, renderer.ScreenHeight)
+ );
+ */
+ // in current version, absolute mouse mode is supported.
+ MouseCursorPosition = Vector2(Clamp(x, 0.f, renderer.ScreenWidth),
+ Clamp(y, 0.f, renderer.ScreenHeight));
+
+ MouseEventDone();
+ }
+
+ // forces key repeat to stop.
+ void KeyPanic() {
+ keyRepeater.KeyUp();
+ charRepeater.KeyUp();
+ EditingText = "";
+ EditingStart = 0;
+ EditingLength = 0;
+ IsShiftPressed = false;
+ IsControlPressed = false;
+ IsAltPressed = false;
+ IsMetaPressed = false;
+ }
+
+ void KeyEvent(string key, bool down) {
+ if (key.length == 0) {
+ if (!down) {
+ keyRepeater.KeyUp();
+ charRepeater.KeyUp();
+ }
+ return;
+ }
+ if (key == "Shift") {
+ IsShiftPressed = down;
+ }
+ if (key == "Control") {
+ IsControlPressed = down;
+ }
+ if (key == "Alt") {
+ IsAltPressed = down;
+ }
+ if (key == "Meta") {
+ IsMetaPressed = down;
+ }
+ if (key == "WheelUp") {
+ UIElement @e = GetMouseActiveElement();
+ if (e !is null) {
+ e.MouseWheel(-1.f);
+ }
+ return;
+ }
+ if (key == "WheelDown") {
+ UIElement @e = GetMouseActiveElement();
+ if (e !is null) {
+ e.MouseWheel(1.f);
+ }
+ return;
+ }
+
+ MouseButton mb = TranslateMouseButton(key);
+ if (mb != spades::ui::MouseButton::None) {
+ UIElement @e = GetMouseActiveElement();
+ if (e !is null) {
+ if (down) {
+ @mouseCapturedElement = e;
+ if (e.AcceptsFocus) {
+ // give keyboard focus, too
+ @ActiveElement = e;
+ }
+ e.MouseDown(mb, e.ScreenToClient(MouseCursorPosition));
+ } else {
+ // FIXME: release the mouse capture when all button are
+ // released?
+ @mouseCapturedElement = null;
+ e.MouseUp(mb, e.ScreenToClient(MouseCursorPosition));
+ MouseEventDone();
+ }
+ }
+ return;
+ }
+
+ if (down) {
+ HandleKeyInner(key);
+ keyRepeater.KeyDown(key);
+ } else {
+ keyRepeater.KeyUp();
+ charRepeater.KeyUp();
+ UIElement @e = ActiveElement;
+ if (e !is null) {
+ e.KeyUp(key);
+ }
+ }
+ }
+
+ void TextInputEvent(string chr) {
+ charRepeater.KeyDown(chr);
+ HandleCharInner(chr);
+ }
+
+ void TextEditingEvent(string chr, int start, int len) {
+ EditingText = chr;
+ EditingStart = GetByteIndexForString(chr, start);
+ EditingLength = GetByteIndexForString(chr, len, EditingStart) - EditingStart;
+ }
+
+ bool AcceptsTextInput {
+ get {
+ if (ActiveElement is null) {
+ EditingText = "";
+ EditingStart = 0;
+ EditingLength = 0;
+ }
+ return ActiveElement !is null;
+ }
+ }
+
+ AABB2 TextInputRect {
+ get {
+ UIElement @e = ActiveElement;
+ if (e !is null) {
+ AABB2 rt = e.TextInputRect;
+ Vector2 off = e.ScreenPosition;
+ rt.min += off;
+ rt.max += off;
+ return rt;
+ } else {
+ return AABB2();
+ }
+ }
+ }
+
+ private void HandleKeyInner(string key) {
+ {
+ UIElement @e = ActiveElement;
+ if (EditingText.length > 0) {
+ // now text is being composed by IME.
+ // ignore some keys to resolve confliction.
+ if (key == "Escape" || key == "BackSpace" || key == "Left" ||
+ key == "Right" || key == "Space" || key == "Enter" || key == "Up" ||
+ key == "Down" || key == "Tab") {
+ return;
+ }
+ }
+ if (e !is null) {
+ e.KeyDown(key);
+ } else {
+ ProcessHotKey(key);
+ }
+ }
+ }
+
+ private void HandleCharInner(string chr) {
+ UIElement @e = ActiveElement;
+ if (e !is null) {
+ e.KeyPress(chr);
+ }
+ }
+
+ void ProcessHotKey(string key) {
+ if (RootElement.Visible) {
+ RootElement.HotKey(key);
+ }
+ }
+
+ void AddTimer(Timer @timer) { timers.insertLast(timer); }
+
+ void RemoveTimer(Timer @timer) {
+ int idx = -1;
+ Timer @[] @t = timers;
+ for (int i = t.length - 1; i >= 0; i--) {
+ if (t[i] is timer) {
+ idx = i;
+ break;
+ }
+ }
+ if (idx >= 0) {
+ timers.removeAt(idx);
+ }
+ }
+
+ void PlaySound(string filename) {
+ if (audioDevice !is null) {
+ audioDevice.PlayLocal(audioDevice.RegisterSound(filename), AudioParam());
+ }
+ }
+
+ void RunFrame(float dt) {
+ if (ActiveElement !is null) {
+ if (not(ActiveElement.IsVisible and ActiveElement.IsEnabled)) {
+ @ActiveElement = null;
+ }
+ }
+
+ if (clipboardEventHandler !is null) {
+ if (GotClipboardData()) {
+ clipboardEventHandler(GetClipboardData());
+ @clipboardEventHandler = null;
+ }
+ }
+
+ Timer @[] @timers = this.timers;
+ for (int i = timers.length - 1; i >= 0; i--) {
+ timers[i].RunFrame(dt);
+ }
+ keyRepeater.RunFrame(dt);
+ charRepeater.RunFrame(dt);
+ Time += dt;
+ }
+
+ void Render() {
+ if (RootElement.Visible) {
+ RootElement.Render();
+ }
+
+ // render cursor
+ Cursor @c = GetCurrentCursor();
+ if (c !is null) {
+ c.Render(MouseCursorPosition);
+ }
+ }
+
+ void Copy(string text) { SetClipboardData(text); }
+
+ void Paste(PasteClipboardEventHandler @handler) {
+ RequestClipboardData();
+ @clipboardEventHandler = handler;
+ }
+ }
+
+ funcdef void KeyRepeatEventHandler(string key);
+ class KeyRepeatManager {
+ string lastKey;
+ float nextDelay;
+ KeyRepeatEventHandler @handler;
+
+ void KeyDown(string key) {
+ lastKey = key;
+ nextDelay = 0.2f;
+ }
+ void KeyUp() { lastKey = ""; }
+
+ void RunFrame(float dt) {
+ if (lastKey.length == 0)
+ return;
+ nextDelay -= dt;
+ if (nextDelay < 0.f) {
+ handler(lastKey);
+ nextDelay = Max(nextDelay + 0.06f, 0.f);
+ }
+ }
+ }
+
+ funcdef void TimerTickEventHandler(Timer @);
+ class Timer {
+ private UIManager @manager;
+ TimerTickEventHandler @Tick;
+
+ /** Minimum interval with which the timer fires. */
+ float Interval = 1.f;
+
+ bool AutoReset = true;
+
+ private float nextDelay;
+
+ Timer(UIManager @manager) { @this.manager = manager; }
+
+ UIManager @Manager {
+ get final { return manager; }
+ }
+
+ void OnTick() {
+ if (Tick !is null) {
+ Tick(this);
+ }
+ }
+
+ /** Called by UIManager. */
+ void RunFrame(float dt) {
+ nextDelay -= dt;
+ if (nextDelay < 0.f) {
+ OnTick();
+ if (AutoReset) {
+ nextDelay = Max(nextDelay + Interval, 0.f);
+ } else {
+ Stop();
+ }
+ }
+ }
+
+ void Start() {
+ nextDelay = Interval;
+ manager.AddTimer(this);
+ }
+
+ void Stop() { manager.RemoveTimer(this); }
+ }
+
+ enum MouseButton {
+ None,
+ LeftMouseButton,
+ RightMouseButton,
+ MiddleMouseButton,
+ MouseButton4,
+ MouseButton5
+ }
+
+ class UIElementIterator {
+ private bool initial = true;
+ private UIElement @e;
+ UIElementIterator(UIElement @parent) { @e = parent; }
+ UIElement @Current {
+ get { return initial ? null : e; }
+ }
+ bool MoveNext() {
+ if (initial) {
+ @e = e.FirstChild;
+ initial = false;
+ } else {
+ @e = e.NextSibling;
+ }
+ return @e !is null;
+ }
+ }
+
+ class UIElementReverseIterator {
+ private bool initial = true;
+ private UIElement @e;
+ UIElementReverseIterator(UIElement @parent) { @e = parent; }
+ UIElement @Current {
+ get { return initial ? null : e; }
+ }
+ bool MoveNext() {
+ if (initial) {
+ @e = e.LastChild;
+ initial = false;
+ } else {
+ @e = e.PrevSibling;
+ }
+ return @e !is null;
+ }
+ }
+
+ class UIElement {
+ private UIManager @manager;
+ private UIElement @parent;
+ // private UIElement@[] children = {};
+ private UIElement @firstChild, lastChild;
+ private UIElement @prevSibling, nextSibling;
+ private Font @fontOverride;
+ private Cursor @cursorOverride;
+
+ EventHandler @MouseEntered;
+ EventHandler @MouseLeft;
+
+ bool Visible = true;
+ bool Enable = true;
+
+ /**
+ * When AcceptsFocus is set to true, this element can be activated when
+ * it receives a mouse event.
+ */
+ bool AcceptsFocus = false;
+
+ /**
+ * When IsMouseInteractive is set to true, this element receives mouse
+ * events.
+ */
+ bool IsMouseInteractive = false;
+
+ /**
+ * When this is set to true, all mouse interraction outside the client area
+ * is
+ * ignored for all sub-elements, reducing the CPU load. The visual is not
+ * clipped.
+ */
+ bool ClipMouse = true;
+
+ Vector2 Position;
+ Vector2 Size;
+
+ UIElement(UIManager @manager) { @this.manager = manager; }
+
+ UIElement @Parent {
+ get final { return parent; }
+ set final {
+ if (value is this.Parent) {
+ return;
+ }
+
+ // remove from old container
+ if (parent !is null) {
+ parent.RemoveChild(this);
+ }
+
+ // add to new container
+ if (value !is null) {
+ value.AddChild(this);
+ }
+ }
+ }
+
+ UIManager @Manager {
+ get final { return manager; }
+ }
+
+ // used by UIElementIterator. Do not use.
+ UIElement @FirstChild {
+ get final { return firstChild; }
+ }
+ // used by UIElementIterator. Do not use.
+ UIElement @LastChild {
+ get final { return lastChild; }
+ }
+
+ // used by UIElementIterator. Do not use.
+ UIElement @NextSibling {
+ get final { return nextSibling; }
+ }
+ // used by UIElementIterator. Do not use.
+ UIElement @PrevSibling {
+ get final { return prevSibling; }
+ }
+
+ UIElement @[] @GetChildren() final {
+ UIElement @[] elems = {};
+ UIElement @e = firstChild;
+ while (e !is null) {
+ elems.insertLast(e);
+ @e = e.nextSibling;
+ }
+ return elems;
+ // return array(children);
+ }
+
+ void AppendChild(UIElement @element) {
+
+ UIElement @oldParent = element.Parent;
+ if (oldParent is this) {
+ return;
+ } else if (oldParent !is null) {
+ @element.Parent = null;
+ }
+
+ if (firstChild is null) {
+ @firstChild = element;
+ @lastChild = element;
+ @element.parent = this;
+ } else {
+ @element.prevSibling = @lastChild;
+ @lastChild.nextSibling = @element;
+ @lastChild = @element;
+ @element.parent = this;
+ }
+ }
+ void PrependChild(UIElement @element) {
+
+ UIElement @oldParent = element.Parent;
+ if (oldParent is this) {
+ return;
+ } else if (oldParent !is null) {
+ @element.Parent = null;
+ }
+
+ if (firstChild is null) {
+ @firstChild = element;
+ @lastChild = element;
+ @element.parent = this;
+ } else {
+ @element.nextSibling = @firstChild;
+ @firstChild.prevSibling = @element;
+ @firstChild = @element;
+ @element.parent = this;
+ }
+ }
+
+ void AddChild(UIElement @element) { AppendChild(element); }
+
+ void RemoveChild(UIElement @element) {
+ if (element.parent !is this) {
+ return;
+ }
+
+ if (firstChild is element) {
+ if (lastChild is element) {
+ @firstChild = null;
+ @lastChild = null;
+ } else {
+ @firstChild = element.nextSibling;
+ @firstChild.prevSibling = null;
+ }
+ } else if (lastChild is element) {
+ @lastChild = element.prevSibling;
+ @lastChild.nextSibling = null;
+ } else {
+ @element.prevSibling.nextSibling = @element.nextSibling;
+ @element.nextSibling.prevSibling = @element.prevSibling;
+ }
+ @element.prevSibling = null;
+ @element.nextSibling = null;
+ @element.parent = null;
+
+ /*
+ int index = -1;
+ UIElement@[]@ c = children;
+ for(int i = c.length - 1; i >= 0; i--) {
+ if(c[i] is element) {
+ index = i;
+ break;
+ }
+ }
+
+ if(index >= 0){
+ children.removeAt(index);
+ @element.parent = null;
+ }*/
+ }
+
+ Font @Font {
+ get final {
+ if (fontOverride !is null) {
+ return fontOverride;
+ }
+ if (parent is null) {
+ return null;
+ }
+ return parent.Font;
+ }
+ set { @fontOverride = value; }
+ }
+
+ Cursor @Cursor {
+ get final {
+ if (cursorOverride !is null) {
+ return cursorOverride;
+ }
+ if (parent is null) {
+ return Manager.DefaultCursor;
+ }
+ return parent.Cursor;
+ }
+ set { @cursorOverride = value; }
+ }
+
+ bool IsVisible {
+ get final {
+ if (not Visible)
+ return false;
+ if (parent is null)
+ return this is Manager.RootElement;
+ return parent.IsVisible;
+ }
+ }
+
+ bool IsEnabled {
+ get final {
+ if (not Enable)
+ return false;
+ if (parent is null)
+ return true;
+ return parent.IsEnabled;
+ }
+ }
+
+ bool IsFocused {
+ get final { return manager.ActiveElement is this; }
+ }
+
+ Vector2 ScreenPosition {
+ get final {
+ if (parent is null) {
+ return Position;
+ }
+ return Position + parent.ScreenPosition;
+ }
+ }
+
+ AABB2 Bounds {
+ get final { return AABB2(Position, Position + Size); }
+ set {
+ Position = value.min;
+ Size = value.max - value.min;
+ OnResized();
+ }
+ }
+
+ AABB2 ScreenBounds {
+ get final {
+ Vector2 screenPos = ScreenPosition;
+ return AABB2(screenPos, screenPos + Size);
+ }
+ }
+
+ // IME supports
+
+ AABB2 TextInputRect {
+ get { return AABB2(0.f, 0.f, Size.x, Size.y); }
+ }
+
+ int TextEditingRangeStart {
+ get final {
+ if (this.IsFocused) {
+ return Manager.EditingStart;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ int TextEditingRangeLength {
+ get final {
+ if (this.IsFocused) {
+ return Manager.EditingLength;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ string EditingText {
+ get final {
+ if (this.IsFocused) {
+ return Manager.EditingText;
+ } else {
+ return "";
+ }
+ }
+ }
+
+ void OnResized() {}
+
+ // relativePos is parent relative
+ UIElement @MouseHitTest(Vector2 relativePos) final {
+ if (ClipMouse) {
+ if (not Bounds.Contains(relativePos)) {
+ return null;
+ }
+ }
+
+ Vector2 p = relativePos - Position;
+
+ UIElementReverseIterator iterator(this);
+ while (iterator.MoveNext()) {
+ UIElement @e = iterator.Current;
+ if (not(e.Visible and e.Enable)) {
+ continue;
+ }
+ UIElement @elem = e.MouseHitTest(p);
+ if (elem !is null) {
+ return elem;
+ }
+ }
+
+ if (IsMouseInteractive) {
+ if (Bounds.Contains(relativePos)) {
+ return this;
+ }
+ }
+
+ return null;
+ }
+
+ Vector2 ScreenToClient(Vector2 scr) final { return scr - ScreenPosition; }
+
+ void MouseWheel(float delta) {
+ if (Parent !is null) {
+ Parent.MouseWheel(delta);
+ }
+ }
+ void MouseDown(MouseButton button, Vector2 clientPosition) {
+ if (Parent !is null) {
+ Parent.MouseDown(button, clientPosition);
+ }
+ }
+ void MouseMove(Vector2 clientPosition) {
+ if (Parent !is null) {
+ Parent.MouseMove(clientPosition);
+ }
+ }
+ void MouseUp(MouseButton button, Vector2 clientPosition) {
+ if (Parent !is null) {
+ Parent.MouseUp(button, clientPosition);
+ }
+ }
+ void MouseEnter() {
+ if (MouseEntered !is null) {
+ MouseEntered(this);
+ }
+ }
+ void MouseLeave() {
+ if (MouseLeft !is null) {
+ MouseLeft(this);
+ }
+ }
+
+ void KeyDown(string key) { manager.ProcessHotKey(key); }
+ void KeyUp(string key) {}
+
+ void KeyPress(string text) {}
+
+ void HotKey(string key) {
+ UIElementReverseIterator iterator(this);
+ while (iterator.MoveNext()) {
+ if (iterator.Current.Visible and iterator.Current.Enable) {
+ iterator.Current.HotKey(key);
+ }
+ }
+ }
+
+ void Render() {
+ UIElementIterator iterator(this);
+ while (iterator.MoveNext()) {
+ if (iterator.Current.Visible) {
+ iterator.Current.Render();
+ }
+ }
+ }
+ }
+
+ class Cursor {
+ private UIManager @manager;
+ private Image @image;
+ private Vector2 hotSpot;
+
+ Cursor(UIManager @manager, Image @image, Vector2 hotSpot) {
+ @this.manager = manager;
+ @this.image = image;
+ this.hotSpot = hotSpot;
+ }
+
+ void Render(Vector2 pos) {
+ Renderer @renderer = manager.Renderer;
+ renderer.ColorNP = Vector4(1.f, 1.f, 1.f, 1.f);
+ renderer.DrawImage(image, Vector2(pos.x - hotSpot.x, pos.y - hotSpot.y));
+ }
+ }
+
+ class UIElementDeque {
+ private UIElement @[] @arr;
+ private int startIndex = 0;
+ private int count = 0;
+
+ UIElementDeque() { @arr = array(4); }
+
+ private int MapIndex(int idx) const {
+ idx += startIndex;
+ if (idx >= int(arr.length))
+ idx -= int(arr.length);
+ return idx;
+ }
+
+ UIElement @get_opIndex(int idx) const { return arr[MapIndex(idx)]; }
+ void set_opIndex(int idx, UIElement @e) { @arr[MapIndex(idx)] = e; }
+
+ void Reserve(int c) {
+ if (int(arr.length) >= c) {
+ return;
+ }
+ int newCount = int(arr.length);
+ while (newCount < c) {
+ newCount *= 2;
+ }
+
+ UIElement @[] newarr = array(newCount);
+ UIElement @[] oldarr = arr;
+ int len = int(oldarr.length);
+ int idx = startIndex;
+ for (int i = 0; i < count; i++) {
+ @newarr[i] = oldarr[idx];
+ idx += 1;
+ if (idx >= len) {
+ idx = 0;
+ }
+ }
+ @arr = newarr;
+ startIndex = 0;
+ }
+
+ void PushFront(UIElement @elem) {
+ Reserve(count + 1);
+ startIndex = (startIndex == 0) ? (arr.length - 1) : (startIndex - 1);
+ count++;
+ @this.Front = elem;
+ }
+
+ void PushBack(UIElement @elem) {
+ Reserve(count + 1);
+ count++;
+ @this.Back = elem;
+ }
+
+ void PopFront() {
+ @this.Front = null;
+ startIndex = MapIndex(1);
+ count--;
+ }
+
+ void PopBack() {
+ @this.Back = null;
+ count--;
+ }
+
+ int Count {
+ get { return count; }
+ }
+
+ void Clear() {
+ @arr = array(4);
+ count = 0;
+ startIndex = 0;
+ }
+
+ UIElement @Front {
+ get const { return arr[startIndex]; }
+ set { @arr[startIndex] = value; }
+ }
+ UIElement @Back {
+ get const { return arr[MapIndex(count - 1)]; }
+ set { @arr[MapIndex(count - 1)] = value; }
+ }
+ }
+ }
+}
diff --git a/Resources/Scripts/Reference/API/AudioChunk.as b/Resources/Scripts/Reference/API/AudioChunk.as
index a7bf7d81..90e21fae 100644
--- a/Resources/Scripts/Reference/API/AudioChunk.as
+++ b/Resources/Scripts/Reference/API/AudioChunk.as
@@ -1,29 +1,29 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** AudioChunk is an opaque type which can be passed to an audio device to
- * play sounds. */
- class AudioChunk {
-
- }
-
-}
\ No newline at end of file
+
+ /**
+ * AudioChunk is an opaque type which can be passed to an audio device to
+ * play sounds.
+ */
+ class AudioChunk {}
+
+}
diff --git a/Resources/Scripts/Reference/API/AudioDevice.as b/Resources/Scripts/Reference/API/AudioDevice.as
index a02a518e..5e438ef6 100644
--- a/Resources/Scripts/Reference/API/AudioDevice.as
+++ b/Resources/Scripts/Reference/API/AudioDevice.as
@@ -1,64 +1,67 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** AudioDevice is an interface to the audio device. */
- class AudioDevice {
-
- /** Loads an audio data from the specified path or load one from
- * the cache, if exists.
- * @param path file-system path. */
- AudioChunk@ RegisterSound(const string@ path) {}
-
- /** Sets a game world map. */
- GameMap@ GameMap {
- set {}
- }
-
- /** Plays a sound. */
- void Play(AudioChunk@, const Vector3@ origin, const AudioParam@ params);
-
- /** Plays a sound, with the source position specified in the view
- * coordinate space. */
- void PlayLocal(AudioChunk@, const Vector3@ origin, const AudioParam@ params);
-
- /** Plays a non-spatialized sound. */
- void PlayLocal(AudioChunk@, const AudioParam@ params);
-
- /** Updates the position of the listener. */
- void Respatialize(const Vector3@ eye,
- const Vector3@ frontVector,
- const Vector3@ upVector);
-
- }
-
- class AudioParam {
- /** Linear gain of the sound. */
- float volume;
-
- /** Playback speed of the sound. Doubling this value makes the sound
- * played twice faster. */
- float pitch;
-
- float referenceDistance;
- }
-
-}
\ No newline at end of file
+
+ /** AudioDevice is an interface to the audio device. */
+ class AudioDevice {
+
+ /**
+ * Loads an audio data from the specified path or load one from
+ * the cache, if exists.
+ * @param path file-system path.
+ */
+ AudioChunk @RegisterSound(const string @path) {}
+
+ /** Sets a game world map. */
+ GameMap @GameMap {
+ set {}
+ }
+
+ /** Plays a sound. */
+ void Play(AudioChunk @, const Vector3 @origin, const AudioParam @params);
+
+ /**
+ * Plays a sound, with the source position specified in the view
+ * coordinate space.
+ */
+ void PlayLocal(AudioChunk @, const Vector3 @origin, const AudioParam @params);
+
+ /** Plays a non-spatialized sound. */
+ void PlayLocal(AudioChunk @, const AudioParam @params);
+
+ /** Updates the position of the listener. */
+ void Respatialize(const Vector3 @eye, const Vector3 @frontVector, const Vector3 @upVector);
+ }
+
+ class AudioParam {
+ /** Linear gain of the sound. */
+ float volume;
+
+ /**
+ * Playback speed of the sound. Doubling this value makes the sound
+ * played twice faster.
+ */
+ float pitch;
+
+ float referenceDistance;
+ }
+
+}
diff --git a/Resources/Scripts/Reference/API/Bitmap.as b/Resources/Scripts/Reference/API/Bitmap.as
index 66f4c863..77b00fbd 100644
--- a/Resources/Scripts/Reference/API/Bitmap.as
+++ b/Resources/Scripts/Reference/API/Bitmap.as
@@ -1,49 +1,48 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Represents a 32-bit RGBA bitmap. */
- class Bitmap {
-
- /** Creates a new bitmap. */
- GameMap(int width, int height) {}
-
- /** Loads a bitmap from the specified file. */
- GameMap(const string@ path) {}
-
- /** Gets the color of the specified pixel. */
- uint GetPixel(int x, int y) {}
-
- /** Sets the color of the specified pixel. */
- void SetPixel(int x, int y, uint color) {}
-
- /** Retrieves the width of the bitmap. */
- int Width {
- get { }
- }
-
- /** Retrieves the height of the bitmap. */
- int Height {
- get { }
- }
-
- }
-}
\ No newline at end of file
+
+ /** Represents a 32-bit RGBA bitmap. */
+ class Bitmap {
+
+ /** Creates a new bitmap. */
+ GameMap(int width, int height) {}
+
+ /** Loads a bitmap from the specified file. */
+ GameMap(const string @path) {}
+
+ /** Gets the color of the specified pixel. */
+ uint GetPixel(int x, int y) {}
+
+ /** Sets the color of the specified pixel. */
+ void SetPixel(int x, int y, uint color) {}
+
+ /** Retrieves the width of the bitmap. */
+ int Width {
+ get {}
+ }
+
+ /** Retrieves the height of the bitmap. */
+ int Height {
+ get {}
+ }
+ }
+}
diff --git a/Resources/Scripts/Reference/API/Font.as b/Resources/Scripts/Reference/API/Font.as
index 696838d7..9625c3bd 100644
--- a/Resources/Scripts/Reference/API/Font.as
+++ b/Resources/Scripts/Reference/API/Font.as
@@ -1,36 +1,35 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Represents a bitmap-based font. */
- class Font {
-
- /** Measures the size of the given string. */
- Vector2 Measure(const string@ text);
-
- /** Renders the string. */
- void Draw(const string@ text, Vector2 origin, float scale, Vector4 color);
-
- /** Renders the string with a shadow. */
- void DrawShadow(const string@ text, Vector2 origin, float scale, Vector4 color);
-
- }
-}
\ No newline at end of file
+
+ /** Represents a bitmap-based font. */
+ class Font {
+
+ /** Measures the size of the given string. */
+ Vector2 Measure(const string @text);
+
+ /** Renders the string. */
+ void Draw(const string @text, Vector2 origin, float scale, Vector4 color);
+
+ /** Renders the string with a shadow. */
+ void DrawShadow(const string @text, Vector2 origin, float scale, Vector4 color);
+ }
+}
diff --git a/Resources/Scripts/Reference/API/GameMap.as b/Resources/Scripts/Reference/API/GameMap.as
index 75c2cf3d..6289f5a3 100644
--- a/Resources/Scripts/Reference/API/GameMap.as
+++ b/Resources/Scripts/Reference/API/GameMap.as
@@ -1,99 +1,98 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Represents a game world map. */
- class GameMap {
-
- /** Creates a new map.
- * @param width You must specify 512.
- * @param height You must specify 512.
- * @param depth You must specify 64.
- */
- GameMap(int width, int height, int depth) {}
-
- /** Loads a map from the specified file. */
- GameMap(const string@ path) {}
-
- /** Gets the color of the specified voxel. */
- uint GetColor(int x, int y, int z) {}
-
- /** Returns if the specified voxel is solid (or air). */
- bool IsSolid(int x, int y, int z) {}
-
- /** Gets the color of the specified voxel. */
- uint GetColorWrapped(int x, int y, int z) {}
-
- /** Returns if the specified voxel is solid (or air). */
- bool IsSolidWrapped(int x, int y, int z) {}
-
- /** Makes the specified voxel non-solid. */
- void SetAir(int x, int y, int z) {}
-
- /** Makes the specified voxel solid, and sets its color. */
- void SetSolid(int x, int y, int z, uint color) {}
-
- /** Retrieves the width of the map. */
- int Width {
- get { }
- }
-
- /** Retrieves the height of the map. */
- int Height {
- get { }
- }
-
- /** Retrieves the depth of the map. */
- int Depth {
- get { }
- }
-
- bool ClipBox(int x, int y, int z) {}
- bool ClipWorld(int x, int y, int z) {}
-
- bool ClipBox(float x, float y, float z) {}
- bool ClipWorld(float x, float y, float z) {}
-
- /** Casts a ray. */
- GameMapRayCastResult CastRay(Vector3 start, Vector3 direction,
- int maxScanSteps);
-
- }
-
- /** GameMapRayCastResult contains the result of the ray-cast. */
- class GameMapRayCastResult {
- /** true when the ray hit a solid voxel. */
- bool hit;
-
- /** true when the start position is in a solid voxel. */
- bool startSolid;
-
- /** Position where the ray hit a solid voxel. */
- Vector3 hitPos;
-
- /** Coordinate of the voxel that the ray hit. */
- IntVector3 hitBlock;
-
- /** Normal of the face that the ray hit. */
- IntVector3 normal;
- }
-
-}
\ No newline at end of file
+
+ /** Represents a game world map. */
+ class GameMap {
+
+ /**
+ * Creates a new map.
+ * @param width You must specify 512.
+ * @param height You must specify 512.
+ * @param depth You must specify 64.
+ */
+ GameMap(int width, int height, int depth) {}
+
+ /** Loads a map from the specified file. */
+ GameMap(const string @path) {}
+
+ /** Gets the color of the specified voxel. */
+ uint GetColor(int x, int y, int z) {}
+
+ /** Returns if the specified voxel is solid (or air). */
+ bool IsSolid(int x, int y, int z) {}
+
+ /** Gets the color of the specified voxel. */
+ uint GetColorWrapped(int x, int y, int z) {}
+
+ /** Returns if the specified voxel is solid (or air). */
+ bool IsSolidWrapped(int x, int y, int z) {}
+
+ /** Makes the specified voxel non-solid. */
+ void SetAir(int x, int y, int z) {}
+
+ /** Makes the specified voxel solid, and sets its color. */
+ void SetSolid(int x, int y, int z, uint color) {}
+
+ /** Retrieves the width of the map. */
+ int Width {
+ get {}
+ }
+
+ /** Retrieves the height of the map. */
+ int Height {
+ get {}
+ }
+
+ /** Retrieves the depth of the map. */
+ int Depth {
+ get {}
+ }
+
+ bool ClipBox(int x, int y, int z) {}
+ bool ClipWorld(int x, int y, int z) {}
+
+ bool ClipBox(float x, float y, float z) {}
+ bool ClipWorld(float x, float y, float z) {}
+
+ /** Casts a ray. */
+ GameMapRayCastResult CastRay(Vector3 start, Vector3 direction, int maxScanSteps);
+ }
+
+ /** GameMapRayCastResult contains the result of the ray-cast. */
+ class GameMapRayCastResult {
+ /** true when the ray hit a solid voxel. */
+ bool hit;
+
+ /** true when the start position is in a solid voxel. */
+ bool startSolid;
+
+ /** Position where the ray hit a solid voxel. */
+ Vector3 hitPos;
+
+ /** Coordinate of the voxel that the ray hit. */
+ IntVector3 hitBlock;
+
+ /** Normal of the face that the ray hit. */
+ IntVector3 normal;
+ }
+
+}
diff --git a/Resources/Scripts/Reference/API/Image.as b/Resources/Scripts/Reference/API/Image.as
index 104a631a..81e7fce9 100644
--- a/Resources/Scripts/Reference/API/Image.as
+++ b/Resources/Scripts/Reference/API/Image.as
@@ -1,37 +1,39 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Image is an opaque type which can be passed to rendering methods to
- * draw an image quickly. */
- class Image {
- /** Retrieves the width of the image, in pixels. */
- float Width {
- get {}
- }
-
- /** Retrieves the width of the image, in pixels. */
- float Height {
- get {}
- }
- }
-
-}
\ No newline at end of file
+
+ /**
+ * Image is an opaque type which can be passed to rendering methods to
+ * draw an image quickly.
+ */
+ class Image {
+ /** Retrieves the width of the image, in pixels. */
+ float Width {
+ get {}
+ }
+
+ /** Retrieves the width of the image, in pixels. */
+ float Height {
+ get {}
+ }
+ }
+
+}
diff --git a/Resources/Scripts/Reference/API/Math.as b/Resources/Scripts/Reference/API/Math.as
index 78e94b19..65786489 100644
--- a/Resources/Scripts/Reference/API/Math.as
+++ b/Resources/Scripts/Reference/API/Math.as
@@ -1,451 +1,488 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
-// FIXME: should be written about math functions of AngelScript add-on
-
+
+// FIXME: should be written about math functions of AngelScript add-on
+
namespace spades {
- /** Does a linear interpolation. */
- float Mix(float a, float b, float f) {}
-
- /** Does a linear interpolation. */
- Vector2 Mix(Vector2 a, Vector2 b, float f) {}
-
- /** Does a linear interpolation. */
- Vector3 Mix(Vector3 a, Vector3 b, float f) {}
-
- /** Applies an smooth-step function. */
- float SmoothStep(float value) {}
-
- /** Retrieves a random value that lies in [0, 1]. */
- float GetRandom() {}
-
- /** Represents a 3-component integral vector. */
- class IntVector3 {
- int x, y, z;
-
- /** Default constructor. */
- IntVector3() {}
-
- /** Initializes new instance of IntVector3 with default values given. */
- IntVector3(const IntVector3@ other) {}
-
- /** Initializes new instance of IntVector3 with default values given. */
- IntVector3(int x, int y, int z) {}
-
- /** Initializes new instance of IntVector3 with default values given. */
- IntVector3(const Vector3@ other) {}
-
- /** Adds the given vector to this one, and returns this. */
- IntVector3 @opAddAssign(const IntVector3@ other) {}
-
- /** Subtracts the given vector from this one, and returns this. */
- IntVector3 @opSubAssign(const IntVector3@ other) {}
-
- /** Multiplies this vector by the given one, and returns this one. */
- IntVector3 @opMulAssign(const IntVector3@ other) {}
-
- /** Divides this vector by the given one, and returns this one. */
- IntVector3 @opDivAssign(const IntVector3@ other) {}
-
- /** Adds the given vector to this one, and returns a new vector. */
- IntVector3 opAdd(const IntVector3@ other) const {}
-
- /** Subtracts the given vector from this one, and returns a new vector. */
- IntVector3 opSub(const IntVector3@ other) const {}
-
- /** Multiplies this vector by the given one, and returns a new vector. */
- IntVector3 opMul(const IntVector3@ other) const {}
-
- /** Divides this vector by the given one, and returns a new vector. */
- IntVector3 opDiv(const IntVector3@ other) const {}
-
- /** Returns the negated vector of this. */
- IntVector3 opNeg() const {}
-
- /** Computes a manhattan length of this vector. */
- int ManhattanLength {
- get const { }
- }
-
- /** Computes a chebyshev length of this vector. */
- int ChebyshevLength {
- get const { }
- }
- }
-
- /** Computes a dot-product of two vectors. */
- int Dot(const IntVector3@, const IntVector3@);
-
- /** Represents a 2-component real vector. */
- class Vector2 {
- float x, y;
-
- /** Default constructor. */
- Vector2() {}
-
- /** Initializes new instance of Vector2 with default values given. */
- Vector2(const Vector2@ other) {}
-
- /** Initializes new instance of Vector2 with default values given. */
- Vector2(float x, float y) {}
-
- /** Adds the given vector to this one, and returns this. */
- Vector2 @opAddAssign(const Vector2@ other) {}
-
- /** Subtracts the given vector from this one, and returns this. */
- Vector2 @opSubAssign(const Vector2@ other) {}
-
- /** Multiplies this vector by the given one, and returns this one. */
- Vector2 @opMulAssign(const Vector2@ other) {}
-
- /** Divides this vector by the given one, and returns this one. */
- Vector2 @opDivAssign(const Vector2@ other) {}
-
- /** Adds the given vector to this one, and returns a new vector. */
- Vector2 opAdd(const Vector2@ other) const {}
-
- /** Subtracts the given vector from this one, and returns a new vector. */
- Vector2 opSub(const Vector2@ other) const {}
-
- /** Multiplies this vector by the given one, and returns a new vector. */
- Vector2 opMul(const Vector2@ other) const {}
-
- /** Divides this vector by the given one, and returns a new vector. */
- Vector2 opDiv(const Vector2@ other) const {}
-
- /** Returns the negated vector of this. */
- Vector2 opNeg() const {}
-
- /** Returns the normalized vector of this. */
- Vector2 Normalized {
- get const {}
- }
-
- /** Computes a manhattan length of this vector. */
- float ManhattanLength {
- get const { }
- }
-
- /** Computes a chebyshev length of this vector. */
- float ChebyshevLength {
- get const { }
- }
-
- /** Computes an euclidean length of this vector. */
- float Length {
- get const { }
- }
-
- /** Computes the second power of an euclidean length of this vector. */
- float LengthPowered {
- get const { }
- }
- }
-
- /** Computes a dot-product of two vectors. */
- float Dot(const Vector2@, const Vector2@);
-
- /** Represents a 3-component real vector. */
- class Vector3 {
- float x, y, z;
-
- /** Default constructor. */
- Vector3() {}
-
- /** Initializes new instance of Vector3 with default values given. */
- Vector3(const Vector3@ other) {}
-
- /** Initializes new instance of Vector3 with default values given. */
- Vector3(float x, float y, float z) {}
-
- /** Initializes new instance of Vector3 with default values given. */
- Vector3(const IntVector3@ other) {}
-
- /** Adds the given vector to this one, and returns this. */
- Vector3 @opAddAssign(const Vector3@ other) {}
-
- /** Subtracts the given vector from this one, and returns this. */
- Vector3 @opSubAssign(const Vector3@ other) {}
-
- /** Multiplies this vector by the given one, and returns this one. */
- Vector3 @opMulAssign(const Vector3@ other) {}
-
- /** Divides this vector by the given one, and returns this one. */
- Vector3 @opDivAssign(const Vector3@ other) {}
-
- /** Adds the given vector to this one, and returns a new vector. */
- Vector3 opAdd(const Vector3@ other) const {}
-
- /** Subtracts the given vector from this one, and returns a new vector. */
- Vector3 opSub(const Vector3@ other) const {}
-
- /** Multiplies this vector by the given one, and returns a new vector. */
- Vector3 opMul(const Vector3@ other) const {}
-
- /** Divides this vector by the given one, and returns a new vector. */
- Vector3 opDiv(const Vector3@ other) const {}
-
- /** Returns the negated vector of this. */
- Vector3 opNeg() const {}
-
- /** Returns the normalized vector of this. */
- Vector3 Normalized {
- get const {}
- }
-
- /** Computes a manhattan length of this vector. */
- float ManhattanLength {
- get const { }
- }
-
- /** Computes a chebyshev length of this vector. */
- float ChebyshevLength {
- get const { }
- }
-
- /** Computes an euclidean length of this vector. */
- float Length {
- get const { }
- }
-
- /** Computes the second power of an euclidean length of this vector. */
- float LengthPowered {
- get const { }
- }
- }
-
- /** Computes a dot-product of two vectors. */
- float Dot(const Vector3@, const Vector3@);
-
- /** Computes a cross-product of two vectors. */
- Vector3 Cross(const Vector3@, const Vector3@);
-
- /** Applies the floor function to the given vector, and
- * returns the computed one. */
- Vector3 Floor(const Vector3@);
-
- /** Applies the ceiling function to the given vector, and
- * returns the computed one. */
- Vector3 Ceil(const Vector3@);
-
-
- /** Represents a 4-component real vector. */
- class Vector4 {
- float x, y, z, w;
-
- /** Default constructor. */
- Vector4() {}
-
- /** Initializes new instance of Vector4 with default values given. */
- Vector4(const Vector4@ other) {}
-
- /** Initializes new instance of Vector4 with default values given. */
- Vector4(float x, float y, float z, float w) {}
-
- /** Initializes new instance of Vector4 with default values given. */
- Vector4(const IntVector4@ other) {}
-
- /** Adds the given vector to this one, and returns this. */
- Vector4 @opAddAssign(const Vector4@ other) {}
-
- /** Subtracts the given vector from this one, and returns this. */
- Vector4 @opSubAssign(const Vector4@ other) {}
-
- /** Multiplies this vector by the given one, and returns this one. */
- Vector4 @opMulAssign(const Vector4@ other) {}
-
- /** Divides this vector by the given one, and returns this one. */
- Vector4 @opDivAssign(const Vector4@ other) {}
-
- /** Adds the given vector to this one, and returns a new vector. */
- Vector4 opAdd(const Vector4@ other) const {}
-
- /** Subtracts the given vector from this one, and returns a new vector. */
- Vector4 opSub(const Vector4@ other) const {}
-
- /** Multiplies this vector by the given one, and returns a new vector. */
- Vector4 opMul(const Vector4@ other) const {}
-
- /** Divides this vector by the given one, and returns a new vector. */
- Vector4 opDiv(const Vector4@ other) const {}
-
- /** Returns the negated vector of this. */
- Vector4 opNeg() const {}
-
- /** Returns the normalized vector of this. */
- Vector4 Normalized {
- get const {}
- }
-
- /** Computes a manhattan length of this vector. */
- float ManhattanLength {
- get const { }
- }
-
- /** Computes a chebyshev length of this vector. */
- float ChebyshevLength {
- get const { }
- }
-
- /** Computes an euclidean length of this vector. */
- float Length {
- get const { }
- }
-
- /** Computes the second power of an euclidean length of this vector. */
- float LengthPowered {
- get const { }
- }
- }
-
- /** Computes a dot-product of two vectors. */
- float Dot(const Vector4@, const Vector4@);
-
- /** Applies the floor function to the given vector, and
- * returns the computed one. */
- Vector4 Floor(const Vector4@);
-
- /** Applies the ceiling function to the given vector, and
- * returns the computed one. */
- Vector4 Ceil(const Vector4@);
-
- /** Represents column-major 4x4 matrix. */
- class Matrix4 {
- private float m00, m10, m20, m30;
- private float m01, m11, m21, m31;
- private float m02, m12, m22, m32;
- private float m03, m13, m23, m33;
-
- /** Default constructor. */
- Matrix4() {}
-
- /** Copy constructor. */
- Matrix4(const Matrix4@ other) {}
-
- /** Initializes Matrix4 with the given values. */
- Matrix4(float m00, float m10, float m20, float m30,
- float m01, float m11, float m21, float m31,
- float m02, float m12, float m22, float m32,
- float m03, float m13, float m23, float m33) {}
-
- /** Multiplies this matrix by the given one, and returns this one. */
- Matrix4 @opMulAssign(const Matrix4@ other) {}
-
- /** Multiplies this matrix by the given one, and returns a matrix. */
- Matrix4 opMul(const Matrix4@ other) {}
-
- /** Multiplies this matrix by the given vector, and returns a vector. */
- Vector4 opMul(const Vector4@ other) {}
-
- /** Multiplies this matrix by the vector [x, y, z, 1], and returns
- * a 3-component vector, discarding the fourth component. */
- Vector3 opMul(const Vector3@ other) {}
-
- /** Returns the transformed position of the vector [0, 0, 0]. */
- Vector3 GetOrigin() const {}
-
- /** Returns the transformed orientation of the specified axis.
- * @param axis 0 for X-axis, 1 for Y-axis, and 2 for Z-axis. */
- Vector3 GetAxis(int axis) const {}
-
- /** Returns the transposed matrix. */
- Matrix4 Transposed {
- get const {}
- }
-
- /** Returns the inverted matrix.
- * This operation works in O(N^3). */
- Matrix4 Inverted {
- get const {}
- }
-
- /** Returns the inverted matrix of an orthogonal one. */
- Matrix4 InvertedFast {
- get const {}
- }
-
- }
-
- /** Creates an matrix that can be used to translate points by the
- * specified displacement vector. */
- Matrix4 CreateTranslateMatrix(Vector3 displacement) {}
-
- /** Creates an matrix that can be used to translate points by the
- * specified displacement vector. */
- Matrix4 CreateTranslateMatrix(float x, float y, float z) {}
-
- /** Creates an matrix that can be used to rotate points by the
- * specified axis and rotation angle. */
- Matrix4 CreateRotateMatrix(Vector3 axis, float radians) {}
-
- /** Creates an matrix that can be used to scale points by the
- * specified vector. */
- Matrix4 CreateScaleMatrix(Vector3 factor) {}
-
- /** Creates an matrix that can be used to scale points by the
- * specified vector. */
- Matrix4 CreateScaleMatrix(float x, float y, float z) {}
-
- /** Creates an matrix that can be used to scale points by the
- * specified factor. */
- Matrix4 CreateScaleMatrix(float factor) {}
-
- /** Creates an matrix using the given axis vector. */
- Matirx4 CreateMatrixFromAxes(Vector3 axisX, Vector3 axisY, Vector3 axisZ,
- Vector3 origin);
-
-
- /** Represents a two-dimensional AABB (axis-aligned bounding box). */
- class AABB2 {
- Vector2 min, max;
- float minX { get const {} set {} }
- float maxX { get const {} set {} }
- float minY { get const {} set {} }
- float maxY { get const {} set {} }
-
- /** Default constructor. */
- AABB2() {}
-
- /** Copy constructor. */
- AABB2(const AABB2@) {}
-
- /** Initializes AABB2 with the top-left coordinate and the
- * dimensions of the bounding box. */
- AABB2(float left, float top, float width, float height) {}
-
- /** Initializes AABB2 with the top-left coordinate and the
- * bottom-right one. */
- AABB2(Vector2 min, Vector2 max) {}
-
- /** Checks if the given vector is in the bounding box. */
- bool Contains(const Vector2@ point) {}
-
- /** Checks if the given box intersects with this one. */
- bool Intersects(const AABB2@ box) {}
-
- /** Extends this bounding box to include the given point. */
- void Add(const Vector2@ point) {}
-
- /** Extends this bounding box to include the given one. */
- void Add(const AABB2@ box) {}
- }
-
+ /** Does a linear interpolation. */
+ float Mix(float a, float b, float f) {}
+
+ /** Does a linear interpolation. */
+ Vector2 Mix(Vector2 a, Vector2 b, float f) {}
+
+ /** Does a linear interpolation. */
+ Vector3 Mix(Vector3 a, Vector3 b, float f) {}
+
+ /** Applies an smooth-step function. */
+ float SmoothStep(float value) {}
+
+ /** Retrieves a random value that lies in [0, 1]. */
+ float GetRandom() {}
+
+ /** Represents a 3-component integral vector. */
+ class IntVector3 {
+ int x, y, z;
+
+ /** Default constructor. */
+ IntVector3() {}
+
+ /** Initializes new instance of IntVector3 with default values given. */
+ IntVector3(const IntVector3 @other) {}
+
+ /** Initializes new instance of IntVector3 with default values given. */
+ IntVector3(int x, int y, int z) {}
+
+ /** Initializes new instance of IntVector3 with default values given. */
+ IntVector3(const Vector3 @other) {}
+
+ /** Adds the given vector to this one, and returns this. */
+ IntVector3 @opAddAssign(const IntVector3 @other) {}
+
+ /** Subtracts the given vector from this one, and returns this. */
+ IntVector3 @opSubAssign(const IntVector3 @other) {}
+
+ /** Multiplies this vector by the given one, and returns this one. */
+ IntVector3 @opMulAssign(const IntVector3 @other) {}
+
+ /** Divides this vector by the given one, and returns this one. */
+ IntVector3 @opDivAssign(const IntVector3 @other) {}
+
+ /** Adds the given vector to this one, and returns a new vector. */
+ IntVector3 opAdd(const IntVector3 @other) const {}
+
+ /** Subtracts the given vector from this one, and returns a new vector. */
+ IntVector3 opSub(const IntVector3 @other) const {}
+
+ /** Multiplies this vector by the given one, and returns a new vector. */
+ IntVector3 opMul(const IntVector3 @other) const {}
+
+ /** Divides this vector by the given one, and returns a new vector. */
+ IntVector3 opDiv(const IntVector3 @other) const {}
+
+ /** Returns the negated vector of this. */
+ IntVector3 opNeg() const {}
+
+ /** Computes a manhattan length of this vector. */
+ int ManhattanLength {
+ get const {}
+ }
+
+ /** Computes a chebyshev length of this vector. */
+ int ChebyshevLength {
+ get const {}
+ }
+ }
+
+ /** Computes a dot-product of two vectors. */
+ int Dot(const IntVector3 @, const IntVector3 @);
+
+ /** Represents a 2-component real vector. */
+ class Vector2 {
+ float x, y;
+
+ /** Default constructor. */
+ Vector2() {}
+
+ /** Initializes new instance of Vector2 with default values given. */
+ Vector2(const Vector2 @other) {}
+
+ /** Initializes new instance of Vector2 with default values given. */
+ Vector2(float x, float y) {}
+
+ /** Adds the given vector to this one, and returns this. */
+ Vector2 @opAddAssign(const Vector2 @other) {}
+
+ /** Subtracts the given vector from this one, and returns this. */
+ Vector2 @opSubAssign(const Vector2 @other) {}
+
+ /** Multiplies this vector by the given one, and returns this one. */
+ Vector2 @opMulAssign(const Vector2 @other) {}
+
+ /** Divides this vector by the given one, and returns this one. */
+ Vector2 @opDivAssign(const Vector2 @other) {}
+
+ /** Adds the given vector to this one, and returns a new vector. */
+ Vector2 opAdd(const Vector2 @other) const {}
+
+ /** Subtracts the given vector from this one, and returns a new vector. */
+ Vector2 opSub(const Vector2 @other) const {}
+
+ /** Multiplies this vector by the given one, and returns a new vector. */
+ Vector2 opMul(const Vector2 @other) const {}
+
+ /** Divides this vector by the given one, and returns a new vector. */
+ Vector2 opDiv(const Vector2 @other) const {}
+
+ /** Returns the negated vector of this. */
+ Vector2 opNeg() const {}
+
+ /** Returns the normalized vector of this. */
+ Vector2 Normalized {
+ get const {}
+ }
+
+ /** Computes a manhattan length of this vector. */
+ float ManhattanLength {
+ get const {}
+ }
+
+ /** Computes a chebyshev length of this vector. */
+ float ChebyshevLength {
+ get const {}
+ }
+
+ /** Computes an euclidean length of this vector. */
+ float Length {
+ get const {}
+ }
+
+ /** Computes the second power of an euclidean length of this vector. */
+ float LengthPowered {
+ get const {}
+ }
+ }
+
+ /** Computes a dot-product of two vectors. */
+ float Dot(const Vector2 @, const Vector2 @);
+
+ /** Represents a 3-component real vector. */
+ class Vector3 {
+ float x, y, z;
+
+ /** Default constructor. */
+ Vector3() {}
+
+ /** Initializes new instance of Vector3 with default values given. */
+ Vector3(const Vector3 @other) {}
+
+ /** Initializes new instance of Vector3 with default values given. */
+ Vector3(float x, float y, float z) {}
+
+ /** Initializes new instance of Vector3 with default values given. */
+ Vector3(const IntVector3 @other) {}
+
+ /** Adds the given vector to this one, and returns this. */
+ Vector3 @opAddAssign(const Vector3 @other) {}
+
+ /** Subtracts the given vector from this one, and returns this. */
+ Vector3 @opSubAssign(const Vector3 @other) {}
+
+ /** Multiplies this vector by the given one, and returns this one. */
+ Vector3 @opMulAssign(const Vector3 @other) {}
+
+ /** Divides this vector by the given one, and returns this one. */
+ Vector3 @opDivAssign(const Vector3 @other) {}
+
+ /** Adds the given vector to this one, and returns a new vector. */
+ Vector3 opAdd(const Vector3 @other) const {}
+
+ /** Subtracts the given vector from this one, and returns a new vector. */
+ Vector3 opSub(const Vector3 @other) const {}
+
+ /** Multiplies this vector by the given one, and returns a new vector. */
+ Vector3 opMul(const Vector3 @other) const {}
+
+ /** Divides this vector by the given one, and returns a new vector. */
+ Vector3 opDiv(const Vector3 @other) const {}
+
+ /** Returns the negated vector of this. */
+ Vector3 opNeg() const {}
+
+ /** Returns the normalized vector of this. */
+ Vector3 Normalized {
+ get const {}
+ }
+
+ /** Computes a manhattan length of this vector. */
+ float ManhattanLength {
+ get const {}
+ }
+
+ /** Computes a chebyshev length of this vector. */
+ float ChebyshevLength {
+ get const {}
+ }
+
+ /** Computes an euclidean length of this vector. */
+ float Length {
+ get const {}
+ }
+
+ /** Computes the second power of an euclidean length of this vector. */
+ float LengthPowered {
+ get const {}
+ }
+ }
+
+ /** Computes a dot-product of two vectors. */
+ float Dot(const Vector3 @, const Vector3 @);
+
+ /** Computes a cross-product of two vectors. */
+ Vector3 Cross(const Vector3 @, const Vector3 @);
+
+ /**
+ * Applies the floor function to the given vector, and
+ * returns the computed one.
+ */
+ Vector3 Floor(const Vector3 @);
+
+ /**
+ * Applies the ceiling function to the given vector, and
+ * returns the computed one.
+ */
+ Vector3 Ceil(const Vector3 @);
+
+ /** Represents a 4-component real vector. */
+ class Vector4 {
+ float x, y, z, w;
+
+ /** Default constructor. */
+ Vector4() {}
+
+ /** Initializes new instance of Vector4 with default values given. */
+ Vector4(const Vector4 @other) {}
+
+ /** Initializes new instance of Vector4 with default values given. */
+ Vector4(float x, float y, float z, float w) {}
+
+ /** Initializes new instance of Vector4 with default values given. */
+ Vector4(const IntVector4 @other) {}
+
+ /** Adds the given vector to this one, and returns this. */
+ Vector4 @opAddAssign(const Vector4 @other) {}
+
+ /** Subtracts the given vector from this one, and returns this. */
+ Vector4 @opSubAssign(const Vector4 @other) {}
+
+ /** Multiplies this vector by the given one, and returns this one. */
+ Vector4 @opMulAssign(const Vector4 @other) {}
+
+ /** Divides this vector by the given one, and returns this one. */
+ Vector4 @opDivAssign(const Vector4 @other) {}
+
+ /** Adds the given vector to this one, and returns a new vector. */
+ Vector4 opAdd(const Vector4 @other) const {}
+
+ /** Subtracts the given vector from this one, and returns a new vector. */
+ Vector4 opSub(const Vector4 @other) const {}
+
+ /** Multiplies this vector by the given one, and returns a new vector. */
+ Vector4 opMul(const Vector4 @other) const {}
+
+ /** Divides this vector by the given one, and returns a new vector. */
+ Vector4 opDiv(const Vector4 @other) const {}
+
+ /** Returns the negated vector of this. */
+ Vector4 opNeg() const {}
+
+ /** Returns the normalized vector of this. */
+ Vector4 Normalized {
+ get const {}
+ }
+
+ /** Computes a manhattan length of this vector. */
+ float ManhattanLength {
+ get const {}
+ }
+
+ /** Computes a chebyshev length of this vector. */
+ float ChebyshevLength {
+ get const {}
+ }
+
+ /** Computes an euclidean length of this vector. */
+ float Length {
+ get const {}
+ }
+
+ /** Computes the second power of an euclidean length of this vector. */
+ float LengthPowered {
+ get const {}
+ }
+ }
+
+ /** Computes a dot-product of two vectors. */
+ float Dot(const Vector4 @, const Vector4 @);
+
+ /**
+ * Applies the floor function to the given vector, and
+ * returns the computed one.
+ */
+ Vector4 Floor(const Vector4 @);
+
+ /**
+ * Applies the ceiling function to the given vector, and
+ * returns the computed one.
+ */
+ Vector4 Ceil(const Vector4 @);
+
+ /** Represents column-major 4x4 matrix. */
+ class Matrix4 {
+ private float m00, m10, m20, m30;
+ private float m01, m11, m21, m31;
+ private float m02, m12, m22, m32;
+ private float m03, m13, m23, m33;
+
+ /** Default constructor. */
+ Matrix4() {}
+
+ /** Copy constructor. */
+ Matrix4(const Matrix4 @other) {}
+
+ /** Initializes Matrix4 with the given values. */
+ Matrix4(float m00, float m10, float m20, float m30, float m01, float m11, float m21,
+ float m31, float m02, float m12, float m22, float m32, float m03, float m13,
+ float m23, float m33) {}
+
+ /** Multiplies this matrix by the given one, and returns this one. */
+ Matrix4 @opMulAssign(const Matrix4 @other) {}
+
+ /** Multiplies this matrix by the given one, and returns a matrix. */
+ Matrix4 opMul(const Matrix4 @other) {}
+
+ /** Multiplies this matrix by the given vector, and returns a vector. */
+ Vector4 opMul(const Vector4 @other) {}
+
+ /**
+ * Multiplies this matrix by the vector [x, y, z, 1], and returns
+ * a 3-component vector, discarding the fourth component.
+ */
+ Vector3 opMul(const Vector3 @other) {}
+
+ /** Returns the transformed position of the vector [0, 0, 0]. */
+ Vector3 GetOrigin() const {}
+
+ /**
+ * Returns the transformed orientation of the specified axis.
+ * @param axis 0 for X-axis, 1 for Y-axis, and 2 for Z-axis.
+ */
+ Vector3 GetAxis(int axis) const {}
+
+ /** Returns the transposed matrix. */
+ Matrix4 Transposed {
+ get const {}
+ }
+
+ /**
+ * Returns the inverted matrix.
+ * This operation works in O(N^3).
+ */
+ Matrix4 Inverted {
+ get const {}
+ }
+
+ /** Returns the inverted matrix of an orthogonal one. */
+ Matrix4 InvertedFast {
+ get const {}
+ }
+ }
+
+ /**
+ * Creates an matrix that can be used to translate points by the
+ * specified displacement vector.
+ */
+ Matrix4 CreateTranslateMatrix(Vector3 displacement) {}
+
+ /**
+ * Creates an matrix that can be used to translate points by the
+ * specified displacement vector.
+ */
+ Matrix4 CreateTranslateMatrix(float x, float y, float z) {}
+
+ /**
+ * Creates an matrix that can be used to rotate points by the
+ * specified axis and rotation angle.
+ */
+ Matrix4 CreateRotateMatrix(Vector3 axis, float radians) {}
+
+ /**
+ * Creates an matrix that can be used to scale points by the
+ * specified vector.
+ */
+ Matrix4 CreateScaleMatrix(Vector3 factor) {}
+
+ /**
+ * Creates an matrix that can be used to scale points by the
+ * specified vector.
+ */
+ Matrix4 CreateScaleMatrix(float x, float y, float z) {}
+
+ /**
+ * Creates an matrix that can be used to scale points by the
+ * specified factor.
+ */
+ Matrix4 CreateScaleMatrix(float factor) {}
+
+ /** Creates an matrix using the given axis vector. */
+ Matirx4 CreateMatrixFromAxes(Vector3 axisX, Vector3 axisY, Vector3 axisZ, Vector3 origin);
+
+ /** Represents a two-dimensional AABB (axis-aligned bounding box). */
+ class AABB2 {
+ Vector2 min, max;
+ float minX {
+ get const {}
+ set {}
+ }
+ float maxX {
+ get const {}
+ set {}
+ }
+ float minY {
+ get const {}
+ set {}
+ }
+ float maxY {
+ get const {}
+ set {}
+ }
+
+ /** Default constructor. */
+ AABB2() {}
+
+ /** Copy constructor. */
+ AABB2(const AABB2 @) {}
+
+ /**
+ * Initializes AABB2 with the top-left coordinate and the
+ * dimensions of the bounding box.
+ */
+ AABB2(float left, float top, float width, float height) {}
+
+ /**
+ * Initializes AABB2 with the top-left coordinate and the
+ * bottom-right one.
+ */
+ AABB2(Vector2 min, Vector2 max) {}
+
+ /** Checks if the given vector is in the bounding box. */
+ bool Contains(const Vector2 @point) {}
+
+ /** Checks if the given box intersects with this one. */
+ bool Intersects(const AABB2 @box) {}
+
+ /** Extends this bounding box to include the given point. */
+ void Add(const Vector2 @point) {}
+
+ /** Extends this bounding box to include the given one. */
+ void Add(const AABB2 @box) {}
+ }
+
}
diff --git a/Resources/Scripts/Reference/API/Model.as b/Resources/Scripts/Reference/API/Model.as
index 63b2fc80..3c358d0b 100644
--- a/Resources/Scripts/Reference/API/Model.as
+++ b/Resources/Scripts/Reference/API/Model.as
@@ -1,29 +1,29 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Model is an opaque type which can be passed to rendering methods to
- * draw an three-dimensional model. */
- class Model {
-
- }
-
-}
\ No newline at end of file
+
+ /**
+ * Model is an opaque type which can be passed to rendering methods to
+ * draw an three-dimensional model.
+ */
+ class Model {}
+
+}
diff --git a/Resources/Scripts/Reference/API/Renderer.as b/Resources/Scripts/Reference/API/Renderer.as
index 1582f98a..8503ed34 100644
--- a/Resources/Scripts/Reference/API/Renderer.as
+++ b/Resources/Scripts/Reference/API/Renderer.as
@@ -1,208 +1,235 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Renderer is an interface to the display device. */
- class Renderer {
-
- /** Initializes the renderer for 3D scene rendering. */
- void Init() {}
-
- /** Shuts down the renderer. */
- void Shutdown() {}
-
- /** Loads an image from the specified path or load one from
- * the cache, if exists.
- * @param path file-system path. */
- Image@ RegisterImage(const string@ path) {}
-
- /** Loads an model from the specified path or load one from
- * the cache, if exists.
- * @param path file-system path. */
- Model@ RegisterModel(const string@ path) {}
-
- /** Creates an image from the specified bitmap. */
- Image@ CreateImage(Bitmap@ bitmap) {}
-
- /** Creates an model from the specified voxel model. */
- Model@ CreateModel(VoxelModel@ voxelmap) {}
-
- /** Sets a game world map. */
- GameMap@ GameMap {
- set {}
- }
-
- /** Changes the fog end distance (not supported). */
- float FogDistance {
- set {}
- }
-
- /** Changes the color of fog. */
- Vector3 FogColor {
- set {}
- }
-
- /** Sets a color that is used for drawing.
- * @deprecated Do not use this virtual property.
- * Some methods treat this value as an alpha premultiplied,
- * while others treat this value has a straight alpha. */
- Vector4 Color {
- set { }
- }
-
- /** Sets a opaque color that is used for drawing. */
- Vector3 ColorOpaque {
- set { }
- }
-
- /** Sets a color that is used for drawing. The color value is
- * alpha premultiplied. */
- Vector4 ColorP {
- set { }
- }
-
- /** Sets a color that is used for drawing. The color value is
- * alpha non-premultiplied (straight alpha). */
- Vector4 ColorNP {
- set { }
- }
-
- /** Starts a 3D scene rendering. */
- void StartScene(const SceneDefinition@) {}
-
- /** Adds a dynamic light to the scene.
- * This should be called between StartScene and EndScene. */
- void AddLight(const DynamicLightParam@) {}
-
- /** Adds a model to the scene.
- * This should be called between StartScene and EndScene. */
- void AddModel(Model@, const ModelRenderParam@) {}
-
- /** Adds a line for debugging.
- * This should be called between StartScene and EndScene. */
- void AddDebugLine(const Vector3@ pt1, const Vector3@ pt2,
- const Vector4@ color) {}
-
- /** Adds a sprite.
- * This should be called between StartScene and EndScene.
- * The color is specified using the property `Color` with
- * alpha values premultiplied. */
- void AddSprite(Image@, const Vector3@ origin, float radius,
- float rotateRadians) {}
-
- /** Adds a long-sprite.
- * This should be called between StartScene and EndScene.
- * The color is specified using the property `Color` with
- * alpha values premultiplied. */
- void AddLongSprite(Image@, const Vector3@ pt1, const Vector3@ pt2, float radius) {}
-
- /** Ends a 3D scene rendering. */
- void EndScene() {}
-
- /** Multiplies color of the screen by the specified color.
- * This should never be called between StartScene and EndScene. */
- void MultiplyScreenColor(Vector3 color) {}
-
- /** Draws a 2D image.
- * This should never be called between StartScene and EndScene. */
- void DrawImage(Image@, const Vector2@ topLeft) {}
-
- /** Draws a 2D image.
- * This should never be called between StartScene and EndScene. */
- void DrawImage(Image@, const AABB2@ outRect) {}
-
- /** Draws a 2D image.
- * This should never be called between StartScene and EndScene. */
- void DrawImage(Image@, const AABB2@ outRect, const AABB2@ inRect) {}
-
- /** Draws a 2D image.
- * This should never be called between StartScene and EndScene. */
- void DrawImage(Image@,
- const Vector2@ outTopLeft, const Vector2@ outTopRight,
- const Vector2@ outBottomLeft, const AABB2@ inRect) {}
-
- /** Finalizes the drawing. */
- void FrameDone();
-
- /** Transfers the rendered image to the user's display. */
- void Flip();
-
- /** Reads the rendered image to a bitmap. */
- Bitmap@ ReadBitmap();
-
- /** Retrieves the width of the screen, in pixels. */
- float ScreenWidth {
- get {}
- }
-
- /** Retrieves the height of the screen, in pixels. */
- float ScreenHeight {
- get {}
- }
- }
-
- class SceneDefinition {
- int viewportLeft, viewportTop;
- int viewportWidth, viewportHeight;
-
- float fovX, fovY;
-
- Vector3 viewOrigin;
- Vector3 viewAxisX;
- Vector3 viewAxisY;
- Vector3 viewAxisZ;
-
- float zNear, zFar;
-
- bool skipWorld;
- uint time;
-
- float depthOfFieldFocalLength;
- float depthOfFieldNearBlurStrength;
- float depthOfFieldFarBlurStrength;
- bool denyCameraBlur;
- float blurVignette;
- }
-
- class ModelRenderParam {
- Matrix4 matrix;
- Vector3 customColor;
- bool depthHack;
- bool castShadow;
- bool unlit;
- }
-
- class DynamicLightParam {
- DynamicLightType type;
- Vector3 origin;
- float radius;
- Vector3 color;
-
- Vector3 spotAxisX;
- Vector3 spotAxisY;
- Vector3 spotAxisZ;
- Image@ image;
- float spotAngle;
-
- bool useLensFlare;
- }
-
-}
\ No newline at end of file
+
+ /** Renderer is an interface to the display device. */
+ class Renderer {
+
+ /** Initializes the renderer for 3D scene rendering. */
+ void Init() {}
+
+ /** Shuts down the renderer. */
+ void Shutdown() {}
+
+ /**
+ * Loads an image from the specified path or load one from
+ * the cache, if exists.
+ * @param path file-system path.
+ */
+ Image @RegisterImage(const string @path) {}
+
+ /**
+ * Loads an model from the specified path or load one from
+ * the cache, if exists.
+ * @param path file-system path.
+ */
+ Model @RegisterModel(const string @path) {}
+
+ /** Creates an image from the specified bitmap. */
+ Image @CreateImage(Bitmap @bitmap) {}
+
+ /** Creates an model from the specified voxel model. */
+ Model @CreateModel(VoxelModel @voxelmap) {}
+
+ /** Sets a game world map. */
+ GameMap @GameMap {
+ set {}
+ }
+
+ /** Changes the fog end distance (not supported). */
+ float FogDistance {
+ set {}
+ }
+
+ /** Changes the color of fog. */
+ Vector3 FogColor {
+ set {}
+ }
+
+ /**
+ * Sets a color that is used for drawing.
+ * @deprecated Do not use this virtual property.
+ * Some methods treat this value as an alpha premultiplied,
+ * while others treat this value has a straight alpha.
+ */
+ Vector4 Color {
+ set {}
+ }
+
+ /** Sets a opaque color that is used for drawing. */
+ Vector3 ColorOpaque {
+ set {}
+ }
+
+ /**
+ * Sets a color that is used for drawing. The color value is
+ * alpha premultiplied.
+ */
+ Vector4 ColorP {
+ set {}
+ }
+
+ /**
+ * Sets a color that is used for drawing. The color value is
+ * alpha non-premultiplied (straight alpha).
+ */
+ Vector4 ColorNP {
+ set {}
+ }
+
+ /** Starts a 3D scene rendering. */
+ void StartScene(const SceneDefinition @) {}
+
+ /**
+ * Adds a dynamic light to the scene.
+ * This should be called between StartScene and EndScene.
+ */
+ void AddLight(const DynamicLightParam @) {}
+
+ /**
+ * Adds a model to the scene.
+ * This should be called between StartScene and EndScene.
+ */
+ void AddModel(Model @, const ModelRenderParam @) {}
+
+ /**
+ * Adds a line for debugging.
+ * This should be called between StartScene and EndScene.
+ */
+ void AddDebugLine(const Vector3 @pt1, const Vector3 @pt2, const Vector4 @color) {}
+
+ /**
+ * Adds a sprite.
+ * This should be called between StartScene and EndScene.
+ * The color is specified using the property `Color` with
+ * alpha values premultiplied.
+ */
+ void AddSprite(Image @, const Vector3 @origin, float radius, float rotateRadians) {}
+
+ /**
+ * Adds a long-sprite.
+ * This should be called between StartScene and EndScene.
+ * The color is specified using the property `Color` with
+ * alpha values premultiplied.
+ */
+ void AddLongSprite(Image @, const Vector3 @pt1, const Vector3 @pt2, float radius) {}
+
+ /** Ends a 3D scene rendering. */
+ void EndScene() {}
+
+ /**
+ * Multiplies color of the screen by the specified color.
+ * This should never be called between StartScene and EndScene.
+ */
+ void MultiplyScreenColor(Vector3 color) {}
+
+ /**
+ * Draws a 2D image.
+ * This should never be called between StartScene and EndScene.
+ */
+ void DrawImage(Image @, const Vector2 @topLeft) {}
+
+ /**
+ * Draws a 2D image.
+ * This should never be called between StartScene and EndScene.
+ */
+ void DrawImage(Image @, const AABB2 @outRect) {}
+
+ /**
+ * Draws a 2D image.
+ * This should never be called between StartScene and EndScene.
+ */
+ void DrawImage(Image @, const AABB2 @outRect, const AABB2 @inRect) {}
+
+ /**
+ * Draws a 2D image.
+ * This should never be called between StartScene and EndScene.
+ */
+ void DrawImage(Image @, const Vector2 @outTopLeft, const Vector2 @outTopRight,
+ const Vector2 @outBottomLeft, const AABB2 @inRect) {}
+
+ /** Finalizes the drawing. */
+ void FrameDone();
+
+ /** Transfers the rendered image to the user's display. */
+ void Flip();
+
+ /** Reads the rendered image to a bitmap. */
+ Bitmap @ReadBitmap();
+
+ /** Retrieves the width of the screen, in pixels. */
+ float ScreenWidth {
+ get {}
+ }
+
+ /** Retrieves the height of the screen, in pixels. */
+ float ScreenHeight {
+ get {}
+ }
+ }
+
+ class SceneDefinition {
+ int viewportLeft, viewportTop;
+ int viewportWidth, viewportHeight;
+
+ float fovX, fovY;
+
+ Vector3 viewOrigin;
+ Vector3 viewAxisX;
+ Vector3 viewAxisY;
+ Vector3 viewAxisZ;
+
+ float zNear, zFar;
+
+ bool skipWorld;
+ uint time;
+
+ float depthOfFieldFocalLength;
+ float depthOfFieldNearBlurStrength;
+ float depthOfFieldFarBlurStrength;
+ bool denyCameraBlur;
+ float blurVignette;
+ }
+
+ class ModelRenderParam {
+ Matrix4 matrix;
+ Vector3 customColor;
+ bool depthHack;
+ bool castShadow;
+ bool unlit;
+ }
+
+ class DynamicLightParam {
+ DynamicLightType type;
+ Vector3 origin;
+ float radius;
+ Vector3 color;
+
+ Vector3 spotAxisX;
+ Vector3 spotAxisY;
+ Vector3 spotAxisZ;
+ Image @image;
+ float spotAngle;
+
+ bool useLensFlare;
+ }
+
+}
diff --git a/Resources/Scripts/Reference/API/System.as b/Resources/Scripts/Reference/API/System.as
index 1e7cf3fb..b44f539b 100644
--- a/Resources/Scripts/Reference/API/System.as
+++ b/Resources/Scripts/Reference/API/System.as
@@ -1,32 +1,32 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Raises an exception, usually resulting a program crash. */
- void Raise(const string& description) {}
-
- /** Asserts the expression is true. */
- void Assert(bool cond) {}
-
- /** Raises 'not implemented' exception. */
- void NotImplemented() {}
-
-}
\ No newline at end of file
+
+ /** Raises an exception, usually resulting a program crash. */
+ void Raise(const string &description) {}
+
+ /** Asserts the expression is true. */
+ void Assert(bool cond) {}
+
+ /** Raises 'not implemented' exception. */
+ void NotImplemented() {}
+
+}
diff --git a/Resources/Scripts/Reference/API/Utilities.as b/Resources/Scripts/Reference/API/Utilities.as
index bcf85420..9246e7a1 100644
--- a/Resources/Scripts/Reference/API/Utilities.as
+++ b/Resources/Scripts/Reference/API/Utilities.as
@@ -1,36 +1,33 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Replaces any occurrence of the pattern string with another string. */
- string Replace(const string@ str,
- const string@ pattern,
- const string@ after) {}
-
-
- /** Removes preceding/following white-spaces. */
- string TrimSpaces(const string@ input) {}
-
- string ToString(int) {}
-
- string ToString(double) {}
-
-}
\ No newline at end of file
+
+ /** Replaces any occurrence of the pattern string with another string. */
+ string Replace(const string @str, const string @pattern, const string @after) {}
+
+ /** Removes preceding/following white-spaces. */
+ string TrimSpaces(const string @input) {}
+
+ string ToString(int) {}
+
+ string ToString(double) {}
+
+}
diff --git a/Resources/Scripts/Reference/API/VoxelModel.as b/Resources/Scripts/Reference/API/VoxelModel.as
index c7055a8f..16dfec4c 100644
--- a/Resources/Scripts/Reference/API/VoxelModel.as
+++ b/Resources/Scripts/Reference/API/VoxelModel.as
@@ -1,65 +1,65 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** Represents a small voxel model. */
- class VoxelModel {
-
- /** Creates a new voxel model.
- * @param width Width of the voxel model.
- * @param height Height of the voxel model.
- * @param depth Depth of the voxel model, which must be <= 64.
- */
- GameMap(int width, int height, int depth) {}
-
- /** Loads a voxel model from the specified file. */
- GameMap(const string@ path) {}
-
- /** Gets the color of the specified voxel. */
- uint GetColor(int x, int y, int z) {}
-
- /** Returns if the specified voxel is solid (or air). */
- bool IsSolid(int x, int y, int z) {}
-
- /** Makes the specified voxel non-solid. */
- void SetAir(int x, int y, int z) {}
-
- /** Makes the specified voxel solid, and sets its color. */
- void SetSolid(int x, int y, int z, uint color) {}
-
- /** Retrieves the width of the voxel model. */
- int Width {
- get { }
- }
-
- /** Retrieves the height of the voxel model. */
- int Height {
- get { }
- }
-
- /** Retrieves the depth of the voxel model. */
- int Depth {
- get { }
- }
-
- }
-
-}
\ No newline at end of file
+
+ /** Represents a small voxel model. */
+ class VoxelModel {
+
+ /**
+ * Creates a new voxel model.
+ * @param width Width of the voxel model.
+ * @param height Height of the voxel model.
+ * @param depth Depth of the voxel model, which must be <= 64.
+ */
+ GameMap(int width, int height, int depth) {}
+
+ /** Loads a voxel model from the specified file. */
+ GameMap(const string @path) {}
+
+ /** Gets the color of the specified voxel. */
+ uint GetColor(int x, int y, int z) {}
+
+ /** Returns if the specified voxel is solid (or air). */
+ bool IsSolid(int x, int y, int z) {}
+
+ /** Makes the specified voxel non-solid. */
+ void SetAir(int x, int y, int z) {}
+
+ /** Makes the specified voxel solid, and sets its color. */
+ void SetSolid(int x, int y, int z, uint color) {}
+
+ /** Retrieves the width of the voxel model. */
+ int Width {
+ get {}
+ }
+
+ /** Retrieves the height of the voxel model. */
+ int Height {
+ get {}
+ }
+
+ /** Retrieves the depth of the voxel model. */
+ int Depth {
+ get {}
+ }
+ }
+
+}
diff --git a/Resources/Scripts/Reference/Skin/IBlockSkin.as b/Resources/Scripts/Reference/Skin/IBlockSkin.as
index 5fd9ac5c..4c671712 100644
--- a/Resources/Scripts/Reference/Skin/IBlockSkin.as
+++ b/Resources/Scripts/Reference/Skin/IBlockSkin.as
@@ -1,34 +1,38 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** A skin of blocks held in hands. A class that implements
- * this might also have to implement either IThirdPersonToolSkin
- * or IViewToolSkin. */
- interface IBlockSkin {
- /** Receives a ready state. 0 = soon after placing a block,
- * >=1 = ready to place a block. */
- float ReadyState { set; }
-
- Vector3 BlockColor { set; }
- }
-
+
+ /**
+ * A skin of blocks held in hands. A class that implements
+ * this might also have to implement either IThirdPersonToolSkin
+ * or IViewToolSkin.
+ */
+ interface IBlockSkin {
+ /**
+ * Receives a ready state. 0 = soon after placing a block,
+ * >=1 = ready to place a block.
+ */
+ float ReadyState { set; }
+
+ Vector3 BlockColor { set; }
+ }
+
}
diff --git a/Resources/Scripts/Reference/Skin/IGrenadeSkin.as b/Resources/Scripts/Reference/Skin/IGrenadeSkin.as
index 7a5dd484..2048004b 100644
--- a/Resources/Scripts/Reference/Skin/IGrenadeSkin.as
+++ b/Resources/Scripts/Reference/Skin/IGrenadeSkin.as
@@ -1,36 +1,42 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** A skin of grenades. A class that implements
- * this might also have to implement either IThirdPersonToolSkin
- * or IViewToolSkin. */
- interface IGrenadeSkin {
- /** Receives a ready state. 0 = soon after placing a block,
- * >=1 = ready to place a block. */
- float ReadyState { set; }
-
- /** Receives how long a player is cooking the grenade.
- * 0 if the player isn't cooking a grenade. */
- float CookTime { set; }
- }
-
+
+ /**
+ * A skin of grenades. A class that implements
+ * this might also have to implement either IThirdPersonToolSkin
+ * or IViewToolSkin.
+ */
+ interface IGrenadeSkin {
+ /**
+ * Receives a ready state. 0 = soon after placing a block,
+ * >=1 = ready to place a block.
+ */
+ float ReadyState { set; }
+
+ /**
+ * Receives how long a player is cooking the grenade.
+ * 0 if the player isn't cooking a grenade.
+ */
+ float CookTime { set; }
+ }
+
}
diff --git a/Resources/Scripts/Reference/Skin/ISpadeSkin.as b/Resources/Scripts/Reference/Skin/ISpadeSkin.as
index 6170fb7b..1e47ec22 100644
--- a/Resources/Scripts/Reference/Skin/ISpadeSkin.as
+++ b/Resources/Scripts/Reference/Skin/ISpadeSkin.as
@@ -1,41 +1,40 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
- /** Action what a user doing with his/her spade. */
- enum SpadeActionType {
- Idle,
- Bash,
- Dig,
- DigStart
- }
-
- /** A skin of spades. A class that implements this might also have to
- * implement either IThirdPersonToolSkin or IViewToolSkin. */
- interface ISpadeSkin {
- SpadeActionType ActionType { set; }
-
- /** Receives an action progress. 0 = soon after swinging,
- * 1 = ready for the next swing. */
- float ActionProgress { set; }
- }
-
+ /** Action what a user doing with his/her spade. */
+ enum SpadeActionType { Idle, Bash, Dig, DigStart }
+
+ /**
+ * A skin of spades. A class that implements this might also have to
+ * implement either IThirdPersonToolSkin or IViewToolSkin.
+ */
+ interface ISpadeSkin {
+ SpadeActionType ActionType { set; }
+
+ /**
+ * Receives an action progress. 0 = soon after swinging,
+ * 1 = ready for the next swing.
+ */
+ float ActionProgress { set; }
+ }
+
}
diff --git a/Resources/Scripts/Reference/Skin/IThirdPersonToolSkin.as b/Resources/Scripts/Reference/Skin/IThirdPersonToolSkin.as
index 652060f5..73c94f29 100644
--- a/Resources/Scripts/Reference/Skin/IThirdPersonToolSkin.as
+++ b/Resources/Scripts/Reference/Skin/IThirdPersonToolSkin.as
@@ -1,34 +1,35 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** A skin of all tools for third-person view. A class that implements
- * this might also have to implement IToolSkin. */
- interface IThirdPersonToolSkin {
-
- /** Receives a transform matrix from tool coordinate to world one. */
- Matrix4 OriginMatrix { set; }
-
- float PitchBias { get; }
-
- }
-
+
+ /**
+ * A skin of all tools for third-person view. A class that implements
+ * this might also have to implement IToolSkin.
+ */
+ interface IThirdPersonToolSkin {
+
+ /** Receives a transform matrix from tool coordinate to world one. */
+ Matrix4 OriginMatrix { set; }
+
+ float PitchBias { get; }
+ }
+
}
diff --git a/Resources/Scripts/Reference/Skin/IToolSkin.as b/Resources/Scripts/Reference/Skin/IToolSkin.as
index 74aaea36..0f74e04f 100644
--- a/Resources/Scripts/Reference/Skin/IToolSkin.as
+++ b/Resources/Scripts/Reference/Skin/IToolSkin.as
@@ -1,48 +1,51 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** A skin of all tools for third-person view. */
- interface IToolSkin {
-
- /** Receives a value that indicates whether the owner of the tool is sprinting.
- * 0 = not sprinting, 1 = sprinting. */
- float SprintState { set; }
-
- /** Receives a value that indicates whether this tool is raised.
- * 0 = brought down, 1 = raised. */
- float RaiseState { set; }
-
- /** Receives the team color. */
- Vector3 TeamColor { set; }
-
- /** Receives whether this skin should play a sound. */
- bool IsMuted { set; }
-
- /** Advances the animation by the specified time span. */
- void Update(float dt);
-
- /** Issues draw commands to add models of this tool to the scene. */
- void AddToScene();
-
- }
-
+
+ /** A skin of all tools for third-person view. */
+ interface IToolSkin {
+
+ /**
+ * Receives a value that indicates whether the owner of the tool is
+ * sprinting. 0 = not sprinting, 1 = sprinting.
+ */
+ float SprintState { set; }
+
+ /**
+ * Receives a value that indicates whether this tool is raised.
+ * 0 = brought down, 1 = raised.
+ */
+ float RaiseState { set; }
+
+ /** Receives the team color. */
+ Vector3 TeamColor { set; }
+
+ /** Receives whether this skin should play a sound. */
+ bool IsMuted { set; }
+
+ /** Advances the animation by the specified time span. */
+ void Update(float dt);
+
+ /** Issues draw commands to add models of this tool to the scene. */
+ void AddToScene();
+ }
+
}
diff --git a/Resources/Scripts/Reference/Skin/IViewToolSkin.as b/Resources/Scripts/Reference/Skin/IViewToolSkin.as
index e4b6fff5..e1afa407 100644
--- a/Resources/Scripts/Reference/Skin/IViewToolSkin.as
+++ b/Resources/Scripts/Reference/Skin/IViewToolSkin.as
@@ -1,41 +1,43 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** A skin of all tools for first-person view. A class that implements
- * this might also have to implement IToolSkin. */
- interface IViewToolSkin {
-
- /** Receives a transform matrix from view coordinate to world one. */
- Matrix4 EyeMatrix { set; }
-
- /** Receives a swing offset that varies with a player movement. */
- Vector3 Swing { set; }
-
- /** Returns positions for player hands in view coordinate. */
- Vector3 LeftHandPosition { get; }
- Vector3 RightHandPosition { get; }
-
- /** Issues draw commands to draw 2d images, such as HUD and crosshair. */
- void Draw2D();
- }
-
+
+ /**
+ * A skin of all tools for first-person view. A class that implements
+ * this might also have to implement IToolSkin.
+ */
+ interface IViewToolSkin {
+
+ /** Receives a transform matrix from view coordinate to world one. */
+ Matrix4 EyeMatrix { set; }
+
+ /** Receives a swing offset that varies with a player movement. */
+ Vector3 Swing { set; }
+
+ /** Returns positions for player hands in view coordinate. */
+ Vector3 LeftHandPosition { get; }
+ Vector3 RightHandPosition { get; }
+
+ /** Issues draw commands to draw 2d images, such as HUD and crosshair. */
+ void Draw2D();
+ }
+
}
diff --git a/Resources/Scripts/Reference/Skin/IWeaponSkin.as b/Resources/Scripts/Reference/Skin/IWeaponSkin.as
index 31fc539b..2c73f5eb 100644
--- a/Resources/Scripts/Reference/Skin/IWeaponSkin.as
+++ b/Resources/Scripts/Reference/Skin/IWeaponSkin.as
@@ -1,55 +1,63 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
namespace spades {
-
- /** A skin of weapons. A class that implements
- * this might also have to implement either IThirdPersonToolSkin
- * or IViewToolSkin. */
- interface IWeaponSkin {
- /** Receives a ready state. 0 = soon after firing,
- * >=1 = ready to fire the next bullet. */
- float ReadyState { set; }
-
- /** 0 = normal, 1 = aiming down the sight. */
- float AimDownSightState { set; }
-
- /** true if player is reloading a weapon */
- bool IsReloading { set; }
-
- /** 0 = reload has started, 1 = done */
- float ReloadProgress { set; }
-
- int Ammo { set; }
- int ClipSize { set; }
-
- /** Called when a player fired the weapon. */
- void WeaponFired();
-
- /** Called when a player started reloading the weapon.
- * For shotgun, this is called for every pellets. */
- void ReloadingWeapon();
-
- /** Called when a played reloaded the weapon.
- * For shotgun, this is called for every pellets. */
- void ReloadedWeapon();
- }
-
+
+ /**
+ * A skin of weapons. A class that implements
+ * this might also have to implement either IThirdPersonToolSkin
+ * or IViewToolSkin.
+ */
+ interface IWeaponSkin {
+ /**
+ * Receives a ready state. 0 = soon after firing,
+ * >=1 = ready to fire the next bullet.
+ */
+ float ReadyState { set; }
+
+ /** 0 = normal, 1 = aiming down the sight. */
+ float AimDownSightState { set; }
+
+ /** true if player is reloading a weapon */
+ bool IsReloading { set; }
+
+ /** 0 = reload has started, 1 = done */
+ float ReloadProgress { set; }
+
+ int Ammo { set; }
+ int ClipSize { set; }
+
+ /** Called when a player fired the weapon. */
+ void WeaponFired();
+
+ /**
+ * Called when a player started reloading the weapon.
+ * For shotgun, this is called for every pellets.
+ */
+ void ReloadingWeapon();
+
+ /**
+ * Called when a played reloaded the weapon.
+ * For shotgun, this is called for every pellets.
+ */
+ void ReloadedWeapon();
+ }
+
}
diff --git a/Resources/Scripts/Skin/BasicViewWeapon.as b/Resources/Scripts/Skin/BasicViewWeapon.as
index c08efd97..81bb0aa1 100644
--- a/Resources/Scripts/Skin/BasicViewWeapon.as
+++ b/Resources/Scripts/Skin/BasicViewWeapon.as
@@ -19,228 +19,197 @@
*/
namespace spades {
- class BasicViewWeapon:
- IToolSkin, IViewToolSkin, IWeaponSkin, IWeaponSkin2 {
- // IToolSkin
- protected float sprintState;
- protected float raiseState;
- protected Vector3 teamColor;
- protected bool muted;
+ class BasicViewWeapon : IToolSkin, IViewToolSkin, IWeaponSkin, IWeaponSkin2 {
+ // IToolSkin
+ protected float sprintState;
+ protected float raiseState;
+ protected Vector3 teamColor;
+ protected bool muted;
- float SprintState {
- set { sprintState = value; }
- get { return sprintState; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ get { return sprintState; }
+ }
- float RaiseState {
- set { raiseState = value; }
- get { return raiseState; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ get { return raiseState; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- get { return teamColor; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ get { return teamColor; }
+ }
- bool IsMuted {
- set { muted = value; }
- get { return muted; }
- }
+ bool IsMuted {
+ set { muted = value; }
+ get { return muted; }
+ }
- // IWeaponSkin
+ // IWeaponSkin
- protected float aimDownSightState;
- protected float aimDownSightStateSmooth;
- protected float readyState;
- protected bool reloading;
- protected float reloadProgress;
- protected int ammo, clipSize;
- protected float localFireVibration;
+ protected float aimDownSightState;
+ protected float aimDownSightStateSmooth;
+ protected float readyState;
+ protected bool reloading;
+ protected float reloadProgress;
+ protected int ammo, clipSize;
+ protected float localFireVibration;
- protected float sprintStateSmooth;
+ protected float sprintStateSmooth;
- float AimDownSightState {
- set {
- aimDownSightState = value;
- aimDownSightStateSmooth = SmoothStep(value);
- }
- get {
- return aimDownSightState;
- }
- }
+ float AimDownSightState {
+ set {
+ aimDownSightState = value;
+ aimDownSightStateSmooth = SmoothStep(value);
+ }
+ get { return aimDownSightState; }
+ }
- float AimDownSightStateSmooth {
- get { return aimDownSightStateSmooth; }
- }
+ float AimDownSightStateSmooth {
+ get { return aimDownSightStateSmooth; }
+ }
- bool IsReloading {
- get { return reloading; }
- set { reloading = value; }
- }
- float ReloadProgress {
- get { return reloadProgress; }
- set { reloadProgress = value; }
- }
- int Ammo {
- set { ammo = value; }
- get { return ammo; }
- }
- int ClipSize {
- set { clipSize = value; }
- get { return clipSize; }
- }
+ bool IsReloading {
+ get { return reloading; }
+ set { reloading = value; }
+ }
+ float ReloadProgress {
+ get { return reloadProgress; }
+ set { reloadProgress = value; }
+ }
+ int Ammo {
+ set { ammo = value; }
+ get { return ammo; }
+ }
+ int ClipSize {
+ set { clipSize = value; }
+ get { return clipSize; }
+ }
- float ReadyState {
- set { readyState = value; }
- get { return readyState; }
- }
+ float ReadyState {
+ set { readyState = value; }
+ get { return readyState; }
+ }
- // IViewToolSkin
+ // IViewToolSkin
- protected Matrix4 eyeMatrix;
- protected Vector3 swing;
- protected Vector3 leftHand;
- protected Vector3 rightHand;
+ protected Matrix4 eyeMatrix;
+ protected Vector3 swing;
+ protected Vector3 leftHand;
+ protected Vector3 rightHand;
- Matrix4 EyeMatrix {
- set { eyeMatrix = value; }
- get { return eyeMatrix; }
- }
+ Matrix4 EyeMatrix {
+ set { eyeMatrix = value; }
+ get { return eyeMatrix; }
+ }
- Vector3 Swing {
- set { swing = value; }
- get { return swing; }
- }
+ Vector3 Swing {
+ set { swing = value; }
+ get { return swing; }
+ }
- Vector3 LeftHandPosition {
- get {
- return leftHand;
- }
- set {
- leftHand = value;
- }
- }
- Vector3 RightHandPosition {
- get {
- return rightHand;
- }
- set {
- rightHand = value;
- }
- }
+ Vector3 LeftHandPosition {
+ get { return leftHand; }
+ set { leftHand = value; }
+ }
+ Vector3 RightHandPosition {
+ get { return rightHand; }
+ set { rightHand = value; }
+ }
- // IWeaponSkin2
- protected float environmentRoom;
- protected float environmentSize;
+ // IWeaponSkin2
+ protected float environmentRoom;
+ protected float environmentSize;
- void SetSoundEnvironment(float room, float size, float distance) {
- environmentRoom = room;
- environmentSize = size;
- }
- // set_SoundOrigin is not called for first-person skin scripts
- Vector3 SoundOrigin {
- set { }
- }
+ void SetSoundEnvironment(float room, float size, float distance) {
+ environmentRoom = room;
+ environmentSize = size;
+ }
+ // set_SoundOrigin is not called for first-person skin scripts
+ Vector3 SoundOrigin {
+ set {}
+ }
- protected Renderer@ renderer;
- protected Image@ sightImage;
+ protected Renderer @renderer;
+ protected Image @sightImage;
- BasicViewWeapon(Renderer@ renderer) {
- @this.renderer = renderer;
- localFireVibration = 0.f;
- @sightImage = renderer.RegisterImage
- ("Gfx/Sight.tga");
- }
+ BasicViewWeapon(Renderer @renderer) {
+ @this.renderer = renderer;
+ localFireVibration = 0.f;
+ @sightImage = renderer.RegisterImage("Gfx/Sight.tga");
+ }
- float GetLocalFireVibration() {
- return localFireVibration;
- }
+ float GetLocalFireVibration() { return localFireVibration; }
- float GetMotionGain() {
- return 1.f - AimDownSightStateSmooth * 0.4f;
- }
+ float GetMotionGain() { return 1.f - AimDownSightStateSmooth * 0.4f; }
- float GetZPos() {
- return 0.2f - AimDownSightStateSmooth * 0.05f;
- }
+ float GetZPos() { return 0.2f - AimDownSightStateSmooth * 0.05f; }
- Vector3 GetLocalFireVibrationOffset() {
- float vib = GetLocalFireVibration();
- float motion = GetMotionGain();
- Vector3 hip = Vector3(
- sin(vib * PiF * 2.f) * 0.008f * motion,
- vib * (vib - 1.f) * 0.14f * motion,
- vib * (1.f - vib) * 0.03f * motion);
- Vector3 ads = Vector3(0.f, vib * (vib - 1.f) * vib * 0.3f * motion, 0.f);
- return Mix(hip, ads, AimDownSightStateSmooth);
- }
+ Vector3 GetLocalFireVibrationOffset() {
+ float vib = GetLocalFireVibration();
+ float motion = GetMotionGain();
+ Vector3 hip =
+ Vector3(sin(vib * PiF * 2.f) * 0.008f * motion, vib * (vib - 1.f) * 0.14f * motion,
+ vib * (1.f - vib) * 0.03f * motion);
+ Vector3 ads = Vector3(0.f, vib * (vib - 1.f) * vib * 0.3f * motion, 0.f);
+ return Mix(hip, ads, AimDownSightStateSmooth);
+ }
- Matrix4 GetViewWeaponMatrix() {
- Matrix4 mat;
- if(sprintStateSmooth > 0.f) {
- mat = CreateRotateMatrix(Vector3(0.f, 1.f, 0.f),
- sprintStateSmooth * -0.1f) * mat;
- mat = CreateRotateMatrix(Vector3(1.f, 0.f, 0.f),
- sprintStateSmooth * 0.3f) * mat;
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f),
- sprintStateSmooth * -0.55f) * mat;
- mat = CreateTranslateMatrix(Vector3(0.23f, -0.05f, 0.15f)
- * sprintStateSmooth) * mat;
- }
+ Matrix4 GetViewWeaponMatrix() {
+ Matrix4 mat;
+ if (sprintStateSmooth > 0.f) {
+ mat = CreateRotateMatrix(Vector3(0.f, 1.f, 0.f), sprintStateSmooth * -0.1f) * mat;
+ mat = CreateRotateMatrix(Vector3(1.f, 0.f, 0.f), sprintStateSmooth * 0.3f) * mat;
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), sprintStateSmooth * -0.55f) * mat;
+ mat =
+ CreateTranslateMatrix(Vector3(0.23f, -0.05f, 0.15f) * sprintStateSmooth) * mat;
+ }
- if(raiseState < 1.f) {
- float putdown = 1.f - raiseState;
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f),
- putdown * -1.3f) * mat;
- mat = CreateRotateMatrix(Vector3(0.f, 1.f, 0.f),
- putdown * 0.2f) * mat;
- mat = CreateTranslateMatrix(Vector3(0.1f, -0.3f, 0.1f)
- * putdown) * mat;
- }
+ if (raiseState < 1.f) {
+ float putdown = 1.f - raiseState;
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), putdown * -1.3f) * mat;
+ mat = CreateRotateMatrix(Vector3(0.f, 1.f, 0.f), putdown * 0.2f) * mat;
+ mat = CreateTranslateMatrix(Vector3(0.1f, -0.3f, 0.1f) * putdown) * mat;
+ }
- Vector3 trans(0.f, 0.f, 0.f);
- trans += Vector3(-0.13f * (1.f - AimDownSightStateSmooth),
- 0.5f, GetZPos());
- trans += swing * GetMotionGain();
- trans += GetLocalFireVibrationOffset();
- mat = CreateTranslateMatrix(trans) * mat;
+ Vector3 trans(0.f, 0.f, 0.f);
+ trans += Vector3(-0.13f * (1.f - AimDownSightStateSmooth), 0.5f, GetZPos());
+ trans += swing * GetMotionGain();
+ trans += GetLocalFireVibrationOffset();
+ mat = CreateTranslateMatrix(trans) * mat;
- return mat;
- }
+ return mat;
+ }
- void Update(float dt) {
- localFireVibration -= dt * 10.f;
- if(localFireVibration < 0.f){
- localFireVibration = 0.f;
- }
+ void Update(float dt) {
+ localFireVibration -= dt * 10.f;
+ if (localFireVibration < 0.f) {
+ localFireVibration = 0.f;
+ }
- float sprintStateSS = sprintState * sprintState;
- if (sprintStateSS > sprintStateSmooth) {
- sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
- } else {
- sprintStateSmooth = sprintStateSS;
- }
- }
+ float sprintStateSS = sprintState * sprintState;
+ if (sprintStateSS > sprintStateSmooth) {
+ sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
+ } else {
+ sprintStateSmooth = sprintStateSS;
+ }
+ }
- void WeaponFired(){
- localFireVibration = 1.f;
- }
+ void WeaponFired() { localFireVibration = 1.f; }
- void AddToScene() {
- }
+ void AddToScene() {}
- void ReloadingWeapon() {
- }
+ void ReloadingWeapon() {}
- void ReloadedWeapon() {
- }
+ void ReloadedWeapon() {}
- void Draw2D() {
- renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
- renderer.DrawImage(sightImage,
- Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
- (renderer.ScreenHeight - sightImage.Height) * 0.5f));
- }
- }
+ void Draw2D() {
+ renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
+ renderer.DrawImage(sightImage,
+ Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
+ (renderer.ScreenHeight - sightImage.Height) * 0.5f));
+ }
+ }
}
diff --git a/Resources/Scripts/Skin/Block/ThirdPerson.as b/Resources/Scripts/Skin/Block/ThirdPerson.as
index 99d769c4..a4aad9d4 100644
--- a/Resources/Scripts/Skin/Block/ThirdPerson.as
+++ b/Resources/Scripts/Skin/Block/ThirdPerson.as
@@ -1,94 +1,91 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
- namespace spades {
- class ThirdPersonBlockSkin:
- IToolSkin, IThirdPersonToolSkin, IBlockSkin {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private Matrix4 originMatrix;
- private Vector3 blockColor;
- private float readyState;
-
- float SprintState {
- set { sprintState = value; }
- }
-
- float RaiseState {
- set { raiseState = value; }
- }
-
- bool IsMuted {
- set {
- // nothing to do; building sound is not related to skin.
- }
- }
-
- Vector3 TeamColor {
- set { teamColor = value; }
- }
-
- Matrix4 OriginMatrix {
- set { originMatrix = value; }
- }
-
- float PitchBias {
- get { return 0.f; }
- }
-
- Vector3 BlockColor {
- set { blockColor = value; }
- }
-
- float ReadyState {
- set { readyState = value; }
- }
-
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
-
- ThirdPersonBlockSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Block/Block2.kv6");
- }
-
- void Update(float dt) {
- }
-
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.05f);
-
- mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
-
- ModelRenderParam param;
- param.matrix = originMatrix * mat;
- param.customColor = blockColor;
- renderer.AddModel(model, param);
- }
- }
-
- IBlockSkin@ CreateThirdPersonBlockSkin(Renderer@ r, AudioDevice@ dev) {
- return ThirdPersonBlockSkin(r, dev);
- }
+
+namespace spades {
+ class ThirdPersonBlockSkin : IToolSkin, IThirdPersonToolSkin, IBlockSkin {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private Matrix4 originMatrix;
+ private Vector3 blockColor;
+ private float readyState;
+
+ float SprintState {
+ set { sprintState = value; }
+ }
+
+ float RaiseState {
+ set { raiseState = value; }
+ }
+
+ bool IsMuted {
+ set {
+ // nothing to do; building sound is not related to skin.
+ }
+ }
+
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
+
+ Matrix4 OriginMatrix {
+ set { originMatrix = value; }
+ }
+
+ float PitchBias {
+ get { return 0.f; }
+ }
+
+ Vector3 BlockColor {
+ set { blockColor = value; }
+ }
+
+ float ReadyState {
+ set { readyState = value; }
+ }
+
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+
+ ThirdPersonBlockSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Block/Block2.kv6");
+ }
+
+ void Update(float dt) {}
+
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.05f);
+
+ mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
+
+ ModelRenderParam param;
+ param.matrix = originMatrix * mat;
+ param.customColor = blockColor;
+ renderer.AddModel(model, param);
+ }
+ }
+
+ IBlockSkin @CreateThirdPersonBlockSkin(Renderer @r, AudioDevice @dev) {
+ return ThirdPersonBlockSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Block/View.as b/Resources/Scripts/Skin/Block/View.as
index 8b4db2e3..021f815e 100644
--- a/Resources/Scripts/Skin/Block/View.as
+++ b/Resources/Scripts/Skin/Block/View.as
@@ -18,131 +18,119 @@
*/
- namespace spades {
- class ViewBlockSkin:
- IToolSkin, IViewToolSkin, IBlockSkin {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private Matrix4 eyeMatrix;
- private Vector3 swing;
- private Vector3 leftHand;
- private Vector3 rightHand;
- private Vector3 blockColor;
- private float readyState;
+namespace spades {
+ class ViewBlockSkin : IToolSkin, IViewToolSkin, IBlockSkin {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private Matrix4 eyeMatrix;
+ private Vector3 swing;
+ private Vector3 leftHand;
+ private Vector3 rightHand;
+ private Vector3 blockColor;
+ private float readyState;
- private float sprintStateSmooth;
+ private float sprintStateSmooth;
- float SprintState {
- set { sprintState = value; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ }
- float RaiseState {
- set { raiseState = value; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
- bool IsMuted {
- set {
- // nothing to do
- }
- }
+ bool IsMuted {
+ set {
+ // nothing to do
+ }
+ }
- Matrix4 EyeMatrix {
- set { eyeMatrix = value; }
- }
+ Matrix4 EyeMatrix {
+ set { eyeMatrix = value; }
+ }
- Vector3 Swing {
- set { swing = value; }
- }
+ Vector3 Swing {
+ set { swing = value; }
+ }
- Vector3 LeftHandPosition {
- get {
- return leftHand;
- }
- }
- Vector3 RightHandPosition {
- get {
- return rightHand;
- }
- }
+ Vector3 LeftHandPosition {
+ get { return leftHand; }
+ }
+ Vector3 RightHandPosition {
+ get { return rightHand; }
+ }
- Vector3 BlockColor {
- set { blockColor = value; }
- }
+ Vector3 BlockColor {
+ set { blockColor = value; }
+ }
- float ReadyState {
- set { readyState = value; }
- }
+ float ReadyState {
+ set { readyState = value; }
+ }
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
- private Image@ sightImage;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+ private Image @sightImage;
- ViewBlockSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Block/Block2.kv6");
- @sightImage = renderer.RegisterImage
- ("Gfx/Sight.tga");
- }
+ ViewBlockSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Block/Block2.kv6");
+ @sightImage = renderer.RegisterImage("Gfx/Sight.tga");
+ }
- void Update(float dt) {
- float sprintStateSS = sprintState * sprintState;
- if (sprintStateSS > sprintStateSmooth) {
- sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
- } else {
- sprintStateSmooth = sprintStateSS;
- }
- }
+ void Update(float dt) {
+ float sprintStateSS = sprintState * sprintState;
+ if (sprintStateSS > sprintStateSmooth) {
+ sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
+ } else {
+ sprintStateSmooth = sprintStateSS;
+ }
+ }
- void AddToScene() {
- if(readyState < .99f){
- // not ready
- leftHand = Vector3(0.5f, 0.5f, 0.6f);
- rightHand = Vector3(-0.5f, 0.5f, 0.6f);
- return;
- }
+ void AddToScene() {
+ if (readyState < .99f) {
+ // not ready
+ leftHand = Vector3(0.5f, 0.5f, 0.6f);
+ rightHand = Vector3(-0.5f, 0.5f, 0.6f);
+ return;
+ }
- Matrix4 mat = CreateScaleMatrix(0.033f);
+ Matrix4 mat = CreateScaleMatrix(0.033f);
- if(sprintStateSmooth > 0.f) {
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f),
- sprintStateSmooth * -0.3f) * mat;
- mat = CreateTranslateMatrix(Vector3(0.1f, -0.4f, -0.05f) * sprintStateSmooth)
- * mat;
- }
+ if (sprintStateSmooth > 0.f) {
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), sprintStateSmooth * -0.3f) * mat;
+ mat = CreateTranslateMatrix(Vector3(0.1f, -0.4f, -0.05f) * sprintStateSmooth) * mat;
+ }
- mat = CreateTranslateMatrix(-0.3f, 0.7f, 0.3f) * mat;
- mat = CreateTranslateMatrix(swing) * mat;
+ mat = CreateTranslateMatrix(-0.3f, 0.7f, 0.3f) * mat;
+ mat = CreateTranslateMatrix(swing) * mat;
- mat = CreateTranslateMatrix(Vector3(-0.1f, -0.3f, 0.2f) * (1.f - raiseState))
- * mat;
+ mat = CreateTranslateMatrix(Vector3(-0.1f, -0.3f, 0.2f) * (1.f - raiseState)) * mat;
- leftHand = mat * Vector3(5.f, -1.f, 4.f);
- rightHand = mat * Vector3(-5.5f, 3.f, -5.f);
+ leftHand = mat * Vector3(5.f, -1.f, 4.f);
+ rightHand = mat * Vector3(-5.5f, 3.f, -5.f);
- ModelRenderParam param;
- param.matrix = eyeMatrix * mat;
- param.customColor = blockColor;
- param.depthHack = true;
- renderer.AddModel(model, param);
- }
+ ModelRenderParam param;
+ param.matrix = eyeMatrix * mat;
+ param.customColor = blockColor;
+ param.depthHack = true;
+ renderer.AddModel(model, param);
+ }
- void Draw2D() {
- renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
- renderer.DrawImage(sightImage,
- Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
- (renderer.ScreenHeight - sightImage.Height) * 0.5f));
- }
- }
+ void Draw2D() {
+ renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
+ renderer.DrawImage(sightImage,
+ Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
+ (renderer.ScreenHeight - sightImage.Height) * 0.5f));
+ }
+ }
- IBlockSkin@ CreateViewBlockSkin(Renderer@ r, AudioDevice@ dev) {
- return ViewBlockSkin(r, dev);
- }
+ IBlockSkin @CreateViewBlockSkin(Renderer @r, AudioDevice @dev) { return ViewBlockSkin(r, dev); }
}
diff --git a/Resources/Scripts/Skin/Grenade/ThirdPerson.as b/Resources/Scripts/Skin/Grenade/ThirdPerson.as
index a5fbb914..216c09d1 100644
--- a/Resources/Scripts/Skin/Grenade/ThirdPerson.as
+++ b/Resources/Scripts/Skin/Grenade/ThirdPerson.as
@@ -1,93 +1,90 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
- namespace spades {
- class ThirdPersonGrenadeSkin:
- IToolSkin, IThirdPersonToolSkin, IGrenadeSkin {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private Matrix4 originMatrix;
- private float cookTime;
- private float readyState;
-
- float SprintState {
- set { sprintState = value; }
- }
-
- float RaiseState {
- set { raiseState = value; }
- }
-
- bool IsMuted {
- set {
- // nothing to do
- }
- }
-
- Vector3 TeamColor {
- set { teamColor = value; }
- }
-
- Matrix4 OriginMatrix {
- set { originMatrix = value; }
- }
-
- float PitchBias {
- get { return 0.f; }
- }
-
- float CookTime {
- set { cookTime = value; }
- }
-
- float ReadyState {
- set { readyState = value; }
- }
-
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
-
- ThirdPersonGrenadeSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Grenade/Grenade.kv6");
- }
-
- void Update(float dt) {
- }
-
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.05f);
-
- mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
-
- ModelRenderParam param;
- param.matrix = originMatrix * mat;
- renderer.AddModel(model, param);
- }
- }
-
- IGrenadeSkin@ CreateThirdPersonGrenadeSkin(Renderer@ r, AudioDevice@ dev) {
- return ThirdPersonGrenadeSkin(r, dev);
- }
+
+namespace spades {
+ class ThirdPersonGrenadeSkin : IToolSkin, IThirdPersonToolSkin, IGrenadeSkin {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private Matrix4 originMatrix;
+ private float cookTime;
+ private float readyState;
+
+ float SprintState {
+ set { sprintState = value; }
+ }
+
+ float RaiseState {
+ set { raiseState = value; }
+ }
+
+ bool IsMuted {
+ set {
+ // nothing to do
+ }
+ }
+
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
+
+ Matrix4 OriginMatrix {
+ set { originMatrix = value; }
+ }
+
+ float PitchBias {
+ get { return 0.f; }
+ }
+
+ float CookTime {
+ set { cookTime = value; }
+ }
+
+ float ReadyState {
+ set { readyState = value; }
+ }
+
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+
+ ThirdPersonGrenadeSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Grenade/Grenade.kv6");
+ }
+
+ void Update(float dt) {}
+
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.05f);
+
+ mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
+
+ ModelRenderParam param;
+ param.matrix = originMatrix * mat;
+ renderer.AddModel(model, param);
+ }
+ }
+
+ IGrenadeSkin @CreateThirdPersonGrenadeSkin(Renderer @r, AudioDevice @dev) {
+ return ThirdPersonGrenadeSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Grenade/View.as b/Resources/Scripts/Skin/Grenade/View.as
index ba65fcc6..1b452cd3 100644
--- a/Resources/Scripts/Skin/Grenade/View.as
+++ b/Resources/Scripts/Skin/Grenade/View.as
@@ -18,163 +18,155 @@
*/
- namespace spades {
- class ViewGrenadeSkin:
- IToolSkin, IViewToolSkin, IGrenadeSkin {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private Matrix4 eyeMatrix;
- private Vector3 swing;
- private Vector3 leftHand;
- private Vector3 rightHand;
- private float cookTime;
- private float readyState;
+namespace spades {
+ class ViewGrenadeSkin : IToolSkin, IViewToolSkin, IGrenadeSkin {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private Matrix4 eyeMatrix;
+ private Vector3 swing;
+ private Vector3 leftHand;
+ private Vector3 rightHand;
+ private float cookTime;
+ private float readyState;
- private float sprintStateSmooth;
+ private float sprintStateSmooth;
- float SprintState {
- set { sprintState = value; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ }
- float RaiseState {
- set { raiseState = value; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
- bool IsMuted {
- set {
- // nothing to do
- }
- }
+ bool IsMuted {
+ set {
+ // nothing to do
+ }
+ }
- Matrix4 EyeMatrix {
- set { eyeMatrix = value; }
- }
+ Matrix4 EyeMatrix {
+ set { eyeMatrix = value; }
+ }
- Vector3 Swing {
- set { swing = value; }
- }
+ Vector3 Swing {
+ set { swing = value; }
+ }
- Vector3 LeftHandPosition {
- get {
- return leftHand;
- }
- }
- Vector3 RightHandPosition {
- get {
- return rightHand;
- }
- }
+ Vector3 LeftHandPosition {
+ get { return leftHand; }
+ }
+ Vector3 RightHandPosition {
+ get { return rightHand; }
+ }
- float CookTime {
- set { cookTime = value; }
- }
+ float CookTime {
+ set { cookTime = value; }
+ }
- float ReadyState {
- set { readyState = value; }
- }
+ float ReadyState {
+ set { readyState = value; }
+ }
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
- private Image@ sightImage;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+ private Image @sightImage;
- ViewGrenadeSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Grenade/Grenade.kv6");
- @sightImage = renderer.RegisterImage
- ("Gfx/Sight.tga");
- }
+ ViewGrenadeSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Grenade/Grenade.kv6");
+ @sightImage = renderer.RegisterImage("Gfx/Sight.tga");
+ }
- void Update(float dt) {
- float sprintStateSS = sprintState * sprintState;
- if (sprintStateSS > sprintStateSmooth) {
- sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
- } else {
- sprintStateSmooth = sprintStateSS;
- }
- }
+ void Update(float dt) {
+ float sprintStateSS = sprintState * sprintState;
+ if (sprintStateSS > sprintStateSmooth) {
+ sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
+ } else {
+ sprintStateSmooth = sprintStateSS;
+ }
+ }
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.033f);
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.033f);
- if(readyState > 0.9999) {
- float bring = 0.f;
- float pin = 0.f;
- float side = 0.f;
+ if (readyState > 0.9999) {
+ float bring = 0.f;
+ float pin = 0.f;
+ float side = 0.f;
- bring = Min((readyState - 1.f) * 2.f, 1.f);
- bring = 1.f - bring;
- bring = 1.f - bring * bring;
+ bring = Min((readyState - 1.f) * 2.f, 1.f);
+ bring = 1.f - bring;
+ bring = 1.f - bring * bring;
- if(cookTime > 0.0001f) {
- pin = Min(cookTime * 8.f, 2.f);
+ if (cookTime > 0.0001f) {
+ pin = Min(cookTime * 8.f, 2.f);
- if(pin > 1.f) {
- side += pin - 1.f;
- bring -= (pin - 1.f) * 2.f;
- }
- }
+ if (pin > 1.f) {
+ side += pin - 1.f;
+ bring -= (pin - 1.f) * 2.f;
+ }
+ }
- if(sprintStateSmooth > 0.f){
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f),
- sprintStateSmooth * -0.3f) * mat;
- mat = CreateTranslateMatrix(Vector3(0.1f, -0.2f, -0.05f)
- * sprintStateSmooth) * mat;
- }
- mat = CreateTranslateMatrix(-0.3f - side * 0.8f,
- 0.8f - bring * 0.1f, 0.45f - bring * 0.15f) * mat;
+ if (sprintStateSmooth > 0.f) {
+ mat =
+ CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), sprintStateSmooth * -0.3f) * mat;
+ mat = CreateTranslateMatrix(Vector3(0.1f, -0.2f, -0.05f) * sprintStateSmooth) *
+ mat;
+ }
+ mat = CreateTranslateMatrix(-0.3f - side * 0.8f, 0.8f - bring * 0.1f,
+ 0.45f - bring * 0.15f) *
+ mat;
- mat = CreateTranslateMatrix(Vector3(-0.1f, -0.3f, 0.1f) * (1.f - raiseState))
- * mat;
+ mat = CreateTranslateMatrix(Vector3(-0.1f, -0.3f, 0.1f) * (1.f - raiseState)) * mat;
- mat = CreateTranslateMatrix(swing) * mat;
+ mat = CreateTranslateMatrix(swing) * mat;
- leftHand = mat * Vector3(10.f, -1.f, 10.f);
- rightHand = mat * Vector3(-3.f, 1.f, 5.f);
+ leftHand = mat * Vector3(10.f, -1.f, 10.f);
+ rightHand = mat * Vector3(-3.f, 1.f, 5.f);
- Vector3 leftHand2 = mat * Vector3(2.f, 1.f, -2.f);
- Vector3 leftHand3 = mat * Vector3(8.f, -1.f, 10.f);
+ Vector3 leftHand2 = mat * Vector3(2.f, 1.f, -2.f);
+ Vector3 leftHand3 = mat * Vector3(8.f, -1.f, 10.f);
- if(pin < 1.f){
- leftHand = Mix(leftHand, leftHand2, pin);
- }else{
- leftHand = Mix(leftHand2, leftHand3, pin - 1.f);
- }
+ if (pin < 1.f) {
+ leftHand = Mix(leftHand, leftHand2, pin);
+ } else {
+ leftHand = Mix(leftHand2, leftHand3, pin - 1.f);
+ }
- ModelRenderParam param;
- param.matrix = eyeMatrix * mat;
- param.depthHack = true;
- renderer.AddModel(model, param);
- } else {
- // throwing
- float per = readyState;
- per = Min(per * 3.f, 1.f);
+ ModelRenderParam param;
+ param.matrix = eyeMatrix * mat;
+ param.depthHack = true;
+ renderer.AddModel(model, param);
+ } else {
+ // throwing
+ float per = readyState;
+ per = Min(per * 3.f, 1.f);
- // left hand shouldn't be visible
- leftHand = Vector3(0.5f, 0.5f, 0.6f);
+ // left hand shouldn't be visible
+ leftHand = Vector3(0.5f, 0.5f, 0.6f);
- float p2 = per - 0.6f;
- p2 = 0.9f - p2 * p2 * 2.5f;
- rightHand = Vector3(-0.2f, p2, -0.9f + per * 1.8f);
- }
+ float p2 = per - 0.6f;
+ p2 = 0.9f - p2 * p2 * 2.5f;
+ rightHand = Vector3(-0.2f, p2, -0.9f + per * 1.8f);
+ }
+ }
+ void Draw2D() {
+ renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
+ renderer.DrawImage(sightImage,
+ Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
+ (renderer.ScreenHeight - sightImage.Height) * 0.5f));
+ }
+ }
- }
- void Draw2D() {
- renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
- renderer.DrawImage(sightImage,
- Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
- (renderer.ScreenHeight - sightImage.Height) * 0.5f));
- }
- }
-
- IGrenadeSkin@ CreateViewGrenadeSkin(Renderer@ r, AudioDevice@ dev) {
- return ViewGrenadeSkin(r, dev);
- }
+ IGrenadeSkin @CreateViewGrenadeSkin(Renderer @r, AudioDevice @dev) {
+ return ViewGrenadeSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Rifle/ThirdPerson.as b/Resources/Scripts/Skin/Rifle/ThirdPerson.as
index 9a9708bf..34fc8176 100644
--- a/Resources/Scripts/Skin/Rifle/ThirdPerson.as
+++ b/Resources/Scripts/Skin/Rifle/ThirdPerson.as
@@ -18,165 +18,153 @@
*/
- namespace spades {
- class ThirdPersonRifleSkin:
- IToolSkin, IThirdPersonToolSkin, IWeaponSkin, IWeaponSkin2 {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private bool muted = true;
- private Matrix4 originMatrix;
- private float aimDownSightState;
- private float readyState;
- private bool reloading;
- private float reloadProgress;
- private int ammo, clipSize;
+namespace spades {
+ class ThirdPersonRifleSkin : IToolSkin, IThirdPersonToolSkin, IWeaponSkin, IWeaponSkin2 {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private bool muted = true;
+ private Matrix4 originMatrix;
+ private float aimDownSightState;
+ private float readyState;
+ private bool reloading;
+ private float reloadProgress;
+ private int ammo, clipSize;
- private float environmentRoom;
- private float environmentSize;
- private float environmentDistance;
- private Vector3 soundOrigin;
+ private float environmentRoom;
+ private float environmentSize;
+ private float environmentDistance;
+ private Vector3 soundOrigin;
- float SprintState {
- set { sprintState = value; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ }
- float RaiseState {
- set { raiseState = value; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ }
- bool IsMuted {
- set { muted = value; }
- }
+ bool IsMuted {
+ set { muted = value; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
- Matrix4 OriginMatrix {
- set { originMatrix = value; }
- }
+ Matrix4 OriginMatrix {
+ set { originMatrix = value; }
+ }
- float PitchBias {
- get { return 0.f; }
- }
+ float PitchBias {
+ get { return 0.f; }
+ }
- float AimDownSightState {
- set { aimDownSightState = value; }
- }
+ float AimDownSightState {
+ set { aimDownSightState = value; }
+ }
- bool IsReloading {
- set { reloading = value; }
- }
- float ReloadProgress {
- set { reloadProgress = value; }
- }
- int Ammo {
- set { ammo = value; }
- }
- int ClipSize {
- set { clipSize = value; }
- }
+ bool IsReloading {
+ set { reloading = value; }
+ }
+ float ReloadProgress {
+ set { reloadProgress = value; }
+ }
+ int Ammo {
+ set { ammo = value; }
+ }
+ int ClipSize {
+ set { clipSize = value; }
+ }
- float ReadyState {
- set { readyState = value; }
- }
+ float ReadyState {
+ set { readyState = value; }
+ }
- // IWeaponSkin2
- void SetSoundEnvironment(float room, float size, float distance) {
- environmentRoom = room;
- environmentSize = size;
- environmentDistance = distance;
- }
- Vector3 SoundOrigin {
- set { soundOrigin = value; }
- }
+ // IWeaponSkin2
+ void SetSoundEnvironment(float room, float size, float distance) {
+ environmentRoom = room;
+ environmentSize = size;
+ environmentDistance = distance;
+ }
+ Vector3 SoundOrigin {
+ set { soundOrigin = value; }
+ }
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
- private AudioChunk@[] fireSounds(3);
- private AudioChunk@ fireFarSound;
- private AudioChunk@ fireStereoSound;
- private AudioChunk@ fireSmallReverbSound;
- private AudioChunk@ fireLargeReverbSound;
- private AudioChunk@ reloadSound;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+ private AudioChunk @[] fireSounds(3);
+ private AudioChunk @fireFarSound;
+ private AudioChunk @fireStereoSound;
+ private AudioChunk @fireSmallReverbSound;
+ private AudioChunk @fireLargeReverbSound;
+ private AudioChunk @reloadSound;
- ThirdPersonRifleSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Rifle/Weapon.kv6");
+ ThirdPersonRifleSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Rifle/Weapon.kv6");
- @fireSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/Rifle/Fire1.opus");
- @fireSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/Rifle/Fire2.opus");
- @fireSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/Rifle/Fire3.opus");
- @fireFarSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/FireFar.opus");
- @fireStereoSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/FireStereo.opus");
- @reloadSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/Reload.opus");
+ @fireSounds[0] = dev.RegisterSound("Sounds/Weapons/Rifle/Fire1.opus");
+ @fireSounds[1] = dev.RegisterSound("Sounds/Weapons/Rifle/Fire2.opus");
+ @fireSounds[2] = dev.RegisterSound("Sounds/Weapons/Rifle/Fire3.opus");
+ @fireFarSound = dev.RegisterSound("Sounds/Weapons/Rifle/FireFar.opus");
+ @fireStereoSound = dev.RegisterSound("Sounds/Weapons/Rifle/FireStereo.opus");
+ @reloadSound = dev.RegisterSound("Sounds/Weapons/Rifle/Reload.opus");
- @fireSmallReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/V2AmbienceSmall.opus");
- @fireLargeReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/V2AmbienceLarge.opus");
- }
+ @fireSmallReverbSound = dev.RegisterSound("Sounds/Weapons/Rifle/V2AmbienceSmall.opus");
+ @fireLargeReverbSound = dev.RegisterSound("Sounds/Weapons/Rifle/V2AmbienceLarge.opus");
+ }
- void Update(float dt) {
- }
+ void Update(float dt) {}
- void WeaponFired(){
- if(!muted){
- Vector3 origin = soundOrigin;
- AudioParam param;
- param.volume = 20.f;
- audioDevice.Play(fireSounds[GetRandom(fireSounds.length)], origin, param);
+ void WeaponFired() {
+ if (!muted) {
+ Vector3 origin = soundOrigin;
+ AudioParam param;
+ param.volume = 20.f;
+ audioDevice.Play(fireSounds[GetRandom(fireSounds.length)], origin, param);
- param.volume = 20.f * environmentRoom;
- if (environmentSize < 0.5f) {
- audioDevice.Play(fireSmallReverbSound, origin, param);
- } else {
- audioDevice.Play(fireLargeReverbSound, origin, param);
- }
+ param.volume = 20.f * environmentRoom;
+ if (environmentSize < 0.5f) {
+ audioDevice.Play(fireSmallReverbSound, origin, param);
+ } else {
+ audioDevice.Play(fireLargeReverbSound, origin, param);
+ }
- param.volume = 1.f;
- param.referenceDistance = 26.f;
- audioDevice.Play(fireFarSound, origin, param);
- param.referenceDistance = 4.f;
- param.volume = 1.f;
- audioDevice.Play(fireStereoSound, origin, param);
- }
- }
+ param.volume = 1.f;
+ param.referenceDistance = 26.f;
+ audioDevice.Play(fireFarSound, origin, param);
+ param.referenceDistance = 4.f;
+ param.volume = 1.f;
+ audioDevice.Play(fireStereoSound, origin, param);
+ }
+ }
- void ReloadingWeapon() {
- if(!muted){
- Vector3 origin = soundOrigin;
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.Play(reloadSound, origin, param);
- }
- }
+ void ReloadingWeapon() {
+ if (!muted) {
+ Vector3 origin = soundOrigin;
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.Play(reloadSound, origin, param);
+ }
+ }
- void ReloadedWeapon() {
- }
+ void ReloadedWeapon() {}
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.05f);
- mat = mat * CreateScaleMatrix(-1.f, -1.f, 1.f);
- mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.05f);
+ mat = mat * CreateScaleMatrix(-1.f, -1.f, 1.f);
+ mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
- ModelRenderParam param;
- param.matrix = originMatrix * mat;
- renderer.AddModel(model, param);
- }
- }
+ ModelRenderParam param;
+ param.matrix = originMatrix * mat;
+ renderer.AddModel(model, param);
+ }
+ }
- IWeaponSkin@ CreateThirdPersonRifleSkin(Renderer@ r, AudioDevice@ dev) {
- return ThirdPersonRifleSkin(r, dev);
- }
+ IWeaponSkin @CreateThirdPersonRifleSkin(Renderer @r, AudioDevice @dev) {
+ return ThirdPersonRifleSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Rifle/View.as b/Resources/Scripts/Skin/Rifle/View.as
index b2603692..82f365e4 100644
--- a/Resources/Scripts/Skin/Rifle/View.as
+++ b/Resources/Scripts/Skin/Rifle/View.as
@@ -18,213 +18,198 @@
*/
- namespace spades {
- class ViewRifleSkin:
- IToolSkin, IViewToolSkin, IWeaponSkin,
- BasicViewWeapon {
+namespace spades {
+ class ViewRifleSkin : IToolSkin, IViewToolSkin, IWeaponSkin, BasicViewWeapon {
- private AudioDevice@ audioDevice;
- private Model@ gunModel;
- private Model@ magazineModel;
+ private AudioDevice @audioDevice;
+ private Model @gunModel;
+ private Model @magazineModel;
- private AudioChunk@ fireSound;
- private AudioChunk@ fireFarSound;
- private AudioChunk@ fireStereoSound;
- private AudioChunk@ fireSmallReverbSound;
- private AudioChunk@ fireLargeReverbSound;
- private AudioChunk@ reloadSound;
- private Model@ sightModel1;
- private Model@ sightModel2;
+ private AudioChunk @fireSound;
+ private AudioChunk @fireFarSound;
+ private AudioChunk @fireStereoSound;
+ private AudioChunk @fireSmallReverbSound;
+ private AudioChunk @fireLargeReverbSound;
+ private AudioChunk @reloadSound;
+ private Model @sightModel1;
+ private Model @sightModel2;
- ViewRifleSkin(Renderer@ r, AudioDevice@ dev){
- super(r);
- @audioDevice = dev;
- @gunModel = renderer.RegisterModel
- ("Models/Weapons/Rifle/WeaponNoMagazine.kv6");
- @magazineModel = renderer.RegisterModel
- ("Models/Weapons/Rifle/Magazine.kv6");
- @sightModel1 = renderer.RegisterModel
- ("Models/Weapons/Rifle/Sight1.kv6");
- @sightModel2 = renderer.RegisterModel
- ("Models/Weapons/Rifle/Sight2.kv6");
+ ViewRifleSkin(Renderer @r, AudioDevice @dev) {
+ super(r);
+ @audioDevice = dev;
+ @gunModel = renderer.RegisterModel("Models/Weapons/Rifle/WeaponNoMagazine.kv6");
+ @magazineModel = renderer.RegisterModel("Models/Weapons/Rifle/Magazine.kv6");
+ @sightModel1 = renderer.RegisterModel("Models/Weapons/Rifle/Sight1.kv6");
+ @sightModel2 = renderer.RegisterModel("Models/Weapons/Rifle/Sight2.kv6");
- @fireSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/FireLocal.opus");
- @fireFarSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/FireFar.opus");
- @fireStereoSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/FireStereo.opus");
- @reloadSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/ReloadLocal.opus");
+ @fireSound = dev.RegisterSound("Sounds/Weapons/Rifle/FireLocal.opus");
+ @fireFarSound = dev.RegisterSound("Sounds/Weapons/Rifle/FireFar.opus");
+ @fireStereoSound = dev.RegisterSound("Sounds/Weapons/Rifle/FireStereo.opus");
+ @reloadSound = dev.RegisterSound("Sounds/Weapons/Rifle/ReloadLocal.opus");
- @fireSmallReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/V2AmbienceSmall.opus");
- @fireLargeReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Rifle/V2AmbienceLarge.opus");
- }
+ @fireSmallReverbSound = dev.RegisterSound("Sounds/Weapons/Rifle/V2AmbienceSmall.opus");
+ @fireLargeReverbSound = dev.RegisterSound("Sounds/Weapons/Rifle/V2AmbienceLarge.opus");
+ }
- void Update(float dt) {
- BasicViewWeapon::Update(dt);
- }
+ void Update(float dt) { BasicViewWeapon::Update(dt); }
- void WeaponFired(){
- BasicViewWeapon::WeaponFired();
+ void WeaponFired() {
+ BasicViewWeapon::WeaponFired();
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 8.f;
- audioDevice.PlayLocal(fireSound, origin, param);
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 8.f;
+ audioDevice.PlayLocal(fireSound, origin, param);
- param.volume = 8.f * environmentRoom;
- if (environmentSize < 0.5f) {
- audioDevice.PlayLocal(fireSmallReverbSound, origin, param);
- } else {
- audioDevice.PlayLocal(fireLargeReverbSound, origin, param);
- }
+ param.volume = 8.f * environmentRoom;
+ if (environmentSize < 0.5f) {
+ audioDevice.PlayLocal(fireSmallReverbSound, origin, param);
+ } else {
+ audioDevice.PlayLocal(fireLargeReverbSound, origin, param);
+ }
- param.referenceDistance = 4.f;
- param.volume = 1.f;
- audioDevice.PlayLocal(fireFarSound, origin, param);
- param.referenceDistance = 1.f;
- audioDevice.PlayLocal(fireStereoSound, origin, param);
- }
- }
+ param.referenceDistance = 4.f;
+ param.volume = 1.f;
+ audioDevice.PlayLocal(fireFarSound, origin, param);
+ param.referenceDistance = 1.f;
+ audioDevice.PlayLocal(fireStereoSound, origin, param);
+ }
+ }
- void ReloadingWeapon() {
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.PlayLocal(reloadSound, origin, param);
- }
- }
+ void ReloadingWeapon() {
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.PlayLocal(reloadSound, origin, param);
+ }
+ }
- float GetZPos() {
- return 0.2f - AimDownSightStateSmooth * 0.0520f;
- }
+ float GetZPos() { return 0.2f - AimDownSightStateSmooth * 0.0520f; }
- // rotates gun matrix to ensure the sight is in
- // the center of screen (0, ?, 0).
- Matrix4 AdjustToAlignSight(Matrix4 mat, Vector3 sightPos, float fade) {
- Vector3 p = mat * sightPos;
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), atan(p.x / p.y) * fade) * mat;
- mat = CreateRotateMatrix(Vector3(-1.f, 0.f, 0.f), atan(p.z / p.y) * fade) * mat;
- return mat;
- }
+ // rotates gun matrix to ensure the sight is in
+ // the center of screen (0, ?, 0).
+ Matrix4 AdjustToAlignSight(Matrix4 mat, Vector3 sightPos, float fade) {
+ Vector3 p = mat * sightPos;
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), atan(p.x / p.y) * fade) * mat;
+ mat = CreateRotateMatrix(Vector3(-1.f, 0.f, 0.f), atan(p.z / p.y) * fade) * mat;
+ return mat;
+ }
- void Draw2D() {
- if(AimDownSightState > 0.6)
- return;
- BasicViewWeapon::Draw2D();
- }
+ void Draw2D() {
+ if (AimDownSightState > 0.6)
+ return;
+ BasicViewWeapon::Draw2D();
+ }
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.033f);
- mat = GetViewWeaponMatrix() * mat;
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.033f);
+ mat = GetViewWeaponMatrix() * mat;
- bool reloading = IsReloading;
- float reload = ReloadProgress;
- Vector3 leftHand, rightHand;
+ bool reloading = IsReloading;
+ float reload = ReloadProgress;
+ Vector3 leftHand, rightHand;
- leftHand = mat * Vector3(1.f, 6.f, 1.f);
- rightHand = mat * Vector3(0.f, -8.f, 2.f);
+ leftHand = mat * Vector3(1.f, 6.f, 1.f);
+ rightHand = mat * Vector3(0.f, -8.f, 2.f);
- Vector3 leftHand2 = mat * Vector3(5.f, -10.f, 4.f);
- Vector3 rightHand3 = mat * Vector3(-2.f, -7.f, -4.f);
- Vector3 rightHand4 = mat * Vector3(-3.f, -4.f, -6.f);
+ Vector3 leftHand2 = mat * Vector3(5.f, -10.f, 4.f);
+ Vector3 rightHand3 = mat * Vector3(-2.f, -7.f, -4.f);
+ Vector3 rightHand4 = mat * Vector3(-3.f, -4.f, -6.f);
- if(AimDownSightStateSmooth > 0.8f){
- mat = AdjustToAlignSight(mat, Vector3(0.f, 16.f, -4.6f), (AimDownSightStateSmooth - 0.8f) / 0.2f);
- }
+ if (AimDownSightStateSmooth > 0.8f) {
+ mat = AdjustToAlignSight(mat, Vector3(0.f, 16.f, -4.6f),
+ (AimDownSightStateSmooth - 0.8f) / 0.2f);
+ }
- ModelRenderParam param;
- Matrix4 weapMatrix = eyeMatrix * mat;
- param.matrix = weapMatrix * CreateScaleMatrix(0.5f) *
- CreateTranslateMatrix(-0.5f, 0.f, 0.f);
- param.depthHack = true;
- renderer.AddModel(gunModel, param);
+ ModelRenderParam param;
+ Matrix4 weapMatrix = eyeMatrix * mat;
+ param.matrix =
+ weapMatrix * CreateScaleMatrix(0.5f) * CreateTranslateMatrix(-0.5f, 0.f, 0.f);
+ param.depthHack = true;
+ renderer.AddModel(gunModel, param);
- // draw sights
- Matrix4 sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.0125f, -8.f, -4.5f);
- sightMat *= CreateScaleMatrix(0.025f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel1, param); // rear
+ // draw sights
+ Matrix4 sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.0125f, -8.f, -4.5f);
+ sightMat *= CreateScaleMatrix(0.025f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel1, param); // rear
- sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.025f, 16.f, -4.575f);
- sightMat *= CreateScaleMatrix(0.05f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel2, param); // front pin
+ sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.025f, 16.f, -4.575f);
+ sightMat *= CreateScaleMatrix(0.05f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel2, param); // front pin
- // magazine/reload action
- mat *= CreateTranslateMatrix(0.f, 1.f, 1.f);
- reload *= 2.5f;
- if(reloading) {
- if(reload < 0.1f){
- // move hand to magazine
- float per = reload / 0.1f;
- leftHand = Mix(leftHand,
- mat * Vector3(0.f, 0.f, 4.f),
- SmoothStep(per));
- }else if(reload < 0.7f){
- // magazine release
- float per = (reload - 0.1f) / 0.6f;
- if(per < 0.2f){
- // non-smooth pull out
- per *= 4.0f; per -= 0.4f;
- per = Clamp(per, 0.0f, 0.2f);
- }
- if(per > 0.5f) {
- // when per = 0.5f, the hand no longer holds the magazine,
- // so the free fall starts
- per += per - 0.5f;
- }
- mat *= CreateTranslateMatrix(0.f, 0.f, per*per*10.f);
+ // magazine/reload action
+ mat *= CreateTranslateMatrix(0.f, 1.f, 1.f);
+ reload *= 2.5f;
+ if (reloading) {
+ if (reload < 0.1f) {
+ // move hand to magazine
+ float per = reload / 0.1f;
+ leftHand = Mix(leftHand, mat * Vector3(0.f, 0.f, 4.f), SmoothStep(per));
+ } else if (reload < 0.7f) {
+ // magazine release
+ float per = (reload - 0.1f) / 0.6f;
+ if (per < 0.2f) {
+ // non-smooth pull out
+ per *= 4.0f;
+ per -= 0.4f;
+ per = Clamp(per, 0.0f, 0.2f);
+ }
+ if (per > 0.5f) {
+ // when per = 0.5f, the hand no longer holds the magazine,
+ // so the free fall starts
+ per += per - 0.5f;
+ }
+ mat *= CreateTranslateMatrix(0.f, 0.f, per * per * 10.f);
- leftHand = mat * Vector3(0.f, 0.f, 4.f);
- if(per > 0.5f){
- per = (per - 0.5f);
- leftHand = Mix(leftHand, leftHand2, SmoothStep(per));
- }
- }else if(reload < 1.4f) {
- // insert magazine
- float per = (1.4f - reload) / 0.7f;
- if(per < 0.3f) {
- // non-smooth insertion
- per *= 4.f; per -= 0.4f;
- per = Clamp(per, 0.0f, 0.3f);
- }
+ leftHand = mat * Vector3(0.f, 0.f, 4.f);
+ if (per > 0.5f) {
+ per = (per - 0.5f);
+ leftHand = Mix(leftHand, leftHand2, SmoothStep(per));
+ }
+ } else if (reload < 1.4f) {
+ // insert magazine
+ float per = (1.4f - reload) / 0.7f;
+ if (per < 0.3f) {
+ // non-smooth insertion
+ per *= 4.f;
+ per -= 0.4f;
+ per = Clamp(per, 0.0f, 0.3f);
+ }
- mat *= CreateTranslateMatrix(0.f, 0.f, per*per*10.f);
- leftHand = mat * Vector3(0.f, 0.f, 4.f);
- }else if(reload < 1.9f){
- // move the left hand to the original position
- // and start doing something with the right hand
- float per = (reload - 1.4f) / 0.5f;
- Vector3 orig = leftHand;
- leftHand = mat * Vector3(0.f, 0.f, 4.f);
- leftHand = Mix(leftHand, orig, SmoothStep(per));
- rightHand = Mix(rightHand, rightHand3, SmoothStep(per));
- }else if(reload < 2.2f){
- float per = (reload - 1.9f) / 0.3f;
- rightHand = Mix(rightHand3, rightHand4, SmoothStep(per));
- }else{
- float per = (reload - 2.2f) / 0.3f;
- rightHand = Mix(rightHand4, rightHand, SmoothStep(per));
- }
- }
+ mat *= CreateTranslateMatrix(0.f, 0.f, per * per * 10.f);
+ leftHand = mat * Vector3(0.f, 0.f, 4.f);
+ } else if (reload < 1.9f) {
+ // move the left hand to the original position
+ // and start doing something with the right hand
+ float per = (reload - 1.4f) / 0.5f;
+ Vector3 orig = leftHand;
+ leftHand = mat * Vector3(0.f, 0.f, 4.f);
+ leftHand = Mix(leftHand, orig, SmoothStep(per));
+ rightHand = Mix(rightHand, rightHand3, SmoothStep(per));
+ } else if (reload < 2.2f) {
+ float per = (reload - 1.9f) / 0.3f;
+ rightHand = Mix(rightHand3, rightHand4, SmoothStep(per));
+ } else {
+ float per = (reload - 2.2f) / 0.3f;
+ rightHand = Mix(rightHand4, rightHand, SmoothStep(per));
+ }
+ }
- param.matrix = eyeMatrix * mat;
- renderer.AddModel(magazineModel, param);
+ param.matrix = eyeMatrix * mat;
+ renderer.AddModel(magazineModel, param);
- LeftHandPosition = leftHand;
- RightHandPosition = rightHand;
- }
- }
+ LeftHandPosition = leftHand;
+ RightHandPosition = rightHand;
+ }
+ }
- IWeaponSkin@ CreateViewRifleSkin(Renderer@ r, AudioDevice@ dev) {
- return ViewRifleSkin(r, dev);
- }
+ IWeaponSkin @CreateViewRifleSkin(Renderer @r, AudioDevice @dev) {
+ return ViewRifleSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/SMG/ThirdPerson.as b/Resources/Scripts/Skin/SMG/ThirdPerson.as
index 212fa260..fd9bb564 100644
--- a/Resources/Scripts/Skin/SMG/ThirdPerson.as
+++ b/Resources/Scripts/Skin/SMG/ThirdPerson.as
@@ -18,184 +18,173 @@
*/
- namespace spades {
- class ThirdPersonSMGSkin:
- IToolSkin, IThirdPersonToolSkin, IWeaponSkin, IWeaponSkin2 {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private bool muted;
- private Matrix4 originMatrix;
- private float aimDownSightState;
- private float readyState;
- private bool reloading;
- private float reloadProgress;
- private int ammo, clipSize;
+namespace spades {
+ class ThirdPersonSMGSkin : IToolSkin, IThirdPersonToolSkin, IWeaponSkin, IWeaponSkin2 {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private bool muted;
+ private Matrix4 originMatrix;
+ private float aimDownSightState;
+ private float readyState;
+ private bool reloading;
+ private float reloadProgress;
+ private int ammo, clipSize;
- private float environmentRoom;
- private float environmentSize;
- private float environmentDistance;
- private Vector3 soundOrigin;
+ private float environmentRoom;
+ private float environmentSize;
+ private float environmentDistance;
+ private Vector3 soundOrigin;
- float SprintState {
- set { sprintState = value; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ }
- float RaiseState {
- set { raiseState = value; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
- bool IsMuted {
- set { muted = value; }
- }
+ bool IsMuted {
+ set { muted = value; }
+ }
- Matrix4 OriginMatrix {
- set { originMatrix = value; }
- }
+ Matrix4 OriginMatrix {
+ set { originMatrix = value; }
+ }
- float PitchBias {
- get { return 0.f; }
- }
+ float PitchBias {
+ get { return 0.f; }
+ }
- float AimDownSightState {
- set { aimDownSightState = value; }
- }
+ float AimDownSightState {
+ set { aimDownSightState = value; }
+ }
- bool IsReloading {
- set { reloading = value; }
- }
- float ReloadProgress {
- set { reloadProgress = value; }
- }
- int Ammo {
- set { ammo = value; }
- }
- int ClipSize {
- set { clipSize = value; }
- }
+ bool IsReloading {
+ set { reloading = value; }
+ }
+ float ReloadProgress {
+ set { reloadProgress = value; }
+ }
+ int Ammo {
+ set { ammo = value; }
+ }
+ int ClipSize {
+ set { clipSize = value; }
+ }
- float ReadyState {
- set { readyState = value; }
- }
+ float ReadyState {
+ set { readyState = value; }
+ }
- // IWeaponSkin2
- void SetSoundEnvironment(float room, float size, float distance) {
- environmentRoom = room;
- environmentSize = size;
- environmentDistance = distance;
- }
- Vector3 SoundOrigin {
- set { soundOrigin = value; }
- }
+ // IWeaponSkin2
+ void SetSoundEnvironment(float room, float size, float distance) {
+ environmentRoom = room;
+ environmentSize = size;
+ environmentDistance = distance;
+ }
+ Vector3 SoundOrigin {
+ set { soundOrigin = value; }
+ }
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
- private AudioChunk@[] fireMediumSounds(4);
- private AudioChunk@ fireFarSound;
- private AudioChunk@ fireStereoSound;
- private AudioChunk@[] fireSmallReverbSounds(4);
- private AudioChunk@[] fireLargeReverbSounds(4);
- private AudioChunk@ reloadSound;
+ private AudioChunk @[] fireMediumSounds(4);
+ private AudioChunk @fireFarSound;
+ private AudioChunk @fireStereoSound;
+ private AudioChunk @[] fireSmallReverbSounds(4);
+ private AudioChunk @[] fireLargeReverbSounds(4);
+ private AudioChunk @reloadSound;
- ThirdPersonSMGSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/SMG/Weapon.kv6");
+ ThirdPersonSMGSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/SMG/Weapon.kv6");
+ @fireMediumSounds[0] = dev.RegisterSound("Sounds/Weapons/SMG/V2Third1.opus");
+ @fireMediumSounds[1] = dev.RegisterSound("Sounds/Weapons/SMG/V2Third2.opus");
+ @fireMediumSounds[2] = dev.RegisterSound("Sounds/Weapons/SMG/V2Third3.opus");
+ @fireMediumSounds[3] = dev.RegisterSound("Sounds/Weapons/SMG/V2Third4.opus");
- @fireMediumSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Third1.opus");
- @fireMediumSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Third2.opus");
- @fireMediumSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Third3.opus");
- @fireMediumSounds[3] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Third4.opus");
+ @fireSmallReverbSounds
+ [0] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall1.opus");
+ @fireSmallReverbSounds
+ [1] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall2.opus");
+ @fireSmallReverbSounds
+ [2] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall3.opus");
+ @fireSmallReverbSounds
+ [3] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall4.opus");
- @fireSmallReverbSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall1.opus");
- @fireSmallReverbSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall2.opus");
- @fireSmallReverbSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall3.opus");
- @fireSmallReverbSounds[3] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall4.opus");
+ @fireLargeReverbSounds
+ [0] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge1.opus");
+ @fireLargeReverbSounds
+ [1] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge2.opus");
+ @fireLargeReverbSounds
+ [2] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge3.opus");
+ @fireLargeReverbSounds
+ [3] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge4.opus");
- @fireLargeReverbSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge1.opus");
- @fireLargeReverbSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge2.opus");
- @fireLargeReverbSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge3.opus");
- @fireLargeReverbSounds[3] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge4.opus");
+ @fireFarSound = dev.RegisterSound("Sounds/Weapons/SMG/FireFar.opus");
+ @fireStereoSound = dev.RegisterSound("Sounds/Weapons/SMG/FireStereo.opus");
+ @reloadSound = dev.RegisterSound("Sounds/Weapons/SMG/Reload.opus");
+ }
- @fireFarSound = dev.RegisterSound
- ("Sounds/Weapons/SMG/FireFar.opus");
- @fireStereoSound = dev.RegisterSound
- ("Sounds/Weapons/SMG/FireStereo.opus");
- @reloadSound = dev.RegisterSound
- ("Sounds/Weapons/SMG/Reload.opus");
+ void Update(float dt) {}
- }
+ void WeaponFired() {
+ if (!muted) {
+ Vector3 origin = soundOrigin;
+ AudioParam param;
+ param.volume = 9.f;
+ audioDevice.Play(fireMediumSounds[GetRandom(fireMediumSounds.length)], origin,
+ param);
- void Update(float dt) {
- }
+ param.volume = 8.f * environmentRoom;
+ param.referenceDistance = 10.f;
+ if (environmentSize < 0.5f) {
+ audioDevice.Play(fireSmallReverbSounds[GetRandom(fireSmallReverbSounds.length)],
+ origin, param);
+ } else {
+ audioDevice.Play(fireLargeReverbSounds[GetRandom(fireLargeReverbSounds.length)],
+ origin, param);
+ }
- void WeaponFired(){
- if(!muted){
- Vector3 origin = soundOrigin;
- AudioParam param;
- param.volume = 9.f;
- audioDevice.Play(fireMediumSounds[GetRandom(fireMediumSounds.length)], origin, param);
+ param.volume = .4f;
+ param.referenceDistance = 10.f;
+ audioDevice.Play(fireFarSound, origin, param);
+ param.referenceDistance = 1.f;
+ audioDevice.Play(fireStereoSound, origin, param);
+ }
+ }
+ void ReloadingWeapon() {
+ if (!muted) {
+ Vector3 origin = soundOrigin;
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.Play(reloadSound, origin, param);
+ }
+ }
- param.volume = 8.f * environmentRoom;
- param.referenceDistance = 10.f;
- if (environmentSize < 0.5f) {
- audioDevice.Play(fireSmallReverbSounds[GetRandom(fireSmallReverbSounds.length)], origin, param);
- } else {
- audioDevice.Play(fireLargeReverbSounds[GetRandom(fireLargeReverbSounds.length)], origin, param);
- }
+ void ReloadedWeapon() {}
- param.volume = .4f;
- param.referenceDistance = 10.f;
- audioDevice.Play(fireFarSound, origin, param);
- param.referenceDistance = 1.f;
- audioDevice.Play(fireStereoSound, origin, param);
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.05f);
+ mat = mat * CreateScaleMatrix(-1.f, -1.f, 1.f);
+ mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
- }
- }
- void ReloadingWeapon() {
- if(!muted){
- Vector3 origin = soundOrigin;
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.Play(reloadSound, origin, param);
- }
- }
+ ModelRenderParam param;
+ param.matrix = originMatrix * mat;
+ renderer.AddModel(model, param);
+ }
+ }
- void ReloadedWeapon() {
- }
-
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.05f);
- mat = mat * CreateScaleMatrix(-1.f, -1.f, 1.f);
- mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
-
- ModelRenderParam param;
- param.matrix = originMatrix * mat;
- renderer.AddModel(model, param);
- }
- }
-
- IWeaponSkin@ CreateThirdPersonSMGSkin(Renderer@ r, AudioDevice@ dev) {
- return ThirdPersonSMGSkin(r, dev);
- }
+ IWeaponSkin @CreateThirdPersonSMGSkin(Renderer @r, AudioDevice @dev) {
+ return ThirdPersonSMGSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/SMG/View.as b/Resources/Scripts/Skin/SMG/View.as
index 36f62a24..588dd22d 100644
--- a/Resources/Scripts/Skin/SMG/View.as
+++ b/Resources/Scripts/Skin/SMG/View.as
@@ -18,213 +18,197 @@
*/
- namespace spades {
- class ViewSMGSkin:
- IToolSkin, IViewToolSkin, IWeaponSkin, IWeaponSkin2,
- BasicViewWeapon {
+namespace spades {
+ class ViewSMGSkin : IToolSkin, IViewToolSkin, IWeaponSkin, IWeaponSkin2, BasicViewWeapon {
- private AudioDevice@ audioDevice;
- private Model@ gunModel;
- private Model@ magazineModel;
- private Model@ sightModel1;
- private Model@ sightModel2;
- private Model@ sightModel3;
+ private AudioDevice @audioDevice;
+ private Model @gunModel;
+ private Model @magazineModel;
+ private Model @sightModel1;
+ private Model @sightModel2;
+ private Model @sightModel3;
- private AudioChunk@[] fireSounds(4);
- private AudioChunk@ fireFarSound;
- private AudioChunk@ fireStereoSound;
- private AudioChunk@[] fireSmallReverbSounds(4);
- private AudioChunk@[] fireLargeReverbSounds(4);
- private AudioChunk@ reloadSound;
+ private AudioChunk @[] fireSounds(4);
+ private AudioChunk @fireFarSound;
+ private AudioChunk @fireStereoSound;
+ private AudioChunk @[] fireSmallReverbSounds(4);
+ private AudioChunk @[] fireLargeReverbSounds(4);
+ private AudioChunk @reloadSound;
- ViewSMGSkin(Renderer@ r, AudioDevice@ dev){
- super(r);
- @audioDevice = dev;
- @gunModel = renderer.RegisterModel
- ("Models/Weapons/SMG/WeaponNoMagazine.kv6");
- @magazineModel = renderer.RegisterModel
- ("Models/Weapons/SMG/Magazine.kv6");
- @sightModel1 = renderer.RegisterModel
- ("Models/Weapons/SMG/Sight1.kv6");
- @sightModel2 = renderer.RegisterModel
- ("Models/Weapons/SMG/Sight2.kv6");
- @sightModel3 = renderer.RegisterModel
- ("Models/Weapons/SMG/Sight3.kv6");
+ ViewSMGSkin(Renderer @r, AudioDevice @dev) {
+ super(r);
+ @audioDevice = dev;
+ @gunModel = renderer.RegisterModel("Models/Weapons/SMG/WeaponNoMagazine.kv6");
+ @magazineModel = renderer.RegisterModel("Models/Weapons/SMG/Magazine.kv6");
+ @sightModel1 = renderer.RegisterModel("Models/Weapons/SMG/Sight1.kv6");
+ @sightModel2 = renderer.RegisterModel("Models/Weapons/SMG/Sight2.kv6");
+ @sightModel3 = renderer.RegisterModel("Models/Weapons/SMG/Sight3.kv6");
- @fireSmallReverbSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall1.opus");
- @fireSmallReverbSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall2.opus");
- @fireSmallReverbSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall3.opus");
- @fireSmallReverbSounds[3] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceSmall4.opus");
+ @fireSmallReverbSounds
+ [0] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall1.opus");
+ @fireSmallReverbSounds
+ [1] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall2.opus");
+ @fireSmallReverbSounds
+ [2] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall3.opus");
+ @fireSmallReverbSounds
+ [3] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceSmall4.opus");
- @fireLargeReverbSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge1.opus");
- @fireLargeReverbSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge2.opus");
- @fireLargeReverbSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge3.opus");
- @fireLargeReverbSounds[3] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2AmbienceLarge4.opus");
+ @fireLargeReverbSounds
+ [0] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge1.opus");
+ @fireLargeReverbSounds
+ [1] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge2.opus");
+ @fireLargeReverbSounds
+ [2] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge3.opus");
+ @fireLargeReverbSounds
+ [3] = dev.RegisterSound("Sounds/Weapons/SMG/V2AmbienceLarge4.opus");
- @fireSounds[0] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Local1.opus");
- @fireSounds[1] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Local2.opus");
- @fireSounds[2] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Local3.opus");
- @fireSounds[3] = dev.RegisterSound
- ("Sounds/Weapons/SMG/V2Local4.opus");
- @fireFarSound = dev.RegisterSound
- ("Sounds/Weapons/SMG/FireFar.opus");
- @fireStereoSound = dev.RegisterSound
- ("Sounds/Weapons/SMG/FireStereo.opus");
- @reloadSound = dev.RegisterSound
- ("Sounds/Weapons/SMG/ReloadLocal.opus");
+ @fireSounds[0] = dev.RegisterSound("Sounds/Weapons/SMG/V2Local1.opus");
+ @fireSounds[1] = dev.RegisterSound("Sounds/Weapons/SMG/V2Local2.opus");
+ @fireSounds[2] = dev.RegisterSound("Sounds/Weapons/SMG/V2Local3.opus");
+ @fireSounds[3] = dev.RegisterSound("Sounds/Weapons/SMG/V2Local4.opus");
+ @fireFarSound = dev.RegisterSound("Sounds/Weapons/SMG/FireFar.opus");
+ @fireStereoSound = dev.RegisterSound("Sounds/Weapons/SMG/FireStereo.opus");
+ @reloadSound = dev.RegisterSound("Sounds/Weapons/SMG/ReloadLocal.opus");
+ }
- }
+ void Update(float dt) { BasicViewWeapon::Update(dt); }
- void Update(float dt) {
- BasicViewWeapon::Update(dt);
- }
+ void WeaponFired() {
+ BasicViewWeapon::WeaponFired();
- void WeaponFired(){
- BasicViewWeapon::WeaponFired();
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 8.f;
+ audioDevice.PlayLocal(fireSounds[GetRandom(fireSounds.length)], origin, param);
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 8.f;
- audioDevice.PlayLocal(fireSounds[GetRandom(fireSounds.length)], origin, param);
+ param.volume = 8.f * environmentRoom;
+ if (environmentSize < 0.5f) {
+ audioDevice.PlayLocal(
+ fireSmallReverbSounds[GetRandom(fireSmallReverbSounds.length)], origin,
+ param);
+ } else {
+ audioDevice.PlayLocal(
+ fireLargeReverbSounds[GetRandom(fireLargeReverbSounds.length)], origin,
+ param);
+ }
+ }
+ }
- param.volume = 8.f * environmentRoom;
- if (environmentSize < 0.5f) {
- audioDevice.PlayLocal(fireSmallReverbSounds[GetRandom(fireSmallReverbSounds.length)], origin, param);
- } else {
- audioDevice.PlayLocal(fireLargeReverbSounds[GetRandom(fireLargeReverbSounds.length)], origin, param);
- }
- }
- }
+ void ReloadingWeapon() {
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.PlayLocal(reloadSound, origin, param);
+ }
+ }
- void ReloadingWeapon() {
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.PlayLocal(reloadSound, origin, param);
- }
- }
+ float GetZPos() { return 0.2f - AimDownSightStateSmooth * 0.038f; }
- float GetZPos() {
- return 0.2f - AimDownSightStateSmooth * 0.038f;
- }
+ // rotates gun matrix to ensure the sight is in
+ // the center of screen (0, ?, 0).
+ Matrix4 AdjustToAlignSight(Matrix4 mat, Vector3 sightPos, float fade) {
+ Vector3 p = mat * sightPos;
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), atan(p.x / p.y) * fade) * mat;
+ mat = CreateRotateMatrix(Vector3(-1.f, 0.f, 0.f), atan(p.z / p.y) * fade) * mat;
+ return mat;
+ }
- // rotates gun matrix to ensure the sight is in
- // the center of screen (0, ?, 0).
- Matrix4 AdjustToAlignSight(Matrix4 mat, Vector3 sightPos, float fade) {
- Vector3 p = mat * sightPos;
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), atan(p.x / p.y) * fade) * mat;
- mat = CreateRotateMatrix(Vector3(-1.f, 0.f, 0.f), atan(p.z / p.y) * fade) * mat;
- return mat;
- }
+ void Draw2D() {
+ if (AimDownSightState > 0.6)
+ return;
+ BasicViewWeapon::Draw2D();
+ }
- void Draw2D() {
- if(AimDownSightState > 0.6)
- return;
- BasicViewWeapon::Draw2D();
- }
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.033f);
+ mat = GetViewWeaponMatrix() * mat;
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.033f);
- mat = GetViewWeaponMatrix() * mat;
+ bool reloading = IsReloading;
+ float reload = ReloadProgress;
+ Vector3 leftHand, rightHand;
- bool reloading = IsReloading;
- float reload = ReloadProgress;
- Vector3 leftHand, rightHand;
+ leftHand = mat * Vector3(1.f, 6.f, 1.f);
+ rightHand = mat * Vector3(0.f, -8.f, 4.f);
- leftHand = mat * Vector3(1.f, 6.f, 1.f);
- rightHand = mat * Vector3(0.f, -8.f, 4.f);
+ Vector3 leftHand2 = mat * Vector3(5.f, -10.f, 4.f);
+ Vector3 leftHand3 = mat * Vector3(1.f, 6.f, -4.f);
+ Vector3 leftHand4 = mat * Vector3(1.f, 9.f, -6.f);
- Vector3 leftHand2 = mat * Vector3(5.f, -10.f, 4.f);
- Vector3 leftHand3 = mat * Vector3(1.f, 6.f, -4.f);
- Vector3 leftHand4 = mat * Vector3(1.f, 9.f, -6.f);
+ if (AimDownSightStateSmooth > 0.8f) {
+ mat = AdjustToAlignSight(mat, Vector3(0.f, 5.f, -4.9f),
+ (AimDownSightStateSmooth - 0.8f) / 0.2f);
+ }
- if(AimDownSightStateSmooth > 0.8f){
- mat = AdjustToAlignSight(mat, Vector3(0.f, 5.f, -4.9f), (AimDownSightStateSmooth - 0.8f) / 0.2f);
- }
+ ModelRenderParam param;
+ Matrix4 weapMatrix = eyeMatrix * mat;
+ param.matrix = weapMatrix;
+ param.depthHack = true;
+ renderer.AddModel(gunModel, param);
- ModelRenderParam param;
- Matrix4 weapMatrix = eyeMatrix * mat;
- param.matrix = weapMatrix;
- param.depthHack = true;
- renderer.AddModel(gunModel, param);
+ // draw sights
+ Matrix4 sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.05f, 5.f, -4.85f);
+ sightMat *= CreateScaleMatrix(0.1f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel1, param); // front
- // draw sights
- Matrix4 sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.05f, 5.f, -4.85f);
- sightMat *= CreateScaleMatrix(0.1f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel1, param); // front
+ sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.025f, 5.f, -4.875f);
+ sightMat *= CreateScaleMatrix(0.05f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel3, param); // front pin
- sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.025f, 5.f, -4.875f);
- sightMat *= CreateScaleMatrix(0.05f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel3, param); // front pin
+ sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.04f, -9.f, -4.9f);
+ sightMat *= CreateScaleMatrix(0.08f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel2, param); // rear
- sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.04f, -9.f, -4.9f);
- sightMat *= CreateScaleMatrix(0.08f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel2, param); // rear
+ // magazine/reload action
+ mat *= CreateTranslateMatrix(0.f, 3.f, 1.f);
+ reload *= 2.5f;
+ if (reloading) {
+ if (reload < 0.7f) {
+ // magazine release
+ float per = reload / 0.7f;
+ mat *= CreateTranslateMatrix(0.f, 0.f, per * per * 50.f);
+ leftHand = Mix(leftHand, leftHand2, SmoothStep(per));
+ } else if (reload < 1.4f) {
+ // insert magazine
+ float per = (1.4f - reload) / 0.7f;
+ if (per < 0.3f) {
+ // non-smooth insertion
+ per *= 4.f;
+ per -= 0.4f;
+ per = Clamp(per, 0.0f, 0.3f);
+ }
- // magazine/reload action
- mat *= CreateTranslateMatrix(0.f, 3.f, 1.f);
- reload *= 2.5f;
- if(reloading) {
- if(reload < 0.7f){
- // magazine release
- float per = reload / 0.7f;
- mat *= CreateTranslateMatrix(0.f, 0.f, per*per*50.f);
- leftHand = Mix(leftHand, leftHand2, SmoothStep(per));
- }else if(reload < 1.4f) {
- // insert magazine
- float per = (1.4f - reload) / 0.7f;
- if(per < 0.3f) {
- // non-smooth insertion
- per *= 4.f; per -= 0.4f;
- per = Clamp(per, 0.0f, 0.3f);
- }
+ mat *= CreateTranslateMatrix(0.f, 0.f, per * per * 10.f);
+ leftHand = mat * Vector3(0.f, 0.f, 4.f);
+ } else if (reload < 1.9f) {
+ // move the left hand to the original position
+ // and start doing something with the right hand
+ float per = (reload - 1.4f) / 0.5f;
+ leftHand = mat * Vector3(0.f, 0.f, 4.f);
+ leftHand = Mix(leftHand, leftHand3, SmoothStep(per));
+ } else if (reload < 2.2f) {
+ float per = (reload - 1.9f) / 0.3f;
+ leftHand = Mix(leftHand3, leftHand4, SmoothStep(per));
+ } else {
+ float per = (reload - 2.2f) / 0.3f;
+ leftHand = Mix(leftHand4, leftHand, SmoothStep(per));
+ }
+ }
- mat *= CreateTranslateMatrix(0.f, 0.f, per*per*10.f);
- leftHand = mat * Vector3(0.f, 0.f, 4.f);
- }else if(reload < 1.9f){
- // move the left hand to the original position
- // and start doing something with the right hand
- float per = (reload - 1.4f) / 0.5f;
- leftHand = mat * Vector3(0.f, 0.f, 4.f);
- leftHand = Mix(leftHand, leftHand3, SmoothStep(per));
- }else if(reload < 2.2f){
- float per = (reload - 1.9f) / 0.3f;
- leftHand = Mix(leftHand3, leftHand4, SmoothStep(per));
- }else{
- float per = (reload - 2.2f) / 0.3f;
- leftHand = Mix(leftHand4, leftHand, SmoothStep(per));
- }
- }
+ param.matrix = eyeMatrix * mat;
+ renderer.AddModel(magazineModel, param);
- param.matrix = eyeMatrix * mat;
- renderer.AddModel(magazineModel, param);
+ LeftHandPosition = leftHand;
+ RightHandPosition = rightHand;
+ }
+ }
- LeftHandPosition = leftHand;
- RightHandPosition = rightHand;
- }
-
- }
-
- IWeaponSkin@ CreateViewSMGSkin(Renderer@ r, AudioDevice@ dev) {
- return ViewSMGSkin(r, dev);
- }
+ IWeaponSkin @CreateViewSMGSkin(Renderer @r, AudioDevice @dev) { return ViewSMGSkin(r, dev); }
}
diff --git a/Resources/Scripts/Skin/Shotgun/ThirdPerson.as b/Resources/Scripts/Skin/Shotgun/ThirdPerson.as
index edef87d6..b4167483 100644
--- a/Resources/Scripts/Skin/Shotgun/ThirdPerson.as
+++ b/Resources/Scripts/Skin/Shotgun/ThirdPerson.as
@@ -18,170 +18,161 @@
*/
- namespace spades {
- class ThirdPersonShotgunSkin:
- IToolSkin, IThirdPersonToolSkin, IWeaponSkin, IWeaponSkin2 {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private bool muted;
- private Matrix4 originMatrix;
- private float aimDownSightState;
- private float readyState;
- private bool reloading;
- private float reloadProgress;
- private int ammo, clipSize;
+namespace spades {
+ class ThirdPersonShotgunSkin : IToolSkin, IThirdPersonToolSkin, IWeaponSkin, IWeaponSkin2 {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private bool muted;
+ private Matrix4 originMatrix;
+ private float aimDownSightState;
+ private float readyState;
+ private bool reloading;
+ private float reloadProgress;
+ private int ammo, clipSize;
- private float environmentRoom;
- private float environmentSize;
- private float environmentDistance;
- private Vector3 soundOrigin;
+ private float environmentRoom;
+ private float environmentSize;
+ private float environmentDistance;
+ private Vector3 soundOrigin;
- float SprintState {
- set { sprintState = value; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ }
- float RaiseState {
- set { raiseState = value; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
- bool IsMuted {
- set { muted = value; }
- }
+ bool IsMuted {
+ set { muted = value; }
+ }
- Matrix4 OriginMatrix {
- set { originMatrix = value; }
- }
+ Matrix4 OriginMatrix {
+ set { originMatrix = value; }
+ }
- float PitchBias {
- get { return 0.f; }
- }
+ float PitchBias {
+ get { return 0.f; }
+ }
- float AimDownSightState {
- set { aimDownSightState = value; }
- }
+ float AimDownSightState {
+ set { aimDownSightState = value; }
+ }
- bool IsReloading {
- set { reloading = value; }
- }
- float ReloadProgress {
- set { reloadProgress = value; }
- }
- int Ammo {
- set { ammo = value; }
- }
- int ClipSize {
- set { clipSize = value; }
- }
+ bool IsReloading {
+ set { reloading = value; }
+ }
+ float ReloadProgress {
+ set { reloadProgress = value; }
+ }
+ int Ammo {
+ set { ammo = value; }
+ }
+ int ClipSize {
+ set { clipSize = value; }
+ }
- float ReadyState {
- set { readyState = value; }
- }
+ float ReadyState {
+ set { readyState = value; }
+ }
- // IWeaponSkin2
- void SetSoundEnvironment(float room, float size, float distance) {
- environmentRoom = room;
- environmentSize = size;
- environmentDistance = distance;
- }
- Vector3 SoundOrigin {
- set { soundOrigin = value; }
- }
+ // IWeaponSkin2
+ void SetSoundEnvironment(float room, float size, float distance) {
+ environmentRoom = room;
+ environmentSize = size;
+ environmentDistance = distance;
+ }
+ Vector3 SoundOrigin {
+ set { soundOrigin = value; }
+ }
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
- private AudioChunk@ fireSound;
- private AudioChunk@ fireFarSound;
- private AudioChunk@ fireStereoSound;
- private AudioChunk@ fireSmallReverbSound;
- private AudioChunk@ fireLargeReverbSound;
- private AudioChunk@ reloadSound;
- private AudioChunk@ cockSound;
+ private AudioChunk @fireSound;
+ private AudioChunk @fireFarSound;
+ private AudioChunk @fireStereoSound;
+ private AudioChunk @fireSmallReverbSound;
+ private AudioChunk @fireLargeReverbSound;
+ private AudioChunk @reloadSound;
+ private AudioChunk @cockSound;
- ThirdPersonShotgunSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Shotgun/Weapon.kv6");
+ ThirdPersonShotgunSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Shotgun/Weapon.kv6");
- @fireSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/Fire.opus");
- @fireFarSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/FireFar.opus");
- @fireStereoSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/FireStereo.opus");
- @reloadSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/Reload.opus");
- @cockSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/Cock.opus");
+ @fireSound = dev.RegisterSound("Sounds/Weapons/Shotgun/Fire.opus");
+ @fireFarSound = dev.RegisterSound("Sounds/Weapons/Shotgun/FireFar.opus");
+ @fireStereoSound = dev.RegisterSound("Sounds/Weapons/Shotgun/FireStereo.opus");
+ @reloadSound = dev.RegisterSound("Sounds/Weapons/Shotgun/Reload.opus");
+ @cockSound = dev.RegisterSound("Sounds/Weapons/Shotgun/Cock.opus");
- @fireSmallReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/V2AmbienceSmall.opus");
- @fireLargeReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/V2AmbienceLarge.opus");
- }
+ @fireSmallReverbSound
+ = dev.RegisterSound("Sounds/Weapons/Shotgun/V2AmbienceSmall.opus");
+ @fireLargeReverbSound
+ = dev.RegisterSound("Sounds/Weapons/Shotgun/V2AmbienceLarge.opus");
+ }
- void Update(float dt) {
- }
+ void Update(float dt) {}
- void WeaponFired(){
- if(!muted){
- Vector3 origin = soundOrigin;
- AudioParam param;
- param.volume = 8.f;
- audioDevice.Play(fireSound, origin, param);
+ void WeaponFired() {
+ if (!muted) {
+ Vector3 origin = soundOrigin;
+ AudioParam param;
+ param.volume = 8.f;
+ audioDevice.Play(fireSound, origin, param);
- param.volume = 8.f * environmentRoom;
- if (environmentSize < 0.5f) {
- audioDevice.Play(fireSmallReverbSound, origin, param);
- } else {
- audioDevice.Play(fireLargeReverbSound, origin, param);
- }
+ param.volume = 8.f * environmentRoom;
+ if (environmentSize < 0.5f) {
+ audioDevice.Play(fireSmallReverbSound, origin, param);
+ } else {
+ audioDevice.Play(fireLargeReverbSound, origin, param);
+ }
- param.volume = 2.f;
- param.referenceDistance = 4.f;
- audioDevice.Play(fireFarSound, origin, param);
- param.referenceDistance = 1.f;
- audioDevice.Play(fireStereoSound, origin, param);
+ param.volume = 2.f;
+ param.referenceDistance = 4.f;
+ audioDevice.Play(fireFarSound, origin, param);
+ param.referenceDistance = 1.f;
+ audioDevice.Play(fireStereoSound, origin, param);
+ }
+ }
+ void ReloadingWeapon() {
+ if (!muted) {
+ Vector3 origin = soundOrigin;
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.Play(reloadSound, origin, param);
+ }
+ }
- }
- }
- void ReloadingWeapon() {
- if(!muted){
- Vector3 origin = soundOrigin;
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.Play(reloadSound, origin, param);
- }
- }
+ void ReloadedWeapon() {
+ if (!muted) {
+ Vector3 origin = originMatrix * Vector3(0.f, 0.f, 0.f);
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.Play(cockSound, origin, param);
+ }
+ }
- void ReloadedWeapon() {
- if(!muted){
- Vector3 origin = originMatrix * Vector3(0.f, 0.f, 0.f);
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.Play(cockSound, origin, param);
- }
- }
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.05f);
+ mat = mat * CreateScaleMatrix(-1.f, -1.f, 1.f);
+ mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.05f);
- mat = mat * CreateScaleMatrix(-1.f, -1.f, 1.f);
- mat = CreateTranslateMatrix(0.35f, -1.f, 0.0f) * mat;
+ ModelRenderParam param;
+ param.matrix = originMatrix * mat;
+ renderer.AddModel(model, param);
+ }
+ }
- ModelRenderParam param;
- param.matrix = originMatrix * mat;
- renderer.AddModel(model, param);
- }
- }
-
- IWeaponSkin@ CreateThirdPersonShotgunSkin(Renderer@ r, AudioDevice@ dev) {
- return ThirdPersonShotgunSkin(r, dev);
- }
+ IWeaponSkin @CreateThirdPersonShotgunSkin(Renderer @r, AudioDevice @dev) {
+ return ThirdPersonShotgunSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Shotgun/View.as b/Resources/Scripts/Skin/Shotgun/View.as
index 7cf7ff49..a9ba6a7a 100644
--- a/Resources/Scripts/Skin/Shotgun/View.as
+++ b/Resources/Scripts/Skin/Shotgun/View.as
@@ -18,231 +18,211 @@
*/
- namespace spades {
- class ViewShotgunSkin:
- IToolSkin, IViewToolSkin, IWeaponSkin,
- BasicViewWeapon {
+namespace spades {
+ class ViewShotgunSkin : IToolSkin, IViewToolSkin, IWeaponSkin, BasicViewWeapon {
- private AudioDevice@ audioDevice;
- private Model@ gunModel;
- private Model@ pumpModel;
- private Model@ sightModel1;
- private Model@ sightModel2;
+ private AudioDevice @audioDevice;
+ private Model @gunModel;
+ private Model @pumpModel;
+ private Model @sightModel1;
+ private Model @sightModel2;
- private AudioChunk@ fireSound;
- private AudioChunk@ fireFarSound;
- private AudioChunk@ fireStereoSound;
- private AudioChunk@ fireSmallReverbSound;
- private AudioChunk@ fireLargeReverbSound;
- private AudioChunk@ reloadSound;
- private AudioChunk@ cockSound;
+ private AudioChunk @fireSound;
+ private AudioChunk @fireFarSound;
+ private AudioChunk @fireStereoSound;
+ private AudioChunk @fireSmallReverbSound;
+ private AudioChunk @fireLargeReverbSound;
+ private AudioChunk @reloadSound;
+ private AudioChunk @cockSound;
- ViewShotgunSkin(Renderer@ r, AudioDevice@ dev){
- super(r);
- @audioDevice = dev;
- @gunModel = renderer.RegisterModel
- ("Models/Weapons/Shotgun/WeaponNoPump.kv6");
- @pumpModel = renderer.RegisterModel
- ("Models/Weapons/Shotgun/Pump.kv6");
- @sightModel1 = renderer.RegisterModel
- ("Models/Weapons/Shotgun/Sight1.kv6");
- @sightModel2 = renderer.RegisterModel
- ("Models/Weapons/Shotgun/Sight2.kv6");
+ ViewShotgunSkin(Renderer @r, AudioDevice @dev) {
+ super(r);
+ @audioDevice = dev;
+ @gunModel = renderer.RegisterModel("Models/Weapons/Shotgun/WeaponNoPump.kv6");
+ @pumpModel = renderer.RegisterModel("Models/Weapons/Shotgun/Pump.kv6");
+ @sightModel1 = renderer.RegisterModel("Models/Weapons/Shotgun/Sight1.kv6");
+ @sightModel2 = renderer.RegisterModel("Models/Weapons/Shotgun/Sight2.kv6");
- @fireSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/FireLocal.opus");
- @fireFarSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/FireFar.opus");
- @fireStereoSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/FireStereo.opus");
- @reloadSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/ReloadLocal.opus");
- @cockSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/CockLocal.opus");
+ @fireSound = dev.RegisterSound("Sounds/Weapons/Shotgun/FireLocal.opus");
+ @fireFarSound = dev.RegisterSound("Sounds/Weapons/Shotgun/FireFar.opus");
+ @fireStereoSound = dev.RegisterSound("Sounds/Weapons/Shotgun/FireStereo.opus");
+ @reloadSound = dev.RegisterSound("Sounds/Weapons/Shotgun/ReloadLocal.opus");
+ @cockSound = dev.RegisterSound("Sounds/Weapons/Shotgun/CockLocal.opus");
- @fireSmallReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/V2AmbienceSmall.opus");
- @fireLargeReverbSound = dev.RegisterSound
- ("Sounds/Weapons/Shotgun/V2AmbienceLarge.opus");
- }
+ @fireSmallReverbSound
+ = dev.RegisterSound("Sounds/Weapons/Shotgun/V2AmbienceSmall.opus");
+ @fireLargeReverbSound
+ = dev.RegisterSound("Sounds/Weapons/Shotgun/V2AmbienceLarge.opus");
+ }
- void Update(float dt) {
- BasicViewWeapon::Update(dt);
- }
+ void Update(float dt) { BasicViewWeapon::Update(dt); }
- void WeaponFired(){
- BasicViewWeapon::WeaponFired();
+ void WeaponFired() {
+ BasicViewWeapon::WeaponFired();
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 8.f;
- audioDevice.PlayLocal(fireSound, origin, param);
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 8.f;
+ audioDevice.PlayLocal(fireSound, origin, param);
- param.volume = 8.f * environmentRoom;
- if (environmentSize < 0.5f) {
- audioDevice.PlayLocal(fireSmallReverbSound, origin, param);
- } else {
- audioDevice.PlayLocal(fireLargeReverbSound, origin, param);
- }
+ param.volume = 8.f * environmentRoom;
+ if (environmentSize < 0.5f) {
+ audioDevice.PlayLocal(fireSmallReverbSound, origin, param);
+ } else {
+ audioDevice.PlayLocal(fireLargeReverbSound, origin, param);
+ }
- param.volume = 2.f;
- audioDevice.PlayLocal(fireFarSound, origin, param);
- audioDevice.PlayLocal(fireStereoSound, origin, param);
- }
- }
+ param.volume = 2.f;
+ audioDevice.PlayLocal(fireFarSound, origin, param);
+ audioDevice.PlayLocal(fireStereoSound, origin, param);
+ }
+ }
- void ReloadingWeapon() {
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.PlayLocal(reloadSound, origin, param);
- }
- }
+ void ReloadingWeapon() {
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.PlayLocal(reloadSound, origin, param);
+ }
+ }
- void ReloadedWeapon() {
- if(!IsMuted){
- Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
- AudioParam param;
- param.volume = 0.2f;
- audioDevice.PlayLocal(cockSound, origin, param);
- }
- }
+ void ReloadedWeapon() {
+ if (!IsMuted) {
+ Vector3 origin = Vector3(0.4f, -0.3f, 0.5f);
+ AudioParam param;
+ param.volume = 0.2f;
+ audioDevice.PlayLocal(cockSound, origin, param);
+ }
+ }
- float GetZPos() {
- return 0.2f - AimDownSightStateSmooth * 0.0535f;
- }
+ float GetZPos() { return 0.2f - AimDownSightStateSmooth * 0.0535f; }
- // rotates gun matrix to ensure the sight is in
- // the center of screen (0, ?, 0).
- Matrix4 AdjustToAlignSight(Matrix4 mat, Vector3 sightPos, float fade) {
- Vector3 p = mat * sightPos;
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), atan(p.x / p.y) * fade) * mat;
- mat = CreateRotateMatrix(Vector3(-1.f, 0.f, 0.f), atan(p.z / p.y) * fade) * mat;
- return mat;
- }
+ // rotates gun matrix to ensure the sight is in
+ // the center of screen (0, ?, 0).
+ Matrix4 AdjustToAlignSight(Matrix4 mat, Vector3 sightPos, float fade) {
+ Vector3 p = mat * sightPos;
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), atan(p.x / p.y) * fade) * mat;
+ mat = CreateRotateMatrix(Vector3(-1.f, 0.f, 0.f), atan(p.z / p.y) * fade) * mat;
+ return mat;
+ }
- void Draw2D() {
- if(AimDownSightState > 0.6)
- return;
- BasicViewWeapon::Draw2D();
- }
+ void Draw2D() {
+ if (AimDownSightState > 0.6)
+ return;
+ BasicViewWeapon::Draw2D();
+ }
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.033f);
- mat = GetViewWeaponMatrix() * mat;
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.033f);
+ mat = GetViewWeaponMatrix() * mat;
- bool reloading = IsReloading;
- float reload = ReloadProgress;
- Vector3 leftHand, rightHand;
+ bool reloading = IsReloading;
+ float reload = ReloadProgress;
+ Vector3 leftHand, rightHand;
- rightHand = mat * Vector3(0.f, -8.f, 2.f);
+ rightHand = mat * Vector3(0.f, -8.f, 2.f);
- Vector3 leftHand2 = mat * Vector3(5.f, -10.f, 4.f);
- Vector3 leftHand3 = mat * Vector3(1.f, 1.f, 2.f);
+ Vector3 leftHand2 = mat * Vector3(5.f, -10.f, 4.f);
+ Vector3 leftHand3 = mat * Vector3(1.f, 1.f, 2.f);
- if(AimDownSightStateSmooth > 0.8f){
- mat = AdjustToAlignSight(mat, Vector3(0.f, 8.5f, -4.4f),
- (AimDownSightStateSmooth - 0.8f) / 0.2f);
- }
+ if (AimDownSightStateSmooth > 0.8f) {
+ mat = AdjustToAlignSight(mat, Vector3(0.f, 8.5f, -4.4f),
+ (AimDownSightStateSmooth - 0.8f) / 0.2f);
+ }
- ModelRenderParam param;
- Matrix4 weapMatrix = eyeMatrix * mat;
- param.matrix = weapMatrix;
- param.depthHack = true;
- renderer.AddModel(gunModel, param);
+ ModelRenderParam param;
+ Matrix4 weapMatrix = eyeMatrix * mat;
+ param.matrix = weapMatrix;
+ param.depthHack = true;
+ renderer.AddModel(gunModel, param);
- // draw sights
- Matrix4 sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.025f, -9.f, -4.4f);
- sightMat *= CreateScaleMatrix(0.05f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel2, param); // rear
+ // draw sights
+ Matrix4 sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.025f, -9.f, -4.4f);
+ sightMat *= CreateScaleMatrix(0.05f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel2, param); // rear
- sightMat = weapMatrix;
- sightMat *= CreateTranslateMatrix(0.025f, 8.5f, -4.4f);
- sightMat *= CreateScaleMatrix(0.05f);
- param.matrix = sightMat;
- renderer.AddModel(sightModel1, param); // front pin
+ sightMat = weapMatrix;
+ sightMat *= CreateTranslateMatrix(0.025f, 8.5f, -4.4f);
+ sightMat *= CreateScaleMatrix(0.05f);
+ param.matrix = sightMat;
+ renderer.AddModel(sightModel1, param); // front pin
- // reload action
- reload *= 0.5f;
- leftHand = mat * Vector3(0.f, 4.f, 2.f);
+ // reload action
+ reload *= 0.5f;
+ leftHand = mat * Vector3(0.f, 4.f, 2.f);
- if(reloading) {
- if(reload < 0.2f) {
- float per = reload / 0.2f;
- leftHand = Mix(leftHand, leftHand2,
- SmoothStep(per));
- }else if(reload < 0.35f){
- float per = (reload - 0.2f) / 0.15f;
- leftHand = Mix(leftHand2, leftHand3,
- SmoothStep(per));
- }else if(reload < 0.5f){
- float per = (reload - 0.35f) / 0.15f;
- leftHand = Mix(leftHand3, leftHand,
- SmoothStep(per));
- }
- }
+ if (reloading) {
+ if (reload < 0.2f) {
+ float per = reload / 0.2f;
+ leftHand = Mix(leftHand, leftHand2, SmoothStep(per));
+ } else if (reload < 0.35f) {
+ float per = (reload - 0.2f) / 0.15f;
+ leftHand = Mix(leftHand2, leftHand3, SmoothStep(per));
+ } else if (reload < 0.5f) {
+ float per = (reload - 0.35f) / 0.15f;
+ leftHand = Mix(leftHand3, leftHand, SmoothStep(per));
+ }
+ }
- // motion blending parameter
- float cockFade = 1.f;
- if(reloading){
- if(reload < 0.25f ||
- ammo < (clipSize - 1)) {
- cockFade = 0.f;
- }else{
- cockFade = (reload - 0.25f) * 10.f;
- cockFade = Min(cockFade, 1.f);
- }
- }
+ // motion blending parameter
+ float cockFade = 1.f;
+ if (reloading) {
+ if (reload < 0.25f || ammo < (clipSize - 1)) {
+ cockFade = 0.f;
+ } else {
+ cockFade = (reload - 0.25f) * 10.f;
+ cockFade = Min(cockFade, 1.f);
+ }
+ }
- if(cockFade > 0.f){
- float cock = 0.f;
- float tim = 1.f - readyState;
- if(tim < 0.f){
- // might be right after reloading
- if(ammo >= clipSize && reload > 0.5f && reload < 1.f){
- tim = reload - 0.5f;
- if(tim < 0.05f){
- cock = 0.f;
- }else if(tim < 0.12f){
- cock = (tim - 0.05f) / 0.07f;
- }else if(tim < 0.26f){
- cock = 1.f;
- }else if(tim < 0.36f){
- cock = 1.f - (tim - 0.26f) / 0.1f;
- }
- }
- }else if(tim < 0.2f){
- cock = 0.f;
- }else if(tim < 0.3f){
- cock = (tim - 0.2f) / 0.1f;
- }else if(tim < 0.42f){
- cock = 1.f;
- }else if(tim < 0.52f){
- cock = 1.f - (tim - 0.42f) / 0.1f;
- }else{
- cock = 0.f;
- }
+ if (cockFade > 0.f) {
+ float cock = 0.f;
+ float tim = 1.f - readyState;
+ if (tim < 0.f) {
+ // might be right after reloading
+ if (ammo >= clipSize && reload > 0.5f && reload < 1.f) {
+ tim = reload - 0.5f;
+ if (tim < 0.05f) {
+ cock = 0.f;
+ } else if (tim < 0.12f) {
+ cock = (tim - 0.05f) / 0.07f;
+ } else if (tim < 0.26f) {
+ cock = 1.f;
+ } else if (tim < 0.36f) {
+ cock = 1.f - (tim - 0.26f) / 0.1f;
+ }
+ }
+ } else if (tim < 0.2f) {
+ cock = 0.f;
+ } else if (tim < 0.3f) {
+ cock = (tim - 0.2f) / 0.1f;
+ } else if (tim < 0.42f) {
+ cock = 1.f;
+ } else if (tim < 0.52f) {
+ cock = 1.f - (tim - 0.42f) / 0.1f;
+ } else {
+ cock = 0.f;
+ }
- cock *= cockFade;
- mat = mat * CreateTranslateMatrix(0.f, cock * -1.5f, 0.f);
+ cock *= cockFade;
+ mat = mat * CreateTranslateMatrix(0.f, cock * -1.5f, 0.f);
- leftHand = Mix(leftHand,
- mat * Vector3(0.f, 4.f, 2.f), cockFade);
- }
+ leftHand = Mix(leftHand, mat * Vector3(0.f, 4.f, 2.f), cockFade);
+ }
- param.matrix = eyeMatrix * mat;
- renderer.AddModel(pumpModel, param);
+ param.matrix = eyeMatrix * mat;
+ renderer.AddModel(pumpModel, param);
- LeftHandPosition = leftHand;
- RightHandPosition = rightHand;
- }
- }
+ LeftHandPosition = leftHand;
+ RightHandPosition = rightHand;
+ }
+ }
- IWeaponSkin@ CreateViewShotgunSkin(Renderer@ r, AudioDevice@ dev) {
- return ViewShotgunSkin(r, dev);
- }
+ IWeaponSkin @CreateViewShotgunSkin(Renderer @r, AudioDevice @dev) {
+ return ViewShotgunSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Skin.as b/Resources/Scripts/Skin/Skin.as
index efcd766b..51bec97d 100644
--- a/Resources/Scripts/Skin/Skin.as
+++ b/Resources/Scripts/Skin/Skin.as
@@ -1,23 +1,23 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
+
#include "BasicViewWeapon.as"
#include "Spade/ThirdPerson.as"
#include "Spade/View.as"
diff --git a/Resources/Scripts/Skin/Spade/ThirdPerson.as b/Resources/Scripts/Skin/Spade/ThirdPerson.as
index 08c201ba..916f37f4 100644
--- a/Resources/Scripts/Skin/Spade/ThirdPerson.as
+++ b/Resources/Scripts/Skin/Spade/ThirdPerson.as
@@ -1,103 +1,98 @@
/*
Copyright (c) 2013 yvt
-
+
This file is part of OpenSpades.
-
+
OpenSpades is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
OpenSpades is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with OpenSpades. If not, see .
-
+
*/
-
- namespace spades {
- class ThirdPersonSpadeSkin:
- IToolSkin, IThirdPersonToolSkin, ISpadeSkin {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private Matrix4 originMatrix;
- private SpadeActionType actionType;
- private float actionProgress;
-
- float SprintState {
- set { sprintState = value; }
- }
-
- float RaiseState {
- set { raiseState = value; }
- }
-
- Vector3 TeamColor {
- set { teamColor = value; }
- }
-
- bool IsMuted {
- set {
- // nothing to do
- }
- }
-
- Matrix4 OriginMatrix {
- set { originMatrix = value; }
- }
-
- float PitchBias {
- get {
- float pitch = 0.f;
- if(actionType == spades::SpadeActionType::Bash) {
- float per = 1.f - actionProgress;
- pitch -= per * 0.7f;
- }
- return pitch;
- }
- }
-
- SpadeActionType ActionType {
- set { actionType = value; }
- }
-
- float ActionProgress {
- set { actionProgress = value; }
- }
-
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
-
- ThirdPersonSpadeSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Spade/Spade.kv6");
- }
-
- void Update(float dt) {
- }
-
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.05f);
-
-
- mat = CreateRotateMatrix(Vector3(0.f,0.f,1.f), Pi) * mat;
- mat = CreateTranslateMatrix(0.35f, -1.f, 0.f) * mat;
-
-
- ModelRenderParam param;
- param.matrix = originMatrix * mat;
- renderer.AddModel(model, param);
- }
- }
-
- ISpadeSkin@ CreateThirdPersonSpadeSkin(Renderer@ r, AudioDevice@ dev) {
- return ThirdPersonSpadeSkin(r, dev);
- }
+
+namespace spades {
+ class ThirdPersonSpadeSkin : IToolSkin, IThirdPersonToolSkin, ISpadeSkin {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private Matrix4 originMatrix;
+ private SpadeActionType actionType;
+ private float actionProgress;
+
+ float SprintState {
+ set { sprintState = value; }
+ }
+
+ float RaiseState {
+ set { raiseState = value; }
+ }
+
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
+
+ bool IsMuted {
+ set {
+ // nothing to do
+ }
+ }
+
+ Matrix4 OriginMatrix {
+ set { originMatrix = value; }
+ }
+
+ float PitchBias {
+ get {
+ float pitch = 0.f;
+ if (actionType == spades::SpadeActionType::Bash) {
+ float per = 1.f - actionProgress;
+ pitch -= per * 0.7f;
+ }
+ return pitch;
+ }
+ }
+
+ SpadeActionType ActionType {
+ set { actionType = value; }
+ }
+
+ float ActionProgress {
+ set { actionProgress = value; }
+ }
+
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+
+ ThirdPersonSpadeSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Spade/Spade.kv6");
+ }
+
+ void Update(float dt) {}
+
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.05f);
+
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), Pi) * mat;
+ mat = CreateTranslateMatrix(0.35f, -1.f, 0.f) * mat;
+
+ ModelRenderParam param;
+ param.matrix = originMatrix * mat;
+ renderer.AddModel(model, param);
+ }
+ }
+
+ ISpadeSkin @CreateThirdPersonSpadeSkin(Renderer @r, AudioDevice @dev) {
+ return ThirdPersonSpadeSkin(r, dev);
+ }
}
diff --git a/Resources/Scripts/Skin/Spade/View.as b/Resources/Scripts/Skin/Spade/View.as
index 6f21095a..58c6e76d 100644
--- a/Resources/Scripts/Skin/Spade/View.as
+++ b/Resources/Scripts/Skin/Spade/View.as
@@ -18,177 +18,162 @@
*/
- namespace spades {
- class ViewSpadeSkin:
- IToolSkin, IViewToolSkin, ISpadeSkin {
- private float sprintState;
- private float raiseState;
- private Vector3 teamColor;
- private Matrix4 eyeMatrix;
- private Vector3 swing;
- private Vector3 leftHand;
- private Vector3 rightHand;
- private SpadeActionType actionType;
- private float actionProgress;
+namespace spades {
+ class ViewSpadeSkin : IToolSkin, IViewToolSkin, ISpadeSkin {
+ private float sprintState;
+ private float raiseState;
+ private Vector3 teamColor;
+ private Matrix4 eyeMatrix;
+ private Vector3 swing;
+ private Vector3 leftHand;
+ private Vector3 rightHand;
+ private SpadeActionType actionType;
+ private float actionProgress;
- private float sprintStateSmooth;
+ private float sprintStateSmooth;
- float SprintState {
- set { sprintState = value; }
- }
+ float SprintState {
+ set { sprintState = value; }
+ }
- float RaiseState {
- set { raiseState = value; }
- }
+ float RaiseState {
+ set { raiseState = value; }
+ }
- Vector3 TeamColor {
- set { teamColor = value; }
- }
+ Vector3 TeamColor {
+ set { teamColor = value; }
+ }
- bool IsMuted {
- set {
- // nothing to do
- }
- }
+ bool IsMuted {
+ set {
+ // nothing to do
+ }
+ }
- Matrix4 EyeMatrix {
- set { eyeMatrix = value; }
- }
+ Matrix4 EyeMatrix {
+ set { eyeMatrix = value; }
+ }
- Vector3 Swing {
- set { swing = value; }
- }
+ Vector3 Swing {
+ set { swing = value; }
+ }
- Vector3 LeftHandPosition {
- get {
- return leftHand;
- }
- }
- Vector3 RightHandPosition {
- get {
- return rightHand;
- }
- }
+ Vector3 LeftHandPosition {
+ get { return leftHand; }
+ }
+ Vector3 RightHandPosition {
+ get { return rightHand; }
+ }
- SpadeActionType ActionType {
- set { actionType = value; }
- }
+ SpadeActionType ActionType {
+ set { actionType = value; }
+ }
- float ActionProgress {
- set { actionProgress = value; }
- }
+ float ActionProgress {
+ set { actionProgress = value; }
+ }
- private Renderer@ renderer;
- private AudioDevice@ audioDevice;
- private Model@ model;
- private Image@ sightImage;
+ private Renderer @renderer;
+ private AudioDevice @audioDevice;
+ private Model @model;
+ private Image @sightImage;
- ViewSpadeSkin(Renderer@ r, AudioDevice@ dev) {
- @renderer = r;
- @audioDevice = dev;
- @model = renderer.RegisterModel
- ("Models/Weapons/Spade/Spade.kv6");
- @sightImage = renderer.RegisterImage
- ("Gfx/Sight.tga");
- }
+ ViewSpadeSkin(Renderer @r, AudioDevice @dev) {
+ @renderer = r;
+ @audioDevice = dev;
+ @model = renderer.RegisterModel("Models/Weapons/Spade/Spade.kv6");
+ @sightImage = renderer.RegisterImage("Gfx/Sight.tga");
+ }
- void Update(float dt) {
- float sprintStateSS = sprintState * sprintState;
- if (sprintStateSS > sprintStateSmooth) {
- sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
- } else {
- sprintStateSmooth = sprintStateSS;
- }
- }
+ void Update(float dt) {
+ float sprintStateSS = sprintState * sprintState;
+ if (sprintStateSS > sprintStateSmooth) {
+ sprintStateSmooth += (sprintStateSS - sprintStateSmooth) * (1.f - pow(0.001, dt));
+ } else {
+ sprintStateSmooth = sprintStateSS;
+ }
+ }
- void AddToScene() {
- Matrix4 mat = CreateScaleMatrix(0.033f);
+ void AddToScene() {
+ Matrix4 mat = CreateScaleMatrix(0.033f);
- if(actionType == spades::SpadeActionType::Bash) {
- float per = 1.f - actionProgress;
- mat = CreateRotateMatrix(Vector3(1.f, 0.f, 0.f),
- per * 1.7f) * mat;
- mat = CreateTranslateMatrix(0.f, per * 0.3f, 0.f)
- * mat;
- }else if(actionType == spades::SpadeActionType::DigStart ||
- actionType == spades::SpadeActionType::Dig) {
- bool first = actionType == spades::SpadeActionType::DigStart;
- float per = actionProgress;
+ if (actionType == spades::SpadeActionType::Bash) {
+ float per = 1.f - actionProgress;
+ mat = CreateRotateMatrix(Vector3(1.f, 0.f, 0.f), per * 1.7f) * mat;
+ mat = CreateTranslateMatrix(0.f, per * 0.3f, 0.f) * mat;
+ } else if (actionType == spades::SpadeActionType::DigStart ||
+ actionType == spades::SpadeActionType::Dig) {
+ bool first = actionType == spades::SpadeActionType::DigStart;
+ float per = actionProgress;
- // some tunes
- const float readyFront = -0.8f;
- const float digAngle = 0.6f;
- const float readyAngle = 0.6f;
+ // some tunes
+ const float readyFront = -0.8f;
+ const float digAngle = 0.6f;
+ const float readyAngle = 0.6f;
- float angle;
- float front = readyFront;
- float side = 1.f;
+ float angle;
+ float front = readyFront;
+ float side = 1.f;
- if(per < 0.5f) {
- if(first) {
- // bringing to the dig position
- per = 4.f * per * per;
- angle = per * readyAngle;
- side = per;
- front = per * readyFront;
- }else{
- // soon after digging
- angle = readyAngle;
- per = (0.5f - per) / 0.5f;
- per *= per; per *= per;
- angle += per * digAngle;
- front += per * 2.0f;
- }
- }else{
- per = (per - 0.5f) / 0.5f;
- per = 1.f - (1.f-per) * (1.f-per);
- angle = readyAngle + per * digAngle;
- front += per * 2.f;
- }
+ if (per < 0.5f) {
+ if (first) {
+ // bringing to the dig position
+ per = 4.f * per * per;
+ angle = per * readyAngle;
+ side = per;
+ front = per * readyFront;
+ } else {
+ // soon after digging
+ angle = readyAngle;
+ per = (0.5f - per) / 0.5f;
+ per *= per;
+ per *= per;
+ angle += per * digAngle;
+ front += per * 2.0f;
+ }
+ } else {
+ per = (per - 0.5f) / 0.5f;
+ per = 1.f - (1.f - per) * (1.f - per);
+ angle = readyAngle + per * digAngle;
+ front += per * 2.f;
+ }
- mat = CreateRotateMatrix(Vector3(1.f, 0.f, 0.f),
- angle) * mat;
- mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f),
- front * 0.15f) * mat;
+ mat = CreateRotateMatrix(Vector3(1.f, 0.f, 0.f), angle) * mat;
+ mat = CreateRotateMatrix(Vector3(0.f, 0.f, 1.f), front * 0.15f) * mat;
- side *= 0.3f;
- front *= 0.1f;
+ side *= 0.3f;
+ front *= 0.1f;
- mat = CreateTranslateMatrix(side, front, front * 0.2f)
- * mat;
- }
+ mat = CreateTranslateMatrix(side, front, front * 0.2f) * mat;
+ }
- if(sprintStateSmooth > 0.f || raiseState < 1.f){
- float per = Max(sprintStateSmooth, 1.f - raiseState);
- mat = CreateRotateMatrix(Vector3(0.f, 1.f, 0.f),
- per * 1.3f) * mat;
- mat = CreateTranslateMatrix(Vector3(0.3f, -0.4f, -0.1f) * per)
- * mat;
- }
+ if (sprintStateSmooth > 0.f || raiseState < 1.f) {
+ float per = Max(sprintStateSmooth, 1.f - raiseState);
+ mat = CreateRotateMatrix(Vector3(0.f, 1.f, 0.f), per * 1.3f) * mat;
+ mat = CreateTranslateMatrix(Vector3(0.3f, -0.4f, -0.1f) * per) * mat;
+ }
- mat = CreateTranslateMatrix(0.f, (1.f - raiseState) * -0.3f, 0.f) * mat;
+ mat = CreateTranslateMatrix(0.f, (1.f - raiseState) * -0.3f, 0.f) * mat;
- mat = CreateTranslateMatrix(-0.3f, 0.7f, 0.3f) * mat;
- mat = CreateTranslateMatrix(swing) * mat;
+ mat = CreateTranslateMatrix(-0.3f, 0.7f, 0.3f) * mat;
+ mat = CreateTranslateMatrix(swing) * mat;
- leftHand = mat * Vector3(0.f, 0.f, 7.f);
- rightHand = mat * Vector3(0.f, 0.f, -2.f);
+ leftHand = mat * Vector3(0.f, 0.f, 7.f);
+ rightHand = mat * Vector3(0.f, 0.f, -2.f);
- ModelRenderParam param;
- param.matrix = eyeMatrix * mat;
- param.depthHack = true;
- renderer.AddModel(model, param);
- }
+ ModelRenderParam param;
+ param.matrix = eyeMatrix * mat;
+ param.depthHack = true;
+ renderer.AddModel(model, param);
+ }
- void Draw2D() {
- renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
- renderer.DrawImage(sightImage,
- Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
- (renderer.ScreenHeight - sightImage.Height) * 0.5f));
- }
- }
+ void Draw2D() {
+ renderer.ColorNP = (Vector4(1.f, 1.f, 1.f, 1.f));
+ renderer.DrawImage(sightImage,
+ Vector2((renderer.ScreenWidth - sightImage.Width) * 0.5f,
+ (renderer.ScreenHeight - sightImage.Height) * 0.5f));
+ }
+ }
- ISpadeSkin@ CreateViewSpadeSkin(Renderer@ r, AudioDevice@ dev) {
- return ViewSpadeSkin(r, dev);
- }
+ ISpadeSkin @CreateViewSpadeSkin(Renderer @r, AudioDevice @dev) { return ViewSpadeSkin(r, dev); }
}
diff --git a/run-clang-format.ps1 b/run-clang-format.ps1
new file mode 100755
index 00000000..879f7ad2
--- /dev/null
+++ b/run-clang-format.ps1
@@ -0,0 +1,37 @@
+#!/usr/bin/env pwsh
+param(
+ [string]$SourceDirectory = ".",
+ [string]$ClangFormat = "clang-format"
+)
+
+# TODO: Run clang-format on C++ source files
+
+# Run clang-format on AngelScript source files
+$ScriptDirectory = Join-Path $SourceDirectory "Resources" "Scripts"
+$Scripts = Get-ChildItem -Recurse -Include "*.as" $ScriptDirectory
+
+$I = 0
+foreach ($Item in $Scripts) {
+ $Path = $Item.FullName
+ $TmpPath = $Path.Substring(0, $Path.Length - 3) + ".java"
+
+ # Make it pretend to be a Java source file (which clang-format understands)
+ # I didn't choose C++ mainly due to the difference in how accessibility is
+ # specified.
+ Copy-Item $Path $TmpPath
+
+ # Run clang-format
+ &$ClangFormat -i -style=file $TmpPath
+
+ # Rename it back
+ Move-Item -Force $TmpPath $Path
+
+ # Fix `@ this.`
+ $Text = Get-Content $Path
+ $Text = $Text.Replace("@ this.", "@this.")
+ Set-Content $Path $Text
+
+ $I += 1
+ Write-Progress -Activity "Running clang-format on AngelScript source files" `
+ -PercentComplete ($I / $Scripts.Count * 100)
+}