Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
44 changes: 37 additions & 7 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ on:
- main

jobs:
deploy:
frontend:
name: Build Frontend and Deploy to Github Pages
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -27,22 +28,51 @@ jobs:
mkdir -v -p ~/.local/share/godot/export_templates
mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Create staging directory
run: mkdir -v -p build/web
run: mkdir -v -p frontend/build/web

- name: Build
run: godot -v --export-debug --headless "Web" ../build/web/index.html project/project.godot
run: godot -v --export-debug --headless "Web" ../frontend/build/web/index.html frontend/project/project.godot

- name: Add coi-service-worker
run: |
git clone https://github.com/gzuidhof/coi-serviceworker.git
mv coi-serviceworker/coi-serviceworker.js build/web/coi-serviceworker.js
sed -i '3 i <script src="coi-serviceworker.js"></script>' build/web/index.html
mv coi-serviceworker/coi-serviceworker.js frontend/build/web/coi-serviceworker.js
sed -i '3 i <script src="coi-serviceworker.js"></script>' frontend/build/web/index.html
- name: Deploy
uses: peaceiris/actions-gh-pages@v3.9.3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./build/web
publish_dir: ./frontend/build/web
force_orphan: true
user_name: "github-ci[bot]"
user_email: "github-actions[bot]@users.noreply.github.com"
commit_message: "Publish to gh-pages"
commit_message: "Publish to gh-pages"

backend:
name: Build Backend
runs-on: ubuntu-latest
permissions:
contents: write

container:
image: barichello/godot-ci:4.3

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Move Linux templates into position
run: |
mkdir -v -p ~/.local/share/godot/export_templates
mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
- name: Create staging directory
run: mkdir -v -p backend/build/linux

- name: Build
run: godot -v --export-debug --headless "Linux" ../backend/build/linux/frogger_backend.x86_64 backend/project/project.godot

- name: Upload
uses: actions/upload-artifact@v2
with:
name: linux
path: backend/build/linux
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/project/.godot/
/project/addons/
/frontend/project/.godot/
/frontend/project/addons/
/backend/project/.godot/
/backend/project/addons/
/.idea/
42 changes: 42 additions & 0 deletions backend/project/export_presets.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
[preset.0]

name="Linux"
platform="Linux"
runnable=true
advanced_options=false
dedicated_server=true
custom_features=""
export_filter="customized"
customized_files={
"res://": "strip"
}
include_filter=""
exclude_filter=""
export_path="../build/linux/frogger_backend.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2

[preset.0.options]

custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
File renamed without changes
37 changes: 37 additions & 0 deletions backend/project/icon.svg.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://dq56gnhornsdl"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
67 changes: 67 additions & 0 deletions backend/project/main.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
extends Node

func _ready() -> void:
var peer = ENetMultiplayerPeer.new()
peer.create_server(45381)
multiplayer.multiplayer_peer = peer
get_leaderboard(1)

func read_file():
var file = FileAccess.open("user://frogger_users.dat", FileAccess.READ)
var content = JSON.parse_string(file.get_as_text())
return content

func write_file(data):
var file = FileAccess.open("user://frogger_users.dat", FileAccess.WRITE)
file.store_string(JSON.stringify(data))

@rpc("any_peer", "call_remote", "unreliable")
func new_user(username, password):
var to_add = {
username: {
"coins": 0,
"high_score": 0,
"password": password,
"skins": []
}
}
var users = read_file()
users.merge(to_add)
write_file(users)

@rpc("any_peer", "call_remote", "unreliable")
func edit_user(username, column, value):
var users = read_file()
users[username][column] = value
write_file(users)

@rpc("any_peer", "call_remote", "unreliable")
func get_all_users(id):
var users = read_file().keys()
receive_all_users.rpc(users, id)

@rpc("authority", "call_local", "unreliable")
func receive_all_users(_users, _target):
pass

@rpc("any_peer", "call_remote", "unreliable")
func get_leaderboard(id):
var users = read_file()
var keys = users.keys()
var result = []
keys.sort_custom(func(a, b): return users[a]["high_score"] > users[b]["high_score"])
for i in keys:
result.append([i, str(users[i]["high_score"])])
receive_leaderboard.rpc(result, id)

@rpc("authority", "call_local", "unreliable")
func receive_leaderboard(_board, _target):
pass

@rpc("any_peer", "call_remote", "unreliable")
func get_user_info(username, column, id):
receive_leaderboard.rpc(read_file()[username][column], id)

@rpc("authority", "call_local", "unreliable")
func receive_user_info(_info, _target):
pass
6 changes: 6 additions & 0 deletions backend/project/main.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://cong5kp6ee3be"]

[ext_resource type="Script" path="res://main.gd" id="1_6wndj"]

[node name="Node2D" type="Node2D"]
script = ExtResource("1_6wndj")
25 changes: 25 additions & 0 deletions backend/project/project.godot
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters

config_version=5

[application]

config/name="Frogger Backend Server"
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.3", "GL Compatibility")
config/icon="res://icon.svg"

[editor_plugins]

enabled=PackedStringArray("res://addons/godot_super-wakatime/plugin.cfg")

