Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
#priority init -100
|
||||
import elements.BaseGuiElement;
|
||||
import elements.GuiButton;
|
||||
import elements.GuiText;
|
||||
import elements.GuiSprite;
|
||||
import elements.GuiMarkupText;
|
||||
import elements.MarkupTooltip;
|
||||
import tabs.Tab;
|
||||
import util.formatting;
|
||||
import timing;
|
||||
from tabs.tabbar import TAB_HEIGHT, GLOBAL_BAR_HEIGHT, ActiveTab;
|
||||
|
||||
class TimeDisplay : BaseGuiElement {
|
||||
GuiSprite@ icon;
|
||||
GuiMarkupText@ text;
|
||||
bool showGameTime = true;
|
||||
bool clicking = false;
|
||||
bool wasAutoPause = false;
|
||||
string prevText;
|
||||
|
||||
GuiButton@ pauseButton;
|
||||
GuiButton@ slowButton;
|
||||
GuiButton@ fastButton;
|
||||
|
||||
TimeDisplay() {
|
||||
super(null, recti_area(-4,TAB_HEIGHT+GLOBAL_BAR_HEIGHT, 210, 30));
|
||||
@icon = GuiSprite(this, recti_area(9,3, 24,24));
|
||||
@text = GuiMarkupText(this, recti_area(35,6, 120,24));
|
||||
setMarkupTooltip(icon, locale::TT_GAMETIME);
|
||||
setMarkupTooltip(text, locale::TT_GAMETIME);
|
||||
|
||||
if(mpClient) {
|
||||
size = vec2i(128, 30);
|
||||
}
|
||||
else {
|
||||
@slowButton = GuiButton(this, Alignment(Right-69, Top+7, Width=18, Height=18));
|
||||
setMarkupTooltip(slowButton, locale::TT_SLOWER);
|
||||
slowButton.allowOtherButtons = true;
|
||||
slowButton.spriteStyle = Sprite(spritesheet::TimeSlow, 0);
|
||||
|
||||
@pauseButton = GuiButton(this, Alignment(Right-48, Top+7, Width=18, Height=18));
|
||||
setMarkupTooltip(pauseButton, locale::TT_PAUSE);
|
||||
pauseButton.allowOtherButtons = true;
|
||||
pauseButton.spriteStyle = Sprite(spritesheet::TimeStop, 0);
|
||||
|
||||
@fastButton = GuiButton(this, Alignment(Right-26, Top+7, Width=18, Height=18));
|
||||
setMarkupTooltip(fastButton, locale::TT_FASTER);
|
||||
fastButton.allowOtherButtons = true;
|
||||
fastButton.spriteStyle = Sprite(spritesheet::TimeHaste, 0);
|
||||
}
|
||||
|
||||
updateAbsolutePosition();
|
||||
}
|
||||
|
||||
void tick(double time) {
|
||||
visible = (ActiveTab.category == TC_Galaxy) && ShowTimeDisplay;
|
||||
|
||||
if(!mpClient && !mpServer && settings::bAutoPause) {
|
||||
bool shouldAutoPause = ActiveTab.category != TC_Galaxy && ActiveTab.category != TC_Diplomacy;
|
||||
if(gameSpeed != 0 && shouldAutoPause) {
|
||||
pause();
|
||||
wasAutoPause = true;
|
||||
}
|
||||
else if(!shouldAutoPause && wasAutoPause && gameSpeed == 0) {
|
||||
pause();
|
||||
wasAutoPause = false;
|
||||
}
|
||||
}
|
||||
string str;
|
||||
if(showGameTime) {
|
||||
double time = floor(gameTime / 60.0);
|
||||
int hrs = floor(time / 60.0);
|
||||
int mins = floor(time - (hrs * 60.0));
|
||||
str = format(locale::TIME_HM, toString(hrs), toString(mins));
|
||||
|
||||
icon.desc = Sprite(spritesheet::MenuIcons, 0);
|
||||
}
|
||||
else {
|
||||
icon.desc = Sprite(material::TimeReal);
|
||||
str = strftime("%H:%M", getSystemTime());
|
||||
}
|
||||
if(abs(gameSpeed - 1.0) > 0.05) {
|
||||
if(mpIsSerializing)
|
||||
str += format(" [color=#fff900]$1[/color]", locale::WAITING);
|
||||
else if(gameSpeed == 0.0)
|
||||
str += format(" [color=#f00]$1[/color]", locale::PAUSED);
|
||||
else if(gameSpeed > 1.0)
|
||||
str += format(" [color=#0f0]x$1[/color]", toString(gameSpeed, 1));
|
||||
else
|
||||
str += format(" [color=#f00]x$1[/color]", toString(gameSpeed, 1));
|
||||
}
|
||||
if(str != prevText) {
|
||||
text.text = str;
|
||||
text.updateAbsolutePosition();
|
||||
prevText = str;
|
||||
}
|
||||
if(pauseButton !is null) {
|
||||
if(gameSpeed == 0.0)
|
||||
pauseButton.spriteStyle = Sprite(spritesheet::TimeResume, 0);
|
||||
else
|
||||
pauseButton.spriteStyle = Sprite(spritesheet::TimeStop, 0);
|
||||
}
|
||||
}
|
||||
|
||||
bool onGuiEvent(const GuiEvent& evt) {
|
||||
switch(evt.type) {
|
||||
case GUI_Mouse_Left:
|
||||
if(evt.caller is this)
|
||||
clicking = false;
|
||||
break;
|
||||
case GUI_Clicked:
|
||||
if(evt.caller is pauseButton) {
|
||||
if(evt.value == 1)
|
||||
speed_default();
|
||||
else
|
||||
pause();
|
||||
return true;
|
||||
}
|
||||
else if(evt.caller is slowButton) {
|
||||
if(evt.value == 1)
|
||||
speed_slowest();
|
||||
else
|
||||
speed_slower();
|
||||
return true;
|
||||
}
|
||||
else if(evt.caller is fastButton) {
|
||||
if(evt.value == 1)
|
||||
speed_fastest();
|
||||
else
|
||||
speed_faster();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return BaseGuiElement::onGuiEvent(evt);
|
||||
}
|
||||
|
||||
bool onMouseEvent(const MouseEvent& event, IGuiElement@ source) {
|
||||
if(source is this || source is icon || source is text) {
|
||||
switch(event.type) {
|
||||
case MET_Button_Down:
|
||||
if(event.button == 0) {
|
||||
clicking = true;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case MET_Button_Up:
|
||||
if(event.button == 0) {
|
||||
if(clicking) {
|
||||
showGameTime = !showGameTime;
|
||||
if(showGameTime) {
|
||||
setMarkupTooltip(icon, locale::TT_GAMETIME);
|
||||
setMarkupTooltip(text, locale::TT_GAMETIME);
|
||||
}
|
||||
else {
|
||||
setMarkupTooltip(icon, locale::TT_REALTIME);
|
||||
setMarkupTooltip(text, locale::TT_REALTIME);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return BaseGuiElement::onMouseEvent(event, source);
|
||||
}
|
||||
|
||||
void draw() override {
|
||||
skin.draw(SS_TimeDisplay, SF_Normal, AbsolutePosition);
|
||||
BaseGuiElement::draw();
|
||||
}
|
||||
};
|
||||
|
||||
TimeDisplay@ disp;
|
||||
bool ShowTimeDisplay = true;
|
||||
void init() {
|
||||
@disp = TimeDisplay();
|
||||
}
|
||||
|
||||
void tick(double time) {
|
||||
disp.tick(time);
|
||||
}
|
||||
Reference in New Issue
Block a user