Merged revision(s) 491 from branches/SFML2:
Uniformized paranthese padding with AStyle, use AStyle 2.04 ........ Merged revision(s) 489 from branches/SFML2: Removed all empty translations to avoid confusion Save language as string to avoid problems when languages.lst changes ........ Merged revision(s) 488 from branches/SFML2: New features: - Translatability of statistics at end of race - Adapt GUI particle count to screen size Fixes: - Remember selected race in GUI - Fixed crash in Debug mode when loading course without any trees - Simplified collision detection ........ Merged revision(s) 487 from branches/SFML2: Refactorizations: - Check for gl_error automatically (in states) - Cleaned up some unnecessary includes - Removed some index maps that offer no performance gain - Load credit text on demand and unload it when leaving credits menu - Replaced loadIdentity+multMatrix by loadMatrix ........ git-svn-id: https://svn.code.sf.net/p/extremetuxracer/code/trunk@516 0420edf4-82e4-42fc-9478-35b55e6d67a3master
parent
fc2a8e62e3
commit
df4a95d199
|
@ -4,4 +4,5 @@
|
|||
--indent=tab
|
||||
--indent-switches
|
||||
--pad-header
|
||||
--unpad-paren
|
||||
--keep-one-line-blocks
|
|
@ -3,20 +3,9 @@ pkgdatadir = $(datadir)/$(PACKAGE)/translations
|
|||
|
||||
pkgdata_DATA = \
|
||||
languages.lst \
|
||||
eu_ES.lst \
|
||||
de_DE.lst \
|
||||
es_ES.lst \
|
||||
fr_FR.lst \
|
||||
it_IT.lst \
|
||||
nl_NL.lst \
|
||||
nb_NO.lst \
|
||||
nn_NO.lst \
|
||||
pl_PL.lst \
|
||||
pt_PT.lst \
|
||||
ru_RU.lst \
|
||||
ro_RO.lst \
|
||||
sk_SK.lst \
|
||||
fi_FI.lst \
|
||||
sv_SE.lst
|
||||
pl_PL.lst
|
||||
|
||||
EXTRA_DIST = $(pkgdata_DATA)
|
||||
|
|
|
@ -104,3 +104,11 @@
|
|||
|
||||
*[idx] 84 [engl] Fullscreen setting has changed, [trans] Damit die Vollbild-Einstellung geändert wird,
|
||||
*[idx] 85 [engl] You need to restart the game [trans] muss das Spiel neugestartet werden.
|
||||
|
||||
*[idx] 86 [engl] Score [trans] Punkte
|
||||
*[idx] 87 [engl] Herring [trans] Herringe
|
||||
*[idx] 88 [engl] Time [trans] Zeit
|
||||
*[idx] 89 [engl] Path length [trans] Streckenlänge
|
||||
*[idx] 90 [engl] Average speed [trans] Durchschnittsgeschwindigkeit
|
||||
*[idx] 91 [engl] Position [trans] Platz
|
||||
*[idx] 92 [engl] in highscore list [trans] in der Punktelilste.
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,15 +1,4 @@
|
|||
*[lang] eu_ES [language] Basque
|
||||
*[lang] de_DE [language] Deutsch
|
||||
*[lang] es_ES [language] Español
|
||||
*[lang] fr_FR [language] français
|
||||
*[lang] it_IT [language] Italian
|
||||
*[lang] nl_NL [language] Nederlands
|
||||
*[lang] nb_NO [language] Norsk (bokmål)
|
||||
*[lang] nn_NO [language] Norsk (nynorsk)
|
||||
*[lang] pl_PL [language] polski
|
||||
*[lang] pt_PT [language] Português
|
||||
*[lang] ru_RU [language] Русский
|
||||
*[lang] ro_RO [language] românã
|
||||
*[lang] sk_SK [language] Slovenčina
|
||||
*[lang] fi_FI [language] Suomi
|
||||
*[lang] sv_SE [language] Svenska
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,54 +0,0 @@
|
|||
# Please, don't change the idx
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
*[idx] 2 [engl] Practice [trans]
|
||||
*[idx] 3 [engl] Configuration [trans]
|
||||
*[idx] 4 [engl] Credits [trans]
|
||||
*[idx] 5 [engl] Quit [trans]
|
||||
*[idx] 6 [engl] Select an event [trans]
|
||||
*[idx] 7 [engl] Select a cup [trans]
|
||||
*[idx] 8 [engl] Back [trans]
|
||||
*[idx] 9 [engl] Continue [trans]
|
||||
*[idx] 10 [engl] You cannot enter this cup yet
|
||||
[trans]
|
||||
|
||||
*[idx] 11 [engl] Herring: [trans]
|
||||
*[idx] 12 [engl] Time: [trans]
|
||||
*[idx] 13 [engl] Race! [trans]
|
||||
*[idx] 14 [engl] seconds [trans]
|
||||
*[idx] 15 [engl] Ok [trans]
|
||||
*[idx] 16 [engl] Congratulations! You won the cup!
|
||||
[trans]
|
||||
*[idx] 17 [engl] You have reached level [trans]
|
||||
*[idx] 18 [engl] Sorry, you didn't advance [trans]
|
||||
*[idx] 19 [engl] You don't have any lives left [trans]
|
||||
*[idx] 20 [engl] Select a race [trans]
|
||||
|
||||
*[idx] 21 [engl] Failed, -1 Tuxlive [trans]
|
||||
*[idx] 22 [engl] Success, +/- 0 Tuxlive [trans]
|
||||
*[idx] 23 [engl] Success, +1 Tuxlive [trans]
|
||||
*[idx] 24 [engl] Success, +2 Tuxlive [trans]
|
||||
*[idx] 25 [engl] Race aborted [trans]
|
||||
*[idx] 26 [engl] Score: [trans]
|
||||
*[idx] 27 [engl] points [trans]
|
||||
|
||||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
*[idx] 34 [engl] Sound volume: [trans]
|
||||
*[idx] 35 [engl] Language: [trans]
|
||||
*[idx] 36 [engl] Level of detail: [trans]
|
||||
*[idx] 37 [engl] Contributed by: [trans]
|
||||
*[idx] 38 [engl] Event: [trans]
|
||||
*[idx] 39 [engl] Cup: [trans]
|
||||
*[idx] 40 [engl] Race Over [trans]
|
||||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the
|
||||
[trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation.
|
||||
[trans]
|
|
@ -1,5 +1,4 @@
|
|||
# Please, don't change the idx
|
||||
# but you may change the order of the entries
|
||||
|
||||
*[idx] 0 [engl] PRESS ANY KEY TO START [trans]
|
||||
*[idx] 1 [engl] Enter an event [trans]
|
||||
|
@ -35,6 +34,7 @@
|
|||
*[idx] 28 [engl] Cancel [trans]
|
||||
*[idx] 29 [engl] Loading [trans]
|
||||
*[idx] 30 [engl] Please wait... [trans]
|
||||
|
||||
*[idx] 31 [engl] Fullscreen: [trans]
|
||||
*[idx] 32 [engl] Resolution: [trans]
|
||||
*[idx] 33 [engl] Music volume: [trans]
|
||||
|
@ -48,7 +48,6 @@
|
|||
|
||||
*[idx] 41 [engl] For more configuration options, please edit the [trans]
|
||||
*[idx] 42 [engl] file 'options.lst' and read the documentation. [trans]
|
||||
|
||||
*[idx] 43 [engl] Help [trans]
|
||||
*[idx] 44 [engl] 1, 2, 3 - change view mode [trans]
|
||||
*[idx] 45 [engl] F - hide/show fps display [trans]
|
||||
|
@ -64,3 +63,46 @@
|
|||
*[idx] 55 [engl] CRSR Up - accelerate [trans]
|
||||
*[idx] 56 [engl] CRSR down - brake [trans]
|
||||
*[idx] 57 [engl] Keyboard Functions [trans]
|
||||
*[idx] 65 [engl] Press any key to return to the main menu [trans]
|
||||
|
||||
*[idx] 58 [engl] Select your player name: [trans]
|
||||
*[idx] 59 [engl] Select a character: [trans]
|
||||
*[idx] 60 [engl] Enter [trans]
|
||||
*[idx] 61 [engl] Register a new player [trans]
|
||||
|
||||
*[idx] 62 [engl] Highscore list [trans]
|
||||
*[idx] 63 [engl] No entries for this race [trans]
|
||||
*[idx] 64 [engl] Back [trans]
|
||||
|
||||
*[idx] 66 [engl] Enter a name for the new player and select an avatar: [trans]
|
||||
|
||||
*[idx] 67 [engl] Loading resources, [trans]
|
||||
*[idx] 68 [engl] please wait [trans]
|
||||
|
||||
*[idx] 69 [engl] Mirror track: Off [trans]
|
||||
*[idx] 70 [engl] Mirror track: On [trans]
|
||||
|
||||
*[idx] 71 [engl] Light: Sunny [trans]
|
||||
*[idx] 72 [engl] Light: Cloudy [trans]
|
||||
*[idx] 73 [engl] Light: Evening [trans]
|
||||
*[idx] 74 [engl] Light: Night [trans]
|
||||
|
||||
*[idx] 75 [engl] Snow: No [trans]
|
||||
*[idx] 76 [engl] Snow: A little [trans]
|
||||
*[idx] 77 [engl] Snow: Some [trans]
|
||||
*[idx] 78 [engl] Snow: A lot [trans]
|
||||
|
||||
*[idx] 79 [engl] Wind: No [trans]
|
||||
*[idx] 80 [engl] Wind: Breeze [trans]
|
||||
*[idx] 81 [engl] Wind: Strong [trans]
|
||||
*[idx] 82 [engl] Wind: Blustery [trans]
|
||||
|
||||
*[idx] 83 [engl] Randomize settings [trans]
|
||||
|
||||
*[idx] 84 [engl] Score [trans]
|
||||
*[idx] 85 [engl] Herring [trans]
|
||||
*[idx] 86 [engl] Time [trans]
|
||||
*[idx] 87 [engl] Path length [trans]
|
||||
*[idx] 88 [engl] Average speed [trans]
|
||||
*[idx] 89 [engl] Position [trans]
|
||||
*[idx] 90 [engl] in highscore list [trans]
|
|
@ -162,18 +162,14 @@ void Message (const string& msg) {
|
|||
// file utils
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
bool FileExists (const char *filename) {
|
||||
bool FileExists(const string& filename) {
|
||||
struct stat stat_info;
|
||||
if (stat (filename, &stat_info) != 0) {
|
||||
if (stat(filename.c_str(), &stat_info) != 0) {
|
||||
if (errno != ENOENT) Message("couldn't stat ", filename);
|
||||
return false;
|
||||
} else return true;
|
||||
}
|
||||
|
||||
bool FileExists (const string& filename) {
|
||||
return FileExists (filename.c_str());
|
||||
}
|
||||
|
||||
bool FileExists(const string& dir, const string& filename) {
|
||||
return FileExists(dir + SEP + filename);
|
||||
}
|
||||
|
|
|
@ -95,7 +95,6 @@ void PrintQuaternion (const TQuaternion& q);
|
|||
// file utils
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
bool FileExists (const char *filename);
|
||||
bool FileExists(const string& filename);
|
||||
bool FileExists(const string& dir, const string& filename);
|
||||
bool DirExists(const char *dirname);
|
||||
|
|
|
@ -48,9 +48,6 @@ Then edit the below functions:
|
|||
#include "gui.h"
|
||||
#include "textures.h"
|
||||
#include "font.h"
|
||||
#include "translation.h"
|
||||
#include "course.h"
|
||||
#include "game_ctrl.h"
|
||||
#include "winsys.h"
|
||||
|
||||
CGameConfig GameConfig;
|
||||
|
@ -64,7 +61,6 @@ static TUpDown* sound_vol;
|
|||
static TUpDown* detail_level;
|
||||
static TWidget* textbuttons[2];
|
||||
|
||||
|
||||
void SetConfig() {
|
||||
if (mus_vol->GetValue() != param.music_volume ||
|
||||
sound_vol->GetValue() != param.sound_volume ||
|
||||
|
@ -92,7 +88,7 @@ void SetConfig () {
|
|||
Music.SetVolume(param.music_volume);
|
||||
param.sound_volume = sound_vol->GetValue();
|
||||
param.perf_level = detail_level->GetValue();
|
||||
Winsys.SetFonttype ();
|
||||
FT.SetFontFromSettings();
|
||||
if (param.language != language->GetValue()) {
|
||||
param.language = language->GetValue();
|
||||
Trans.LoadTranslations(param.language);
|
||||
|
@ -188,8 +184,6 @@ void CGameConfig::Loop (double time_step) {
|
|||
|
||||
Music.Update();
|
||||
|
||||
check_gl_error();
|
||||
Music.Update ();
|
||||
ScopedRenderMode rm(GUI);
|
||||
ClearRenderContext();
|
||||
SetupGuiDisplay();
|
||||
|
|
|
@ -79,7 +79,7 @@ TCourse* CCourse::GetCourse(const string& dir) {
|
|||
}
|
||||
|
||||
size_t CCourse::GetCourseIdx(const TCourse* course) const {
|
||||
size_t idx = (course - &CourseList[0]) / sizeof(TCourse);
|
||||
size_t idx = (course - &CourseList[0]);
|
||||
if (idx >= CourseList.size())
|
||||
return -1;
|
||||
return idx;
|
||||
|
@ -333,7 +333,8 @@ void CCourse::FreeObjectTextures () {
|
|||
bool CCourse::LoadElevMap() {
|
||||
CImage img;
|
||||
|
||||
if (!img.LoadPng (CourseDir.c_str(), "elev.png", true)) { Message ("unable to open elev.png");
|
||||
if (!img.LoadPng(CourseDir.c_str(), "elev.png", true)) {
|
||||
Message("unable to open elev.png");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -439,7 +440,8 @@ static void CalcRandomTrees (double baseheight, double basediam, double &height,
|
|||
bool CCourse::LoadAndConvertObjectMap() {
|
||||
CImage treeImg;
|
||||
|
||||
if (!treeImg.LoadPng (CourseDir.c_str(), "trees.png", true)) { Message ("unable to open trees.png");
|
||||
if (!treeImg.LoadPng(CourseDir.c_str(), "trees.png", true)) {
|
||||
Message("unable to open trees.png");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -606,7 +608,8 @@ bool CCourse::LoadTerrainTypes () {
|
|||
bool CCourse::LoadTerrainMap() {
|
||||
CImage terrImage;
|
||||
|
||||
if (!terrImage.LoadPng (CourseDir.c_str(), "terrain.png", true)) { Message ("unable to open terrain.png");
|
||||
if (!terrImage.LoadPng(CourseDir.c_str(), "terrain.png", true)) {
|
||||
Message("unable to open terrain.png");
|
||||
return false;
|
||||
}
|
||||
if (nx != terrImage.nx || ny != terrImage.ny) {
|
||||
|
|
21
src/course.h
21
src/course.h
|
@ -73,24 +73,27 @@ struct TObjectType {
|
|||
int poly;
|
||||
};
|
||||
|
||||
struct TCollidable {
|
||||
struct TObject {
|
||||
TVector3d pt;
|
||||
double height;
|
||||
double diam;
|
||||
size_t tree_type;
|
||||
TCollidable(double x, double y, double z, double height_, double diam_, size_t type)
|
||||
: pt(x, y, z), height(height_), diam(diam_), tree_type(type)
|
||||
TObject(double x, double y, double z, double height_, double diam_)
|
||||
: pt(x, y, z), height(height_), diam(diam_)
|
||||
{}
|
||||
};
|
||||
|
||||
struct TItem {
|
||||
TVector3d pt;
|
||||
double height;
|
||||
double diam;
|
||||
struct TCollidable : public TObject {
|
||||
size_t tree_type;
|
||||
TCollidable(double x, double y, double z, double height_, double diam_, size_t type)
|
||||
: TObject(x, y, z, height_, diam_), tree_type(type)
|
||||
{}
|
||||
};
|
||||
|
||||
struct TItem : public TObject {
|
||||
int collectable;
|
||||
const TObjectType& type;
|
||||
TItem(double x, double y, double z, double height_, double diam_, const TObjectType& type_)
|
||||
: pt(x, y, z), height(height_), diam(diam_), collectable(type_.collectable), type(type_)
|
||||
: TObject(x, y, z, height_, diam_), collectable(type_.collectable), type(type_)
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
@ -69,26 +69,23 @@ void DrawTrees() {
|
|||
|
||||
|
||||
// -------------- trees ------------------------
|
||||
TCollidable* treeLocs = &Course.CollArr[0];
|
||||
size_t numTrees = Course.CollArr.size();
|
||||
|
||||
for (size_t i = 0; i< numTrees; i++) {
|
||||
for (size_t i = 0; i< Course.CollArr.size(); i++) {
|
||||
if (clip_course) {
|
||||
if (ctrl->viewpos.z - treeLocs[i].pt.z > fwd_clip_limit) continue;
|
||||
if (treeLocs[i].pt.z - ctrl->viewpos.z > bwd_clip_limit) continue;
|
||||
if (ctrl->viewpos.z - Course.CollArr[i].pt.z > fwd_clip_limit) continue;
|
||||
if (Course.CollArr[i].pt.z - ctrl->viewpos.z > bwd_clip_limit) continue;
|
||||
}
|
||||
|
||||
if (treeLocs[i].tree_type != tree_type) {
|
||||
tree_type = treeLocs[i].tree_type;
|
||||
if (Course.CollArr[i].tree_type != tree_type) {
|
||||
tree_type = Course.CollArr[i].tree_type;
|
||||
object_types[tree_type].texture->Bind();
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
glTranslate(treeLocs[i].pt);
|
||||
glTranslate(Course.CollArr[i].pt);
|
||||
if (param.perf_level > 1) glRotatef(1, 0, 1, 0);
|
||||
|
||||
float treeRadius = treeLocs[i].diam / 2.0;
|
||||
float treeHeight = treeLocs[i].height;
|
||||
float treeRadius = Course.CollArr[i].diam / 2.0;
|
||||
float treeHeight = Course.CollArr[i].height;
|
||||
glNormal3i(0, 0, 1);
|
||||
|
||||
static const GLshort tex[] = {
|
||||
|
@ -127,32 +124,30 @@ void DrawTrees() {
|
|||
}
|
||||
|
||||
// items -----------------------------
|
||||
TItem* itemLocs = &Course.NocollArr[0];
|
||||
size_t numItems = Course.NocollArr.size();
|
||||
const TObjectType* item_type = NULL;
|
||||
|
||||
for (size_t i = 0; i< numItems; i++) {
|
||||
if (itemLocs[i].collectable == 0 || itemLocs[i].type.drawable == false) continue;
|
||||
for (size_t i = 0; i< Course.NocollArr.size(); i++) {
|
||||
if (Course.NocollArr[i].collectable == 0 || Course.NocollArr[i].type.drawable == false) continue;
|
||||
if (clip_course) {
|
||||
if (ctrl->viewpos.z - itemLocs[i].pt.z > fwd_clip_limit) continue;
|
||||
if (itemLocs[i].pt.z - ctrl->viewpos.z > bwd_clip_limit) continue;
|
||||
if (ctrl->viewpos.z - Course.NocollArr[i].pt.z > fwd_clip_limit) continue;
|
||||
if (Course.NocollArr[i].pt.z - ctrl->viewpos.z > bwd_clip_limit) continue;
|
||||
}
|
||||
|
||||
if (&itemLocs[i].type != item_type) {
|
||||
item_type = &itemLocs[i].type;
|
||||
if (&Course.NocollArr[i].type != item_type) {
|
||||
item_type = &Course.NocollArr[i].type;
|
||||
item_type->texture->Bind();
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
glTranslate(itemLocs[i].pt);
|
||||
double itemRadius = itemLocs[i].diam / 2;
|
||||
double itemHeight = itemLocs[i].height;
|
||||
glTranslate(Course.NocollArr[i].pt);
|
||||
double itemRadius = Course.NocollArr[i].diam / 2;
|
||||
double itemHeight = Course.NocollArr[i].height;
|
||||
|
||||
TVector3d normal;
|
||||
if (item_type->use_normal) {
|
||||
normal = item_type->normal;
|
||||
} else {
|
||||
normal = ctrl->viewpos - itemLocs[i].pt;
|
||||
normal = ctrl->viewpos - Course.NocollArr[i].pt;
|
||||
normal.Norm();
|
||||
}
|
||||
glNormal3(normal);
|
||||
|
|
|
@ -133,11 +133,17 @@ void CCredits::Motion(int x, int y) {
|
|||
}
|
||||
|
||||
void CCredits::Enter() {
|
||||
LoadCreditList();
|
||||
|
||||
Music.Play(param.credits_music, -1);
|
||||
y_offset = 0;
|
||||
moving = true;
|
||||
}
|
||||
|
||||
void CCredits::Exit() {
|
||||
CreditList.clear();
|
||||
}
|
||||
|
||||
void CCredits::Loop(double time_step) {
|
||||
int ww = Winsys.resolution.width;
|
||||
int hh = Winsys.resolution.height;
|
||||
|
|
|
@ -36,6 +36,7 @@ class CCredits : public State {
|
|||
|
||||
void DrawCreditsText(double time_step);
|
||||
void Enter();
|
||||
void Exit();
|
||||
void Loop(double time_step);
|
||||
void Keyb(unsigned int key, bool special, bool release, int x, int y);
|
||||
void Mouse(int button, int state, int x, int y);
|
||||
|
|
|
@ -78,17 +78,17 @@ struct TGameData {
|
|||
|
||||
// course and race params
|
||||
TPlayer* player;
|
||||
TCharacter* character;
|
||||
size_t start_player;
|
||||
TCup* cup;
|
||||
bool mirrorred;
|
||||
TCharacter* character;
|
||||
TRace* race; // Only valid if not in practice mode
|
||||
TCourse* course;
|
||||
bool mirrorred;
|
||||
size_t location_id;
|
||||
size_t light_id;
|
||||
int snow_id;
|
||||
int wind_id;
|
||||
size_t theme_id;
|
||||
TRace* race; // Only valid if not in practice mode
|
||||
|
||||
// race results (better in player.ctrl ?)
|
||||
double time; // reached time
|
||||
|
|
|
@ -179,7 +179,6 @@ void CEvent::Loop (double timestep) {
|
|||
int ww = Winsys.resolution.width;
|
||||
int hh = Winsys.resolution.height;
|
||||
|
||||
check_gl_error();
|
||||
ScopedRenderMode rm(GUI);
|
||||
Music.Update();
|
||||
ClearRenderContext();
|
||||
|
|
|
@ -117,7 +117,6 @@ void CEventSelect::Loop (double timestep) {
|
|||
int hh = Winsys.resolution.height;
|
||||
TColor col;
|
||||
|
||||
check_gl_error();
|
||||
ScopedRenderMode rm(GUI);
|
||||
Music.Update();
|
||||
ClearRenderContext();
|
||||
|
|
|
@ -200,6 +200,13 @@ void CFont::SetFont (const string& fontname) {
|
|||
else curr_fact = 1.0;
|
||||
}
|
||||
|
||||
void CFont::SetFontFromSettings() {
|
||||
if (param.use_papercut_font > 0)
|
||||
SetFont("pc20");
|
||||
else
|
||||
SetFont("bold");
|
||||
}
|
||||
|
||||
// -------------------- auto ------------------------------------------
|
||||
|
||||
int CFont::AutoSizeN(int rel_val) {
|
||||
|
|
|
@ -65,6 +65,7 @@ public:
|
|||
void SetColor(const TColor& col) { curr_col = col; }
|
||||
void SetSize(float size) { curr_size = size; }
|
||||
void SetFont(const string& fontname);
|
||||
void SetFontFromSettings();
|
||||
|
||||
// auto
|
||||
int AutoSizeN(int rel_val); // rel_val = relative size, return: autosize
|
||||
|
|
|
@ -64,7 +64,7 @@ void LoadConfigFile () {
|
|||
param.res_type = SPIntN(line, "res_type", 0);
|
||||
param.framerate = SPIntN(line, "framerate", 60);
|
||||
param.perf_level = SPIntN(line, "detail_level", 3);
|
||||
param.language = SPIntN (line, "language", 0);
|
||||
param.language = Trans.GetLangIdx(SPStrN(line, "language", "EN_en"));
|
||||
param.sound_volume = SPIntN(line, "sound_volume", 100);
|
||||
param.music_volume = SPIntN(line, "music_volume", 20);
|
||||
|
||||
|
@ -168,9 +168,9 @@ void SaveConfigFile () {
|
|||
AddIntItem(liste, "detail_level", param.perf_level);
|
||||
liste.AddLine();
|
||||
|
||||
AddComment (liste, "Language code [0...]");
|
||||
AddComment (liste, "0 = English etc.");
|
||||
AddIntItem (liste, "language", (int)param.language);
|
||||
AddComment(liste, "Language code");
|
||||
AddComment(liste, "en_GB = English etc.");
|
||||
AddItem(liste, "language", Trans.languages[param.language].lang);
|
||||
liste.AddLine();
|
||||
|
||||
AddComment(liste, "Sound volume [0...120]");
|
||||
|
@ -282,7 +282,7 @@ void SaveConfigFile () {
|
|||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
void InitConfig (const char *arg0) {
|
||||
void InitConfig() {
|
||||
#if defined (OS_WIN32_MINGW) || defined (OS_WIN32_MSC)
|
||||
// the progdir is always the current dir
|
||||
param.config_dir = "config";
|
||||
|
@ -309,7 +309,7 @@ void InitConfig (const char *arg0) {
|
|||
struct passwd *pwent = getpwuid(getuid());
|
||||
param.config_dir = pwent->pw_dir;
|
||||
param.config_dir += SEP;
|
||||
param.config_dir += CONFIG_DIR;
|
||||
param.config_dir += ".etr";
|
||||
// or: param.config_dir = param.prog_dir + SEP "config";
|
||||
if (!DirExists(param.config_dir.c_str()))
|
||||
mkdir(param.config_dir.c_str(), 0775);
|
||||
|
@ -338,6 +338,8 @@ void InitConfig (const char *arg0) {
|
|||
param.display_fps = false;
|
||||
param.show_hud = true;
|
||||
|
||||
Trans.LoadLanguages();
|
||||
|
||||
if (FileExists(param.configfile)) {
|
||||
LoadConfigFile();
|
||||
} else {
|
||||
|
|
|
@ -19,9 +19,6 @@ GNU General Public License for more details.
|
|||
|
||||
#include "bh.h"
|
||||
|
||||
#define CONFIG_DIR ".etr"
|
||||
#define PLAYER_FILE "players"
|
||||
|
||||
struct TParam {
|
||||
// defined at runtime:
|
||||
// string prog_dir;
|
||||
|
@ -78,7 +75,7 @@ struct TParam {
|
|||
TViewMode view_mode;
|
||||
};
|
||||
|
||||
void InitConfig (const char *arg0);
|
||||
void InitConfig();
|
||||
void SaveConfigFile();
|
||||
|
||||
extern TParam param;
|
||||
|
|
|
@ -43,7 +43,7 @@ GNU General Public License for more details.
|
|||
CGameOver GameOver;
|
||||
|
||||
static CKeyframe *final_frame;
|
||||
static int highscore_pos = 999;
|
||||
static int highscore_pos = MAX_SCORES;
|
||||
|
||||
void QuitGameOver() {
|
||||
if (g_game.game_type == PRACTICING) {
|
||||
|
@ -79,6 +79,8 @@ void GameOverMessage (const CControl *ctrl) {
|
|||
FT.SetColor(colDBlue);
|
||||
FT.DrawString(CENTER, topframe+30, Trans.Text(25));
|
||||
} else {
|
||||
int firstMarker = leftframe + 60;
|
||||
int secondMarker = leftframe + 310;
|
||||
DrawFrameX(leftframe, topframe, fwidth, 210, 4, backcol, framecol, 0.5);
|
||||
|
||||
if (param.use_papercut_font > 0) FT.SetSize(20);
|
||||
|
@ -86,24 +88,24 @@ void GameOverMessage (const CControl *ctrl) {
|
|||
if (g_game.race_result >= 0 || g_game.game_type != CUPRACING) FT.SetColor(colDBlue);
|
||||
else FT.SetColor(colDRed);
|
||||
|
||||
string line = "Score: ";
|
||||
FT.DrawString (leftframe+80, topframe+15, line);
|
||||
string line = Trans.Text(86) + ": ";
|
||||
FT.DrawString(firstMarker, topframe + 15, line);
|
||||
line = Int_StrN(g_game.score);
|
||||
line += " pts";
|
||||
FT.DrawString (leftframe+240, topframe+15, line);
|
||||
FT.DrawString(secondMarker, topframe + 15, line);
|
||||
|
||||
line = "Herring: ";
|
||||
FT.DrawString (leftframe+80, topframe+40, line);
|
||||
line = Trans.Text(87) + ": ";
|
||||
FT.DrawString(firstMarker, topframe + 40, line);
|
||||
line = Int_StrN(g_game.herring);
|
||||
if (g_game.game_type == CUPRACING) {
|
||||
line += " (";
|
||||
line += Int_StrN(g_game.race->herrings.x);
|
||||
line += ")";
|
||||
}
|
||||
FT.DrawString (leftframe+240, topframe+40, line);
|
||||
FT.DrawString(secondMarker, topframe + 40, line);
|
||||
|
||||
line = "Time: ";
|
||||
FT.DrawString (leftframe+80, topframe+65, line);
|
||||
line = Trans.Text(88) + ": ";
|
||||
FT.DrawString(firstMarker, topframe + 65, line);
|
||||
line = Float_StrN(g_game.time, 2);
|
||||
line += " s";
|
||||
if (g_game.game_type == CUPRACING) {
|
||||
|
@ -111,19 +113,19 @@ void GameOverMessage (const CControl *ctrl) {
|
|||
line += Float_StrN(g_game.race->time.x, 2);
|
||||
line += ")";
|
||||
}
|
||||
FT.DrawString (leftframe+240, topframe+65, line);
|
||||
FT.DrawString(secondMarker, topframe + 65, line);
|
||||
|
||||
line = "Path length: ";
|
||||
FT.DrawString (leftframe+80, topframe+90, line);
|
||||
line = Trans.Text(89) + ": ";
|
||||
FT.DrawString(firstMarker, topframe + 90, line);
|
||||
line = Float_StrN(ctrl->way, 2);
|
||||
line += " m";
|
||||
FT.DrawString (leftframe+240, topframe+90, line);
|
||||
FT.DrawString(secondMarker, topframe + 90, line);
|
||||
|
||||
line = "Average speed: ";
|
||||
FT.DrawString (leftframe+80, topframe+115, line);
|
||||
line = Trans.Text(90) + ": ";
|
||||
FT.DrawString(firstMarker, topframe + 115, line);
|
||||
line = Float_StrN(ctrl->way / g_game.time * 3.6, 2);
|
||||
line += " km/h";
|
||||
FT.DrawString (leftframe+240, topframe+115, line);
|
||||
FT.DrawString(secondMarker, topframe + 115, line);
|
||||
|
||||
if (param.use_papercut_font > 0) FT.SetSize(28);
|
||||
else FT.SetSize(22);
|
||||
|
@ -143,10 +145,10 @@ void GameOverMessage (const CControl *ctrl) {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
if (highscore_pos < 5) {
|
||||
line = "Position ";
|
||||
if (highscore_pos < MAX_SCORES) {
|
||||
line = Trans.Text(91) + ' ';
|
||||
line += Int_StrN(highscore_pos + 1);
|
||||
line += " in highscore list";
|
||||
line += ' ' + Trans.Text(92);
|
||||
FT.DrawString(CENTER, topframe+150, line);
|
||||
}
|
||||
}
|
||||
|
@ -155,8 +157,6 @@ void GameOverMessage (const CControl *ctrl) {
|
|||
|
||||
// =========================================================================
|
||||
void CGameOver::Enter() {
|
||||
Sound.HaltAll ();
|
||||
|
||||
if (!g_game.raceaborted) highscore_pos = Score.CalcRaceResult();
|
||||
|
||||
if (g_game.game_type == CUPRACING) {
|
||||
|
@ -196,7 +196,6 @@ void CGameOver::Loop(double time_step) {
|
|||
CControl *ctrl = g_game.player->ctrl;
|
||||
int width = Winsys.resolution.width;
|
||||
int height = Winsys.resolution.height;
|
||||
check_gl_error();
|
||||
|
||||
Music.Update();
|
||||
|
||||
|
|
|
@ -124,7 +124,6 @@ void CGameTypeSelect::Loop (double time_step) {
|
|||
int ww = Winsys.resolution.width;
|
||||
int hh = Winsys.resolution.height;
|
||||
|
||||
check_gl_error();
|
||||
Music.Update();
|
||||
ScopedRenderMode rm(GUI);
|
||||
ClearRenderContext();
|
||||
|
|
|
@ -54,7 +54,6 @@ void CHelp::Enter() {
|
|||
|
||||
void CHelp::Loop(double timestep) {
|
||||
Music.Update();
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
ScopedRenderMode rm(GUI);
|
||||
SetupGuiDisplay();
|
||||
|
|
|
@ -65,8 +65,8 @@ static void draw_time() {
|
|||
timestr += secstr;
|
||||
|
||||
if (param.use_papercut_font < 2) {
|
||||
Tex.DrawNumStr (timestr, 20, 10, 1, colWhite);
|
||||
Tex.DrawNumStr (hundrstr, 136, 10, 0.7, colWhite);
|
||||
Tex.DrawNumStr(timestr, 50, 12, 1, colWhite);
|
||||
Tex.DrawNumStr(hundrstr, 170, 12, 0.7, colWhite);
|
||||
} else {
|
||||
|
||||
/*
|
||||
|
|
|
@ -95,7 +95,6 @@ void CIntro::Loop (double time_step) {
|
|||
CControl *ctrl = g_game.player->ctrl;
|
||||
int width = Winsys.resolution.width;
|
||||
int height = Winsys.resolution.height;
|
||||
check_gl_error();
|
||||
|
||||
if (startframe->active) {
|
||||
startframe->Update(time_step);
|
||||
|
|
|
@ -46,7 +46,6 @@ void CLoading::Loop(double time_step) {
|
|||
int ww = Winsys.resolution.width;
|
||||
int hh = Winsys.resolution.height;
|
||||
string msg = Trans.Text(29) + " " + g_game.course->name;
|
||||
check_gl_error ();
|
||||
ScopedRenderMode rm(GUI);
|
||||
ClearRenderContext();
|
||||
SetupGuiDisplay();
|
||||
|
@ -56,7 +55,7 @@ void CLoading::Loop(double time_step) {
|
|||
draw_ui_snow();
|
||||
}
|
||||
|
||||
Tex.Draw (TEXLOGO, CENTER, 40, 0.7);
|
||||
Tex.Draw(TEXLOGO, CENTER, 40, 0.6);
|
||||
Tex.Draw(BOTTOM_LEFT, 0, hh-256, 1);
|
||||
Tex.Draw(BOTTOM_RIGHT, ww-256, hh-256, 1);
|
||||
Tex.Draw(TOP_LEFT, 0, 0, 1);
|
||||
|
|
|
@ -55,7 +55,7 @@ void InitGame (int argc, char **argv) {
|
|||
g_game.snow_id = 0;
|
||||
g_game.cup = 0;
|
||||
g_game.theme_id = 0;
|
||||
g_game.force_treemap = 0;
|
||||
g_game.force_treemap = false;
|
||||
g_game.treesize = 3;
|
||||
g_game.treevar = 3;
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ int main( int argc, char **argv ) {
|
|||
cout << "\n----------- (C) 2010-2013 Extreme Tuxracer Team --------\n\n";
|
||||
|
||||
srand(time(NULL));
|
||||
InitConfig (argv[0]);
|
||||
InitConfig();
|
||||
InitGame(argc, argv);
|
||||
Winsys.Init();
|
||||
InitOpenglExtensions();
|
||||
|
@ -86,7 +86,7 @@ int main( int argc, char **argv ) {
|
|||
// theses resources must or should be loaded before splashscreen starts
|
||||
Tex.LoadTextureList();
|
||||
FT.LoadFontlist();
|
||||
Winsys.SetFonttype ();
|
||||
FT.SetFontFromSettings();
|
||||
Audio.Open();
|
||||
Music.LoadMusicList();
|
||||
Music.SetVolume(param.music_volume);
|
||||
|
|
|
@ -112,7 +112,6 @@ void CNewPlayer::Loop(double timestep) {
|
|||
TColor col;
|
||||
|
||||
Music.Update();
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
ScopedRenderMode rm(GUI);
|
||||
SetupGuiDisplay();
|
||||
|
|
|
@ -509,6 +509,10 @@ void glTexCoord2(const TVector2d& vec) {
|
|||
glTexCoord2d(vec.x, vec.y);
|
||||
}
|
||||
|
||||
void glLoadMatrix(const TMatrix<4, 4>& mat) {
|
||||
glLoadMatrixd((const double*) mat.data());
|
||||
}
|
||||
|
||||
void glMultMatrix(const TMatrix<4, 4>& mat) {
|
||||
glMultMatrixd((const double*) mat.data());
|
||||
}
|
||||
|
|
|
@ -79,6 +79,7 @@ void glNormal3(const TVector3d& vec);
|
|||
void glVertex3(const TVector3d& vec);
|
||||
void glTexCoord2(const TVector2d& vec);
|
||||
|
||||
void glLoadMatrix(const TMatrix<4, 4>& mat);
|
||||
void glMultMatrix(const TMatrix<4, 4>& mat);
|
||||
|
||||
|
||||
|
|
|
@ -57,8 +57,6 @@ void COglTest::Enter() {
|
|||
}
|
||||
|
||||
void COglTest::Loop(double timestep) {
|
||||
check_gl_error();
|
||||
|
||||
// ------------- 3d scenery ---------------------------------------
|
||||
ScopedRenderMode rm(TUX);
|
||||
ClearRenderContext(colDDBackgr);
|
||||
|
|
|
@ -37,7 +37,7 @@ GNU General Public License for more details.
|
|||
// ====================================================================
|
||||
|
||||
#define MAX_num_snowparticles 4000
|
||||
#define BASE_num_snowparticles 1000
|
||||
#define BASE_snowparticles 1000.0/1024 // This is intentionally not divided by height*width to make particle count increasing slower than screen size
|
||||
#define GRAVITY_FACTOR 0.015
|
||||
#define BASE_VELOCITY 0.05
|
||||
#define VELOCITY_RANGE 0.02
|
||||
|
@ -146,7 +146,8 @@ void TGuiParticle::Update(double time_step, double push_timestep, const TVector2
|
|||
}
|
||||
|
||||
void init_ui_snow() {
|
||||
for (int i=0; i<BASE_num_snowparticles; i++)
|
||||
particles_2d.clear();
|
||||
for (int i = 0; i < BASE_snowparticles * Winsys.resolution.width; i++)
|
||||
particles_2d.push_back(TGuiParticle(FRandom(), FRandom()));
|
||||
push_position = TVector2d(0.0, 0.0);
|
||||
}
|
||||
|
@ -175,7 +176,7 @@ void update_ui_snow(double time_step) {
|
|||
|
||||
for (list<TGuiParticle>::iterator p = particles_2d.begin(); p != particles_2d.end();) {
|
||||
if (p->pt.y < -0.05) {
|
||||
if (particles_2d.size() > BASE_num_snowparticles && FRandom() > 0.2) {
|
||||
if (particles_2d.size() > BASE_snowparticles * Winsys.resolution.width && FRandom() > 0.2) {
|
||||
p = particles_2d.erase(p);
|
||||
} else {
|
||||
p->pt.x = FRandom();
|
||||
|
|
|
@ -75,7 +75,6 @@ void CPaused::Loop (double time_step) {
|
|||
CControl *ctrl = g_game.player->ctrl;
|
||||
int width = Winsys.resolution.width;
|
||||
int height = Winsys.resolution.height;
|
||||
check_gl_error();
|
||||
|
||||
Music.Update();
|
||||
ClearRenderContext();
|
||||
|
|
|
@ -100,36 +100,28 @@ void CControl::Init () {
|
|||
// collision
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
bool CControl::CheckTreeCollisions (const TVector3d& pos, TVector3d *tree_loc, double *tree_diam) {
|
||||
bool CControl::CheckTreeCollisions(const TVector3d& pos, TVector3d *tree_loc) {
|
||||
// These variables are used to cache collision detection results
|
||||
static bool last_collision = false;
|
||||
static TVector3d last_collision_tree_loc(-999, -999, -999);
|
||||
static double last_collision_tree_diam = 0;
|
||||
static TVector3d last_collision_pos(-999, -999, -999);
|
||||
|
||||
TVector3d dist_vec = pos - last_collision_pos;
|
||||
if (MAG_SQD(dist_vec) < COLL_TOLERANCE) {
|
||||
if (last_collision && !cairborne) {
|
||||
if (tree_loc != NULL) *tree_loc = last_collision_tree_loc;
|
||||
if (tree_diam != NULL) *tree_diam = last_collision_tree_diam;
|
||||
return true;
|
||||
} else return false;
|
||||
}
|
||||
|
||||
double diam = 0.0;
|
||||
TVector3d loc(0, 0, 0);
|
||||
bool hit = false;
|
||||
TMatrix<4, 4> mat;
|
||||
|
||||
TCollidable *trees = &Course.CollArr[0];
|
||||
size_t num_trees = Course.CollArr.size();
|
||||
size_t tree_type = trees[0].tree_type;
|
||||
const TPolyhedron* ph = &Course.GetPoly (tree_type);
|
||||
|
||||
for (size_t i=0; i<num_trees; i++) {
|
||||
diam = trees[i].diam;
|
||||
double height = trees[i].height;
|
||||
loc = trees[i].pt;
|
||||
for (size_t i = 0; i<Course.CollArr.size(); i++) {
|
||||
double diam = Course.CollArr[i].diam;
|
||||
double height = Course.CollArr[i].height;
|
||||
loc = Course.CollArr[i].pt;
|
||||
TVector3d distvec(loc.x - pos.x, 0.0, loc.z - pos.z);
|
||||
|
||||
// check distance from tree; .6 is the radius of a bounding sphere
|
||||
|
@ -137,42 +129,31 @@ bool CControl::CheckTreeCollisions (const TVector3d& pos, TVector3d *tree_loc, d
|
|||
squared_dist *= squared_dist;
|
||||
if (MAG_SQD(distvec) > squared_dist) continue;
|
||||
|
||||
// have to look at polyhedron - switch to correct one if necessary
|
||||
if (tree_type != trees[i].tree_type) {
|
||||
tree_type = trees[i].tree_type;
|
||||
ph = &Course.GetPoly (tree_type);
|
||||
}
|
||||
|
||||
TPolyhedron ph2 = *ph;
|
||||
TPolyhedron ph2 = Course.GetPoly(Course.CollArr[i].tree_type);
|
||||
mat.SetScalingMatrix(diam, height, diam);
|
||||
TransPolyhedron(mat, ph2);
|
||||
mat.SetTranslationMatrix(loc.x, loc.y, loc.z);
|
||||
TransPolyhedron(mat, ph2);
|
||||
// hit = TuxCollision2 (pos, ph2);
|
||||
hit = g_game.character->shape->Collision(pos, ph2);
|
||||
|
||||
hit = g_game.character->shape->Collision(pos, ph2);
|
||||
if (hit == true) {
|
||||
if (tree_loc != NULL) *tree_loc = loc;
|
||||
if (tree_diam != NULL) *tree_diam = diam;
|
||||
Sound.Play("tree_hit", 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
last_collision_tree_loc = loc;
|
||||
last_collision_tree_diam = diam;
|
||||
last_collision_pos = pos;
|
||||
last_collision = hit;
|
||||
|
||||
if (hit) last_collision = true;
|
||||
else last_collision = false;
|
||||
return hit;
|
||||
}
|
||||
|
||||
void CControl::AdjustTreeCollision(const TVector3d& pos, TVector3d *vel) {
|
||||
TVector3d treeLoc;
|
||||
double tree_diam;
|
||||
|
||||
if (CheckTreeCollisions (pos, &treeLoc, &tree_diam)) {
|
||||
if (CheckTreeCollisions(pos, &treeLoc)) {
|
||||
TVector3d treeNml(
|
||||
pos.x - treeLoc.x,
|
||||
0,
|
||||
|
@ -196,10 +177,6 @@ void CControl::AdjustTreeCollision (const TVector3d& pos, TVector3d *vel) {
|
|||
}
|
||||
|
||||
void CControl::CheckItemCollection(const TVector3d& pos) {
|
||||
static TVector3d last_collision_pos(-999, -999, -999);
|
||||
TVector3d dist_vec = pos - last_collision_pos;
|
||||
if (MAG_SQD (dist_vec) < COLL_TOLERANCE) return;
|
||||
|
||||
TItem *items = &Course.NocollArr[0];
|
||||
size_t num_items = Course.NocollArr.size();
|
||||
|
||||
|
@ -210,17 +187,12 @@ void CControl::CheckItemCollection (const TVector3d& pos) {
|
|||
double height = items[i].height;
|
||||
const TVector3d& loc = items[i].pt;
|
||||
|
||||
TVector3d distvec(loc.x - pos.x, 0.0, loc.z - pos.z);
|
||||
double squared_dist = (diam / 2. + 0.6);
|
||||
TVector3d distvec(loc.x - pos.x, loc.y - pos.y, loc.z - pos.z);
|
||||
double squared_dist = (diam / 2. + 0.7);
|
||||
squared_dist *= squared_dist;
|
||||
if (MAG_SQD (distvec) > squared_dist) continue;
|
||||
|
||||
if ((pos.y - 0.6 >= loc.y && pos.y - 0.6 <= loc.y + height) ||
|
||||
(pos.y + 0.6 >= loc.y && pos.y + 0.6 <= loc.y + height) ||
|
||||
(pos.y - 0.6 <= loc.y && pos.y + 0.6 >= loc.y + height)) {
|
||||
if (MAG_SQD(distvec) <= squared_dist) { // Check collision using a bounding sphere
|
||||
items[i].collectable = 0;
|
||||
g_game.herring += 1;
|
||||
Sound.HaltAll ();
|
||||
Sound.Play("pickup1", 0);
|
||||
Sound.Play("pickup2", 0);
|
||||
Sound.Play("pickup3", 0);
|
||||
|
|
|
@ -81,7 +81,7 @@ private:
|
|||
double ode_time_step;
|
||||
double finish_speed;
|
||||
|
||||
bool CheckTreeCollisions (const TVector3d& pos, TVector3d *tree_loc, double *tree_diam);
|
||||
bool CheckTreeCollisions(const TVector3d& pos, TVector3d *tree_loc);
|
||||
void AdjustTreeCollision(const TVector3d& pos, TVector3d *vel);
|
||||
void CheckItemCollection(const TVector3d& pos);
|
||||
|
||||
|
|
|
@ -169,7 +169,8 @@ void CRaceSelect::Enter() {
|
|||
snow = AddIconButton(iconleft + iconspace, icontop, Tex.GetTexture(SNOW_BUTT), iconsize, 3, g_game.snow_id);
|
||||
wind = AddIconButton(iconleft + iconspace*2, icontop, Tex.GetTexture(WIND_BUTT), iconsize, 3, g_game.wind_id);
|
||||
mirror = AddIconButton(iconleft + iconspace*3, icontop, Tex.GetTexture(MIRROR_BUTT), iconsize, 1, (int)g_game.mirrorred);
|
||||
random_btn = AddIconButton (iconleft + iconspace*4, icontop, Tex.GetTexture (RANDOM_BUTT), iconsize, 0, 0); int siz = FT.AutoSizeN (5);
|
||||
random_btn = AddIconButton(iconleft + iconspace*4, icontop, Tex.GetTexture(RANDOM_BUTT), iconsize, 0, 0);
|
||||
int siz = FT.AutoSizeN(5);
|
||||
int len1 = FT.GetTextWidth(Trans.Text(13));
|
||||
textbuttons[0] = AddTextButton(Trans.Text(13), area.right-len1-50, AutoYPosN(80), siz);
|
||||
textbuttons[1] = AddTextButton(Trans.Text(8), area.left + 50, AutoYPosN(80), siz);
|
||||
|
@ -180,7 +181,6 @@ void CRaceSelect::Loop(double timestep) {
|
|||
int hh = Winsys.resolution.height;
|
||||
TColor col;
|
||||
|
||||
check_gl_error();
|
||||
ScopedRenderMode rm(GUI);
|
||||
ClearRenderContext();
|
||||
SetupGuiDisplay();
|
||||
|
|
|
@ -201,7 +201,7 @@ void CRacing::Enter() {
|
|||
if (param.view_mode < 0 || param.view_mode >= NUM_VIEW_MODES) {
|
||||
param.view_mode = ABOVE;
|
||||
}
|
||||
set_view_mode (ctrl, (TViewMode)param.view_mode);
|
||||
set_view_mode(ctrl, param.view_mode);
|
||||
left_turn = right_turn = trick_modifier = false;
|
||||
|
||||
ctrl->turn_fact = 0.0;
|
||||
|
@ -343,7 +343,6 @@ void CRacing::Loop (double time_step) {
|
|||
double ycoord = Course.FindYCoord(ctrl->cpos.x, ctrl->cpos.z);
|
||||
bool airborne = (bool)(ctrl->cpos.y > (ycoord + JUMP_MAX_START_HEIGHT));
|
||||
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
Env.SetupFog();
|
||||
Music.Update();
|
||||
|
|
|
@ -112,7 +112,6 @@ void CRegist::Loop (double timestep) {
|
|||
int ww = Winsys.resolution.width;
|
||||
int hh = Winsys.resolution.height;
|
||||
Music.Update();
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
ScopedRenderMode rm(GUI);
|
||||
SetupGuiDisplay();
|
||||
|
|
|
@ -55,7 +55,6 @@ void CReset::Loop(double time_step) {
|
|||
static bool tux_visible = true;
|
||||
static int tux_visible_count = 0;
|
||||
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
Env.SetupFog();
|
||||
ctrl->UpdatePlayerPos(EPS);
|
||||
|
|
|
@ -248,7 +248,6 @@ void CScore::Loop (double timestep) {
|
|||
int hh = Winsys.resolution.height;
|
||||
|
||||
Music.Update();
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
ScopedRenderMode rm(GUI);
|
||||
SetupGuiDisplay();
|
||||
|
|
|
@ -25,10 +25,8 @@ GNU General Public License for more details.
|
|||
#include "audio.h"
|
||||
#include "gui.h"
|
||||
#include "course.h"
|
||||
#include "tux.h"
|
||||
#include "env.h"
|
||||
#include "particles.h"
|
||||
#include "credits.h"
|
||||
#include "font.h"
|
||||
#include "game_ctrl.h"
|
||||
#include "translation.h"
|
||||
|
@ -53,31 +51,30 @@ void CSplashScreen::Keyb(unsigned int key, bool special, bool release, int x, in
|
|||
|
||||
void CSplashScreen::Enter() {
|
||||
Winsys.ShowCursor(!param.ice_cursor);
|
||||
init_ui_snow ();
|
||||
Music.Play(param.menu_music, -1);
|
||||
}
|
||||
|
||||
void CSplashScreen::Loop(double timestep) {
|
||||
Music.Update();
|
||||
check_gl_error();
|
||||
ClearRenderContext();
|
||||
ScopedRenderMode rm(GUI);
|
||||
SetupGuiDisplay();
|
||||
Trans.LoadLanguages ();
|
||||
Trans.LoadTranslations(param.language); // Before first texts are being displayed
|
||||
|
||||
|
||||
Tex.Draw (TEXLOGO, CENTER, 60, Winsys.scale);
|
||||
Tex.Draw(TEXLOGO, CENTER, 60, Winsys.scale/2.0);
|
||||
FT.SetColor(colDYell);
|
||||
FT.AutoSizeN(6);
|
||||
int top = AutoYPosN (60); int dist = FT.AutoDistanceN (3);
|
||||
int top = AutoYPosN(60);
|
||||
int dist = FT.AutoDistanceN(3);
|
||||
FT.DrawString(CENTER, top, Trans.Text(67));
|
||||
FT.DrawString(CENTER, top+dist, Trans.Text(68));
|
||||
|
||||
Winsys.SwapBuffers();
|
||||
init_ui_snow();
|
||||
|
||||
Course.MakeStandardPolyhedrons();
|
||||
Sound.LoadSoundList();
|
||||
Credits.LoadCreditList ();
|
||||
Char.LoadCharacterList();
|
||||
Course.LoadObjectTypes();
|
||||
Course.LoadTerrainTypes();
|
||||
|
|
|
@ -130,6 +130,8 @@ void State::Manager::PollEvent() {
|
|||
}
|
||||
|
||||
void State::Manager::CallLoopFunction() {
|
||||
check_gl_error();
|
||||
|
||||
float cur_time = SDL_GetTicks() * 1.e-3;
|
||||
g_game.time_step = cur_time - clock_time;
|
||||
if (g_game.time_step < 0.0001) g_game.time_step = 0.0001;
|
||||
|
|
|
@ -551,8 +551,6 @@ void CTexture::LoadTextureList () {
|
|||
CommonTex[id]->LoadMipmap(param.tex_dir, texfile, rep);
|
||||
else
|
||||
CommonTex[id]->Load(param.tex_dir, texfile);
|
||||
|
||||
Index[name] = CommonTex[id];
|
||||
} else Message("wrong texture id in textures.lst");
|
||||
}
|
||||
} else Message("failed to load common textures");
|
||||
|
@ -563,7 +561,6 @@ void CTexture::FreeTextureList () {
|
|||
delete CommonTex[i];
|
||||
}
|
||||
CommonTex.clear();
|
||||
Index.clear();
|
||||
}
|
||||
|
||||
TTexture* CTexture::GetTexture(size_t idx) const {
|
||||
|
@ -571,25 +568,12 @@ TTexture* CTexture::GetTexture (size_t idx) const {
|
|||
return CommonTex[idx];
|
||||
}
|
||||
|
||||
TTexture* CTexture::GetTexture (const string& name) const {
|
||||
return Index.at(name);
|
||||
}
|
||||
|
||||
bool CTexture::BindTex(size_t idx) {
|
||||
if (idx >= CommonTex.size()) return false;
|
||||
CommonTex[idx]->Bind();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CTexture::BindTex (const string& name) {
|
||||
try {
|
||||
Index.at(name)->Bind();
|
||||
} catch (...) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// ---------------------------- Draw ----------------------------------
|
||||
|
||||
void CTexture::Draw(size_t idx) {
|
||||
|
@ -597,37 +581,21 @@ void CTexture::Draw (size_t idx) {
|
|||
CommonTex[idx]->Draw();
|
||||
}
|
||||
|
||||
void CTexture::Draw (const string& name) {
|
||||
Index[name]->Draw();
|
||||
}
|
||||
|
||||
void CTexture::Draw(size_t idx, int x, int y, float size) {
|
||||
if (CommonTex.size() > idx)
|
||||
CommonTex[idx]->Draw(x, y, size, forientation);
|
||||
}
|
||||
|
||||
void CTexture::Draw (const string& name, int x, int y, float size) {
|
||||
Index[name]->Draw(x, y, size, forientation);
|
||||
}
|
||||
|
||||
void CTexture::Draw(size_t idx, int x, int y, int width, int height) {
|
||||
if (CommonTex.size() > idx)
|
||||
CommonTex[idx]->Draw(x, y, width, height, forientation);
|
||||
}
|
||||
|
||||
void CTexture::Draw (const string& name, int x, int y, int width, int height) {
|
||||
Index[name]->Draw (x, y, width, height, forientation);
|
||||
}
|
||||
|
||||
void CTexture::DrawFrame(size_t idx, int x, int y, double w, double h, int frame, const TColor& col) {
|
||||
if (CommonTex.size() > idx)
|
||||
CommonTex[idx]->DrawFrame(x, y, w, h, frame, col);
|
||||
}
|
||||
|
||||
void CTexture::DrawFrame (const string& name, int x, int y, double w, double h, int frame, const TColor& col) {
|
||||
Index[name]->DrawFrame (x, y, w, h, frame, col);
|
||||
}
|
||||
|
||||
void CTexture::SetOrientation(Orientation orientation) {
|
||||
forientation = orientation;
|
||||
}
|
||||
|
@ -670,7 +638,7 @@ void CTexture::DrawNumChr (char c, int x, int y, int w, int h, const TColor& col
|
|||
}
|
||||
|
||||
void CTexture::DrawNumStr(const string& s, int x, int y, float size, const TColor& col) {
|
||||
if (!BindTex ("ziff032")) {
|
||||
if (!BindTex(NUMERIC_FONT)) {
|
||||
Message("DrawNumStr: missing texture");
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ GNU General Public License for more details.
|
|||
|
||||
#include "bh.h"
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
#define TEXLOGO 0
|
||||
#define SNOW_START 1
|
||||
|
@ -124,7 +123,6 @@ public:
|
|||
class CTexture {
|
||||
private:
|
||||
vector<TTexture*> CommonTex;
|
||||
map<string, TTexture*> Index;
|
||||
Orientation forientation;
|
||||
|
||||
void DrawNumChr(char c, int x, int y, int w, int h, const TColor& col);
|
||||
|
@ -135,21 +133,13 @@ public:
|
|||
void FreeTextureList();
|
||||
|
||||
TTexture* GetTexture(size_t idx) const;
|
||||
TTexture* GetTexture (const string& name) const;
|
||||
bool BindTex(size_t idx);
|
||||
bool BindTex (const string& name);
|
||||
|
||||
void Draw(size_t idx);
|
||||
void Draw (const string& name);
|
||||
|
||||
void Draw(size_t idx, int x, int y, float size);
|
||||
void Draw (const string& name, int x, int y, float size);
|
||||
|
||||
void Draw(size_t idx, int x, int y, int width, int height);
|
||||
void Draw (const string& name, int x, int y, int width, int height);
|
||||
|
||||
void DrawFrame(size_t idx, int x, int y, double w, double h, int frame, const TColor& col);
|
||||
void DrawFrame (const string& name, int x, int y, double w, double h, int frame, const TColor& col);
|
||||
|
||||
void SetOrientation(Orientation orientation);
|
||||
void DrawNumStr(const string& s, int x, int y, float size, const TColor& col);
|
||||
|
|
|
@ -326,7 +326,6 @@ void DrawActionFloat (size_t nr, const string& s, int y, float f) {
|
|||
void RenderChar(double timestep) {
|
||||
if (!must_render) return;
|
||||
bool is_visible = false;
|
||||
check_gl_error();
|
||||
|
||||
// ------------- 3d scenery ---------------------------------------
|
||||
ScopedRenderMode rm1(TUX);
|
||||
|
|
|
@ -227,7 +227,6 @@ void PrintFrameParams (int ytop, TKeyframe *frame) {
|
|||
|
||||
void RenderSingleFrame(double timestep) {
|
||||
if (!must_render) return;
|
||||
check_gl_error ();
|
||||
|
||||
// ------------------ 3d scenery ----------------------------------
|
||||
ScopedRenderMode rm1(TUX);
|
||||
|
@ -307,7 +306,6 @@ void SequenceMouse (int button, int state, int x, int y) {}
|
|||
void SequenceMotion(int x, int y) {}
|
||||
|
||||
void RenderSequence(double timestep) {
|
||||
check_gl_error();
|
||||
ScopedRenderMode rm(TUX);
|
||||
ClearRenderContext(colDDBackgr);
|
||||
|
||||
|
|
|
@ -125,8 +125,13 @@ void CTranslation::SetDefaultTranslations () {
|
|||
|
||||
texts[83] = "Randomize settings";
|
||||
|
||||
texts[84] = "Fullscreen setting has changed,";
|
||||
texts[85] = "You need to restart the game";
|
||||
texts[84] = "Score";
|
||||
texts[85] = "Herring";
|
||||
texts[86] = "Time";
|
||||
texts[87] = "Path length";
|
||||
texts[88] = "Average speed";
|
||||
texts[89] = "Position";
|
||||
texts[90] = "in highscore list";
|
||||
}
|
||||
|
||||
const string& CTranslation::Text(size_t idx) const {
|
||||
|
@ -149,26 +154,17 @@ void CTranslation::LoadLanguages () {
|
|||
const string& line = list.Line(i-1);
|
||||
languages[i].lang = SPStrN(line, "lang", "en_GB");
|
||||
languages[i].language = SPStrN(line, "language", "English");
|
||||
LangIndex[languages[i].lang] = i;
|
||||
}
|
||||
|
||||
if (param.language == string::npos)
|
||||
param.language = GetSystemDefaultLangIdx();
|
||||
}
|
||||
|
||||
size_t CTranslation::GetLangIdx (const string& lang) const {
|
||||
return LangIndex.at(lang);
|
||||
}
|
||||
|
||||
const string& CTranslation::GetLanguage(size_t idx) const {
|
||||
if (idx >= languages.size()) return errorString;
|
||||
return languages[idx].language;
|
||||
}
|
||||
|
||||
const string& CTranslation::GetLanguage (const string& lang) const {
|
||||
return GetLanguage (GetLangIdx (lang));
|
||||
}
|
||||
|
||||
void CTranslation::LoadTranslations(size_t langidx) {
|
||||
SetDefaultTranslations();
|
||||
if (langidx == 0 || langidx >= languages.size()) return;
|
||||
|
@ -205,9 +201,13 @@ string CTranslation::GetSystemDefaultLang() {
|
|||
}
|
||||
|
||||
size_t CTranslation::GetSystemDefaultLangIdx() const {
|
||||
try {
|
||||
return GetLangIdx(GetSystemDefaultLang());
|
||||
} catch (...) {
|
||||
std::string name = GetSystemDefaultLang();
|
||||
return GetLangIdx(name);
|
||||
}
|
||||
|
||||
size_t CTranslation::GetLangIdx(const string& lang) const {
|
||||
for (size_t i = 0; i < languages.size(); i++)
|
||||
if (languages[i].lang == lang)
|
||||
return i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,11 +24,10 @@ An name convention:
|
|||
#define TRANSLATION_H
|
||||
|
||||
#include "bh.h"
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
#define MAX_LANGUAGES 32
|
||||
#define NUM_COMMON_TEXTS 86
|
||||
#define NUM_COMMON_TEXTS 93
|
||||
#define MAX_COMMON_TEXT_LINES NUM_COMMON_TEXTS*2
|
||||
|
||||
|
||||
|
@ -40,19 +39,17 @@ struct TLang {
|
|||
class CTranslation {
|
||||
private:
|
||||
string texts[NUM_COMMON_TEXTS];
|
||||
map<string, size_t> LangIndex;
|
||||
public:
|
||||
vector<TLang> languages;
|
||||
|
||||
void LoadLanguages();
|
||||
size_t GetLangIdx (const string& lang) const;
|
||||
const string& GetLanguage(size_t idx) const;
|
||||
const string& GetLanguage (const string& lang) const;
|
||||
void SetDefaultTranslations();
|
||||
const string& Text(size_t idx) const;
|
||||
void LoadTranslations(size_t langidx);
|
||||
static string GetSystemDefaultLang();
|
||||
size_t GetSystemDefaultLangIdx() const;
|
||||
size_t GetLangIdx(const string& lang) const;
|
||||
};
|
||||
|
||||
extern CTranslation Trans;
|
||||
|
|
|
@ -152,8 +152,7 @@ void setup_view_matrix (CControl *ctrl, bool save_mat) {
|
|||
if (save_mat) {
|
||||
stationary_matrix = view_mat;
|
||||
}
|
||||
glLoadIdentity();
|
||||
glMultMatrix(view_mat);
|
||||
glLoadMatrix(view_mat);
|
||||
}
|
||||
|
||||
TVector3d MakeViewVector() {
|
||||
|
@ -168,8 +167,7 @@ TVector3d MakeViewVector () {
|
|||
|
||||
void update_view(CControl *ctrl, double dt) {
|
||||
if (is_stationary) {
|
||||
glLoadIdentity();
|
||||
glMultMatrix(stationary_matrix);
|
||||
glLoadMatrix(stationary_matrix);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -182,14 +182,6 @@ void CWinsys::KeyRepeat (bool repeat) {
|
|||
else SDL_EnableKeyRepeat(0, 0);
|
||||
}
|
||||
|
||||
void CWinsys::SetFonttype () {
|
||||
if (param.use_papercut_font > 0) {
|
||||
FT.SetFont ("pc20");
|
||||
} else {
|
||||
FT.SetFont ("bold");
|
||||
}
|
||||
}
|
||||
|
||||
void CWinsys::CloseJoystick() {
|
||||
if (joystick_active) SDL_JoystickClose(joystick);
|
||||
}
|
||||
|
@ -199,7 +191,6 @@ void CWinsys::Quit () {
|
|||
Score.SaveHighScore();
|
||||
SaveMessages();
|
||||
Audio.Close(); // frees music and sound as well
|
||||
FT.Clear ();
|
||||
if (g_game.argument < 1) Players.SavePlayers();
|
||||
SDL_Quit();
|
||||
}
|
||||
|
|
|
@ -56,7 +56,6 @@ public:
|
|||
void SetupVideoMode(size_t idx);
|
||||
void SetupVideoMode(int width, int height);
|
||||
void KeyRepeat(bool repeat);
|
||||
void SetFonttype ();
|
||||
void PrintJoystickInfo() const;
|
||||
void ShowCursor(bool visible) {SDL_ShowCursor(visible);}
|
||||
void SwapBuffers() {SDL_GL_SwapBuffers();}
|
||||
|
|
Loading…
Reference in New Issue