[rendering]

renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes.
12 changes: 12 additions & 0 deletions frontend/project/assets/scripts/global.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
extends Node2D

var user: String = ""
var skin: int = 0
var coins: int
var high_score: int
var skins = []
var id: int

func _ready() -> void:
randomize()
id = randi()
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ var begun: bool = false
var needs_grass: bool = false
var restart = false
var waiting = false
var peer

signal responded(response)

@onready var grass = preload("res://grass.tscn")
@onready var river = preload("res://river.tscn")
Expand All @@ -16,7 +19,46 @@ var waiting = false
@onready var short_log = preload("res://short_log.tscn")
@onready var long_log = preload("res://long_log.tscn")

@rpc("any_peer", "call_remote", "unreliable")
func new_user(_username, _password):
pass

@rpc("any_peer", "call_remote", "unreliable")
func edit_user(_username, _column, _value):
pass

@rpc("any_peer", "call_remote", "unreliable")
func get_all_users(_id):
pass

@rpc("authority", "call_local", "unreliable")
func receive_all_users(users, target):
if target == Global.id:
responded.emit(users)

@rpc("any_peer", "call_remote", "unreliable")
func get_leaderboard(_id):
pass

@rpc("authority", "call_local", "unreliable")
func receive_leaderboard(board, target):
if target == Global.id:
responded.emit(board)

@rpc("any_peer", "call_remote", "unreliable")
func get_user_info(_username, _column, _id):
pass

@rpc("authority", "call_local", "unreliable")
func receive_user_info(info, target):
if target == Global.id:
responded.emit(info)

func _ready() -> void:
peer = ENetMultiplayerPeer.new()
peer.create_client("froggerapi.madavidcoder.hackclub.app", 80)
multiplayer.multiplayer_peer = peer
await multiplayer.peer_connected
$End.hide()
$Start.show()
$Start/Arrow_Left.hide()
Expand Down Expand Up @@ -140,13 +182,11 @@ func _start_game() -> void:
if Global.skin == 1:
Global.coins -= 500
Global.skins.append("rabbit")
await Global.edit_user(Global.user, "coins", Global.coins)
await Global.edit_user(Global.user, "skins", ",".join(Global.skins))
elif Global.skin == 2:
Global.coins -= 1000
Global.skins.append("squirrel")
await Global.edit_user(Global.user, "coins", Global.coins)
await Global.edit_user(Global.user, "skins", ",".join(Global.skins))
edit_user.rpc(Global.user,"coins", Global.coins)
edit_user.rpc(Global.user,"skins", Global.skins)
$Start/Button.disabled = false
$Start/Coins.text = str(Global.coins) + " Coins"
$Start/Button.text = "Play Game"
Expand All @@ -161,10 +201,10 @@ func _on_timer_timeout() -> void:
scroll = false
if int($Score.text) > int($High_Score.text):
$High_Score.text = $Score.text
await Global.edit_user(Global.user, "high_score", $High_Score.text)
edit_user.rpc(Global.user, "high_score", int($High_Score.text))
Global.high_score = int($High_Score.text)
Global.coins += int($Score.text)
await Global.edit_user(Global.user, "coins", Global.coins)
edit_user.rpc(Global.user,"coins", Global.coins)
restart = true
if waiting: _restart_game()

Expand Down Expand Up @@ -256,14 +296,12 @@ func _on_signin_authenticated() -> void:
$Start/Arrow_Left.show()
$Start/Arrow_Right.show()
$Start/Button.text = "Play Game"
Global.skins = await Global.get_user_info(Global.user, "skins")
if Global.skins != "":
Global.skins = Global.skins.split(",")
else:
Global.skins = []
var resp = await Global.get_user_info(Global.user)
Global.coins = int(resp[Global.columns.find("coins")])
Global.high_score = int(resp[Global.columns.find("high_score")])
get_user_info.rpc(Global.user, "skins", Global.id)
Global.skins = await responded
get_user_info.rpc(Global.user, "coins", Global.id)
Global.coins = await responded
get_user_info.rpc(Global.user, "high_score", Global.id)
Global.high_score = await responded
$Start/Coins.text = str(Global.coins) + " Coins"
$Start/Username.text = Global.user
$High_Score.text = str(Global.high_score)
Expand All @@ -288,7 +326,8 @@ func _show_leaderboard() -> void:
$Loading/Circle.play()
$Start.hide()
$Leaderboard.show()
var leaders = await Global.get_leaderboard()
get_leaderboard.rpc(Global.id)
var leaders = await responded
$Leaderboard/Row1/Username.text = leaders[0][0]
$Leaderboard/Row1/HighScore.text = leaders[0][1]
$Leaderboard/Row2/Username.text = leaders[1][0]
Expand Down Expand Up @@ -341,7 +380,7 @@ func _get_free() -> void:
$Loading/Circle.play()
Global.coins += 1500
$Start/Coins.text = str(Global.coins) + " Coins"
await Global.edit_user(Global.user, "coins", Global.coins)
edit_user.rpc(Global.user, "coins", Global.coins)
$Loading.hide()
$Loading/Circle.stop()
$Start/Label.hide()
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading