Compare commits
10 commits
4233a560dd
...
863e75482b
Author | SHA1 | Date | |
---|---|---|---|
863e75482b | |||
81c60b7a2a | |||
24d176ec53 | |||
3c1b0999c4 | |||
b7985070ff | |||
de90447904 | |||
3886790925 | |||
24718bc096 | |||
e78f9073e4 | |||
3c70ae51cf |
|
@ -1 +1 @@
|
||||||
Subproject commit c8b0989378fedf7730727349c7e26815b61cfb02
|
Subproject commit 57ccb75151e4133e18e64fe42f07e1a4a676026b
|
BIN
cube-tube.keystore
Normal file
|
@ -208,15 +208,15 @@
|
||||||
{
|
{
|
||||||
"Name" = "8:Microsoft Visual Studio"
|
"Name" = "8:Microsoft Visual Studio"
|
||||||
"ProductName" = "8:Cube Tube"
|
"ProductName" = "8:Cube Tube"
|
||||||
"ProductCode" = "8:{0DF427A0-5821-48F0-9CA5-B34F1123F839}"
|
"ProductCode" = "8:{FAD41339-47C6-4BE0-9CE0-901208A5F92D}"
|
||||||
"PackageCode" = "8:{27B06BB4-4B81-4D50-A8E0-10378563DE9D}"
|
"PackageCode" = "8:{485042AA-0822-4605-9240-4B88CAAE3CCE}"
|
||||||
"UpgradeCode" = "8:{CD4947B5-EF08-4530-A370-44E0B5F6F762}"
|
"UpgradeCode" = "8:{CD4947B5-EF08-4530-A370-44E0B5F6F762}"
|
||||||
"AspNetVersion" = "8:4.0.30319.0"
|
"AspNetVersion" = "8:4.0.30319.0"
|
||||||
"RestartWWWService" = "11:FALSE"
|
"RestartWWWService" = "11:FALSE"
|
||||||
"RemovePreviousVersions" = "11:TRUE"
|
"RemovePreviousVersions" = "11:TRUE"
|
||||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||||
"InstallAllUsers" = "11:FALSE"
|
"InstallAllUsers" = "11:FALSE"
|
||||||
"ProductVersion" = "8:0.1.1"
|
"ProductVersion" = "8:0.2.0"
|
||||||
"Manufacturer" = "8:death.au"
|
"Manufacturer" = "8:death.au"
|
||||||
"ARPHELPTELEPHONE" = "8:"
|
"ARPHELPTELEPHONE" = "8:"
|
||||||
"ARPHELPLINK" = "8:"
|
"ARPHELPLINK" = "8:"
|
||||||
|
|
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 209 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
@ -1,112 +1,112 @@
|
||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"filename" : "icon-20pt@2x.png",
|
"filename" : "AppIcon20x20@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "20x20"
|
"size" : "20x20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-20pt@3x.png",
|
"filename" : "AppIcon20x20@3x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "3x",
|
"scale" : "3x",
|
||||||
"size" : "20x20"
|
"size" : "20x20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-29pt@2x.png",
|
"filename" : "AppIcon29x29@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "29x29"
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-29pt@3x.png",
|
"filename" : "AppIcon29x29@3x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "3x",
|
"scale" : "3x",
|
||||||
"size" : "29x29"
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-38pt@2x.png",
|
"filename" : "AppIcon38x38@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "38x38"
|
"size" : "38x38"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-38pt@3x.png",
|
"filename" : "AppIcon38x38@3x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "3x",
|
"scale" : "3x",
|
||||||
"size" : "38x38"
|
"size" : "38x38"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-40pt@2x.png",
|
"filename" : "AppIcon40x40@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "40x40"
|
"size" : "40x40"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-40pt@3x.png",
|
"filename" : "AppIcon40x40@3x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "3x",
|
"scale" : "3x",
|
||||||
"size" : "40x40"
|
"size" : "40x40"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-60pt@2x.png",
|
"filename" : "AppIcon60x60@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "60x60"
|
"size" : "60x60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-60pt@3x.png",
|
"filename" : "AppIcon60x60@3x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "3x",
|
"scale" : "3x",
|
||||||
"size" : "60x60"
|
"size" : "60x60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-64pt@2x.png",
|
"filename" : "AppIcon64x64@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "64x64"
|
"size" : "64x64"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-64pt@3x.png",
|
"filename" : "AppIcon64x64@3x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "3x",
|
"scale" : "3x",
|
||||||
"size" : "64x64"
|
"size" : "64x64"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-68pt@2x.png",
|
"filename" : "AppIcon68x68@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "68x68"
|
"size" : "68x68"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-76pt@2x.png",
|
"filename" : "AppIcon76x76@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "76x76"
|
"size" : "76x76"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-83.5pt@2x.png",
|
"filename" : "AppIcon83.5x83.5@2x.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "83.5x83.5"
|
"size" : "83.5x83.5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "icon-1024pt.png",
|
"filename" : "AppIcon1024x1024.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"platform" : "ios",
|
"platform" : "ios",
|
||||||
"size" : "1024x1024"
|
"size" : "1024x1024"
|
||||||
|
|
4
package
Normal file → Executable file
|
@ -2,4 +2,6 @@
|
||||||
cd "`dirname "$0"`"/.dragonruby
|
cd "`dirname "$0"`"/.dragonruby
|
||||||
cp -R ../marketing-assets/AppIcon.appiconset ./dragonruby-ios.app/Assets.xcassets/
|
cp -R ../marketing-assets/AppIcon.appiconset ./dragonruby-ios.app/Assets.xcassets/
|
||||||
cp -R ../marketing-assets/AppIcon.appiconset ./dragonruby-ios-simulator.app/Assets.xcassets/
|
cp -R ../marketing-assets/AppIcon.appiconset ./dragonruby-ios-simulator.app/Assets.xcassets/
|
||||||
exec ./dragonruby-publish --only-package ../🕹️cube-tube
|
cp -R ../🕹️cube-tube ./cube-tube
|
||||||
|
exec ./dragonruby-publish --only-package cube-tube
|
||||||
|
rmdir -R ./cube-tube
|
67
package.bat
|
@ -1,66 +1 @@
|
||||||
@echo off
|
call publish.bat --only-package
|
||||||
cd /d %~dp0
|
|
||||||
|
|
||||||
set CurrDirName=🕹️cube-tube
|
|
||||||
for /F %%a IN ('powershell -command "$([guid]::NewGuid().ToString().toUpper())"') DO (set newProductCode=%%a)
|
|
||||||
for /F %%a IN ('powershell -command "$([guid]::NewGuid().ToString().toUpper())"') DO (set newPackageCode=%%a)
|
|
||||||
|
|
||||||
@setlocal ENABLEEXTENSIONS
|
|
||||||
|
|
||||||
@set version=0
|
|
||||||
@for /F "tokens=*" %%A in (./metadata/game_metadata.txt) do @call :CheckForVersion "%%A"
|
|
||||||
|
|
||||||
cd .dragonruby
|
|
||||||
|
|
||||||
robocopy ../marketing-assets/AppIcon.appiconset ./dragonruby-ios.app/Assets.xcassets/AppIcon.appiconset /e
|
|
||||||
robocopy ../marketing-assets/AppIcon.appiconset ./dragonruby-ios-simulator.app/Assets.xcassets/AppIcon.appiconset /e
|
|
||||||
|
|
||||||
@echo on
|
|
||||||
dragonruby-publish --only-package ../%CurrDirName%
|
|
||||||
@echo off
|
|
||||||
cd builds
|
|
||||||
|
|
||||||
if exist ./%CurrDirName%-windows-amd64.exe (
|
|
||||||
if exist ../../%CurrDirName%/installer/installer.vdproj (
|
|
||||||
echo "Building windows installer..."
|
|
||||||
for /F "tokens=* USEBACKQ" %%t IN (`findstr /c:"%version%" ..\..\%CurrDirName%\installer\installer.vdproj`) do (SET OldVersion=%%t)
|
|
||||||
if defined OldVersion (
|
|
||||||
echo "version already the same"
|
|
||||||
) else (
|
|
||||||
echo "need to update version & product/package codes (%version%, %newProductCode%, %newPackageCode%)"
|
|
||||||
powershell -Command "(Get-Content ../../%CurrDirName%/installer/installer.vdproj) | Foreach-Object { $_ -replace '""""ProductCode"""" = """"8:\{.*\}""""$', '""""ProductCode"""" = """"8:{%newProductCode%}""""' -replace '""""PackageCode"""" = """"8:\{.*\}""""$', '""""PackageCode"""" = """"8:{%newPackageCode%}""""' -replace '""""ProductVersion"""" = """"8:.+""""$', '""""ProductVersion"""" = """"8:%version%""' } | Out-File -encoding UTF8 ../../%CurrDirName%/installer/installer.vdproj"
|
|
||||||
)
|
|
||||||
call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe" ..\..\%CurrDirName%\installer\installer.sln /build Release
|
|
||||||
) else (
|
|
||||||
ECHO "no installer project?"
|
|
||||||
ECHO ../../%CurrDirName%/installer/installer.vdproj
|
|
||||||
)
|
|
||||||
) else (
|
|
||||||
ECHO "no exe?"
|
|
||||||
ECHO ./%CurrDirName%-windows-amd64.exe
|
|
||||||
)
|
|
||||||
|
|
||||||
if not exist ./%CurrDirName%.keystore (
|
|
||||||
echo "no keystore, generating keys"
|
|
||||||
keytool -genkey -v -keystore %CurrDirName%.keystore -alias %CurrDirName% -keyalg RSA -keysize 2048 -validity 10000
|
|
||||||
)
|
|
||||||
if exist ./%CurrDirName%-android.apk (
|
|
||||||
echo "Signing apk..."
|
|
||||||
call "C:\Program Files (x86)\Android\android-sdk\build-tools\32.0.0\apksigner.bat" sign -ks %CurrDirName%.keystore %CurrDirName%-android.apk
|
|
||||||
echo "Signing aab..."
|
|
||||||
call jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore %CurrDirName%.keystore %CurrDirName%-googleplay.aab %CurrDirName%
|
|
||||||
) else (
|
|
||||||
ECHO "no apk?"
|
|
||||||
ECHO ./%CurrDirName%-android.apk
|
|
||||||
)
|
|
||||||
|
|
||||||
ECHO "All done!"
|
|
||||||
explorer.exe %cd%
|
|
||||||
PAUSE
|
|
||||||
@exit /b 0
|
|
||||||
|
|
||||||
:CheckForVersion
|
|
||||||
@set _line=%~1
|
|
||||||
@set _linePrefeix=%_line:~0,8%
|
|
||||||
@if "%_linePrefeix%" equ "version=" (@set version="%_line:~8%")
|
|
||||||
@exit /b 0
|
|
72
publish.bat
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
@echo off
|
||||||
|
chcp 65001 >NUL
|
||||||
|
cd /d %~dp0
|
||||||
|
|
||||||
|
set gamedir=🕹️cube-tube
|
||||||
|
for /F %%a IN ('powershell -command "$([guid]::NewGuid().ToString().toUpper())"') DO (set newProductCode=%%a)
|
||||||
|
for /F %%a IN ('powershell -command "$([guid]::NewGuid().ToString().toUpper())"') DO (set newPackageCode=%%a)
|
||||||
|
|
||||||
|
@setlocal ENABLEEXTENSIONS
|
||||||
|
|
||||||
|
@set version=0
|
||||||
|
@for /F "tokens=*" %%A in (%gamedir%/metadata/game_metadata.txt) do @call :CheckForVersion "%%A"
|
||||||
|
|
||||||
|
cd .dragonruby
|
||||||
|
|
||||||
|
robocopy ../marketing-assets/AppIcon.appiconset ./dragonruby-ios.app/Assets.xcassets/AppIcon.appiconset /e
|
||||||
|
robocopy ../marketing-assets/AppIcon.appiconset ./dragonruby-ios-simulator.app/Assets.xcassets/AppIcon.appiconset /e
|
||||||
|
robocopy ../%gamedir% ./%gameid% /e
|
||||||
|
|
||||||
|
@echo on
|
||||||
|
dragonruby-publish %* %gameid%
|
||||||
|
@echo off
|
||||||
|
rd /s /q %gameid%
|
||||||
|
|
||||||
|
cd builds
|
||||||
|
|
||||||
|
if exist ./%gameid%-windows-amd64.exe (
|
||||||
|
if exist ../../installer/installer.vdproj (
|
||||||
|
echo "Building windows installer..."
|
||||||
|
for /F "tokens=* USEBACKQ" %%t IN (`findstr /c:"%version%" ..\..\installer\installer.vdproj`) do (SET OldVersion=%%t)
|
||||||
|
if defined OldVersion (
|
||||||
|
echo "version already the same"
|
||||||
|
) else (
|
||||||
|
echo "need to update version & product/package codes (%version%, %newProductCode%, %newPackageCode%)"
|
||||||
|
powershell -Command "(Get-Content ../../installer/installer.vdproj) | Foreach-Object { $_ -replace '""""ProductCode"""" = """"8:\{.*\}""""$', '""""ProductCode"""" = """"8:{%newProductCode%}""""' -replace '""""PackageCode"""" = """"8:\{.*\}""""$', '""""PackageCode"""" = """"8:{%newPackageCode%}""""' -replace '""""ProductVersion"""" = """"8:.+""""$', '""""ProductVersion"""" = """"8:%version%""' } | Out-File -encoding UTF8 ../../installer/installer.vdproj"
|
||||||
|
)
|
||||||
|
call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe" ..\..\installer\installer.sln /build Release
|
||||||
|
) else (
|
||||||
|
ECHO "no installer project?"
|
||||||
|
ECHO ../../installer/installer.vdproj
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
ECHO "no exe?"
|
||||||
|
ECHO ./%gameid%-windows-amd64.exe
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist ../../%gameid%.keystore (
|
||||||
|
echo "no keystore, generating keys"
|
||||||
|
keytool -genkey -v -keystore ../../%gameid%.keystore -alias %gameid% -keyalg RSA -keysize 2048 -validity 10000
|
||||||
|
)
|
||||||
|
if exist ./%gameid%-android.apk (
|
||||||
|
echo "Signing apk..."
|
||||||
|
call "C:\Program Files (x86)\Android\android-sdk\build-tools\32.0.0\apksigner.bat" sign -ks ../../%gameid%.keystore %gameid%-android.apk
|
||||||
|
echo "Signing aab..."
|
||||||
|
call jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore ../../%gameid%.keystore %gameid%-googleplay.aab %gameid%
|
||||||
|
) else (
|
||||||
|
ECHO "no apk?"
|
||||||
|
ECHO ./%gameid%-android.apk
|
||||||
|
)
|
||||||
|
|
||||||
|
ECHO "All done!"
|
||||||
|
explorer.exe %cd%
|
||||||
|
PAUSE
|
||||||
|
@exit /b 0
|
||||||
|
|
||||||
|
:CheckForVersion
|
||||||
|
@set _line=%~1
|
||||||
|
@set _linePrefeix=%_line:~0,8%
|
||||||
|
@if "%_linePrefeix%" equ "version=" (@set version="%_line:~8%")
|
||||||
|
@set _linePrefeix=%_line:~0,7%
|
||||||
|
@if "%_linePrefeix%" equ "gameid=" (@set gameid="%_line:~7%")
|
||||||
|
@exit /b 0
|
8
🕹️cube-tube.code-workspace
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "🕹️cube-tube"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
2
🕹️cube-tube/.vscode/launch.json
vendored
|
@ -8,7 +8,7 @@
|
||||||
"name": "Run Game",
|
"name": "Run Game",
|
||||||
"type": "node-terminal",
|
"type": "node-terminal",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"command": "${workspaceRoot}/../.dragonruby/dragonruby ${workspaceRoot}",
|
"command": "\"${workspaceRoot}/../.dragonruby/dragonruby\" \"${workspaceRoot}\"",
|
||||||
"windows": {
|
"windows": {
|
||||||
"command": "${workspaceRoot}/../.dragonruby/dragonruby.exe ${workspaceRoot}",
|
"command": "${workspaceRoot}/../.dragonruby/dragonruby.exe ${workspaceRoot}",
|
||||||
},
|
},
|
||||||
|
|
|
@ -10,8 +10,31 @@ class SceneInstance
|
||||||
attr_reader :tick_in_background
|
attr_reader :tick_in_background
|
||||||
attr_accessor :reset_on_pop
|
attr_accessor :reset_on_pop
|
||||||
|
|
||||||
|
def screenshot(args)
|
||||||
|
screenshot_path = "../marketing-assets/screenshots/#{args.gtk.platform}"
|
||||||
|
now = Time.new
|
||||||
|
now_s = "#{now.year}-#{"#{now.month}".rjust(2, "0")}-#{"#{now.day}".rjust(2, "0")} at #{"#{now.hour}".rjust(2, "0")}.#{"#{now.min}".rjust(2, "0")}.#{"#{now.sec}".rjust(2, "0")}"
|
||||||
|
base_filename = "#{screenshot_path}/Screenshot - #{args.gtk.platform} - #{now_s}"
|
||||||
|
filename = "#{base_filename}.png"
|
||||||
|
count = 0
|
||||||
|
while !args.gtk.stat_file(filename).nil?
|
||||||
|
count += 1;
|
||||||
|
filename = "#{base_filename} (#{count}).png"
|
||||||
|
end
|
||||||
|
|
||||||
|
args.outputs.screenshots << {
|
||||||
|
x: 0, y: 0, w: args.grid.w, h: args.grid.h, # Which portion of the screen should be captured
|
||||||
|
path: filename, # Output path of PNG file (inside game directory)
|
||||||
|
# r: 255, g: 255, b: 255, a: 0 # Optional chroma key
|
||||||
|
}
|
||||||
|
|
||||||
|
args.gtk.notify!("Screenshot taken: '#{filename}'")
|
||||||
|
end
|
||||||
|
|
||||||
# called every tick of the game loop
|
# called every tick of the game loop
|
||||||
def tick(args) end
|
def tick(args)
|
||||||
|
screenshot(args) if args.inputs.keyboard.ctrl_p
|
||||||
|
end
|
||||||
|
|
||||||
# custom logic to reset this scene
|
# custom logic to reset this scene
|
||||||
def reset(args) end
|
def reset(args) end
|
||||||
|
|
|
@ -5,7 +5,7 @@ module Input
|
||||||
class << self
|
class << self
|
||||||
PRIMARY_KEYS = [:j, :z, :space]
|
PRIMARY_KEYS = [:j, :z, :space]
|
||||||
SECONDARY_KEYS = [:k, :x, :backspace]
|
SECONDARY_KEYS = [:k, :x, :backspace]
|
||||||
PAUSE_KEYS = [:escape, :p]
|
PAUSE_KEYS = [:escape]
|
||||||
BINDINGS = {
|
BINDINGS = {
|
||||||
primary: {
|
primary: {
|
||||||
keyboard: %i[j z space],
|
keyboard: %i[j z space],
|
||||||
|
@ -16,7 +16,7 @@ module Input
|
||||||
controller_one: %i[b]
|
controller_one: %i[b]
|
||||||
},
|
},
|
||||||
pause: {
|
pause: {
|
||||||
keyboard: %i[escape p],
|
keyboard: %i[escape],
|
||||||
controller_one: %i[start]
|
controller_one: %i[start]
|
||||||
},
|
},
|
||||||
rotate_left: {
|
rotate_left: {
|
||||||
|
|
|
@ -36,7 +36,7 @@ class MainMenu < MenuScene
|
||||||
next_sec = random(20..50)
|
next_sec = random(20..50)
|
||||||
@next_announcement = args.state.tick_count + (next_sec * 60)
|
@next_announcement = args.state.tick_count + (next_sec * 60)
|
||||||
sound = :"ambient#{random(1..6)}"
|
sound = :"ambient#{random(1..6)}"
|
||||||
puts sound, Sound.for(sound).input
|
# puts sound, Sound.for(sound).input
|
||||||
Sound.play(args, sound)
|
Sound.play(args, sound)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,9 @@ class MenuScene < SceneInstance
|
||||||
text(option[:key])
|
text(option[:key])
|
||||||
end
|
end
|
||||||
|
|
||||||
if (args.state.tick_count - @first_render) < 60 * (1.5 + i) * 0.2
|
scramble = (args.state.tick_count - @first_render) < 60 * (1.5 + i) * 0.2
|
||||||
|
|
||||||
|
if scramble
|
||||||
if args.state.tick_count % 4 == 0
|
if args.state.tick_count % 4 == 0
|
||||||
@rand_strings[i] = (0...(rand(text.length >= 3 ? text.length : 3) + 3)).map { ('A'..'Z').to_a[rand(26)] }.join
|
@rand_strings[i] = (0...(rand(text.length >= 3 ? text.length : 3) + 3)).map { ('A'..'Z').to_a[rand(26)] }.join
|
||||||
end
|
end
|
||||||
|
@ -73,7 +75,7 @@ class MenuScene < SceneInstance
|
||||||
|
|
||||||
button_border = { w: 340, h: 80, x: l.x - 170, y: l.y - 55 }.merge(WHITE)
|
button_border = { w: 340, h: 80, x: l.x - 170, y: l.y - 55 }.merge(WHITE)
|
||||||
# (args.outputs.borders << button_border) if mobile?
|
# (args.outputs.borders << button_border) if mobile?
|
||||||
if args.inputs.mouse.up && args.inputs.mouse.inside_rect?(button_border)
|
if args.inputs.mouse.up && args.inputs.mouse.inside_rect?(button_border) && !scramble
|
||||||
o = @menu_options.find { |o| o[:key] == l[:key] }
|
o = @menu_options.find { |o| o[:key] == l[:key] }
|
||||||
Sound.play(args, :menu)
|
Sound.play(args, :menu)
|
||||||
o[:on_select].call(args) if o
|
o[:on_select].call(args) if o
|
||||||
|
|
|
@ -9,6 +9,10 @@ class PauseMenu < MenuScene
|
||||||
key: :resume,
|
key: :resume,
|
||||||
on_select: ->(args) { Scene.pop(args) }
|
on_select: ->(args) { Scene.pop(args) }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: :restart,
|
||||||
|
on_select: ->(args) { Scene.switch(args, :intro, reset: true) }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: :settings,
|
key: :settings,
|
||||||
on_select: ->(args) { Scene.push(args, :settings, reset: true, reset_on_pop: true) }
|
on_select: ->(args) { Scene.push(args, :settings, reset: true, reset_on_pop: true) }
|
||||||
|
@ -19,12 +23,12 @@ class PauseMenu < MenuScene
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
if args.gtk.platform?(:desktop)
|
# if args.gtk.platform?(:desktop)
|
||||||
menu_options << {
|
# menu_options << {
|
||||||
key: :quit,
|
# key: :quit,
|
||||||
on_select: ->(args) { args.gtk.request_quit }
|
# on_select: ->(args) { args.gtk.request_quit }
|
||||||
}
|
# }
|
||||||
end
|
# end
|
||||||
|
|
||||||
super args, opts, :paused, menu_options
|
super args, opts, :paused, menu_options
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,6 +16,7 @@ TEXT = {
|
||||||
paused: "Paused",
|
paused: "Paused",
|
||||||
quit: "Quit",
|
quit: "Quit",
|
||||||
resume: "Resume",
|
resume: "Resume",
|
||||||
|
restart: "Restart",
|
||||||
return_to_main_menu: "Main Menu",
|
return_to_main_menu: "Main Menu",
|
||||||
settings: "Settings",
|
settings: "Settings",
|
||||||
sfx: "Sound Effects",
|
sfx: "Sound Effects",
|
||||||
|
|
|
@ -53,7 +53,7 @@ def debug_tick(args)
|
||||||
|
|
||||||
debug_label(
|
debug_label(
|
||||||
args, 24.from_right, 24.from_top,
|
args, 24.from_right, 24.from_top,
|
||||||
"v#{version} | DR v#{$gtk.version} (#{$gtk.platform}) | Ticks: #{args.state.tick_count} | FPS: #{args.gtk.current_framerate.round}",
|
"v#{version} | DR v#{$gtk.version} (#{$gtk.platform}) | Ticks: #{args.state.tick_count} | FPS: #{args.gtk.current_framerate.round} | Win: #{args.grid.window_width}x#{args.grid.window_height}",
|
||||||
ALIGN_RIGHT)
|
ALIGN_RIGHT)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,12 @@ module Scene
|
||||||
# if `scene` is not a `SceneInstance`, it's probably a symbol representing
|
# if `scene` is not a `SceneInstance`, it's probably a symbol representing
|
||||||
# the scene we're switching to, so go get it.
|
# the scene we're switching to, so go get it.
|
||||||
the_scene = scene.is_a?(SceneInstance) ? scene : SCENES[scene].new(args)
|
the_scene = scene.is_a?(SceneInstance) ? scene : SCENES[scene].new(args)
|
||||||
puts '---'
|
# puts '---'
|
||||||
puts 'switching to'
|
# puts 'switching to'
|
||||||
puts scene unless scene.is_a?(SceneInstance)
|
# puts scene unless scene.is_a?(SceneInstance)
|
||||||
puts SCENES[scene] unless scene.is_a?(SceneInstance)
|
# puts SCENES[scene] unless scene.is_a?(SceneInstance)
|
||||||
puts the_scene
|
# puts the_scene
|
||||||
puts '---'
|
# puts '---'
|
||||||
|
|
||||||
# if the stack is empty (e.g. we just cleared it), then push this scene
|
# if the stack is empty (e.g. we just cleared it), then push this scene
|
||||||
args.state.scene_stack.push(the_scene) if args.state.scene_stack.empty?
|
args.state.scene_stack.push(the_scene) if args.state.scene_stack.empty?
|
||||||
|
@ -56,7 +56,7 @@ module Scene
|
||||||
scene = args.state.scene_stack.last
|
scene = args.state.scene_stack.last
|
||||||
scene = scene._?(default(args))
|
scene = scene._?(default(args))
|
||||||
reset = scene.reset_on_pop if reset.nil?
|
reset = scene.reset_on_pop if reset.nil?
|
||||||
puts reset, scene, scene.reset_on_pop
|
# puts reset, scene, scene.reset_on_pop
|
||||||
|
|
||||||
switch(args, scene, reset: reset, push_or_pop: true)
|
switch(args, scene, reset: reset, push_or_pop: true)
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ devid=deathau
|
||||||
devtitle=death.au
|
devtitle=death.au
|
||||||
gameid=cube-tube
|
gameid=cube-tube
|
||||||
gametitle=Cube Tube
|
gametitle=Cube Tube
|
||||||
version=0.1.0
|
version=0.2.1
|
||||||
icon=metadata/icon.png
|
icon=metadata/icon.png
|
||||||
|
|
||||||
# === Flags available at all licensing tiers ===
|
# === Flags available at all licensing tiers ===
|
||||||
|
|