generated from krampus/template-godot4
Compare commits
4 Commits
85fcf911ed
...
e2ca0cb1a2
Author | SHA1 | Date | |
---|---|---|---|
e2ca0cb1a2 | |||
cdd89ea30f | |||
1b11d20cbe | |||
d94f68785a |
91
assets/fonts/promptfont/LICENSE.txt
Normal file
91
assets/fonts/promptfont/LICENSE.txt
Normal file
@ -0,0 +1,91 @@
|
||||
This Font Software is licensed under the SIL Open Font License,
|
||||
Version 1.1. This license is copied below, and is also available
|
||||
with a FAQ at <http://scripts.sil.org/OFL>
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
959
assets/fonts/promptfont/promptfont.gd
Normal file
959
assets/fonts/promptfont/promptfont.gd
Normal file
@ -0,0 +1,959 @@
|
||||
# PromptFont by Yukari "Shinmera" Hafner, accessible at https://shinmera.com/promptfont
|
||||
class_name PromptFont
|
||||
extends Resource
|
||||
const ASCII_BANG: StringName = &"!"
|
||||
const ASCII_BANG_INT: int = 33
|
||||
const ASCII_DOUBLEQUOTE: StringName = &'"'
|
||||
const ASCII_DOUBLEQUOTE_INT: int = 34
|
||||
const ASCII_HASH: StringName = &"#"
|
||||
const ASCII_HASH_INT: int = 35
|
||||
const ASCII_DOLLAR: StringName = &"$"
|
||||
const ASCII_DOLLAR_INT: int = 36
|
||||
const ASCII_PERCENT: StringName = &"%"
|
||||
const ASCII_PERCENT_INT: int = 37
|
||||
const ASCII_AMPERSAND: StringName = &"&"
|
||||
const ASCII_AMPERSAND_INT: int = 38
|
||||
const ASCII_QUOTE: StringName = &"'"
|
||||
const ASCII_QUOTE_INT: int = 39
|
||||
const ASCII_OPEN_PAREN: StringName = &"("
|
||||
const ASCII_OPEN_PAREN_INT: int = 40
|
||||
const ASCII_CLOSE_PAREN: StringName = &")"
|
||||
const ASCII_CLOSE_PAREN_INT: int = 41
|
||||
const ASCII_STAR: StringName = &"*"
|
||||
const ASCII_STAR_INT: int = 42
|
||||
const ASCII_PLUS: StringName = &"+"
|
||||
const ASCII_PLUS_INT: int = 43
|
||||
const ASCII_COMMA: StringName = &","
|
||||
const ASCII_COMMA_INT: int = 44
|
||||
const ASCII_DASH: StringName = &"-"
|
||||
const ASCII_DASH_INT: int = 45
|
||||
const ASCII_PERIOD: StringName = &"."
|
||||
const ASCII_PERIOD_INT: int = 46
|
||||
const ASCII_SLASH: StringName = &"/"
|
||||
const ASCII_SLASH_INT: int = 47
|
||||
const ASCII_0: StringName = &"0"
|
||||
const ASCII_0_INT: int = 48
|
||||
const ASCII_1: StringName = &"1"
|
||||
const ASCII_1_INT: int = 49
|
||||
const ASCII_2: StringName = &"2"
|
||||
const ASCII_2_INT: int = 50
|
||||
const ASCII_3: StringName = &"3"
|
||||
const ASCII_3_INT: int = 51
|
||||
const ASCII_4: StringName = &"4"
|
||||
const ASCII_4_INT: int = 52
|
||||
const ASCII_5: StringName = &"5"
|
||||
const ASCII_5_INT: int = 53
|
||||
const ASCII_6: StringName = &"6"
|
||||
const ASCII_6_INT: int = 54
|
||||
const ASCII_7: StringName = &"7"
|
||||
const ASCII_7_INT: int = 55
|
||||
const ASCII_8: StringName = &"8"
|
||||
const ASCII_8_INT: int = 56
|
||||
const ASCII_9: StringName = &"9"
|
||||
const ASCII_9_INT: int = 57
|
||||
const ASCII_COLON: StringName = &":"
|
||||
const ASCII_COLON_INT: int = 58
|
||||
const ASCII_SEMICOLON: StringName = &";"
|
||||
const ASCII_SEMICOLON_INT: int = 59
|
||||
const ASCII_OPEN_CARET: StringName = &"<"
|
||||
const ASCII_OPEN_CARET_INT: int = 60
|
||||
const ASCII_EQUALS: StringName = &"="
|
||||
const ASCII_EQUALS_INT: int = 61
|
||||
const ASCII_CLOSE_CARET: StringName = &">"
|
||||
const ASCII_CLOSE_CARET_INT: int = 62
|
||||
const ASCII_QUESTION: StringName = &"?"
|
||||
const ASCII_QUESTION_INT: int = 63
|
||||
const ASCII_AT: StringName = &"@"
|
||||
const ASCII_AT_INT: int = 64
|
||||
const ASCII_UPPER_A: StringName = &"A"
|
||||
const ASCII_UPPER_A_INT: int = 65
|
||||
const ASCII_UPPER_B: StringName = &"B"
|
||||
const ASCII_UPPER_B_INT: int = 66
|
||||
const ASCII_UPPER_C: StringName = &"C"
|
||||
const ASCII_UPPER_C_INT: int = 67
|
||||
const ASCII_UPPER_D: StringName = &"D"
|
||||
const ASCII_UPPER_D_INT: int = 68
|
||||
const ASCII_UPPER_E: StringName = &"E"
|
||||
const ASCII_UPPER_E_INT: int = 69
|
||||
const ASCII_UPPER_F: StringName = &"F"
|
||||
const ASCII_UPPER_F_INT: int = 70
|
||||
const ASCII_UPPER_G: StringName = &"G"
|
||||
const ASCII_UPPER_G_INT: int = 71
|
||||
const ASCII_UPPER_H: StringName = &"H"
|
||||
const ASCII_UPPER_H_INT: int = 72
|
||||
const ASCII_UPPER_I: StringName = &"I"
|
||||
const ASCII_UPPER_I_INT: int = 73
|
||||
const ASCII_UPPER_J: StringName = &"J"
|
||||
const ASCII_UPPER_J_INT: int = 74
|
||||
const ASCII_UPPER_K: StringName = &"K"
|
||||
const ASCII_UPPER_K_INT: int = 75
|
||||
const ASCII_UPPER_L: StringName = &"L"
|
||||
const ASCII_UPPER_L_INT: int = 76
|
||||
const ASCII_UPPER_M: StringName = &"M"
|
||||
const ASCII_UPPER_M_INT: int = 77
|
||||
const ASCII_UPPER_N: StringName = &"N"
|
||||
const ASCII_UPPER_N_INT: int = 78
|
||||
const ASCII_UPPER_O: StringName = &"O"
|
||||
const ASCII_UPPER_O_INT: int = 79
|
||||
const ASCII_UPPER_P: StringName = &"P"
|
||||
const ASCII_UPPER_P_INT: int = 80
|
||||
const ASCII_UPPER_Q: StringName = &"Q"
|
||||
const ASCII_UPPER_Q_INT: int = 81
|
||||
const ASCII_UPPER_R: StringName = &"R"
|
||||
const ASCII_UPPER_R_INT: int = 82
|
||||
const ASCII_UPPER_S: StringName = &"S"
|
||||
const ASCII_UPPER_S_INT: int = 83
|
||||
const ASCII_UPPER_T: StringName = &"T"
|
||||
const ASCII_UPPER_T_INT: int = 84
|
||||
const ASCII_UPPER_U: StringName = &"U"
|
||||
const ASCII_UPPER_U_INT: int = 85
|
||||
const ASCII_UPPER_V: StringName = &"V"
|
||||
const ASCII_UPPER_V_INT: int = 86
|
||||
const ASCII_UPPER_W: StringName = &"W"
|
||||
const ASCII_UPPER_W_INT: int = 87
|
||||
const ASCII_UPPER_X: StringName = &"X"
|
||||
const ASCII_UPPER_X_INT: int = 88
|
||||
const ASCII_UPPER_Y: StringName = &"Y"
|
||||
const ASCII_UPPER_Y_INT: int = 89
|
||||
const ASCII_UPPER_Z: StringName = &"Z"
|
||||
const ASCII_UPPER_Z_INT: int = 90
|
||||
const ASCII_OPEN_BRACKET: StringName = &"["
|
||||
const ASCII_OPEN_BRACKET_INT: int = 91
|
||||
const ASCII_BACKSLASH: StringName = &"\\"
|
||||
const ASCII_BACKSLASH_INT: int = 92
|
||||
const ASCII_CLOSE_BRACKET: StringName = &"]"
|
||||
const ASCII_CLOSE_BRACKET_INT: int = 93
|
||||
const ASCII_CARET: StringName = &"^"
|
||||
const ASCII_CARET_INT: int = 94
|
||||
const ASCII_UNDERSCORE: StringName = &"_"
|
||||
const ASCII_UNDERSCORE_INT: int = 95
|
||||
const ASCII_BACKTICK: StringName = &"`"
|
||||
const ASCII_BACKTICK_INT: int = 96
|
||||
const ASCII_LOWER_A: StringName = &"a"
|
||||
const ASCII_LOWER_A_INT: int = 97
|
||||
const ASCII_LOWER_B: StringName = &"b"
|
||||
const ASCII_LOWER_B_INT: int = 98
|
||||
const ASCII_LOWER_C: StringName = &"c"
|
||||
const ASCII_LOWER_C_INT: int = 99
|
||||
const ASCII_LOWER_D: StringName = &"d"
|
||||
const ASCII_LOWER_D_INT: int = 100
|
||||
const ASCII_LOWER_E: StringName = &"e"
|
||||
const ASCII_LOWER_E_INT: int = 101
|
||||
const ASCII_LOWER_F: StringName = &"f"
|
||||
const ASCII_LOWER_F_INT: int = 102
|
||||
const ASCII_LOWER_G: StringName = &"g"
|
||||
const ASCII_LOWER_G_INT: int = 103
|
||||
const ASCII_LOWER_H: StringName = &"h"
|
||||
const ASCII_LOWER_H_INT: int = 104
|
||||
const ASCII_LOWER_I: StringName = &"i"
|
||||
const ASCII_LOWER_I_INT: int = 105
|
||||
const ASCII_LOWER_J: StringName = &"j"
|
||||
const ASCII_LOWER_J_INT: int = 106
|
||||
const ASCII_LOWER_K: StringName = &"k"
|
||||
const ASCII_LOWER_K_INT: int = 107
|
||||
const ASCII_LOWER_L: StringName = &"l"
|
||||
const ASCII_LOWER_L_INT: int = 108
|
||||
const ASCII_LOWER_M: StringName = &"m"
|
||||
const ASCII_LOWER_M_INT: int = 109
|
||||
const ASCII_LOWER_N: StringName = &"n"
|
||||
const ASCII_LOWER_N_INT: int = 110
|
||||
const ASCII_LOWER_O: StringName = &"o"
|
||||
const ASCII_LOWER_O_INT: int = 111
|
||||
const ASCII_LOWER_P: StringName = &"p"
|
||||
const ASCII_LOWER_P_INT: int = 112
|
||||
const ASCII_LOWER_Q: StringName = &"q"
|
||||
const ASCII_LOWER_Q_INT: int = 113
|
||||
const ASCII_LOWER_R: StringName = &"r"
|
||||
const ASCII_LOWER_R_INT: int = 114
|
||||
const ASCII_LOWER_S: StringName = &"s"
|
||||
const ASCII_LOWER_S_INT: int = 115
|
||||
const ASCII_LOWER_T: StringName = &"t"
|
||||
const ASCII_LOWER_T_INT: int = 116
|
||||
const ASCII_LOWER_U: StringName = &"u"
|
||||
const ASCII_LOWER_U_INT: int = 117
|
||||
const ASCII_LOWER_V: StringName = &"v"
|
||||
const ASCII_LOWER_V_INT: int = 118
|
||||
const ASCII_LOWER_W: StringName = &"w"
|
||||
const ASCII_LOWER_W_INT: int = 119
|
||||
const ASCII_LOWER_X: StringName = &"x"
|
||||
const ASCII_LOWER_X_INT: int = 120
|
||||
const ASCII_LOWER_Y: StringName = &"y"
|
||||
const ASCII_LOWER_Y_INT: int = 121
|
||||
const ASCII_LOWER_Z: StringName = &"z"
|
||||
const ASCII_LOWER_Z_INT: int = 122
|
||||
const ASCII_OPEN_BRACE: StringName = &"{"
|
||||
const ASCII_OPEN_BRACE_INT: int = 123
|
||||
const ASCII_BAR: StringName = &"|"
|
||||
const ASCII_BAR_INT: int = 124
|
||||
const ASCII_CLOSE_BRACE: StringName = &"}"
|
||||
const ASCII_CLOSE_BRACE_INT: int = 125
|
||||
const ASCII_TILDE: StringName = &"~"
|
||||
const ASCII_TILDE_INT: int = 126
|
||||
const ICON_EXCHANGE: StringName = &"↔"
|
||||
const ICON_EXCHANGE_INT: int = 8596
|
||||
const ICON_REVERSE: StringName = &"↕"
|
||||
const ICON_REVERSE_INT: int = 8597
|
||||
const XBOX_LEFT_TRIGGER: StringName = &"↖"
|
||||
const XBOX_LEFT_TRIGGER_INT: int = 8598
|
||||
const XBOX_RIGHT_TRIGGER: StringName = &"↗"
|
||||
const XBOX_RIGHT_TRIGGER_INT: int = 8599
|
||||
const XBOX_LEFT_SHOULDER: StringName = &"↘"
|
||||
const XBOX_LEFT_SHOULDER_INT: int = 8600
|
||||
const XBOX_RIGHT_SHOULDER: StringName = &"↙"
|
||||
const XBOX_RIGHT_SHOULDER_INT: int = 8601
|
||||
const NINTENDO_LEFT_TRIGGER: StringName = &"↚"
|
||||
const NINTENDO_LEFT_TRIGGER_INT: int = 8602
|
||||
const NINTENDO_RIGHT_TRIGGER: StringName = &"↛"
|
||||
const NINTENDO_RIGHT_TRIGGER_INT: int = 8603
|
||||
const NINTENDO_LEFT_SHOULDER: StringName = &"↜"
|
||||
const NINTENDO_LEFT_SHOULDER_INT: int = 8604
|
||||
const NINTENDO_RIGHT_SHOULDER: StringName = &"↝"
|
||||
const NINTENDO_RIGHT_SHOULDER_INT: int = 8605
|
||||
const DPAD_LEFT: StringName = &"↞"
|
||||
const DPAD_LEFT_INT: int = 8606
|
||||
const DPAD_UP: StringName = &"↟"
|
||||
const DPAD_UP_INT: int = 8607
|
||||
const DPAD_RIGHT: StringName = &"↠"
|
||||
const DPAD_RIGHT_INT: int = 8608
|
||||
const DPAD_DOWN: StringName = &"↡"
|
||||
const DPAD_DOWN_INT: int = 8609
|
||||
const DPAD_LEFT_RIGHT: StringName = &"↢"
|
||||
const DPAD_LEFT_RIGHT_INT: int = 8610
|
||||
const DPAD_UP_DOWN: StringName = &"↣"
|
||||
const DPAD_UP_DOWN_INT: int = 8611
|
||||
const GAMEPAD_X: StringName = &"↤"
|
||||
const GAMEPAD_X_INT: int = 8612
|
||||
const GAMEPAD_Y: StringName = &"↥"
|
||||
const GAMEPAD_Y_INT: int = 8613
|
||||
const GAMEPAD_B: StringName = &"↦"
|
||||
const GAMEPAD_B_INT: int = 8614
|
||||
const GAMEPAD_A: StringName = &"↧"
|
||||
const GAMEPAD_A_INT: int = 8615
|
||||
const ANALOG_L_CLOCKWISE: StringName = &"↩"
|
||||
const ANALOG_L_CLOCKWISE_INT: int = 8617
|
||||
const ANALOG_L_COUNTER: StringName = &"↪"
|
||||
const ANALOG_L_COUNTER_INT: int = 8618
|
||||
const ANALOG_R_CLOCKWISE: StringName = &"↫"
|
||||
const ANALOG_R_CLOCKWISE_INT: int = 8619
|
||||
const ANALOG_R_COUNTER: StringName = &"↬"
|
||||
const ANALOG_R_COUNTER_INT: int = 8620
|
||||
const ANALOG_LR_BLOCKWISE: StringName = &"↭"
|
||||
const ANALOG_LR_BLOCKWISE_INT: int = 8621
|
||||
const ANALOG_LR_COUNTER: StringName = &"↮"
|
||||
const ANALOG_LR_COUNTER_INT: int = 8622
|
||||
const SONY_LEFT_SHOULDER: StringName = &"↰"
|
||||
const SONY_LEFT_SHOULDER_INT: int = 8624
|
||||
const SONY_RIGHT_SHOULDER: StringName = &"↱"
|
||||
const SONY_RIGHT_SHOULDER_INT: int = 8625
|
||||
const SONY_LEFT_TRIGGER: StringName = &"↲"
|
||||
const SONY_LEFT_TRIGGER_INT: int = 8626
|
||||
const SONY_RIGHT_TRIGGER: StringName = &"↳"
|
||||
const SONY_RIGHT_TRIGGER_INT: int = 8627
|
||||
const DPAD_LEFT_DOWN: StringName = &"↴"
|
||||
const DPAD_LEFT_DOWN_INT: int = 8628
|
||||
const GAMEPAD_UP_RIGHT: StringName = &"↵"
|
||||
const GAMEPAD_UP_RIGHT_INT: int = 8629
|
||||
const ANALOG_CLOCKWISE: StringName = &"↶"
|
||||
const ANALOG_CLOCKWISE_INT: int = 8630
|
||||
const ANALOG_COUNTER: StringName = &"↷"
|
||||
const ANALOG_COUNTER_INT: int = 8631
|
||||
const ANALOG_CLICK: StringName = &"↹"
|
||||
const ANALOG_CLICK_INT: int = 8633
|
||||
const ANALOG_L_CLICK: StringName = &"↺"
|
||||
const ANALOG_L_CLICK_INT: int = 8634
|
||||
const ANALOG_R_CLICK: StringName = &"↻"
|
||||
const ANALOG_R_CLICK_INT: int = 8635
|
||||
const ANALOG_L_LEFT: StringName = &"↼"
|
||||
const ANALOG_L_LEFT_INT: int = 8636
|
||||
const ANALOG_R_LEFT: StringName = &"↽"
|
||||
const ANALOG_R_LEFT_INT: int = 8637
|
||||
const ANALOG_L_UP: StringName = &"↾"
|
||||
const ANALOG_L_UP_INT: int = 8638
|
||||
const ANALOG_R_UP: StringName = &"↿"
|
||||
const ANALOG_R_UP_INT: int = 8639
|
||||
const ANALOG_L_RIGHT: StringName = &"⇀"
|
||||
const ANALOG_L_RIGHT_INT: int = 8640
|
||||
const ANALOG_R_RIGHT: StringName = &"⇁"
|
||||
const ANALOG_R_RIGHT_INT: int = 8641
|
||||
const ANALOG_L_DOWN: StringName = &"⇂"
|
||||
const ANALOG_L_DOWN_INT: int = 8642
|
||||
const ANALOG_R_DOWN: StringName = &"⇃"
|
||||
const ANALOG_R_DOWN_INT: int = 8643
|
||||
const ANALOG_L_LEFT_RIGHT: StringName = &"⇄"
|
||||
const ANALOG_L_LEFT_RIGHT_INT: int = 8644
|
||||
const ANALOG_L_UP_DOWN: StringName = &"⇅"
|
||||
const ANALOG_L_UP_DOWN_INT: int = 8645
|
||||
const ANALOG_R_LEFT_RIGHT: StringName = &"⇆"
|
||||
const ANALOG_R_LEFT_RIGHT_INT: int = 8646
|
||||
const ANALOG_LEFT: StringName = &"⇇"
|
||||
const ANALOG_LEFT_INT: int = 8647
|
||||
const ANALOG_UP: StringName = &"⇈"
|
||||
const ANALOG_UP_INT: int = 8648
|
||||
const ANALOG_RIGHT: StringName = &"⇉"
|
||||
const ANALOG_RIGHT_INT: int = 8649
|
||||
const ANALOG_DOWN: StringName = &"⇊"
|
||||
const ANALOG_DOWN_INT: int = 8650
|
||||
const ANALOG_L: StringName = &"⇋"
|
||||
const ANALOG_L_INT: int = 8651
|
||||
const ANALOG_R: StringName = &"⇌"
|
||||
const ANALOG_R_INT: int = 8652
|
||||
const DPAD: StringName = &"⇎"
|
||||
const DPAD_INT: int = 8654
|
||||
const XBOX_X: StringName = &"⇐"
|
||||
const XBOX_X_INT: int = 8656
|
||||
const XBOX_Y: StringName = &"⇑"
|
||||
const XBOX_Y_INT: int = 8657
|
||||
const XBOX_B: StringName = &"⇒"
|
||||
const XBOX_B_INT: int = 8658
|
||||
const XBOX_A: StringName = &"⇓"
|
||||
const XBOX_A_INT: int = 8659
|
||||
const ANALOG_LEFT_RIGHT: StringName = &"⇔"
|
||||
const ANALOG_LEFT_RIGHT_INT: int = 8660
|
||||
const ANALOG_UP_DOWN: StringName = &"⇕"
|
||||
const ANALOG_UP_DOWN_INT: int = 8661
|
||||
const ANALOG_UP_LEFT: StringName = &"⇖"
|
||||
const ANALOG_UP_LEFT_INT: int = 8662
|
||||
const ANALOG_UP_RIGHT: StringName = &"⇗"
|
||||
const ANALOG_UP_RIGHT_INT: int = 8663
|
||||
const ANALOG_DOWN_RIGHT: StringName = &"⇘"
|
||||
const ANALOG_DOWN_RIGHT_INT: int = 8664
|
||||
const ANALOG_DOWN_LEFT: StringName = &"⇙"
|
||||
const ANALOG_DOWN_LEFT_INT: int = 8665
|
||||
const ANALOG_L_TOUCH: StringName = &"⇚"
|
||||
const ANALOG_L_TOUCH_INT: int = 8666
|
||||
const ANALOG_R_TOUCH: StringName = &"⇛"
|
||||
const ANALOG_R_TOUCH_INT: int = 8667
|
||||
const XBOX_LEFT_TRIGGER_PULL: StringName = &"⇜"
|
||||
const XBOX_LEFT_TRIGGER_PULL_INT: int = 8668
|
||||
const XBOX_RIGHT_TRIGGER_PULL: StringName = &"⇝"
|
||||
const XBOX_RIGHT_TRIGGER_PULL_INT: int = 8669
|
||||
const DPAD_RIGHT_DOWN: StringName = &"⇞"
|
||||
const DPAD_RIGHT_DOWN_INT: int = 8670
|
||||
const DUPAD_LEFT_UP: StringName = &"⇟"
|
||||
const DUPAD_LEFT_UP_INT: int = 8671
|
||||
const SONY_X: StringName = &"⇠"
|
||||
const SONY_X_INT: int = 8672
|
||||
const SONY_Y: StringName = &"⇡"
|
||||
const SONY_Y_INT: int = 8673
|
||||
const SONY_B: StringName = &"⇢"
|
||||
const SONY_B_INT: int = 8674
|
||||
const SONY_A: StringName = &"⇣"
|
||||
const SONY_A_INT: int = 8675
|
||||
const STEAM_MENU: StringName = &"⇤"
|
||||
const STEAM_MENU_INT: int = 8676
|
||||
const STEAM_OPTIONS: StringName = &"⇥"
|
||||
const STEAM_OPTIONS_INT: int = 8677
|
||||
const SONY_SHARE: StringName = &"⇦"
|
||||
const SONY_SHARE_INT: int = 8678
|
||||
const SONY_TOUCHPAD: StringName = &"⇧"
|
||||
const SONY_TOUCHPAD_INT: int = 8679
|
||||
const SONY_OPTIONS: StringName = &"⇨"
|
||||
const SONY_OPTIONS_INT: int = 8680
|
||||
const NINTENDO_BUTTON_Z: StringName = &"⇩"
|
||||
const NINTENDO_BUTTON_Z_INT: int = 8681
|
||||
const NINTENDO_TRIGGER_Z: StringName = &"⇪"
|
||||
const NINTENDO_TRIGGER_Z_INT: int = 8682
|
||||
const NINTENDO_C: StringName = &"⇫"
|
||||
const NINTENDO_C_INT: int = 8683
|
||||
const NINTENDO_Z: StringName = &"⇬"
|
||||
const NINTENDO_Z_INT: int = 8684
|
||||
const NINTENDO_1: StringName = &"⇭"
|
||||
const NINTENDO_1_INT: int = 8685
|
||||
const NINTENDO_2: StringName = &"⇮"
|
||||
const NINTENDO_2_INT: int = 8686
|
||||
const ANALOG_L_ANY: StringName = &"⇱"
|
||||
const ANALOG_L_ANY_INT: int = 8689
|
||||
const ANALOG_R_ANY: StringName = &"⇲"
|
||||
const ANALOG_R_ANY_INT: int = 8690
|
||||
const ANALOG_ANY: StringName = &"⇳"
|
||||
const ANALOG_ANY_INT: int = 8691
|
||||
const ANALOG_R_UP_DOWN: StringName = &"⇵"
|
||||
const ANALOG_R_UP_DOWN_INT: int = 8693
|
||||
const GAMEPAD_SELECT: StringName = &"⇷"
|
||||
const GAMEPAD_SELECT_INT: int = 8695
|
||||
const GAMEPAD_START: StringName = &"⇸"
|
||||
const GAMEPAD_START_INT: int = 8696
|
||||
const GAMEPAD_HOME: StringName = &"⇹"
|
||||
const GAMEPAD_HOME_INT: int = 8697
|
||||
const XBOX_VIEW: StringName = &"⇺"
|
||||
const XBOX_VIEW_INT: int = 8698
|
||||
const XBOX_MENU: StringName = &"⇻"
|
||||
const XBOX_MENU_INT: int = 8699
|
||||
const NINTENDO_MINUS: StringName = &"⇽"
|
||||
const NINTENDO_MINUS_INT: int = 8701
|
||||
const NINTENDO_PLUS: StringName = &"⇾"
|
||||
const NINTENDO_PLUS_INT: int = 8702
|
||||
const NINTENDO_DPAD_LEFT: StringName = &"⇿"
|
||||
const NINTENDO_DPAD_LEFT_INT: int = 8703
|
||||
const NINTENDO_DPAD_UP: StringName = &"∀"
|
||||
const NINTENDO_DPAD_UP_INT: int = 8704
|
||||
const NINTENDO_DPAD_RIGHT: StringName = &"∁"
|
||||
const NINTENDO_DPAD_RIGHT_INT: int = 8705
|
||||
const NINTENDO_DPAD_DOWN: StringName = &"∂"
|
||||
const NINTENDO_DPAD_DOWN_INT: int = 8706
|
||||
const NINTENDO_JOYCON_SL: StringName = &"∃"
|
||||
const NINTENDO_JOYCON_SL_INT: int = 8707
|
||||
const NINTENDO_JOYCON_SR: StringName = &"∄"
|
||||
const NINTENDO_JOYCON_SR_INT: int = 8708
|
||||
const LEGION_SETTINGS: StringName = &"∅"
|
||||
const LEGION_SETTINGS_INT: int = 8709
|
||||
const SONY_DUALSENSE_SHARE: StringName = &"∆"
|
||||
const SONY_DUALSENSE_SHARE_INT: int = 8710
|
||||
const SONY_DUALSENSE_TOUCHPAD: StringName = &"∇"
|
||||
const SONY_DUALSENSE_TOUCHPAD_INT: int = 8711
|
||||
const SONY_DUALSENSE_OPTIONS: StringName = &"∈"
|
||||
const SONY_DUALSENSE_OPTIONS_INT: int = 8712
|
||||
const AYANEO_LC: StringName = &"∉"
|
||||
const AYANEO_LC_INT: int = 8713
|
||||
const AYANEO_RC: StringName = &"∊"
|
||||
const AYANEO_RC_INT: int = 8714
|
||||
const AYANEO_WAVE: StringName = &"∋"
|
||||
const AYANEO_WAVE_INT: int = 8715
|
||||
const AYN_HOME: StringName = &"∌"
|
||||
const AYN_HOME_INT: int = 8716
|
||||
const AYN_LCC: StringName = &"∍"
|
||||
const AYN_LCC_INT: int = 8717
|
||||
const GPD_C1: StringName = &"∎"
|
||||
const GPD_C1_INT: int = 8718
|
||||
const GPD_C2: StringName = &"∏"
|
||||
const GPD_C2_INT: int = 8719
|
||||
const ONEXPLAYER_KEYBOARD: StringName = &"∐"
|
||||
const ONEXPLAYER_KEYBOARD_INT: int = 8720
|
||||
const ONEXPLAYER_TURBO: StringName = &"∑"
|
||||
const ONEXPLAYER_TURBO_INT: int = 8721
|
||||
const GAMEPAD_M1: StringName = &"−"
|
||||
const GAMEPAD_M1_INT: int = 8722
|
||||
const GAMEPAD_M2: StringName = &"∓"
|
||||
const GAMEPAD_M2_INT: int = 8723
|
||||
const GAMEPAD_M3: StringName = &"∔"
|
||||
const GAMEPAD_M3_INT: int = 8724
|
||||
const GAMEPAD_Y1: StringName = &"∕"
|
||||
const GAMEPAD_Y1_INT: int = 8725
|
||||
const GAMEPAD_Y2: StringName = &"∖"
|
||||
const GAMEPAD_Y2_INT: int = 8726
|
||||
const GAMEPAD_Y3: StringName = &"∗"
|
||||
const GAMEPAD_Y3_INT: int = 8727
|
||||
const ONEXPLAYER_FUNCTION: StringName = &"∘"
|
||||
const ONEXPLAYER_FUNCTION_INT: int = 8728
|
||||
const ONEXPLAYER_HOME: StringName = &"∙"
|
||||
const ONEXPLAYER_HOME_INT: int = 8729
|
||||
const GPD_MENU: StringName = &"√"
|
||||
const GPD_MENU_INT: int = 8730
|
||||
const ORANGEPI_CONTROLLER: StringName = &"∛"
|
||||
const ORANGEPI_CONTROLLER_INT: int = 8731
|
||||
const ORANGEPI_HOME: StringName = &"∜"
|
||||
const ORANGEPI_HOME_INT: int = 8732
|
||||
const ZOTAC_ZONE_LOGO: StringName = &"∝"
|
||||
const ZOTAC_ZONE_LOGO_INT: int = 8733
|
||||
const ZOTAC_ZONE_MENU: StringName = &"∞"
|
||||
const ZOTAC_ZONE_MENU_INT: int = 8734
|
||||
const GAMEPAD_X_B: StringName = &"∥"
|
||||
const GAMEPAD_X_B_INT: int = 8741
|
||||
const GAMEPAD_A_Y: StringName = &"∦"
|
||||
const GAMEPAD_A_Y_INT: int = 8742
|
||||
const GAMEPAD_X_Y: StringName = &"∧"
|
||||
const GAMEPAD_X_Y_INT: int = 8743
|
||||
const GAMEPAD_B_Y: StringName = &"∨"
|
||||
const GAMEPAD_B_Y_INT: int = 8744
|
||||
const GAMEPAD_A_B: StringName = &"∩"
|
||||
const GAMEPAD_A_B_INT: int = 8745
|
||||
const GAMEPAD_X_A: StringName = &"∪"
|
||||
const GAMEPAD_X_A_INT: int = 8746
|
||||
const BUTTON_PRESS: StringName = &"∫"
|
||||
const BUTTON_PRESS_INT: int = 8747
|
||||
const BUTTON_DOUBLE_PRESS: StringName = &"∬"
|
||||
const BUTTON_DOUBLE_PRESS_INT: int = 8748
|
||||
const BUTTON_HOLD_PRESS: StringName = &"∭"
|
||||
const BUTTON_HOLD_PRESS_INT: int = 8749
|
||||
const BUTTON_HOLD_RELEASE: StringName = &"∮"
|
||||
const BUTTON_HOLD_RELEASE_INT: int = 8750
|
||||
const BUTTON_HOLD: StringName = &"∯"
|
||||
const BUTTON_HOLD_INT: int = 8751
|
||||
const TRACKPAD_L_ANY: StringName = &"≤"
|
||||
const TRACKPAD_L_ANY_INT: int = 8804
|
||||
const TRACKPAD_R_ANY: StringName = &"≥"
|
||||
const TRACKPAD_R_ANY_INT: int = 8805
|
||||
const TRACKPAD_L_CLICK: StringName = &"≦"
|
||||
const TRACKPAD_L_CLICK_INT: int = 8806
|
||||
const TRACKPAD_R_CLICK: StringName = &"≧"
|
||||
const TRACKPAD_R_CLICK_INT: int = 8807
|
||||
const TRACKPAD_L_TOUCH: StringName = &"≨"
|
||||
const TRACKPAD_L_TOUCH_INT: int = 8808
|
||||
const TRACKPAD_R_TOUCH: StringName = &"≩"
|
||||
const TRACKPAD_R_TOUCH_INT: int = 8809
|
||||
const TRACKPAD_L_LEFT_RIGHT: StringName = &"≪"
|
||||
const TRACKPAD_L_LEFT_RIGHT_INT: int = 8810
|
||||
const TRACKPAD_L_UP_DOWN: StringName = &"≫"
|
||||
const TRACKPAD_L_UP_DOWN_INT: int = 8811
|
||||
const TRACKPAD_R_LEFT_RIGHT: StringName = &"≬"
|
||||
const TRACKPAD_R_LEFT_RIGHT_INT: int = 8812
|
||||
const TRACKPAD_R_UP_DOWN: StringName = &"≭"
|
||||
const TRACKPAD_R_UP_DOWN_INT: int = 8813
|
||||
const TRACKPAD_L_LEFT: StringName = &"≮"
|
||||
const TRACKPAD_L_LEFT_INT: int = 8814
|
||||
const TRACKPAD_R_LEFT: StringName = &"≯"
|
||||
const TRACKPAD_R_LEFT_INT: int = 8815
|
||||
const TRACKPAD_L_UP: StringName = &"≰"
|
||||
const TRACKPAD_L_UP_INT: int = 8816
|
||||
const TRACKPAD_R_UP: StringName = &"≱"
|
||||
const TRACKPAD_R_UP_INT: int = 8817
|
||||
const TRACKPAD_L_RIGHT: StringName = &"≲"
|
||||
const TRACKPAD_L_RIGHT_INT: int = 8818
|
||||
const TRACKPAD_R_RIGHT: StringName = &"≳"
|
||||
const TRACKPAD_R_RIGHT_INT: int = 8819
|
||||
const TRACKPAD_L_DOWN: StringName = &"≴"
|
||||
const TRACKPAD_L_DOWN_INT: int = 8820
|
||||
const TRACKPAD_R_DOWN: StringName = &"≵"
|
||||
const TRACKPAD_R_DOWN_INT: int = 8821
|
||||
const GAMEPAD_L4: StringName = &"≶"
|
||||
const GAMEPAD_L4_INT: int = 8822
|
||||
const GAMEPAD_R4: StringName = &"≷"
|
||||
const GAMEPAD_R4_INT: int = 8823
|
||||
const GAMEPAD_L5: StringName = &"≸"
|
||||
const GAMEPAD_L5_INT: int = 8824
|
||||
const GAMEPAD_R5: StringName = &"≹"
|
||||
const GAMEPAD_R5_INT: int = 8825
|
||||
const XBOX_DPAD_LEFT: StringName = &"≺"
|
||||
const XBOX_DPAD_LEFT_INT: int = 8826
|
||||
const XBOX_DPAD_UP: StringName = &"≻"
|
||||
const XBOX_DPAD_UP_INT: int = 8827
|
||||
const XBOX_DPAD_RIGHT: StringName = &"≼"
|
||||
const XBOX_DPAD_RIGHT_INT: int = 8828
|
||||
const XBOX_DPAD_DOWN: StringName = &"≽"
|
||||
const XBOX_DPAD_DOWN_INT: int = 8829
|
||||
const XBOX_DEPAD_LEFT_RIGHT: StringName = &"≾"
|
||||
const XBOX_DEPAD_LEFT_RIGHT_INT: int = 8830
|
||||
const XBOX_DPAD_UP_DOWN: StringName = &"≿"
|
||||
const XBOX_DPAD_UP_DOWN_INT: int = 8831
|
||||
const XBOX_DPAD_LEFT_UP: StringName = &"⊀"
|
||||
const XBOX_DPAD_LEFT_UP_INT: int = 8832
|
||||
const XBOX_DPAD_RIGHT_UP: StringName = &"⊁"
|
||||
const XBOX_DPAD_RIGHT_UP_INT: int = 8833
|
||||
const XBOX_DPAD_LEFT_DOWN: StringName = &"⊂"
|
||||
const XBOX_DPAD_LEFT_DOWN_INT: int = 8834
|
||||
const XBOX_DPAD_RIGHT_DOWN: StringName = &"⊃"
|
||||
const XBOX_DPAD_RIGHT_DOWN_INT: int = 8835
|
||||
const XBOX_DPAD: StringName = &"⊄"
|
||||
const XBOX_DPAD_INT: int = 8836
|
||||
const ICON_PIN: StringName = &"⌖"
|
||||
const ICON_PIN_INT: int = 8982
|
||||
const ANDROID_TABS: StringName = &"⏍"
|
||||
const ANDROID_TABS_INT: int = 9165
|
||||
const ANDROID_BACK: StringName = &"⏎"
|
||||
const ANDROID_BACK_INT: int = 9166
|
||||
const ANDROID_HOME: StringName = &"⏏"
|
||||
const ANDROID_HOME_INT: int = 9167
|
||||
const ANDROID_HORIZONTAL_DOTS: StringName = &"⏐"
|
||||
const ANDROID_HORIZONTAL_DOTS_INT: int = 9168
|
||||
const ANDROID_VERTICAL_DOTS: StringName = &"⏑"
|
||||
const ANDROID_VERTICAL_DOTS_INT: int = 9169
|
||||
const ANDROID_HAMBURGER_MENU: StringName = &"⏒"
|
||||
const ANDROID_HAMBURGER_MENU_INT: int = 9170
|
||||
const KEYBOARD_LEFT: StringName = &"⏴"
|
||||
const KEYBOARD_LEFT_INT: int = 9204
|
||||
const KEYBOARD_UP: StringName = &"⏵"
|
||||
const KEYBOARD_UP_INT: int = 9205
|
||||
const KEYBOARD_RIGHT: StringName = &"⏶"
|
||||
const KEYBOARD_RIGHT_INT: int = 9206
|
||||
const KEYBOARD_DOWN: StringName = &"⏷"
|
||||
const KEYBOARD_DOWN_INT: int = 9207
|
||||
const KEYBOARD_WASD: StringName = &"␣"
|
||||
const KEYBOARD_WASD_INT: int = 9251
|
||||
const KEYBOARD_ARROWS: StringName = &""
|
||||
const KEYBOARD_ARROWS_INT: int = 9252
|
||||
const KEYBOARD_IJKL: StringName = &"␥"
|
||||
const KEYBOARD_IJKL_INT: int = 9253
|
||||
const KEYBOARD_FN: StringName = &"␦"
|
||||
const KEYBOARD_FN_INT: int = 9254
|
||||
const KEYBOARD_CONTROL: StringName = &""
|
||||
const KEYBOARD_CONTROL_INT: int = 9255
|
||||
const KEYBOARD_ALT: StringName = &""
|
||||
const KEYBOARD_ALT_INT: int = 9256
|
||||
const KEYBOARD_SHIFT: StringName = &""
|
||||
const KEYBOARD_SHIFT_INT: int = 9257
|
||||
const KEYBOARD_SUPER: StringName = &""
|
||||
const KEYBOARD_SUPER_INT: int = 9258
|
||||
const KEYBOARD_TAB: StringName = &""
|
||||
const KEYBOARD_TAB_INT: int = 9259
|
||||
const KEYBOARD_CAPS: StringName = &""
|
||||
const KEYBOARD_CAPS_INT: int = 9260
|
||||
const KEYBOARD_BACKSPACE: StringName = &""
|
||||
const KEYBOARD_BACKSPACE_INT: int = 9261
|
||||
const KEYBOARD_ENTER: StringName = &""
|
||||
const KEYBOARD_ENTER_INT: int = 9262
|
||||
const KEYBOARD_ESCAPE: StringName = &""
|
||||
const KEYBOARD_ESCAPE_INT: int = 9263
|
||||
const KEYBOARD_PRINT_SCREEN: StringName = &""
|
||||
const KEYBOARD_PRINT_SCREEN_INT: int = 9264
|
||||
const KEYBOARD_SCROLL_LOCK: StringName = &""
|
||||
const KEYBOARD_SCROLL_LOCK_INT: int = 9265
|
||||
const KEYBOARD_PAUSE: StringName = &""
|
||||
const KEYBOARD_PAUSE_INT: int = 9266
|
||||
const KEYBOARD_NUM_LOCK: StringName = &""
|
||||
const KEYBOARD_NUM_LOCK_INT: int = 9267
|
||||
const KEYBOARD_INSERT: StringName = &""
|
||||
const KEYBOARD_INSERT_INT: int = 9268
|
||||
const KEYBOARD_HOME: StringName = &""
|
||||
const KEYBOARD_HOME_INT: int = 9269
|
||||
const KEYBOARD_PAGE_UP: StringName = &""
|
||||
const KEYBOARD_PAGE_UP_INT: int = 9270
|
||||
const KEYBOARD_DELETE: StringName = &""
|
||||
const KEYBOARD_DELETE_INT: int = 9271
|
||||
const KEYBOARD_END: StringName = &""
|
||||
const KEYBOARD_END_INT: int = 9272
|
||||
const KEYBOARD_PAGE_DOWN: StringName = &""
|
||||
const KEYBOARD_PAGE_DOWN_INT: int = 9273
|
||||
const KEYBOARD_SPACE: StringName = &""
|
||||
const KEYBOARD_SPACE_INT: int = 9274
|
||||
const DEVICE_GAMEPAD: StringName = &""
|
||||
const DEVICE_GAMEPAD_INT: int = 9276
|
||||
const DEVICE_KEYBOARD: StringName = &""
|
||||
const DEVICE_KEYBOARD_INT: int = 9277
|
||||
const DEVICE_MOUSE: StringName = &""
|
||||
const DEVICE_MOUSE_INT: int = 9278
|
||||
const DEVICE_MOUSE_KEYBOARD: StringName = &""
|
||||
const DEVICE_MOUSE_KEYBOARD_INT: int = 9279
|
||||
const DEVICE_DS4: StringName = &"⑀"
|
||||
const DEVICE_DS4_INT: int = 9280
|
||||
const DEVICE_DUALSENSE: StringName = &"⑁"
|
||||
const DEVICE_DUALSENSE_INT: int = 9281
|
||||
const DEVICE_X360: StringName = &"⑂"
|
||||
const DEVICE_X360_INT: int = 9282
|
||||
const KEYBOARD_ALT_GR: StringName = &"⑊"
|
||||
const KEYBOARD_ALT_GR_INT: int = 9290
|
||||
const KEYBOARD_ALT_L: StringName = &""
|
||||
const KEYBOARD_ALT_L_INT: int = 9291
|
||||
const KEYBOARD_ALT_R: StringName = &""
|
||||
const KEYBOARD_ALT_R_INT: int = 9292
|
||||
const KEYBOARD_CONTROL_L: StringName = &""
|
||||
const KEYBOARD_CONTROL_L_INT: int = 9293
|
||||
const KEYBOARD_CONTROL_R: StringName = &""
|
||||
const KEYBOARD_CONTROL_R_INT: int = 9294
|
||||
const KEYBOARD_SHIFT_L: StringName = &""
|
||||
const KEYBOARD_SHIFT_L_INT: int = 9295
|
||||
const KEYBOARD_SHIFT_R: StringName = &""
|
||||
const KEYBOARD_SHIFT_R_INT: int = 9296
|
||||
const KEYBOARD_F1: StringName = &"①"
|
||||
const KEYBOARD_F1_INT: int = 9312
|
||||
const KEYBOARD_F2: StringName = &"②"
|
||||
const KEYBOARD_F2_INT: int = 9313
|
||||
const KEYBOARD_F3: StringName = &"③"
|
||||
const KEYBOARD_F3_INT: int = 9314
|
||||
const KEYBOARD_F4: StringName = &"④"
|
||||
const KEYBOARD_F4_INT: int = 9315
|
||||
const KEYBOARD_F5: StringName = &"⑤"
|
||||
const KEYBOARD_F5_INT: int = 9316
|
||||
const KEYBOARD_F6: StringName = &"⑥"
|
||||
const KEYBOARD_F6_INT: int = 9317
|
||||
const KEYBOARD_F7: StringName = &"⑦"
|
||||
const KEYBOARD_F7_INT: int = 9318
|
||||
const KEYBOARD_F8: StringName = &"⑧"
|
||||
const KEYBOARD_F8_INT: int = 9319
|
||||
const KEYBOARD_F9: StringName = &"⑨"
|
||||
const KEYBOARD_F9_INT: int = 9320
|
||||
const KEYBOARD_F10: StringName = &"⑩"
|
||||
const KEYBOARD_F10_INT: int = 9321
|
||||
const KEYBOARD_F11: StringName = &"⑪"
|
||||
const KEYBOARD_F11_INT: int = 9322
|
||||
const KEYBOARD_F12: StringName = &"⑫"
|
||||
const KEYBOARD_F12_INT: int = 9323
|
||||
const KEYBOARD_KEY: StringName = &"⒏"
|
||||
const KEYBOARD_KEY_INT: int = 9359
|
||||
const ICON_1: StringName = &"⓵"
|
||||
const ICON_1_INT: int = 9461
|
||||
const ICON_2: StringName = &"⓶"
|
||||
const ICON_2_INT: int = 9462
|
||||
const ICON_3: StringName = &"⓷"
|
||||
const ICON_3_INT: int = 9463
|
||||
const ICON_4: StringName = &"⓸"
|
||||
const ICON_4_INT: int = 9464
|
||||
const ICON_5: StringName = &"⓹"
|
||||
const ICON_5_INT: int = 9465
|
||||
const ICON_6: StringName = &"⓺"
|
||||
const ICON_6_INT: int = 9466
|
||||
const ICON_7: StringName = &"⓻"
|
||||
const ICON_7_INT: int = 9467
|
||||
const ICON_8: StringName = &"⓼"
|
||||
const ICON_8_INT: int = 9468
|
||||
const ICON_9: StringName = &"⓽"
|
||||
const ICON_9_INT: int = 9469
|
||||
const ICON_0: StringName = &"⓿"
|
||||
const ICON_0_INT: int = 9471
|
||||
const ICON_STAR: StringName = &"★"
|
||||
const ICON_STAR_INT: int = 9733
|
||||
const ICON_EMPTY_STAR: StringName = &"☆"
|
||||
const ICON_EMPTY_STAR_INT: int = 9734
|
||||
const ICON_SKULL: StringName = &"☠"
|
||||
const ICON_SKULL_INT: int = 9760
|
||||
const ICON_FROWN: StringName = &"☹"
|
||||
const ICON_FROWN_INT: int = 9785
|
||||
const ICON_SMILE: StringName = &"☺"
|
||||
const ICON_SMILE_INT: int = 9786
|
||||
const ICON_FULL_SPADE: StringName = &"♠"
|
||||
const ICON_FULL_SPADE_INT: int = 9824
|
||||
const ICON_EMPTY_HEART: StringName = &"♡"
|
||||
const ICON_EMPTY_HEART_INT: int = 9825
|
||||
const ICON_EMPTY_DIAMOND: StringName = &"♢"
|
||||
const ICON_EMPTY_DIAMOND_INT: int = 9826
|
||||
const ICON_FULL_CLUB: StringName = &"♣"
|
||||
const ICON_FULL_CLUB_INT: int = 9827
|
||||
const ICON_EMPTY_SPADE: StringName = &"♤"
|
||||
const ICON_EMPTY_SPADE_INT: int = 9828
|
||||
const ICON_FULL_HEART: StringName = &"♥"
|
||||
const ICON_FULL_HEART_INT: int = 9829
|
||||
const ICON_FULL_DIAMOND: StringName = &"♦"
|
||||
const ICON_FULL_DIAMOND_INT: int = 9830
|
||||
const ICON_EMPTY_CLUB: StringName = &"♧"
|
||||
const ICON_EMPTY_CLUB_INT: int = 9831
|
||||
const ICON_D4: StringName = &"♳"
|
||||
const ICON_D4_INT: int = 9843
|
||||
const ICON_D6: StringName = &"♴"
|
||||
const ICON_D6_INT: int = 9844
|
||||
const ICON_D8: StringName = &"♵"
|
||||
const ICON_D8_INT: int = 9845
|
||||
const ICON_D10: StringName = &"♶"
|
||||
const ICON_D10_INT: int = 9846
|
||||
const ICON_D12: StringName = &"♷"
|
||||
const ICON_D12_INT: int = 9847
|
||||
const ICON_D20: StringName = &"♸"
|
||||
const ICON_D20_INT: int = 9848
|
||||
const ICON_D6_1: StringName = &"⚀"
|
||||
const ICON_D6_1_INT: int = 9856
|
||||
const ICON_D6_2: StringName = &"⚁"
|
||||
const ICON_D6_2_INT: int = 9857
|
||||
const ICON_D6_3: StringName = &"⚂"
|
||||
const ICON_D6_3_INT: int = 9858
|
||||
const ICON_D6_4: StringName = &"⚃"
|
||||
const ICON_D6_4_INT: int = 9859
|
||||
const ICON_D6_5: StringName = &"⚄"
|
||||
const ICON_D6_5_INT: int = 9860
|
||||
const ICON_D6_6: StringName = &"⚅"
|
||||
const ICON_D6_6_INT: int = 9861
|
||||
const ICON_FLAG: StringName = &"⚑"
|
||||
const ICON_FLAG_INT: int = 9873
|
||||
const ICON_GEARS: StringName = &"⚙"
|
||||
const ICON_GEARS_INT: int = 9881
|
||||
const ICON_CROSS: StringName = &"✗"
|
||||
const ICON_CROSS_INT: int = 10007
|
||||
const ICON_QUESTION: StringName = &"❓"
|
||||
const ICON_QUESTION_INT: int = 10067
|
||||
const ICON_BANG: StringName = &"❗"
|
||||
const ICON_BANG_INT: int = 10071
|
||||
const MOUSE_1: StringName = &"➊"
|
||||
const MOUSE_1_INT: int = 10122
|
||||
const MOUSE_2: StringName = &"➋"
|
||||
const MOUSE_2_INT: int = 10123
|
||||
const MOUSE_3: StringName = &"➌"
|
||||
const MOUSE_3_INT: int = 10124
|
||||
const MOUSE_4: StringName = &"➍"
|
||||
const MOUSE_4_INT: int = 10125
|
||||
const MOUSE_5: StringName = &"➎"
|
||||
const MOUSE_5_INT: int = 10126
|
||||
const MOUSE_6: StringName = &"➏"
|
||||
const MOUSE_6_INT: int = 10127
|
||||
const MOUSE_7: StringName = &"➐"
|
||||
const MOUSE_7_INT: int = 10128
|
||||
const MOUSE_8: StringName = &"➑"
|
||||
const MOUSE_8_INT: int = 10129
|
||||
const MOUSE_SCROLL_UP: StringName = &"⟰"
|
||||
const MOUSE_SCROLL_UP_INT: int = 10224
|
||||
const MOUSE_SCROLL_DOWN: StringName = &"⟱"
|
||||
const MOUSE_SCROLL_DOWN_INT: int = 10225
|
||||
const MOUSE_LEFT: StringName = &"⟵"
|
||||
const MOUSE_LEFT_INT: int = 10229
|
||||
const MOUSE_RIGHT: StringName = &"⟶"
|
||||
const MOUSE_RIGHT_INT: int = 10230
|
||||
const MOUSE_MIDDLE: StringName = &"⟷"
|
||||
const MOUSE_MIDDLE_INT: int = 10231
|
||||
const MOUSE_LEFT_RIGHT: StringName = &"⟺"
|
||||
const MOUSE_LEFT_RIGHT_INT: int = 10234
|
||||
const MOUSE_UP_DOWN: StringName = &"⟻"
|
||||
const MOUSE_UP_DOWN_INT: int = 10235
|
||||
const MOUSE_ANY: StringName = &"⟼"
|
||||
const MOUSE_ANY_INT: int = 10236
|
||||
const ICON_BOX: StringName = &"⬛"
|
||||
const ICON_BOX_INT: int = 11035
|
||||
const ICON_PLAYSTATION: StringName = &""
|
||||
const ICON_PLAYSTATION_INT: int = 57344
|
||||
const ICON_XBOX: StringName = &""
|
||||
const ICON_XBOX_INT: int = 57345
|
||||
const ICON_NINTENDO_SWITCH: StringName = &""
|
||||
const ICON_NINTENDO_SWITCH_INT: int = 57346
|
||||
const ICON_AYANEO: StringName = &""
|
||||
const ICON_AYANEO_INT: int = 57347
|
||||
const ICON_LENOVO_LEGION: StringName = &""
|
||||
const ICON_LENOVO_LEGION_INT: int = 57348
|
||||
const ROG_ALLY_ARMOURY: StringName = &""
|
||||
const ROG_ALLY_ARMOURY_INT: int = 57349
|
||||
const ROG_ALLY_COMMAND: StringName = &""
|
||||
const ROG_ALLY_COMMAND_INT: int = 57350
|
||||
const ICON_MAC: StringName = &""
|
||||
const ICON_MAC_INT: int = 57351
|
||||
const ICON_WINDOWS: StringName = &""
|
||||
const ICON_WINDOWS_INT: int = 57352
|
||||
const ICON_LINUX: StringName = &""
|
||||
const ICON_LINUX_INT: int = 57353
|
||||
const ICON_BSD: StringName = &""
|
||||
const ICON_BSD_INT: int = 57354
|
||||
const ICON_STEAM: StringName = &""
|
||||
const ICON_STEAM_INT: int = 57355
|
||||
const ICON_ITCH_IO: StringName = &""
|
||||
const ICON_ITCH_IO_INT: int = 57356
|
||||
const ICON_HUMBLE: StringName = &""
|
||||
const ICON_HUMBLE_INT: int = 57357
|
||||
const ICON_EPIC_GAME_STORE: StringName = &""
|
||||
const ICON_EPIC_GAME_STORE_INT: int = 57358
|
||||
const ICON_GOOD_OLD_GAMES: StringName = &""
|
||||
const ICON_GOOD_OLD_GAMES_INT: int = 57359
|
||||
const MSI_CLAW_CENTER: StringName = &""
|
||||
const MSI_CLAW_CENTER_INT: int = 57360
|
||||
const MSI_CLAW_QUICK: StringName = &""
|
||||
const MSI_CLAW_QUICK_INT: int = 57361
|
||||
const KEYBOARD_0: StringName = &"0"
|
||||
const KEYBOARD_0_INT: int = 65296
|
||||
const KEYBOARD_1: StringName = &"1"
|
||||
const KEYBOARD_1_INT: int = 65297
|
||||
const KEYBOARD_2: StringName = &"2"
|
||||
const KEYBOARD_2_INT: int = 65298
|
||||
const KEYBOARD_3: StringName = &"3"
|
||||
const KEYBOARD_3_INT: int = 65299
|
||||
const KEYBOARD_4: StringName = &"4"
|
||||
const KEYBOARD_4_INT: int = 65300
|
||||
const KEYBOARD_5: StringName = &"5"
|
||||
const KEYBOARD_5_INT: int = 65301
|
||||
const KEYBOARD_6: StringName = &"6"
|
||||
const KEYBOARD_6_INT: int = 65302
|
||||
const KEYBOARD_7: StringName = &"7"
|
||||
const KEYBOARD_7_INT: int = 65303
|
||||
const KEYBOARD_8: StringName = &"8"
|
||||
const KEYBOARD_8_INT: int = 65304
|
||||
const KEYBOARD_9: StringName = &"9"
|
||||
const KEYBOARD_9_INT: int = 65305
|
||||
const KEYBOARD_A: StringName = &"A"
|
||||
const KEYBOARD_A_INT: int = 65313
|
||||
const KEYBOARD_B: StringName = &"B"
|
||||
const KEYBOARD_B_INT: int = 65314
|
||||
const KEYBOARD_C: StringName = &"C"
|
||||
const KEYBOARD_C_INT: int = 65315
|
||||
const KEYBOARD_D: StringName = &"D"
|
||||
const KEYBOARD_D_INT: int = 65316
|
||||
const KEYBOARD_E: StringName = &"E"
|
||||
const KEYBOARD_E_INT: int = 65317
|
||||
const KEYBOARD_F: StringName = &"F"
|
||||
const KEYBOARD_F_INT: int = 65318
|
||||
const KEYBOARD_G: StringName = &"G"
|
||||
const KEYBOARD_G_INT: int = 65319
|
||||
const KEYBOARD_H: StringName = &"H"
|
||||
const KEYBOARD_H_INT: int = 65320
|
||||
const KEYBOARD_I: StringName = &"I"
|
||||
const KEYBOARD_I_INT: int = 65321
|
||||
const KEYBOARD_J: StringName = &"J"
|
||||
const KEYBOARD_J_INT: int = 65322
|
||||
const KEYBOARD_K: StringName = &"K"
|
||||
const KEYBOARD_K_INT: int = 65323
|
||||
const KEYBOARD_L: StringName = &"L"
|
||||
const KEYBOARD_L_INT: int = 65324
|
||||
const KEYBOARD_M: StringName = &"M"
|
||||
const KEYBOARD_M_INT: int = 65325
|
||||
const KEYBOARD_N: StringName = &"N"
|
||||
const KEYBOARD_N_INT: int = 65326
|
||||
const KEYBOARD_O: StringName = &"O"
|
||||
const KEYBOARD_O_INT: int = 65327
|
||||
const KEYBOARD_P: StringName = &"P"
|
||||
const KEYBOARD_P_INT: int = 65328
|
||||
const KEYBOARD_Q: StringName = &"Q"
|
||||
const KEYBOARD_Q_INT: int = 65329
|
||||
const KEYBOARD_R: StringName = &"R"
|
||||
const KEYBOARD_R_INT: int = 65330
|
||||
const KEYBOARD_S: StringName = &"S"
|
||||
const KEYBOARD_S_INT: int = 65331
|
||||
const KEYBOARD_T: StringName = &"T"
|
||||
const KEYBOARD_T_INT: int = 65332
|
||||
const KEYBOARD_U: StringName = &"U"
|
||||
const KEYBOARD_U_INT: int = 65333
|
||||
const KEYBOARD_V: StringName = &"V"
|
||||
const KEYBOARD_V_INT: int = 65334
|
||||
const KEYBOARD_W: StringName = &"W"
|
||||
const KEYBOARD_W_INT: int = 65335
|
||||
const KEYBOARD_X: StringName = &"X"
|
||||
const KEYBOARD_X_INT: int = 65336
|
||||
const KEYBOARD_Y: StringName = &"Y"
|
||||
const KEYBOARD_Y_INT: int = 65337
|
||||
const KEYBOARD_Z: StringName = &"Z"
|
||||
const KEYBOARD_Z_INT: int = 65338
|
||||
const ICON_HEADPHONES: StringName = &"🎧"
|
||||
const ICON_HEADPHONES_INT: int = 127911
|
||||
const ICON_MUSIC: StringName = &"🎶"
|
||||
const ICON_MUSIC_INT: int = 127926
|
||||
const ICON_FISH: StringName = &"🐟"
|
||||
const ICON_FISH_INT: int = 128031
|
||||
const DEVICE_DANCE_PAD: StringName = &"💃"
|
||||
const DEVICE_DANCE_PAD_INT: int = 128131
|
||||
const ICON_LAPTOP: StringName = &"💻"
|
||||
const ICON_LAPTOP_INT: int = 128187
|
||||
const ICON_DISKETTE: StringName = &"💾"
|
||||
const ICON_DISKETTE_INT: int = 128190
|
||||
const ICON_WRITE: StringName = &"📝"
|
||||
const ICON_WRITE_INT: int = 128221
|
||||
const DEVICE_PHONE: StringName = &"📱"
|
||||
const DEVICE_PHONE_INT: int = 128241
|
||||
const ICON_CAMERA: StringName = &"📷"
|
||||
const ICON_CAMERA_INT: int = 128247
|
||||
const ICON_SPEAKER: StringName = &"🔈"
|
||||
const ICON_SPEAKER_INT: int = 128264
|
||||
const DEVICE_LIGHT_GUN: StringName = &"🔫"
|
||||
const DEVICE_LIGHT_GUN_INT: int = 128299
|
||||
const ICON_NOISE: StringName = &"🕬"
|
||||
const ICON_NOISE_INT: int = 128364
|
||||
const DEVICE_STEERING_WHEEL: StringName = &"🕸"
|
||||
const DEVICE_STEERING_WHEEL_INT: int = 128376
|
||||
const DEVICE_JOY_STICK: StringName = &"🕹"
|
||||
const DEVICE_JOY_STICK_INT: int = 128377
|
||||
const DEVICE_VR_HEADSET: StringName = &"🕻"
|
||||
const DEVICE_VR_HEADSET_INT: int = 128379
|
||||
const DEVICE_VR_CONTROLLER: StringName = &"🕼"
|
||||
const DEVICE_VR_CONTROLLER_INT: int = 128380
|
||||
const DEVICE_FLIGHT_STICK: StringName = &"🕽"
|
||||
const DEVICE_FLIGHT_STICK_INT: int = 128381
|
||||
const ICON_PROCESSOR: StringName = &"🖥"
|
||||
const ICON_PROCESSOR_INT: int = 128421
|
||||
const ICON_INTERNET: StringName = &"🖧"
|
||||
const ICON_INTERNET_INT: int = 128423
|
||||
const ICON_GRAPHICS_CARD: StringName = &"🖨"
|
||||
const ICON_GRAPHICS_CARD_INT: int = 128424
|
||||
const ICON_MEMORY: StringName = &"🖪"
|
||||
const ICON_MEMORY_INT: int = 128426
|
||||
const ICON_USB_STICK: StringName = &"🖫"
|
||||
const ICON_USB_STICK_INT: int = 128427
|
||||
const ICON_DATABASE: StringName = &"🖬"
|
||||
const ICON_DATABASE_INT: int = 128428
|
||||
const ICON_HARD_DISK: StringName = &"🖴"
|
||||
const ICON_HARD_DISK_INT: int = 128436
|
||||
const ICON_SCREEN: StringName = &"🖵"
|
||||
const ICON_SCREEN_INT: int = 128437
|
||||
const ICON_TEXT_ENTRY: StringName = &"🖹"
|
||||
const ICON_TEXT_ENTRY_INT: int = 128441
|
||||
const ICON_SPEAK: StringName = &"🗣"
|
||||
const ICON_SPEAK_INT: int = 128483
|
||||
const ICON_LANGUAGE: StringName = &"🗩"
|
||||
const ICON_LANGUAGE_INT: int = 128489
|
||||
const ICON_EXIT: StringName = &"🚪"
|
||||
const ICON_EXIT_INT: int = 128682
|
||||
const ICON_INFORMATION: StringName = &"🛈"
|
||||
const ICON_INFORMATION_INT: int = 128712
|
||||
const ICON_SHOPPING_CART: StringName = &"🛒"
|
||||
const ICON_SHOPPING_CART_INT: int = 128722
|
||||
|
||||
static var promptfont: PromptFont
|
||||
|
||||
|
||||
static func _static_init() -> void:
|
||||
promptfont = PromptFont.new()
|
||||
|
||||
|
||||
static func get_str(name: StringName) -> StringName:
|
||||
return promptfont.get(name)
|
||||
|
||||
|
||||
static func get_int(name: StringName) -> int:
|
||||
return promptfont.get(name + "_INT")
|
1
assets/fonts/promptfont/promptfont.gd.uid
Normal file
1
assets/fonts/promptfont/promptfont.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://cnqy23koth0gm
|
BIN
assets/fonts/promptfont/promptfont.otf
Normal file
BIN
assets/fonts/promptfont/promptfont.otf
Normal file
Binary file not shown.
35
assets/fonts/promptfont/promptfont.otf.import
Normal file
35
assets/fonts/promptfont/promptfont.otf.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://dyog4ex5nqfat"
|
||||
path="res://.godot/imported/promptfont.otf-be4e68f585432fa59d03181ca09a9538.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/fonts/promptfont/promptfont.otf"
|
||||
dest_files=["res://.godot/imported/promptfont.otf-be4e68f585432fa59d03181ca09a9538.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=true
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
hinting=1
|
||||
subpixel_positioning=1
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
58
assets/text/text.csv
Normal file
58
assets/text/text.csv
Normal file
@ -0,0 +1,58 @@
|
||||
keys,en
|
||||
UI_UNSET,unset
|
||||
UI_LISTEN,listening...
|
||||
UI_CANCEL,Cancel
|
||||
UI_ACCEPT,Accept
|
||||
UI_START,Start
|
||||
UI_ON,On
|
||||
UI_OFF,Off
|
||||
UI_BACK,"⏎ Back"
|
||||
UI_LOCKED,Locked
|
||||
UI_QUIT,Quit
|
||||
,
|
||||
PAUSE_HEADING,Paused
|
||||
PAUSE_RESUME,Resume
|
||||
PAUSE_SETTINGS,Settings
|
||||
PAUSE_END,"Quit to Title"
|
||||
PAUSE_END_MSG,"End the game and return to the title screen?\nUnsaved progress will be lost."
|
||||
PAUSE_QUIT,"Quit to Desktop"
|
||||
PAUSE_QUIT_MSG,"Quit to desktop?\nUnsaved progress will be lost."
|
||||
,
|
||||
SETTINGS_GAME,Game
|
||||
SETTINGS_GAME_HEADING,"Game Configuration"
|
||||
SETTINGS_GAME_ACCESSIBILITY_HEADING,Accessibility
|
||||
SETTINGS_GAME_CAMERA_HEADING,Camera
|
||||
SETTINGS_SCREEN_SHAKE,"Enable Screen Shake"
|
||||
SETTINGS_HEAD_BOB,"Enable Head Bob"
|
||||
SETTINGS_SENSITIVITY_X,"Sensitivity, Horizontal"
|
||||
SETTINGS_SENSITIVITY_Y,"Sensitivity, Vertical"
|
||||
SETTINGS_MOUSE_ACCELERATION,"Mouse Acceleration"
|
||||
SETTINGS_INVERT_PITCH,"Invert Pitch"
|
||||
SETTINGS_GRAPHICS,Graphics
|
||||
SETTINGS_GRAPHICS_HEADING,"Graphics & Display"
|
||||
SETTINGS_GRAPHICS_DISPLAY_HEADING,Display
|
||||
SETTINGS_GRAPHICS_FULLSCREEN,Fullscreen
|
||||
SETTINGS_GRAPHICS_VSYNC,V-Sync
|
||||
SETTINGS_AUDIO,Audio
|
||||
SETTINGS_AUDIO_HEADING,"Audio Settings"
|
||||
SETTINGS_CONTROLS,Controls
|
||||
SETTINGS_CONTROLS_HEADING,"Control Bindings"
|
||||
,
|
||||
ACTION_move_forward,"Move forward"
|
||||
ACTION_move_left,"Move left"
|
||||
ACTION_move_back,"Move back"
|
||||
ACTION_move_right,"Move right"
|
||||
ACTION_jump,Jump
|
||||
ACTION_sneak,Sneak
|
||||
ACTION_sprint,Sprint
|
||||
ACTION_fire,"Fire equipped tool"
|
||||
ACTION_interact,Interact
|
||||
ACTION_switch_mode,"Tool mode switch"
|
||||
ACTION_select_next_tool,"Select next tool"
|
||||
ACTION_select_prev_tool,"Select previous tool"
|
||||
ACTION_select_point_spray,"Select spot spray"
|
||||
ACTION_select_wide_spray,"Select wide spray"
|
||||
ACTION_select_brush,"Select toothbrush"
|
||||
ACTION_select_mp3_player,"Select MP3 player"
|
||||
ACTION_select_manual,"Select manual"
|
||||
ACTION_pause,Pause
|
|
17
assets/text/text.csv.import
Normal file
17
assets/text/text.csv.import
Normal file
@ -0,0 +1,17 @@
|
||||
[remap]
|
||||
|
||||
importer="csv_translation"
|
||||
type="Translation"
|
||||
uid="uid://o71c6t5pv7hy"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://assets/text/text.en.translation"]
|
||||
|
||||
source_file="res://assets/text/text.csv"
|
||||
dest_files=["res://assets/text/text.en.translation"]
|
||||
|
||||
[params]
|
||||
|
||||
compress=true
|
||||
delimiter=0
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=406 format=4 uid="uid://crydi5cjgfwe5"]
|
||||
[gd_scene load_steps=415 format=4 uid="uid://crydi5cjgfwe5"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://oowut88kr2ox" path="res://levels/ghost_ship/player_ship/player_ship.tscn" id="1_2pyr1"]
|
||||
[ext_resource type="PackedScene" uid="uid://c2omlx4ptrc01" path="res://src/world/gunk_body/gunk_body.tscn" id="2_2egij"]
|
||||
@ -33,7 +33,6 @@
|
||||
[ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="30_u2hqf"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://5jt7xxr05lw3" path="res://assets/level/hallway/hallway_2.mesh" id="31_ji5cn"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://d0sdsir1hqnbu" path="res://assets/level/wall/wall_4.mesh" id="33_4a0u4"]
|
||||
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_bright.material" id="33_76qng"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://c4klxlj1oop7t" path="res://assets/level/hallway/hallway_4.mesh" id="33_okeuk"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://c2pruwilyqs07" path="res://assets/level/floor/floor_6x9.mesh" id="35_6giaa"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="35_d8p6j"]
|
||||
@ -482,6 +481,45 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_ojd88")
|
||||
|
||||
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_76qng"]
|
||||
width = 256
|
||||
height = 256
|
||||
depth = 32
|
||||
seamless = true
|
||||
seamless_blend_skirt = 0.5
|
||||
noise = ExtResource("6_3kphg")
|
||||
|
||||
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_pifep"]
|
||||
width = 256
|
||||
height = 256
|
||||
depth = 32
|
||||
seamless = true
|
||||
seamless_blend_skirt = 0.5
|
||||
noise = ExtResource("6_3kphg")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_mj4ca"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ojd88"]
|
||||
data = PackedVector3Array(-1, 0, 0.2, -1, -0.4, 0, -1, 0, -0.2, -1, 0, -0.2, -1, -0.4, 0, 1, 0, -0.2, 1, 0, -0.2, -1, -0.4, 0, 1, -0.4, 0, 1, 0, -0.2, 1, -0.4, 0, 1, 0, 0.2, 1, 0, 0.2, 1, -0.4, 0, -1, 0, 0.2, -1, 0, 0.2, 1, -0.4, 0, -1, -0.4, 0, -1, 0, -0.2, 1, 0, -0.2, -1, 0, 0.2, -1, 0, 0.2, 1, 0, -0.2, 1, 0, 0.2)
|
||||
|
||||
@ -724,6 +762,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_h1nog")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qbsys"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_mgo71"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -1262,6 +1323,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_h1nog")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_2dhfq"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_2ft6k"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -1319,6 +1403,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_fkhf3")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_2kcw6"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_7ctwk"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -2798,6 +2905,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_fkhf3")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_y0tcr"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_dxmep"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -2855,6 +2985,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_4akax")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_c4ji2"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_0ij5m"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -3308,6 +3461,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_eaq62")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_bf7oo"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_wqqoq"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -3618,6 +3794,29 @@ _surfaces = [{
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_vt4uw")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_i6b1e"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("5_1njh5")
|
||||
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
|
||||
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
|
||||
shader_parameter/emission_color = Color(0.66, 0.943333, 1, 1)
|
||||
shader_parameter/pixellation = 128.0
|
||||
shader_parameter/time_pixellation = 30.0
|
||||
shader_parameter/roughness = 0.15
|
||||
shader_parameter/specular_contribution = 0.8
|
||||
shader_parameter/emission_strength = 0.04
|
||||
shader_parameter/uv_scale = Vector2(2, 2)
|
||||
shader_parameter/time_scale = 0.2
|
||||
shader_parameter/edge_bleed = 0.25
|
||||
shader_parameter/gunk_mask = ExtResource("43_1h5r5")
|
||||
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_76qng")
|
||||
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_pifep")
|
||||
shader_parameter/jitter_magnitude = 0.0
|
||||
shader_parameter/jitter_time_scale = 0.1
|
||||
shader_parameter/vertex_inflation = 0.0
|
||||
shader_parameter/inflation_pixellation = 10.0
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_np3w4"]
|
||||
data = PackedVector3Array(-0.7, 0, 0.14, -0.7, -0.28, 0, -0.7, 0, -0.14, -0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, -0.28, 0, 0.7, -0.28, 0, 0.7, 0, -0.14, 0.7, -0.28, 0, 0.7, 0, 0.14, 0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, -0.28, 0, -0.7, -0.28, 0, -0.7, 0, -0.14, 0.7, 0, -0.14, -0.7, 0, 0.14, -0.7, 0, 0.14, 0.7, 0, -0.14, 0.7, 0, 0.14)
|
||||
|
||||
@ -6026,7 +6225,7 @@ mesh = SubResource("ArrayMesh_anoak")
|
||||
|
||||
[node name="GunkBody" parent="Corridor1/Hallway1/AirlockSign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_mj4ca")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor1/Hallway1/AirlockSign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_ojd88")
|
||||
@ -6160,7 +6359,7 @@ mesh = SubResource("ArrayMesh_sux6n")
|
||||
|
||||
[node name="GunkBody" parent="Corridor1/Hallway4/MessHallSign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_qbsys")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor1/Hallway4/MessHallSign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_mgo71")
|
||||
@ -6523,7 +6722,7 @@ mesh = SubResource("ArrayMesh_w13dd")
|
||||
|
||||
[node name="GunkBody" parent="Corridor2/Hallway1/MessHallSign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_2dhfq")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor2/Hallway1/MessHallSign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_2ft6k")
|
||||
@ -6556,7 +6755,7 @@ mesh = SubResource("ArrayMesh_f0psm")
|
||||
|
||||
[node name="GunkBody" parent="Corridor2/Hallway2/CrewQuartersSign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_2kcw6")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor2/Hallway2/CrewQuartersSign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_7ctwk")
|
||||
@ -7349,7 +7548,7 @@ mesh = SubResource("ArrayMesh_v4tkv")
|
||||
|
||||
[node name="GunkBody" parent="Corridor3/Hallway/CrewQuartersSign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_y0tcr")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor3/Hallway/CrewQuartersSign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_dxmep")
|
||||
@ -7382,7 +7581,7 @@ mesh = SubResource("ArrayMesh_v0ki8")
|
||||
|
||||
[node name="GunkBody" parent="Corridor3/Hallway2/OpsSign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_c4ji2")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor3/Hallway2/OpsSign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_0ij5m")
|
||||
@ -7621,7 +7820,7 @@ mesh = SubResource("ArrayMesh_dspic")
|
||||
|
||||
[node name="GunkBody" parent="Corridor3/ShortHallway3/MedbaySign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_bf7oo")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor3/ShortHallway3/MedbaySign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_wqqoq")
|
||||
@ -7783,7 +7982,7 @@ mesh = SubResource("ArrayMesh_rigxx")
|
||||
|
||||
[node name="GunkBody" parent="Corridor3/ShortHallway6/CargoBaySign" instance=ExtResource("2_2egij")]
|
||||
mask_dim = 32
|
||||
source_gunk_material = ExtResource("33_76qng")
|
||||
source_gunk_material = SubResource("ShaderMaterial_i6b1e")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Corridor3/ShortHallway6/CargoBaySign/GunkBody"]
|
||||
shape = SubResource("ConcavePolygonShape3D_np3w4")
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -16,13 +16,16 @@ warnings/threads/thread_model=2
|
||||
[application]
|
||||
|
||||
config/name="Grunk"
|
||||
run/main_scene="uid://bov4ok76woyc"
|
||||
run/main_scene="uid://884jqafhtrv0"
|
||||
config/project_settings_override="user://settings.godot"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
run/max_fps=60
|
||||
|
||||
[autoload]
|
||||
|
||||
GameRuntime="*res://src/game/game_runtime.gd"
|
||||
ItemCatalog="*res://src/items/item_catalog.tscn"
|
||||
GameSettings="*res://src/game/game_settings.gd"
|
||||
GameManager="*res://src/game/game_manager.tscn"
|
||||
|
||||
[debug]
|
||||
@ -65,6 +68,9 @@ config/input/mouse_sensitivity_x=0.45
|
||||
config/input/mouse_sensitivity_y=0.45
|
||||
config/input/invert_pitch=false
|
||||
config/input/mouse_acceleration=30.0
|
||||
audio/buses/override_bus_layout="user://audio_bus_layout.tres"
|
||||
config/accessibility/enable_screen_shake=true
|
||||
config/accessibility/enable_head_bob=true
|
||||
|
||||
[input]
|
||||
|
||||
@ -118,6 +124,16 @@ switch_mode={
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_next_tool={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_prev_tool={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_point_spray={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":49,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null)
|
||||
@ -133,16 +149,25 @@ select_brush={
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":51,"key_label":0,"unicode":51,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_next_tool={
|
||||
select_mp3_player={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":52,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_prev_tool={
|
||||
select_manual={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":53,"key_label":0,"unicode":53,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
pause={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[internationalization]
|
||||
|
||||
locale/translations=PackedStringArray("res://assets/text/text.en.translation")
|
||||
|
||||
[layer_names]
|
||||
|
||||
|
@ -5,5 +5,16 @@ class_name Game extends Node
|
||||
static var manager: GameManagerType:
|
||||
get():
|
||||
return GameManager
|
||||
static var settings: GameSettingsType:
|
||||
get():
|
||||
return GameSettings
|
||||
static var runtime: GameRuntimeType:
|
||||
get():
|
||||
return GameRuntime
|
||||
|
||||
static var hud: PlayerHUD
|
||||
## Global static access to Game singleton
|
||||
static var instance: Game
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Game.instance = self
|
||||
|
9
src/game/game_runtime.gd
Normal file
9
src/game/game_runtime.gd
Normal file
@ -0,0 +1,9 @@
|
||||
class_name GameRuntimeType extends Node
|
||||
## Autoloaded runtime manager
|
||||
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_WM_CLOSE_REQUEST:
|
||||
# Handle close request here
|
||||
# TODO: save?
|
||||
get_tree().quit()
|
1
src/game/game_runtime.gd.uid
Normal file
1
src/game/game_runtime.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dcg434tx4r288
|
53
src/game/game_settings.gd
Normal file
53
src/game/game_settings.gd
Normal file
@ -0,0 +1,53 @@
|
||||
class_name GameSettingsType extends Node
|
||||
## Autoloaded container for project settings, for quick runtime access.
|
||||
|
||||
var version: String
|
||||
|
||||
var settings_file: String
|
||||
var audio_bus_file: String
|
||||
|
||||
var mouse_sensitivity_x: float
|
||||
var mouse_sensitivity_y: float
|
||||
var mouse_acceleration: float
|
||||
var invert_pitch: bool
|
||||
|
||||
var enable_screen_shake: bool
|
||||
var enable_head_bob: bool
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
ProjectSettings.settings_changed.connect(_read_settings)
|
||||
_read_settings()
|
||||
_load_audio_bus_override()
|
||||
|
||||
|
||||
func _read_settings() -> void:
|
||||
version = ProjectSettings.get_setting("application/config/version")
|
||||
|
||||
settings_file = ProjectSettings.get_setting("application/config/project_settings_override")
|
||||
audio_bus_file = ProjectSettings.get_setting("game/audio/buses/override_bus_layout")
|
||||
|
||||
mouse_sensitivity_x = ProjectSettings.get_setting("game/config/input/mouse_sensitivity_x")
|
||||
mouse_sensitivity_y = ProjectSettings.get_setting("game/config/input/mouse_sensitivity_y")
|
||||
mouse_acceleration = ProjectSettings.get_setting("game/config/input/mouse_acceleration")
|
||||
invert_pitch = ProjectSettings.get_setting("game/config/input/invert_pitch")
|
||||
|
||||
enable_screen_shake = ProjectSettings.get_setting(
|
||||
"game/config/accessibility/enable_screen_shake"
|
||||
)
|
||||
enable_head_bob = ProjectSettings.get_setting("game/config/accessibility/enable_head_bob")
|
||||
|
||||
|
||||
func _load_audio_bus_override() -> void:
|
||||
# Load override audio bus file
|
||||
if FileAccess.file_exists(audio_bus_file):
|
||||
print_debug("Loading audio bus override from ", audio_bus_file)
|
||||
var bus_layout: AudioBusLayout = load(audio_bus_file)
|
||||
AudioServer.set_bus_layout(bus_layout)
|
||||
|
||||
|
||||
func write() -> void:
|
||||
print_debug("Writing settings to ", settings_file)
|
||||
ProjectSettings.save_custom(settings_file)
|
||||
print_debug("Writing audio bus levels to ", audio_bus_file)
|
||||
ResourceSaver.save(AudioServer.generate_bus_layout(), audio_bus_file)
|
1
src/game/game_settings.gd.uid
Normal file
1
src/game/game_settings.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://bo00uxdf81beu
|
@ -15,9 +15,6 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||
camera_motion((event as InputEventMouseMotion).relative)
|
||||
elif event is InputEventMouseButton:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
elif event is InputEventKey:
|
||||
if (event as InputEventKey).keycode == KEY_ESCAPE:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
|
||||
|
||||
func camera_motion(motion: Vector2) -> void:
|
||||
|
19
src/ui/elements/checker_container.gd
Normal file
19
src/ui/elements/checker_container.gd
Normal file
@ -0,0 +1,19 @@
|
||||
@tool
|
||||
class_name CheckerContainer extends PanelContainer
|
||||
## PanelContainer that sets its theme based on its parent parity
|
||||
|
||||
@export var even_variation := "CheckerContainerEven"
|
||||
@export var odd_variation := "CheckerContainerOdd"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
get_parent().child_order_changed.connect(_recompute)
|
||||
|
||||
|
||||
func _is_even_child() -> bool:
|
||||
var parent := get_parent()
|
||||
return parent.get_children().find(self) % 2 == 0 if parent else false
|
||||
|
||||
|
||||
func _recompute() -> void:
|
||||
theme_type_variation = even_variation if _is_even_child() else odd_variation
|
1
src/ui/elements/checker_container.gd.uid
Normal file
1
src/ui/elements/checker_container.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://csuuvuagv6lpf
|
63
src/ui/elements/input_prompt/input_prompt.gd
Normal file
63
src/ui/elements/input_prompt/input_prompt.gd
Normal file
@ -0,0 +1,63 @@
|
||||
@tool
|
||||
extends Label
|
||||
## A prompt with the input symbol bound to the given action.
|
||||
|
||||
const PROMPT_FORMAT := "{0} - {1}"
|
||||
const HOLD_FORMAT := "{0} {1}"
|
||||
|
||||
const UNKNOWN_LABEL_SYM := "[unknown]"
|
||||
|
||||
const ACTION_HOLD_KEY := "ACTION_HOLD_MODIFIER"
|
||||
|
||||
@export var action: StringName:
|
||||
set(value):
|
||||
action = value
|
||||
_update()
|
||||
|
||||
@export var hold := false:
|
||||
set(value):
|
||||
hold = value
|
||||
_update()
|
||||
|
||||
@export var show_name := true:
|
||||
set(value):
|
||||
show_name = value
|
||||
_update()
|
||||
|
||||
@export var event_index := 0:
|
||||
set(value):
|
||||
event_index = value
|
||||
_update()
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_update()
|
||||
|
||||
|
||||
func _update() -> void:
|
||||
var input_symbol: String
|
||||
var actions := InputMap.action_get_events(action)
|
||||
if actions and event_index < len(actions):
|
||||
var primary := actions[event_index]
|
||||
input_symbol = PromptMap.from_event(primary)
|
||||
|
||||
var loc_action := tr(ControlBinding.ACTION_KEY_FMT.format([action]))
|
||||
|
||||
if not input_symbol:
|
||||
input_symbol = str(PromptMap.UNKNOWN_INPUT_SYMBOL)
|
||||
|
||||
if hold:
|
||||
input_symbol = HOLD_FORMAT.format([input_symbol, tr(ACTION_HOLD_KEY)])
|
||||
|
||||
if show_name:
|
||||
text = (
|
||||
PROMPT_FORMAT
|
||||
. format(
|
||||
[
|
||||
input_symbol,
|
||||
loc_action if loc_action else str(action),
|
||||
]
|
||||
)
|
||||
)
|
||||
else:
|
||||
text = input_symbol
|
1
src/ui/elements/input_prompt/input_prompt.gd.uid
Normal file
1
src/ui/elements/input_prompt/input_prompt.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dn50ip335p7oh
|
14
src/ui/elements/input_prompt/input_prompt.tscn
Normal file
14
src/ui/elements/input_prompt/input_prompt.tscn
Normal file
@ -0,0 +1,14 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b47goj32i6sdh"]
|
||||
|
||||
[ext_resource type="Script" path="res://src/ui/elements/input_prompt/input_prompt.gd" id="1_qq6w5"]
|
||||
|
||||
[node name="InputPrompt" type="Label"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_type_variation = &"InputPrompt"
|
||||
text = "❓ - ACTION_"
|
||||
script = ExtResource("1_qq6w5")
|
||||
hold = null
|
97
src/ui/elements/numeric_slider/numeric_slider.gd
Normal file
97
src/ui/elements/numeric_slider/numeric_slider.gd
Normal file
@ -0,0 +1,97 @@
|
||||
@tool
|
||||
class_name NumericSlider extends HBoxContainer
|
||||
## HSlider with an attached SpinBox
|
||||
|
||||
signal value_changed(value: float)
|
||||
|
||||
@export_category("Shared Range Properties")
|
||||
|
||||
@export var min_value := 0.0:
|
||||
set(v):
|
||||
_set_shared("min_value", v)
|
||||
min_value = v
|
||||
|
||||
@export var max_value := 100.0:
|
||||
set(v):
|
||||
_set_shared("max_value", v)
|
||||
max_value = v
|
||||
|
||||
@export var step := 1.0:
|
||||
set(v):
|
||||
_set_shared("step", v)
|
||||
step = v
|
||||
|
||||
@export var page := 0:
|
||||
set(v):
|
||||
_set_shared("page", v)
|
||||
page = v
|
||||
|
||||
@export var value: float:
|
||||
get:
|
||||
return _value
|
||||
set(v):
|
||||
_value = v
|
||||
value_changed.emit(v)
|
||||
|
||||
@export var exp_edit := false:
|
||||
set(v):
|
||||
_set_shared("exp_edit", v)
|
||||
exp_edit = v
|
||||
|
||||
@export var rounded := false:
|
||||
set(v):
|
||||
_set_shared("rounded", v)
|
||||
rounded = v
|
||||
|
||||
@export var allow_greater := false:
|
||||
set(v):
|
||||
_set_shared("allow_greater", v)
|
||||
allow_greater = v
|
||||
|
||||
@export var allow_lesser := false:
|
||||
set(v):
|
||||
_set_shared("allow_lesser", v)
|
||||
allow_lesser = v
|
||||
|
||||
var _value := 0.0:
|
||||
set(v):
|
||||
if slider:
|
||||
slider.set_value_no_signal(v)
|
||||
if spin_box:
|
||||
spin_box.set_value_no_signal(v)
|
||||
_value = v
|
||||
|
||||
@onready var slider: HSlider = $HSlider
|
||||
@onready var spin_box: SpinBox = $SpinBox
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Force propagation of properties to shared range elements
|
||||
min_value = min_value
|
||||
max_value = max_value
|
||||
step = step
|
||||
page = page
|
||||
_value = _value
|
||||
exp_edit = exp_edit
|
||||
rounded = rounded
|
||||
allow_greater = allow_greater
|
||||
allow_lesser = allow_lesser
|
||||
|
||||
|
||||
func set_value_no_signal(new_value: float) -> void:
|
||||
_value = new_value
|
||||
|
||||
|
||||
func _set_shared(property: String, new_value: Variant) -> void:
|
||||
if slider:
|
||||
slider.set(property, new_value)
|
||||
if spin_box:
|
||||
spin_box.set(property, new_value)
|
||||
|
||||
|
||||
func _on_spin_box_value_changed(new_value: float) -> void:
|
||||
value = new_value
|
||||
|
||||
|
||||
func _on_slider_value_changed(new_value: float) -> void:
|
||||
value = new_value
|
1
src/ui/elements/numeric_slider/numeric_slider.gd.uid
Normal file
1
src/ui/elements/numeric_slider/numeric_slider.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://ei2iyprpp4rt
|
27
src/ui/elements/numeric_slider/numeric_slider.tscn
Normal file
27
src/ui/elements/numeric_slider/numeric_slider.tscn
Normal file
@ -0,0 +1,27 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dqqcyi26d3bpg"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ei2iyprpp4rt" path="res://src/ui/elements/numeric_slider/numeric_slider.gd" id="1_kcr4o"]
|
||||
|
||||
[node name="NumericSlider" type="HBoxContainer"]
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -8.0
|
||||
offset_bottom = 10.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_kcr4o")
|
||||
|
||||
[node name="HSlider" type="HSlider" parent="."]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="SpinBox" type="SpinBox" parent="."]
|
||||
custom_minimum_size = Vector2(120, 0)
|
||||
layout_mode = 2
|
||||
alignment = 2
|
||||
|
||||
[connection signal="value_changed" from="HSlider" to="." method="_on_slider_value_changed"]
|
||||
[connection signal="value_changed" from="SpinBox" to="." method="_on_spin_box_value_changed"]
|
29
src/ui/elements/text_checkbox/text_checkbox.gd
Normal file
29
src/ui/elements/text_checkbox/text_checkbox.gd
Normal file
@ -0,0 +1,29 @@
|
||||
@tool
|
||||
extends CheckBox
|
||||
## Checkbox which updates its label based on check state.
|
||||
|
||||
@export var true_text := "UI_ON":
|
||||
set(value):
|
||||
true_text = value
|
||||
_refresh()
|
||||
|
||||
@export var false_text := "UI_OFF":
|
||||
set(value):
|
||||
false_text = value
|
||||
_refresh()
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_refresh()
|
||||
|
||||
|
||||
func _set_text(value: bool) -> void:
|
||||
text = true_text if value else false_text
|
||||
|
||||
|
||||
func _refresh() -> void:
|
||||
_set_text(button_pressed)
|
||||
|
||||
|
||||
func _on_toggled(toggled_on: bool) -> void:
|
||||
_set_text(toggled_on)
|
1
src/ui/elements/text_checkbox/text_checkbox.gd.uid
Normal file
1
src/ui/elements/text_checkbox/text_checkbox.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://da0um27cm4eiv
|
10
src/ui/elements/text_checkbox/text_checkbox.tscn
Normal file
10
src/ui/elements/text_checkbox/text_checkbox.tscn
Normal file
@ -0,0 +1,10 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b7ce38k7rx466"]
|
||||
|
||||
[ext_resource type="Script" path="res://src/ui/elements/text_checkbox/text_checkbox.gd" id="1_6mma0"]
|
||||
|
||||
[node name="TextCheckbox" type="CheckBox"]
|
||||
size_flags_horizontal = 0
|
||||
text = "UI_OFF"
|
||||
script = ExtResource("1_6mma0")
|
||||
|
||||
[connection signal="toggled" from="." to="." method="_on_toggled"]
|
@ -7,7 +7,6 @@ class_name PlayerHUD extends Control
|
||||
|
||||
func _ready() -> void:
|
||||
Game.manager.alert_raised.connect(_on_raise_alert)
|
||||
Game.hud = self
|
||||
|
||||
|
||||
func select_interactive(prop: Interactive) -> void:
|
||||
|
BIN
src/ui/menus/menu.theme
Normal file
BIN
src/ui/menus/menu.theme
Normal file
Binary file not shown.
67
src/ui/menus/pause_menu/pause_menu.gd
Normal file
67
src/ui/menus/pause_menu/pause_menu.gd
Normal file
@ -0,0 +1,67 @@
|
||||
extends Control
|
||||
## Menu shown in-game when the user presses pause.
|
||||
|
||||
@export var settings_scene: PackedScene
|
||||
|
||||
var _freeze_input := false
|
||||
|
||||
@onready var menu_list: Control = %MenuList
|
||||
@onready var quit_confirm: Control = %QuitConfirm
|
||||
@onready var end_game_confirm: Control = %EndGameConfirm
|
||||
@onready var settings_container: Container = %SettingsContainer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
Engine.time_scale = 1.0
|
||||
|
||||
|
||||
func _unhandled_key_input(event: InputEvent) -> void:
|
||||
if not _freeze_input and event.is_action_pressed("pause"):
|
||||
get_viewport().set_input_as_handled()
|
||||
resume()
|
||||
|
||||
|
||||
func _unhide() -> void:
|
||||
menu_list.show()
|
||||
|
||||
|
||||
func _hide() -> void:
|
||||
menu_list.hide()
|
||||
|
||||
|
||||
func resume() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
queue_free()
|
||||
|
||||
|
||||
func settings() -> void:
|
||||
var instance: Control = settings_scene.instantiate()
|
||||
settings_container.add_child(instance)
|
||||
instance.tree_exited.connect(_unhide)
|
||||
_hide()
|
||||
|
||||
|
||||
func quit() -> void:
|
||||
quit_confirm.show()
|
||||
|
||||
|
||||
func cancel_quit() -> void:
|
||||
quit_confirm.hide()
|
||||
|
||||
|
||||
func confirm_quit() -> void:
|
||||
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
|
||||
|
||||
|
||||
func end_game() -> void:
|
||||
end_game_confirm.show()
|
||||
|
||||
|
||||
func cancel_end_game() -> void:
|
||||
end_game_confirm.hide()
|
||||
|
||||
|
||||
func confirm_end_game() -> void:
|
||||
print_debug("TODO")
|
||||
#world.fade_to_title()
|
1
src/ui/menus/pause_menu/pause_menu.gd.uid
Normal file
1
src/ui/menus/pause_menu/pause_menu.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://cllx5glqld8wn
|
202
src/ui/menus/pause_menu/pause_menu.tscn
Normal file
202
src/ui/menus/pause_menu/pause_menu.tscn
Normal file
@ -0,0 +1,202 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://byvjsvavbg5xe"]
|
||||
|
||||
[ext_resource type="Theme" uid="uid://doq7ay6f7dgfo" path="res://src/ui/menus/menu.theme" id="1_b4t8b"]
|
||||
[ext_resource type="Script" uid="uid://cllx5glqld8wn" path="res://src/ui/menus/pause_menu/pause_menu.gd" id="1_rd0j2"]
|
||||
[ext_resource type="PackedScene" uid="uid://d3eaqw2rdurct" path="res://src/ui/menus/settings_menu/settings_menu.tscn" id="3_dowgp"]
|
||||
|
||||
[node name="PauseMenu" type="Control"]
|
||||
process_mode = 3
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("1_b4t8b")
|
||||
script = ExtResource("1_rd0j2")
|
||||
settings_scene = ExtResource("3_dowgp")
|
||||
|
||||
[node name="Shade" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 0.627451)
|
||||
|
||||
[node name="MenuList" type="VBoxContainer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -127.0
|
||||
offset_top = -147.0
|
||||
offset_right = 127.0
|
||||
offset_bottom = 147.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="TitleLabel" type="Label" parent="MenuList"]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_color = Color(1, 1, 1, 1)
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
theme_override_font_sizes/font_size = 72
|
||||
text = "GRUNK"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="PauseLabel" type="Label" parent="MenuList"]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_color = Color(1, 1, 1, 1)
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 8
|
||||
text = "PAUSE_HEADING"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="MenuList"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 24
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="MenuList"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
alignment = 1
|
||||
|
||||
[node name="ResumeButton" type="Button" parent="MenuList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "PAUSE_RESUME"
|
||||
|
||||
[node name="SettingsButton" type="Button" parent="MenuList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "PAUSE_SETTINGS"
|
||||
|
||||
[node name="EndGameButton" type="Button" parent="MenuList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"DangerButton"
|
||||
text = "PAUSE_END"
|
||||
|
||||
[node name="QuitButton" type="Button" parent="MenuList/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"DangerButton"
|
||||
text = "PAUSE_QUIT"
|
||||
|
||||
[node name="SettingsContainer" type="MarginContainer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(1000, 600)
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -400.0
|
||||
offset_top = -300.0
|
||||
offset_right = 430.0
|
||||
offset_bottom = 300.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="QuitConfirm" type="CenterContainer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="QuitConfirm"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="QuitConfirm/PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 16
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 16
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="QuitConfirm/PanelContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="Label" type="Label" parent="QuitConfirm/PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "PAUSE_QUIT_MSG"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="QuitConfirm/PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="CancelButton" type="Button" parent="QuitConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "UI_CANCEL"
|
||||
|
||||
[node name="ConfirmQuitButton" type="Button" parent="QuitConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_type_variation = &"DangerButton"
|
||||
text = "UI_QUIT"
|
||||
|
||||
[node name="EndGameConfirm" type="CenterContainer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="EndGameConfirm"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="EndGameConfirm/PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 16
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 16
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="EndGameConfirm/PanelContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="Label" type="Label" parent="EndGameConfirm/PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "PAUSE_END_MSG"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="EndGameConfirm/PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="CancelButton" type="Button" parent="EndGameConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "UI_CANCEL"
|
||||
|
||||
[node name="ConfirmEndGameButton" type="Button" parent="EndGameConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_type_variation = &"DangerButton"
|
||||
text = "UI_QUIT"
|
||||
|
||||
[connection signal="pressed" from="MenuList/VBoxContainer/ResumeButton" to="." method="resume"]
|
||||
[connection signal="pressed" from="MenuList/VBoxContainer/SettingsButton" to="." method="settings"]
|
||||
[connection signal="pressed" from="MenuList/VBoxContainer/EndGameButton" to="." method="end_game"]
|
||||
[connection signal="pressed" from="MenuList/VBoxContainer/QuitButton" to="." method="quit"]
|
||||
[connection signal="pressed" from="QuitConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer/CancelButton" to="." method="cancel_quit"]
|
||||
[connection signal="pressed" from="QuitConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer/ConfirmQuitButton" to="." method="confirm_quit"]
|
||||
[connection signal="pressed" from="EndGameConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer/CancelButton" to="." method="cancel_end_game"]
|
||||
[connection signal="pressed" from="EndGameConfirm/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer/ConfirmEndGameButton" to="." method="confirm_end_game"]
|
108
src/ui/menus/settings_menu/control_binding/control_binding.gd
Normal file
108
src/ui/menus/settings_menu/control_binding/control_binding.gd
Normal file
@ -0,0 +1,108 @@
|
||||
class_name ControlBinding extends CheckerContainer
|
||||
## Input for rebinding an action.
|
||||
|
||||
const ACTION_KEY_FMT := "ACTION_{0}"
|
||||
const LISTENING_TEXT := "UI_LISTEN"
|
||||
|
||||
const MOTION_THRESHOLD := 0.5
|
||||
|
||||
@export var key: StringName
|
||||
|
||||
var listening: bool = false:
|
||||
set(value):
|
||||
if button:
|
||||
button.disabled = value
|
||||
listening = value
|
||||
|
||||
@onready var action: Label = %Action
|
||||
@onready var button: Button = %Button
|
||||
|
||||
|
||||
func _get_settings_key() -> String:
|
||||
return "input/%s" % key
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# gdlint:ignore = private-method-call
|
||||
super._ready()
|
||||
|
||||
# Set action label text
|
||||
var loc_action := tr(ACTION_KEY_FMT.format([key]))
|
||||
# Fall back to just the key if no localization exists
|
||||
@warning_ignore("incompatible_ternary")
|
||||
action.text = loc_action if loc_action else key
|
||||
|
||||
# Set the binding label
|
||||
_set_label_from_binding()
|
||||
|
||||
|
||||
func _set_label_from_binding() -> void:
|
||||
var actions := InputMap.action_get_events(key)
|
||||
if actions:
|
||||
var primary := actions[0]
|
||||
button.text = PromptMap.from_event(primary)
|
||||
if button.text == PromptMap.UNKNOWN_INPUT_SYMBOL:
|
||||
print_debug("No mapping for input event: ", primary)
|
||||
# Special case: Can't rebind things bound to ESC
|
||||
if primary is InputEventKey and (primary as InputEventKey).physical_keycode == KEY_ESCAPE:
|
||||
button.disabled = true
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if not listening:
|
||||
return
|
||||
|
||||
if event is InputEventKey:
|
||||
var key_event: InputEventKey = event
|
||||
if (
|
||||
key_event.physical_keycode in [KEY_CTRL, KEY_ALT, KEY_SHIFT, KEY_META]
|
||||
and key_event.pressed
|
||||
):
|
||||
# Ignore modifier key until release
|
||||
return
|
||||
if key_event.physical_keycode == KEY_ESCAPE:
|
||||
get_viewport().set_input_as_handled()
|
||||
cancel_rebinding()
|
||||
return
|
||||
|
||||
if event is InputEventJoypadMotion:
|
||||
var motion_event: InputEventJoypadMotion = event
|
||||
if abs(motion_event.axis_value) < MOTION_THRESHOLD:
|
||||
# Ignore axis motion unless it's over our threshold
|
||||
return
|
||||
|
||||
if (
|
||||
event is InputEventKey
|
||||
or event is InputEventMouseButton
|
||||
or event is InputEventJoypadButton
|
||||
or event is InputEventJoypadMotion
|
||||
):
|
||||
get_viewport().set_input_as_handled()
|
||||
rebind(event)
|
||||
|
||||
|
||||
func start_listening() -> void:
|
||||
button.text = LISTENING_TEXT
|
||||
listening = true
|
||||
|
||||
|
||||
func cancel_rebinding() -> void:
|
||||
_set_label_from_binding()
|
||||
listening = false
|
||||
|
||||
|
||||
func rebind(event: InputEvent) -> void:
|
||||
# Clear previous binding
|
||||
InputMap.action_erase_events(key)
|
||||
# Add new binding
|
||||
InputMap.action_add_event(key, event)
|
||||
# Update label
|
||||
_set_label_from_binding()
|
||||
|
||||
listening = false
|
||||
|
||||
|
||||
func apply() -> void:
|
||||
var setting: Dictionary = ProjectSettings.get_setting(_get_settings_key())
|
||||
setting["events"] = InputMap.action_get_events(key)
|
||||
ProjectSettings.set_setting(_get_settings_key(), setting)
|
@ -0,0 +1 @@
|
||||
uid://y0kwpyt3w5bt
|
@ -0,0 +1,36 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dwvpddd7id1h"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://y0kwpyt3w5bt" path="res://src/ui/menus/settings_menu/control_binding/control_binding.gd" id="1_7mwhu"]
|
||||
[ext_resource type="Theme" uid="uid://doq7ay6f7dgfo" path="res://src/ui/menus/menu.theme" id="1_82ajm"]
|
||||
|
||||
[node name="ControlBinding" type="PanelContainer" groups=["ControlBindings"]]
|
||||
theme = ExtResource("1_82ajm")
|
||||
theme_type_variation = &"CheckerContainerOdd"
|
||||
script = ExtResource("1_7mwhu")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 8
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 8
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 48
|
||||
alignment = 2
|
||||
|
||||
[node name="Action" type="Label" parent="MarginContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"SettingsInputLabel"
|
||||
text = "Action"
|
||||
|
||||
[node name="Button" type="Button" parent="MarginContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(300, 42)
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"InputBindButton"
|
||||
text = "UI_UNSET"
|
||||
|
||||
[connection signal="pressed" from="MarginContainer/HBoxContainer/Button" to="." method="start_listening"]
|
@ -0,0 +1,13 @@
|
||||
extends Setting
|
||||
## Setting with checkbox representing a boolean value.
|
||||
|
||||
@onready var checkbox: CheckBox = %TextCheckbox
|
||||
|
||||
|
||||
func initialize_value(value: Variant) -> void:
|
||||
@warning_ignore("unsafe_cast")
|
||||
checkbox.button_pressed = value as bool
|
||||
|
||||
|
||||
func get_value() -> Variant:
|
||||
return checkbox.button_pressed
|
@ -0,0 +1 @@
|
||||
uid://dv8n1d4g4awyc
|
@ -0,0 +1,12 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://bpmpj4n6xp17l"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dcah6r3ku60g6" path="res://src/ui/menus/settings_menu/settings/setting/setting.tscn" id="1_5t42f"]
|
||||
[ext_resource type="Script" uid="uid://dv8n1d4g4awyc" path="res://src/ui/menus/settings_menu/settings/checkbox_setting/checkbox_setting.gd" id="2_mwq55"]
|
||||
[ext_resource type="PackedScene" uid="uid://b7ce38k7rx466" path="res://src/ui/elements/text_checkbox/text_checkbox.tscn" id="3_fosy2"]
|
||||
|
||||
[node name="CheckboxSetting" instance=ExtResource("1_5t42f")]
|
||||
script = ExtResource("2_mwq55")
|
||||
|
||||
[node name="TextCheckbox" parent="PanelContainer/MarginContainer" index="0" instance=ExtResource("3_fosy2")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
@ -0,0 +1,11 @@
|
||||
extends "res://src/ui/menus/settings_menu/settings/checkbox_setting/checkbox_setting.gd"
|
||||
## Special case setting for fullscreen mode
|
||||
|
||||
|
||||
func initialize_value(value: Variant) -> void:
|
||||
@warning_ignore("unsafe_cast")
|
||||
checkbox.button_pressed = (value as Window.Mode) == Window.MODE_FULLSCREEN
|
||||
|
||||
|
||||
func get_value() -> Variant:
|
||||
return Window.MODE_FULLSCREEN if checkbox.button_pressed else Window.MODE_WINDOWED
|
@ -0,0 +1 @@
|
||||
uid://wlo8hxahp1x7
|
@ -0,0 +1,13 @@
|
||||
extends Setting
|
||||
## Setting with a dropdown menu representing an enum value
|
||||
|
||||
@onready var dropdown: OptionButton = %Dropdown
|
||||
|
||||
|
||||
func initialize_value(value: Variant) -> void:
|
||||
@warning_ignore("unsafe_cast")
|
||||
dropdown.selected = dropdown.get_item_index(value as int)
|
||||
|
||||
|
||||
func get_value() -> Variant:
|
||||
return dropdown.get_item_id(dropdown.selected)
|
@ -0,0 +1 @@
|
||||
uid://cfsf8k44t38g7
|
@ -0,0 +1,13 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dpry41u0ctikn"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dcah6r3ku60g6" path="res://src/ui/menus/settings_menu/settings/setting/setting.tscn" id="1_km84n"]
|
||||
[ext_resource type="Script" path="res://src/ui/menus/settings_menu/settings/dropdown_setting/dropdown_setting.gd" id="2_ubo13"]
|
||||
|
||||
[node name="DropdownSetting" instance=ExtResource("1_km84n")]
|
||||
script = ExtResource("2_ubo13")
|
||||
|
||||
[node name="Dropdown" type="OptionButton" parent="PanelContainer/MarginContainer" index="0"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
selected = 0
|
||||
item_count = 1
|
@ -0,0 +1,13 @@
|
||||
extends Setting
|
||||
## Setting with numeric slider representing a floating-point value
|
||||
|
||||
@onready var slider: NumericSlider = %NumericSlider
|
||||
|
||||
|
||||
func initialize_value(value: Variant) -> void:
|
||||
@warning_ignore("unsafe_cast")
|
||||
slider.value = value as float
|
||||
|
||||
|
||||
func get_value() -> Variant:
|
||||
return slider.value
|
@ -0,0 +1 @@
|
||||
uid://dpxpgs6iw7b7x
|
@ -0,0 +1,12 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://dut1lj8ju37sq"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dcah6r3ku60g6" path="res://src/ui/menus/settings_menu/settings/setting/setting.tscn" id="1_t2sut"]
|
||||
[ext_resource type="Script" uid="uid://dpxpgs6iw7b7x" path="res://src/ui/menus/settings_menu/settings/numeric_setting/numeric_setting.gd" id="2_3nkup"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqqcyi26d3bpg" path="res://src/ui/elements/numeric_slider/numeric_slider.tscn" id="2_piwkl"]
|
||||
|
||||
[node name="NumericSetting" instance=ExtResource("1_t2sut")]
|
||||
script = ExtResource("2_3nkup")
|
||||
|
||||
[node name="NumericSlider" parent="PanelContainer/MarginContainer" index="0" instance=ExtResource("2_piwkl")]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
25
src/ui/menus/settings_menu/settings/setting/setting.gd
Normal file
25
src/ui/menus/settings_menu/settings/setting/setting.gd
Normal file
@ -0,0 +1,25 @@
|
||||
class_name Setting extends HBoxContainer
|
||||
## Base class for settings menu inputs
|
||||
|
||||
@export var key: StringName
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if not Engine.is_editor_hint():
|
||||
initialize_value(ProjectSettings.get_setting(key))
|
||||
|
||||
|
||||
## Initialize the value of this setting from project settings.
|
||||
func initialize_value(_value: Variant) -> void:
|
||||
pass # Implemented in derived type
|
||||
|
||||
|
||||
## Apply the set value of this setting to project settings.
|
||||
func apply() -> void:
|
||||
ProjectSettings.set_setting(key, get_value())
|
||||
|
||||
|
||||
## Get the raw value of this setting.
|
||||
func get_value() -> Variant:
|
||||
# Implemented in derived type
|
||||
return null
|
@ -0,0 +1 @@
|
||||
uid://d2ajb1x2wpm05
|
26
src/ui/menus/settings_menu/settings/setting/setting.tscn
Normal file
26
src/ui/menus/settings_menu/settings/setting/setting.tscn
Normal file
@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dcah6r3ku60g6"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d2ajb1x2wpm05" path="res://src/ui/menus/settings_menu/settings/setting/setting.gd" id="1_rrash"]
|
||||
|
||||
[node name="Setting" type="HBoxContainer"]
|
||||
script = ExtResource("1_rrash")
|
||||
|
||||
[node name="Spacer" type="HSeparator" parent="."]
|
||||
custom_minimum_size = Vector2(32, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="SettingLabel" type="Label" parent="."]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
text = "Label"
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="."]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 4
|
||||
theme_override_constants/margin_top = 2
|
||||
theme_override_constants/margin_right = 4
|
||||
theme_override_constants/margin_bottom = 2
|
77
src/ui/menus/settings_menu/settings_menu.gd
Normal file
77
src/ui/menus/settings_menu/settings_menu.gd
Normal file
@ -0,0 +1,77 @@
|
||||
extends MarginContainer
|
||||
## Menu allowing the user to adjust game configuration.
|
||||
|
||||
const SETTINGS_GROUP := "Settings"
|
||||
const VOLUME_GROUP := "VolumeSliders"
|
||||
const BINDINGS_GROUP := "ControlBindings"
|
||||
|
||||
@export var volume_slider_scene: PackedScene
|
||||
@export var control_binding_scene: PackedScene
|
||||
|
||||
@onready var bus_mixer_list: HBoxContainer = %BusMixerList
|
||||
@onready var control_binding_list: VBoxContainer = %ControlBindingList
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
populate_volume_mixers()
|
||||
populate_control_bindings()
|
||||
|
||||
|
||||
func _get_settings_elements() -> Array[Setting]:
|
||||
var elements: Array[Setting] = []
|
||||
elements.assign(get_tree().get_nodes_in_group(SETTINGS_GROUP))
|
||||
return elements
|
||||
|
||||
|
||||
func _get_volume_sliders() -> Array[VolumeSlider]:
|
||||
var elements: Array[VolumeSlider] = []
|
||||
elements.assign(get_tree().get_nodes_in_group(VOLUME_GROUP))
|
||||
return elements
|
||||
|
||||
|
||||
func _get_control_bindings() -> Array[ControlBinding]:
|
||||
var elements: Array[ControlBinding] = []
|
||||
elements.assign(get_tree().get_nodes_in_group(BINDINGS_GROUP))
|
||||
return elements
|
||||
|
||||
|
||||
func populate_control_bindings() -> void:
|
||||
for action: StringName in InputMap.get_actions():
|
||||
if not action.begins_with("ui_"):
|
||||
var binding: ControlBinding = control_binding_scene.instantiate()
|
||||
binding.key = action
|
||||
control_binding_list.add_child(binding)
|
||||
|
||||
|
||||
func populate_volume_mixers() -> void:
|
||||
for idx: int in range(AudioServer.bus_count):
|
||||
var slider: VolumeSlider = volume_slider_scene.instantiate()
|
||||
slider.bus_idx = idx
|
||||
bus_mixer_list.add_child(slider)
|
||||
|
||||
|
||||
## Close menu without applying settings.
|
||||
func cancel() -> void:
|
||||
queue_free()
|
||||
|
||||
|
||||
## Apply all settings.
|
||||
func apply() -> void:
|
||||
for setting: Setting in _get_settings_elements():
|
||||
setting.apply()
|
||||
for mixer: VolumeSlider in _get_volume_sliders():
|
||||
mixer.apply()
|
||||
for binding: ControlBinding in _get_control_bindings():
|
||||
binding.apply()
|
||||
|
||||
|
||||
## Write all applied settings to disk.
|
||||
func save_settings() -> void:
|
||||
Game.settings.write()
|
||||
|
||||
|
||||
## Apply settings and close menu.
|
||||
func accept() -> void:
|
||||
apply()
|
||||
save_settings()
|
||||
queue_free()
|
1
src/ui/menus/settings_menu/settings_menu.gd.uid
Normal file
1
src/ui/menus/settings_menu/settings_menu.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dyb8cwai3cyw2
|
14
src/ui/menus/settings_menu/settings_menu.gd~
Normal file
14
src/ui/menus/settings_menu/settings_menu.gd~
Normal file
@ -0,0 +1,14 @@
|
||||
extends MarginContainer
|
||||
## Menu allowing the user to adjust game configuration.
|
||||
|
||||
|
||||
## Close menu without applying settings.
|
||||
func cancel() -> void:
|
||||
queue_free()
|
||||
|
||||
|
||||
## Close menu and apply settings.
|
||||
func accept() -> void:
|
||||
# TODO apply settings
|
||||
# TODO write to disk
|
||||
queue_free()
|
336
src/ui/menus/settings_menu/settings_menu.tscn
Normal file
336
src/ui/menus/settings_menu/settings_menu.tscn
Normal file
@ -0,0 +1,336 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://d3eaqw2rdurct"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dyb8cwai3cyw2" path="res://src/ui/menus/settings_menu/settings_menu.gd" id="1_lbcn7"]
|
||||
[ext_resource type="Theme" uid="uid://doq7ay6f7dgfo" path="res://src/ui/menus/menu.theme" id="1_vuur6"]
|
||||
[ext_resource type="PackedScene" uid="uid://bpmpj4n6xp17l" path="res://src/ui/menus/settings_menu/settings/checkbox_setting/checkbox_setting.tscn" id="2_f274v"]
|
||||
[ext_resource type="PackedScene" uid="uid://dut1lj8ju37sq" path="res://src/ui/menus/settings_menu/settings/numeric_setting/numeric_setting.tscn" id="3_jox8e"]
|
||||
[ext_resource type="PackedScene" uid="uid://d2ya6ly01724l" path="res://src/ui/menus/settings_menu/volume_slider/volume_slider.tscn" id="3_vuur6"]
|
||||
[ext_resource type="PackedScene" uid="uid://dwvpddd7id1h" path="res://src/ui/menus/settings_menu/control_binding/control_binding.tscn" id="4_6bmd3"]
|
||||
[ext_resource type="Script" uid="uid://wlo8hxahp1x7" path="res://src/ui/menus/settings_menu/settings/checkbox_setting/fullscreen_setting.gd" id="4_ug1id"]
|
||||
|
||||
[node name="SettingsMenu" type="MarginContainer"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("1_vuur6")
|
||||
script = ExtResource("1_lbcn7")
|
||||
volume_slider_scene = ExtResource("3_vuur6")
|
||||
control_binding_scene = ExtResource("4_6bmd3")
|
||||
|
||||
[node name="TabContainer" type="TabContainer" parent="."]
|
||||
layout_mode = 2
|
||||
current_tab = 0
|
||||
|
||||
[node name="SETTINGS_GAME" type="MarginContainer" parent="TabContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"SettingsPageContainer"
|
||||
metadata/_tab_index = 0
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/SETTINGS_GAME"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Icon" type="Label" parent="TabContainer/SETTINGS_GAME/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"InputPrompt"
|
||||
theme_override_font_sizes/font_size = 48
|
||||
text = "⚙"
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_GAME/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 8
|
||||
theme_type_variation = &"HeaderXLarge"
|
||||
text = "SETTINGS_GAME_HEADING"
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme_type_variation = &"SettingsListMargin"
|
||||
|
||||
[node name="SettingsList" type="VBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="AccessibilityHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AccessibilityHeading"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"HeaderMedium"
|
||||
text = "SETTINGS_GAME_ACCESSIBILITY_HEADING"
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/AccessibilityHeading"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="ScreenShake" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")]
|
||||
layout_mode = 2
|
||||
key = &"game/config/accessibility/enable_screen_shake"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ScreenShake" index="1"]
|
||||
text = "SETTINGS_SCREEN_SHAKE"
|
||||
|
||||
[node name="TextCheckbox" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ScreenShake/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
|
||||
[node name="HeadBob" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")]
|
||||
layout_mode = 2
|
||||
key = &"game/config/accessibility/enable_head_bob"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HeadBob" index="1"]
|
||||
text = "SETTINGS_HEAD_BOB"
|
||||
|
||||
[node name="TextCheckbox" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HeadBob/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
|
||||
[node name="CameraHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/CameraHeading"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"HeaderMedium"
|
||||
text = "SETTINGS_GAME_CAMERA_HEADING"
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/CameraHeading"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="SensitivityX" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("3_jox8e")]
|
||||
layout_mode = 2
|
||||
key = &"game/config/input/mouse_sensitivity_x"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX" index="1"]
|
||||
text = "SETTINGS_SENSITIVITY_X"
|
||||
|
||||
[node name="NumericSlider" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
max_value = 1.0
|
||||
step = 0.01
|
||||
|
||||
[node name="SensitivityY" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("3_jox8e")]
|
||||
layout_mode = 2
|
||||
key = &"game/config/input/mouse_sensitivity_y"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityY" index="1"]
|
||||
text = "SETTINGS_SENSITIVITY_Y"
|
||||
|
||||
[node name="NumericSlider" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityY/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
max_value = 1.0
|
||||
step = 0.01
|
||||
|
||||
[node name="MouseAcceleration" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("3_jox8e")]
|
||||
layout_mode = 2
|
||||
key = &"game/config/input/mouse_acceleration"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/MouseAcceleration" index="1"]
|
||||
text = "SETTINGS_MOUSE_ACCELERATION"
|
||||
|
||||
[node name="NumericSlider" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/MouseAcceleration/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
|
||||
[node name="InvertPitch" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")]
|
||||
layout_mode = 2
|
||||
key = &"game/config/input/invert_pitch"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/InvertPitch" index="1"]
|
||||
text = "SETTINGS_INVERT_PITCH"
|
||||
|
||||
[node name="TextCheckbox" parent="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/InvertPitch/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
|
||||
[node name="SETTINGS_GRAPHICS" type="MarginContainer" parent="TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"SettingsPageContainer"
|
||||
metadata/_tab_index = 1
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Icon" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
theme_type_variation = &"InputPrompt"
|
||||
theme_override_font_sizes/font_size = 48
|
||||
text = "🖵"
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 0
|
||||
theme_type_variation = &"HeaderXLarge"
|
||||
text = "SETTINGS_GRAPHICS_HEADING"
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme_type_variation = &"SettingsListMargin"
|
||||
|
||||
[node name="SettingsList" type="VBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="DisplayHeading" type="HBoxContainer" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DisplayHeading"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"HeaderMedium"
|
||||
text = "SETTINGS_GRAPHICS_DISPLAY_HEADING"
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/DisplayHeading"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Fullscreen" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")]
|
||||
layout_mode = 2
|
||||
script = ExtResource("4_ug1id")
|
||||
key = &"display/window/size/mode"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Fullscreen" index="1"]
|
||||
text = "SETTINGS_GRAPHICS_FULLSCREEN"
|
||||
|
||||
[node name="TextCheckbox" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Fullscreen/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
|
||||
[node name="VSync" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList" groups=["Settings"] instance=ExtResource("2_f274v")]
|
||||
layout_mode = 2
|
||||
key = &"display/window/vsync/vsync_mode"
|
||||
|
||||
[node name="SettingLabel" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/VSync" index="1"]
|
||||
text = "SETTINGS_GRAPHICS_VSYNC"
|
||||
|
||||
[node name="TextCheckbox" parent="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/VSync/PanelContainer/MarginContainer" index="0"]
|
||||
physics_interpolation_mode = 0
|
||||
|
||||
[node name="SETTINGS_AUDIO" type="MarginContainer" parent="TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"SettingsPageContainer"
|
||||
metadata/_tab_index = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/SETTINGS_AUDIO"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/SETTINGS_AUDIO/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Icon" type="Label" parent="TabContainer/SETTINGS_AUDIO/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"InputPrompt"
|
||||
theme_override_font_sizes/font_size = 48
|
||||
text = "🕬"
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_AUDIO/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 8
|
||||
theme_type_variation = &"HeaderXLarge"
|
||||
text = "SETTINGS_AUDIO_HEADING"
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/SETTINGS_AUDIO/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/SETTINGS_AUDIO/VBoxContainer/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme_type_variation = &"SettingsListMargin"
|
||||
|
||||
[node name="BusMixerList" type="HBoxContainer" parent="TabContainer/SETTINGS_AUDIO/VBoxContainer/ScrollContainer/MarginContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="SETTINGS_CONTROLS" type="MarginContainer" parent="TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"SettingsPageContainer"
|
||||
metadata/_tab_index = 3
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/SETTINGS_CONTROLS"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/SETTINGS_CONTROLS/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Icon" type="Label" parent="TabContainer/SETTINGS_CONTROLS/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"InputPrompt"
|
||||
theme_override_font_sizes/font_size = 48
|
||||
text = ""
|
||||
|
||||
[node name="Label" type="Label" parent="TabContainer/SETTINGS_CONTROLS/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 8
|
||||
theme_type_variation = &"HeaderXLarge"
|
||||
text = "SETTINGS_CONTROLS_HEADING"
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="TabContainer/SETTINGS_CONTROLS/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/SETTINGS_CONTROLS/VBoxContainer/ScrollContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme_type_variation = &"SettingsListMargin"
|
||||
|
||||
[node name="ControlBindingList" type="VBoxContainer" parent="TabContainer/SETTINGS_CONTROLS/VBoxContainer/ScrollContainer/MarginContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
|
||||
[node name="SouthEast" type="MarginContainer" parent="."]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 16
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 16
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="SouthEast"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="CancelButton" type="Button" parent="SouthEast/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"CancelButton"
|
||||
text = "UI_CANCEL"
|
||||
|
||||
[node name="AcceptButton" type="Button" parent="SouthEast/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"AlertButton"
|
||||
text = "UI_ACCEPT"
|
||||
|
||||
[connection signal="pressed" from="SouthEast/HBoxContainer/CancelButton" to="." method="cancel"]
|
||||
[connection signal="pressed" from="SouthEast/HBoxContainer/AcceptButton" to="." method="accept"]
|
||||
|
||||
[editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/ScreenShake"]
|
||||
[editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/HeadBob"]
|
||||
[editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityX"]
|
||||
[editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/SensitivityY"]
|
||||
[editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/MouseAcceleration"]
|
||||
[editable path="TabContainer/SETTINGS_GAME/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/InvertPitch"]
|
||||
[editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/Fullscreen"]
|
||||
[editable path="TabContainer/SETTINGS_GRAPHICS/VBoxContainer/ScrollContainer/MarginContainer/SettingsList/VSync"]
|
63
src/ui/menus/settings_menu/volume_slider/volume_slider.gd
Normal file
63
src/ui/menus/settings_menu/volume_slider/volume_slider.gd
Normal file
@ -0,0 +1,63 @@
|
||||
class_name VolumeSlider extends VBoxContainer
|
||||
## Input element for adjusting the volume of a single bus.
|
||||
|
||||
const VOLUME_FACTOR := 50.0
|
||||
|
||||
@export var bus_idx: int
|
||||
|
||||
var value: float:
|
||||
get:
|
||||
return slider.value
|
||||
set(v):
|
||||
slider.set_value_no_signal(v)
|
||||
spin_box.set_value_no_signal(v)
|
||||
_set_bus_volume(v)
|
||||
|
||||
var _applied_value: float
|
||||
|
||||
@onready var bus_name: Label = %BusName
|
||||
@onready var slider: VSlider = %Slider
|
||||
@onready var spin_box: SpinBox = %SpinBox
|
||||
@onready var audio_demo: AudioStreamPlayer = %AudioDemo
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
bus_name.text = AudioServer.get_bus_name(bus_idx)
|
||||
audio_demo.bus = bus_name.text
|
||||
_applied_value = _db_to_volume(AudioServer.get_bus_volume_db(bus_idx))
|
||||
value = _applied_value
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
# Revert volume to the value from the last time `apply` was called
|
||||
_set_bus_volume(_applied_value)
|
||||
|
||||
|
||||
func _db_to_volume(db: float) -> float:
|
||||
return db_to_linear(db) * VOLUME_FACTOR
|
||||
|
||||
|
||||
func _volume_to_db(volume: float) -> float:
|
||||
return linear_to_db(volume / VOLUME_FACTOR)
|
||||
|
||||
|
||||
func _on_component_value_changed(new_value: float) -> void:
|
||||
value = new_value
|
||||
|
||||
|
||||
func _set_bus_volume(new_value: float) -> void:
|
||||
AudioServer.set_bus_volume_db(bus_idx, _volume_to_db(new_value))
|
||||
|
||||
|
||||
func apply() -> void:
|
||||
# Prevent value from being reverted during destructor.
|
||||
_applied_value = value
|
||||
|
||||
|
||||
func _on_slider_drag_ended(value_changed: bool) -> void:
|
||||
if value_changed:
|
||||
audio_demo.play()
|
||||
|
||||
|
||||
func _on_spin_box_value_changed(_new_value: float) -> void:
|
||||
audio_demo.play()
|
@ -0,0 +1 @@
|
||||
uid://bt3oajqvevj4k
|
53
src/ui/menus/settings_menu/volume_slider/volume_slider.tscn
Normal file
53
src/ui/menus/settings_menu/volume_slider/volume_slider.tscn
Normal file
@ -0,0 +1,53 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://d2ya6ly01724l"]
|
||||
|
||||
[ext_resource type="Theme" uid="uid://doq7ay6f7dgfo" path="res://src/ui/menus/menu.theme" id="1_k7hk0"]
|
||||
[ext_resource type="Script" uid="uid://bt3oajqvevj4k" path="res://src/ui/menus/settings_menu/volume_slider/volume_slider.gd" id="1_rfe0k"]
|
||||
|
||||
[node name="VolumeSlider" type="VBoxContainer" groups=["VolumeSliders"]]
|
||||
custom_minimum_size = Vector2(300, 0)
|
||||
theme = ExtResource("1_k7hk0")
|
||||
script = ExtResource("1_rfe0k")
|
||||
|
||||
[node name="NameContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="Icon" type="Label" parent="NameContainer"]
|
||||
layout_mode = 2
|
||||
theme_type_variation = &"InputPrompt"
|
||||
theme_override_constants/outline_size = 5
|
||||
theme_override_font_sizes/font_size = 24
|
||||
text = "🎧"
|
||||
|
||||
[node name="BusName" type="Label" parent="NameContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 8
|
||||
theme_type_variation = &"HeaderMedium"
|
||||
text = "Channel"
|
||||
|
||||
[node name="Slider" type="VSlider" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 1
|
||||
size_flags_vertical = 3
|
||||
step = 0.1
|
||||
|
||||
[node name="DigitalDisplay" type="HBoxContainer" parent="."]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
|
||||
[node name="SpinBox" type="SpinBox" parent="DigitalDisplay"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
step = 0.1
|
||||
alignment = 2
|
||||
suffix = "%"
|
||||
|
||||
[node name="AudioDemo" type="AudioStreamPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[connection signal="drag_ended" from="Slider" to="." method="_on_slider_drag_ended"]
|
||||
[connection signal="value_changed" from="Slider" to="." method="_on_component_value_changed"]
|
||||
[connection signal="value_changed" from="DigitalDisplay/SpinBox" to="." method="_on_component_value_changed"]
|
||||
[connection signal="value_changed" from="DigitalDisplay/SpinBox" to="." method="_on_spin_box_value_changed"]
|
302
src/util/prompt_map.gd
Normal file
302
src/util/prompt_map.gd
Normal file
@ -0,0 +1,302 @@
|
||||
class_name PromptMap
|
||||
## Tools for mapping input events to PromptFont glyphs.
|
||||
|
||||
const COMPOSE_FMT := "{0}+{1}"
|
||||
const UNKNOWN_INPUT_SYMBOL := PromptFont.ICON_QUESTION
|
||||
|
||||
## Keyboard key map
|
||||
const KEYBOARD := {
|
||||
KEY_LEFT: PromptFont.KEYBOARD_LEFT,
|
||||
KEY_UP: PromptFont.KEYBOARD_UP,
|
||||
KEY_RIGHT: PromptFont.KEYBOARD_RIGHT,
|
||||
KEY_DOWN: PromptFont.KEYBOARD_DOWN,
|
||||
KEY_CTRL: PromptFont.KEYBOARD_CONTROL,
|
||||
KEY_ALT: PromptFont.KEYBOARD_ALT,
|
||||
KEY_SHIFT: PromptFont.KEYBOARD_SHIFT,
|
||||
KEY_META: PromptFont.KEYBOARD_SUPER,
|
||||
KEY_TAB: PromptFont.KEYBOARD_TAB,
|
||||
KEY_CAPSLOCK: PromptFont.KEYBOARD_CAPS,
|
||||
KEY_BACKSPACE: PromptFont.KEYBOARD_BACKSPACE,
|
||||
KEY_ENTER: PromptFont.KEYBOARD_ENTER,
|
||||
KEY_KP_ENTER: PromptFont.KEYBOARD_ENTER,
|
||||
KEY_ESCAPE: PromptFont.KEYBOARD_ESCAPE,
|
||||
KEY_PRINT: PromptFont.KEYBOARD_PRINT_SCREEN,
|
||||
KEY_SCROLLLOCK: PromptFont.KEYBOARD_SCROLL_LOCK,
|
||||
KEY_PAUSE: PromptFont.KEYBOARD_PAUSE,
|
||||
KEY_NUMLOCK: PromptFont.KEYBOARD_NUM_LOCK,
|
||||
KEY_INSERT: PromptFont.KEYBOARD_INSERT,
|
||||
KEY_HOME: PromptFont.KEYBOARD_HOME,
|
||||
KEY_PAGEUP: PromptFont.KEYBOARD_PAGE_UP,
|
||||
KEY_DELETE: PromptFont.KEYBOARD_DELETE,
|
||||
KEY_END: PromptFont.KEYBOARD_END,
|
||||
KEY_PAGEDOWN: PromptFont.KEYBOARD_PAGE_DOWN,
|
||||
KEY_SPACE: PromptFont.KEYBOARD_SPACE,
|
||||
KEY_F1: PromptFont.KEYBOARD_F1,
|
||||
KEY_F2: PromptFont.KEYBOARD_F2,
|
||||
KEY_F3: PromptFont.KEYBOARD_F3,
|
||||
KEY_F4: PromptFont.KEYBOARD_F4,
|
||||
KEY_F5: PromptFont.KEYBOARD_F5,
|
||||
KEY_F6: PromptFont.KEYBOARD_F6,
|
||||
KEY_F7: PromptFont.KEYBOARD_F7,
|
||||
KEY_F8: PromptFont.KEYBOARD_F8,
|
||||
KEY_F9: PromptFont.KEYBOARD_F9,
|
||||
KEY_F10: PromptFont.KEYBOARD_F10,
|
||||
KEY_F11: PromptFont.KEYBOARD_F11,
|
||||
KEY_F12: PromptFont.KEYBOARD_F12,
|
||||
KEY_0: PromptFont.KEYBOARD_0,
|
||||
KEY_1: PromptFont.KEYBOARD_1,
|
||||
KEY_2: PromptFont.KEYBOARD_2,
|
||||
KEY_3: PromptFont.KEYBOARD_3,
|
||||
KEY_4: PromptFont.KEYBOARD_4,
|
||||
KEY_5: PromptFont.KEYBOARD_5,
|
||||
KEY_6: PromptFont.KEYBOARD_6,
|
||||
KEY_7: PromptFont.KEYBOARD_7,
|
||||
KEY_8: PromptFont.KEYBOARD_8,
|
||||
KEY_9: PromptFont.KEYBOARD_9,
|
||||
KEY_KP_0: PromptFont.KEYBOARD_0,
|
||||
KEY_KP_1: PromptFont.KEYBOARD_1,
|
||||
KEY_KP_2: PromptFont.KEYBOARD_2,
|
||||
KEY_KP_3: PromptFont.KEYBOARD_3,
|
||||
KEY_KP_4: PromptFont.KEYBOARD_4,
|
||||
KEY_KP_5: PromptFont.KEYBOARD_5,
|
||||
KEY_KP_6: PromptFont.KEYBOARD_6,
|
||||
KEY_KP_7: PromptFont.KEYBOARD_7,
|
||||
KEY_KP_8: PromptFont.KEYBOARD_8,
|
||||
KEY_KP_9: PromptFont.KEYBOARD_9,
|
||||
KEY_A: PromptFont.KEYBOARD_A,
|
||||
KEY_B: PromptFont.KEYBOARD_B,
|
||||
KEY_C: PromptFont.KEYBOARD_C,
|
||||
KEY_D: PromptFont.KEYBOARD_D,
|
||||
KEY_E: PromptFont.KEYBOARD_E,
|
||||
KEY_F: PromptFont.KEYBOARD_F,
|
||||
KEY_G: PromptFont.KEYBOARD_G,
|
||||
KEY_H: PromptFont.KEYBOARD_H,
|
||||
KEY_I: PromptFont.KEYBOARD_I,
|
||||
KEY_J: PromptFont.KEYBOARD_J,
|
||||
KEY_K: PromptFont.KEYBOARD_K,
|
||||
KEY_L: PromptFont.KEYBOARD_L,
|
||||
KEY_M: PromptFont.KEYBOARD_M,
|
||||
KEY_N: PromptFont.KEYBOARD_N,
|
||||
KEY_O: PromptFont.KEYBOARD_O,
|
||||
KEY_P: PromptFont.KEYBOARD_P,
|
||||
KEY_Q: PromptFont.KEYBOARD_Q,
|
||||
KEY_R: PromptFont.KEYBOARD_R,
|
||||
KEY_S: PromptFont.KEYBOARD_S,
|
||||
KEY_T: PromptFont.KEYBOARD_T,
|
||||
KEY_U: PromptFont.KEYBOARD_U,
|
||||
KEY_V: PromptFont.KEYBOARD_V,
|
||||
KEY_W: PromptFont.KEYBOARD_W,
|
||||
KEY_X: PromptFont.KEYBOARD_X,
|
||||
KEY_Y: PromptFont.KEYBOARD_Y,
|
||||
KEY_Z: PromptFont.KEYBOARD_Z
|
||||
}
|
||||
|
||||
## Mouse button & scroll map
|
||||
const MOUSE := {
|
||||
MOUSE_BUTTON_LEFT: PromptFont.MOUSE_1,
|
||||
MOUSE_BUTTON_RIGHT: PromptFont.MOUSE_2,
|
||||
MOUSE_BUTTON_MIDDLE: PromptFont.MOUSE_3,
|
||||
MOUSE_BUTTON_WHEEL_LEFT: PromptFont.MOUSE_4,
|
||||
MOUSE_BUTTON_WHEEL_RIGHT: PromptFont.MOUSE_5,
|
||||
MOUSE_BUTTON_XBUTTON1: PromptFont.MOUSE_6,
|
||||
MOUSE_BUTTON_XBUTTON2: PromptFont.MOUSE_7,
|
||||
# PromptFont.MOUSE_8,
|
||||
MOUSE_BUTTON_WHEEL_UP: PromptFont.MOUSE_SCROLL_UP,
|
||||
MOUSE_BUTTON_WHEEL_DOWN: PromptFont.MOUSE_SCROLL_DOWN
|
||||
# PromptFont.MOUSE_LEFT,
|
||||
# PromptFont.MOUSE_RIGHT,
|
||||
# PromptFont.MOUSE_MIDDLE,
|
||||
# PromptFont.MOUSE_LEFT_RIGHT,
|
||||
# PromptFont.MOUSE_UP_DOWN,
|
||||
# PromptFont.MOUSE_ANY
|
||||
}
|
||||
|
||||
## Generic gamepad button map
|
||||
const GAMEPAD_BUTTON := {
|
||||
JOY_BUTTON_X: PromptFont.GAMEPAD_X,
|
||||
JOY_BUTTON_Y: PromptFont.GAMEPAD_Y,
|
||||
JOY_BUTTON_B: PromptFont.GAMEPAD_B,
|
||||
JOY_BUTTON_A: PromptFont.GAMEPAD_A,
|
||||
JOY_BUTTON_BACK: PromptFont.GAMEPAD_SELECT,
|
||||
JOY_BUTTON_START: PromptFont.GAMEPAD_START,
|
||||
JOY_BUTTON_GUIDE: PromptFont.GAMEPAD_HOME,
|
||||
JOY_BUTTON_LEFT_STICK: PromptFont.ANALOG_L_CLICK,
|
||||
JOY_BUTTON_RIGHT_STICK: PromptFont.ANALOG_R_CLICK,
|
||||
JOY_BUTTON_LEFT_SHOULDER: PromptFont.XBOX_LEFT_SHOULDER,
|
||||
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.XBOX_RIGHT_SHOULDER,
|
||||
JOY_BUTTON_DPAD_UP: PromptFont.DPAD_UP,
|
||||
JOY_BUTTON_DPAD_DOWN: PromptFont.DPAD_DOWN,
|
||||
JOY_BUTTON_DPAD_LEFT: PromptFont.DPAD_LEFT,
|
||||
JOY_BUTTON_DPAD_RIGHT: PromptFont.DPAD_RIGHT,
|
||||
JOY_BUTTON_MISC1: PromptFont.XBOX_VIEW,
|
||||
# JOY_BUTTON_PADDLE_1: ## Wtf is this?
|
||||
JOY_BUTTON_TOUCHPAD: PromptFont.SONY_TOUCHPAD
|
||||
}
|
||||
|
||||
## Generic gamepad axis map
|
||||
const GAMEPAD_AXIS := {
|
||||
JOY_AXIS_LEFT_X: PromptFont.ANALOG_L_LEFT_RIGHT,
|
||||
JOY_AXIS_LEFT_Y: PromptFont.ANALOG_L_UP_DOWN,
|
||||
JOY_AXIS_RIGHT_X: PromptFont.ANALOG_R_LEFT_RIGHT,
|
||||
JOY_AXIS_RIGHT_Y: PromptFont.ANALOG_R_UP_DOWN,
|
||||
JOY_AXIS_TRIGGER_LEFT: PromptFont.XBOX_LEFT_TRIGGER,
|
||||
JOY_AXIS_TRIGGER_RIGHT: PromptFont.XBOX_RIGHT_TRIGGER
|
||||
}
|
||||
|
||||
## Xbox gamepad button map
|
||||
const XBOX_BUTTON := {
|
||||
JOY_BUTTON_LEFT_SHOULDER: PromptFont.XBOX_LEFT_SHOULDER,
|
||||
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.XBOX_RIGHT_SHOULDER,
|
||||
JOY_BUTTON_X: PromptFont.XBOX_X,
|
||||
JOY_BUTTON_Y: PromptFont.XBOX_Y,
|
||||
JOY_BUTTON_B: PromptFont.XBOX_B,
|
||||
JOY_BUTTON_A: PromptFont.XBOX_A,
|
||||
JOY_BUTTON_MISC1: PromptFont.XBOX_VIEW,
|
||||
JOY_BUTTON_START: PromptFont.XBOX_MENU,
|
||||
JOY_BUTTON_DPAD_LEFT: PromptFont.XBOX_DPAD_LEFT,
|
||||
JOY_BUTTON_DPAD_UP: PromptFont.XBOX_DPAD_UP,
|
||||
JOY_BUTTON_DPAD_RIGHT: PromptFont.XBOX_DPAD_RIGHT,
|
||||
JOY_BUTTON_DPAD_DOWN: PromptFont.XBOX_DPAD_DOWN,
|
||||
JOY_BUTTON_GUIDE: PromptFont.ICON_XBOX
|
||||
}
|
||||
|
||||
## Xbox gamepad axis map
|
||||
const XBOX_AXIS := {
|
||||
JOY_AXIS_TRIGGER_LEFT: PromptFont.XBOX_LEFT_TRIGGER,
|
||||
JOY_AXIS_TRIGGER_RIGHT: PromptFont.XBOX_RIGHT_TRIGGER
|
||||
}
|
||||
|
||||
## Sony gamepad button map
|
||||
const SONY_BUTTON := {
|
||||
JOY_BUTTON_LEFT_SHOULDER: PromptFont.SONY_LEFT_SHOULDER,
|
||||
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.SONY_RIGHT_SHOULDER,
|
||||
JOY_BUTTON_X: PromptFont.SONY_X,
|
||||
JOY_BUTTON_Y: PromptFont.SONY_Y,
|
||||
JOY_BUTTON_B: PromptFont.SONY_B,
|
||||
JOY_BUTTON_A: PromptFont.SONY_A,
|
||||
JOY_BUTTON_MISC1: PromptFont.SONY_SHARE,
|
||||
JOY_BUTTON_TOUCHPAD: PromptFont.SONY_TOUCHPAD,
|
||||
JOY_BUTTON_START: PromptFont.SONY_OPTIONS,
|
||||
JOY_BUTTON_GUIDE: PromptFont.ICON_PLAYSTATION
|
||||
}
|
||||
|
||||
## Sony gamepad axis map
|
||||
const SONY_AXIS := {
|
||||
JOY_AXIS_TRIGGER_LEFT: PromptFont.SONY_LEFT_TRIGGER,
|
||||
JOY_AXIS_TRIGGER_RIGHT: PromptFont.SONY_RIGHT_TRIGGER
|
||||
}
|
||||
|
||||
## Nintendo gamepad button map
|
||||
const NINTENDO_BUTTON := {
|
||||
JOY_BUTTON_LEFT_SHOULDER: PromptFont.NINTENDO_LEFT_SHOULDER,
|
||||
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.NINTENDO_RIGHT_SHOULDER,
|
||||
JOY_BUTTON_BACK: PromptFont.NINTENDO_MINUS,
|
||||
JOY_BUTTON_START: PromptFont.NINTENDO_PLUS,
|
||||
JOY_BUTTON_DPAD_LEFT: PromptFont.NINTENDO_DPAD_LEFT,
|
||||
JOY_BUTTON_DPAD_UP: PromptFont.NINTENDO_DPAD_UP,
|
||||
JOY_BUTTON_DPAD_RIGHT: PromptFont.NINTENDO_DPAD_RIGHT,
|
||||
JOY_BUTTON_DPAD_DOWN: PromptFont.NINTENDO_DPAD_DOWN
|
||||
}
|
||||
|
||||
## Nintendo gamepad axis map
|
||||
const NINTENDO_AXIS := {
|
||||
JOY_AXIS_TRIGGER_LEFT: PromptFont.NINTENDO_LEFT_TRIGGER,
|
||||
JOY_AXIS_TRIGGER_RIGHT: PromptFont.NINTENDO_RIGHT_TRIGGER
|
||||
}
|
||||
|
||||
|
||||
static func _compose_modifiers(event: InputEventWithModifiers, base: String) -> String:
|
||||
# Control -> Alt -> Shift -> Super/Meta
|
||||
var composed := base
|
||||
if event.meta_pressed:
|
||||
composed = COMPOSE_FMT.format([PromptFont.KEYBOARD_SUPER, composed])
|
||||
if event.shift_pressed:
|
||||
composed = COMPOSE_FMT.format([PromptFont.KEYBOARD_SHIFT, composed])
|
||||
if event.alt_pressed:
|
||||
composed = COMPOSE_FMT.format([PromptFont.KEYBOARD_ALT, composed])
|
||||
if event.ctrl_pressed:
|
||||
composed = COMPOSE_FMT.format([PromptFont.KEYBOARD_CONTROL, composed])
|
||||
return composed
|
||||
|
||||
|
||||
## Get the symbol representing the given keyboard input event.
|
||||
##
|
||||
## If there is no such symbol available, returns the key label.
|
||||
static func key(event: InputEventKey) -> String:
|
||||
if event.physical_keycode not in KEYBOARD:
|
||||
return OS.get_keycode_string(
|
||||
DisplayServer.keyboard_get_keycode_from_physical(event.physical_keycode)
|
||||
)
|
||||
@warning_ignore("unsafe_cast")
|
||||
return _compose_modifiers(event, KEYBOARD[event.physical_keycode] as String)
|
||||
|
||||
|
||||
## Get the symbol representing the given mouse button event.
|
||||
static func mouse_button(event: InputEventMouseButton) -> String:
|
||||
@warning_ignore("unsafe_cast")
|
||||
return _compose_modifiers(event, MOUSE.get(event.button_index, UNKNOWN_INPUT_SYMBOL) as String)
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad button event.
|
||||
static func gamepad_button(event: InputEventJoypadButton) -> String:
|
||||
return GAMEPAD_BUTTON.get(event.button_index, UNKNOWN_INPUT_SYMBOL)
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad axis event.
|
||||
static func gamepad_axis(event: InputEventJoypadMotion) -> String:
|
||||
return GAMEPAD_AXIS.get(event.axis, UNKNOWN_INPUT_SYMBOL)
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad button event.
|
||||
##
|
||||
## Symbols specific to Xbox gamepads will be used where possible.
|
||||
static func xbox_button(event: InputEventJoypadButton) -> String:
|
||||
return XBOX_BUTTON.get(event.button_index, gamepad_button(event))
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad axis event.
|
||||
##
|
||||
## Symbols specific to Xbox gamepads will be used where possible.
|
||||
static func xbox_axis(event: InputEventJoypadMotion) -> String:
|
||||
return XBOX_AXIS.get(event.axis, gamepad_axis(event))
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad button event.
|
||||
##
|
||||
## Symbols specific to Playstation Dualshock gamepads will be used where possible.
|
||||
static func sony_button(event: InputEventJoypadButton) -> String:
|
||||
return SONY_BUTTON.get(event.button_index, gamepad_button(event))
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad axis event.
|
||||
##
|
||||
## Symbols specific to Playstation Dualshock gamepads will be used where possible.
|
||||
static func sony_axis(event: InputEventJoypadMotion) -> String:
|
||||
return SONY_AXIS.get(event.axis, gamepad_axis(event))
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad button event.
|
||||
##
|
||||
## Symbols specific to Nintendo Switch joycons will be used where possible.
|
||||
static func nintendo_button(event: InputEventJoypadButton) -> String:
|
||||
return NINTENDO_BUTTON.get(event.button_index, gamepad_button(event))
|
||||
|
||||
|
||||
## Get the symbol representing the given gamepad axis event.
|
||||
##
|
||||
## Symbols specific to Nintendo Switch joycons will be used where possible.
|
||||
static func nintendo_axis(event: InputEventJoypadMotion) -> String:
|
||||
return NINTENDO_AXIS.get(event.axis, gamepad_axis(event))
|
||||
|
||||
|
||||
## Get the symbol representing the given event.
|
||||
static func from_event(event: InputEvent) -> String:
|
||||
if event is InputEventKey:
|
||||
return key(event as InputEventKey)
|
||||
if event is InputEventMouseButton:
|
||||
return mouse_button(event as InputEventMouseButton)
|
||||
if event is InputEventJoypadButton:
|
||||
return gamepad_button(event as InputEventJoypadButton)
|
||||
if event is InputEventJoypadMotion:
|
||||
return gamepad_axis(event as InputEventJoypadMotion)
|
||||
return UNKNOWN_INPUT_SYMBOL
|
1
src/util/prompt_map.gd.uid
Normal file
1
src/util/prompt_map.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://bjcah3n6wug68
|
38
src/world/world.gd
Normal file
38
src/world/world.gd
Normal file
@ -0,0 +1,38 @@
|
||||
class_name World extends Node
|
||||
## Access and flow control for the game world.
|
||||
|
||||
@export var initial_level: PackedScene
|
||||
|
||||
@export var pause_scene: PackedScene
|
||||
|
||||
@onready var level_root: Node3D = %LevelRoot
|
||||
@onready var ui_root: Control = %UIRoot
|
||||
|
||||
static var instance: World
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
World.instance = self
|
||||
load_level(initial_level)
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("pause"):
|
||||
pause()
|
||||
|
||||
|
||||
func pause() -> void:
|
||||
get_tree().paused = true
|
||||
var pause_menu: Control = pause_scene.instantiate()
|
||||
ui_root.add_child(pause_menu)
|
||||
pause_menu.tree_exiting.connect(unpause)
|
||||
|
||||
|
||||
func unpause() -> void:
|
||||
get_tree().paused = false
|
||||
|
||||
|
||||
func load_level(level: PackedScene) -> void:
|
||||
for c: Node in level_root.get_children():
|
||||
c.queue_free()
|
||||
level_root.add_child(level.instantiate())
|
1
src/world/world.gd.uid
Normal file
1
src/world/world.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://cgqmhtemibxc5
|
23
src/world/world.tscn
Normal file
23
src/world/world.tscn
Normal file
@ -0,0 +1,23 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://884jqafhtrv0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cgqmhtemibxc5" path="res://src/world/world.gd" id="1_1k4gi"]
|
||||
[ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="2_6fy3g"]
|
||||
[ext_resource type="PackedScene" uid="uid://bov4ok76woyc" path="res://levels/ghost_ship/ghost_ship.tscn" id="2_jte2u"]
|
||||
|
||||
[node name="World" type="Node"]
|
||||
script = ExtResource("1_1k4gi")
|
||||
initial_level = ExtResource("2_jte2u")
|
||||
pause_scene = ExtResource("2_6fy3g")
|
||||
|
||||
[node name="LevelRoot" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="UIRoot" type="Control" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
@ -37,4 +37,9 @@
|
||||
- `#ff4a1c` Emissive Blood Orange <mark style="font-weight: bold; background: #000; color: #ff4a1c;">SAMPLE</mark>
|
||||
- `#dd1c1a` DANGER Red <mark style="font-weight: bold; background: #000; color: #dd1c1a;">SAMPLE</mark>
|
||||
- `#23fb59` SUCCESS Green <mark style="font-weight: bold; background: #000; color: #23fb59;">SAMPLE</mark>
|
||||
- `#39a0ed` HI-TECH Blue <mark style="font-weight: bold; background: #000; color: #39a0ed;">SAMPLE</mark>
|
||||
- `#39a0ed` HI-TECH Blue <mark style="font-weight: bold; background: #000; color: #39a0ed;">SAMPLE</mark>
|
||||
|
||||
## UI
|
||||
- `#dd1c1a` DANGER Red <mark style="font-weight: bold; background: #000; color: #dd1c1a;">SAMPLE</mark>
|
||||
- `#23fb59` SUCCESS Green <mark style="font-weight: bold; background: #000; color: #23fb59;">SAMPLE</mark>
|
||||
- `#39a0ed` NOTICE Blue <mark style="font-weight: bold; background: #000; color: #39a0ed;">SAMPLE</mark>
|
Loading…
x
Reference in New Issue
Block a user