forked from interstellar_development/freeftf
f3350a462a
Bug fixes and other fixes. Migration to Godot 4.3 (RC3)
130 lines
3.9 KiB
GDScript
130 lines
3.9 KiB
GDScript
## freeftf
|
|
## Copyright (C) 2024 Patrick_Pluto
|
|
##
|
|
## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
##
|
|
## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
##
|
|
## You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
extends Node
|
|
|
|
var settings = {"save_version" = 3, "fps_counter" = 1, "port" = 35000, "ip" = "127.0.0.1"}
|
|
var computers = 0
|
|
var players = 0
|
|
var map_name = "mansion"
|
|
var is_running = false
|
|
var frozen = 0
|
|
var dead = 0
|
|
var escaped = 0
|
|
var player_escaped = false
|
|
var is_beast = false
|
|
var character = preload("res://objects/player.tscn")
|
|
# Server Variables
|
|
var player_name
|
|
var room_name
|
|
var is_server = false
|
|
var player_list = {}
|
|
|
|
func _ready():
|
|
if FileAccess.file_exists("user://settings.json"):
|
|
var temp = Load.loadJSON("user://settings.json")
|
|
if !(temp is Dictionary) or settings["save_version"] != temp["save_version"]:
|
|
Save.saveJSON("user://settings.json", settings)
|
|
else:
|
|
settings = temp
|
|
else:
|
|
Save.saveJSON("user://settings.json", settings)
|
|
if OS.is_debug_build():
|
|
settings["fps_counter"] = 1
|
|
|
|
func freeze():
|
|
players -= 1
|
|
frozen += 1
|
|
|
|
func unfreeze():
|
|
players += 1
|
|
frozen -= 1
|
|
|
|
func died():
|
|
frozen -= 1
|
|
dead += 1
|
|
|
|
func has_escaped():
|
|
players -= 1
|
|
escaped += 1
|
|
|
|
func _process(_delta):
|
|
if is_running and players <= 0:
|
|
get_tree().change_scene_to_file("res://menus/result.tscn")
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
is_running = false
|
|
|
|
func reset():
|
|
computers = 0
|
|
players = 0
|
|
is_running = false
|
|
frozen = 0
|
|
dead = 0
|
|
escaped = 0
|
|
player_escaped = false
|
|
is_beast = false
|
|
player_name = null
|
|
player_list = {}
|
|
room_name = null
|
|
is_server = false
|
|
multiplayer.multiplayer_peer = Client.offline
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
|
|
func save_setting(setting_name, value):
|
|
settings[setting_name] = value
|
|
Save.saveJSON("user://settings.json", settings)
|
|
|
|
func apply_settings():
|
|
players = player_list.size() - 1
|
|
is_running = true
|
|
|
|
func start_game():
|
|
get_tree().change_scene_to_file("res://maps/"+map_name+".tscn")
|
|
while !get_tree().root.has_node("./"+map_name+"/"):
|
|
await get_tree().create_timer(0.001).timeout
|
|
var map = get_tree().root.get_node("./"+map_name+"/")
|
|
var i = 0
|
|
for w in player_list:
|
|
var player = character.instantiate()
|
|
player.name = "player" + str(i)
|
|
i += 1
|
|
player.position.z = -i*2.5
|
|
player.position.y = 1
|
|
map.add_child(player)
|
|
if is_server:
|
|
var random = randi() % player_list.size()
|
|
for id in player_list:
|
|
Client.rpc_id(id,"sync_beast",random)
|
|
apply_settings()
|
|
|
|
func player_hit(target, beast):
|
|
target = get_tree().root.get_node("./"+map_name+"/"+target)
|
|
beast = get_tree().root.get_node("./"+map_name+"/"+beast)
|
|
if !target.is_frozen:
|
|
target.captured(beast)
|
|
beast.got_one(target)
|
|
|
|
func sync_player(node_name, position, rotation):
|
|
var current_character = get_tree().root.get_node("./"+map_name+"/"+node_name)
|
|
current_character.position = position
|
|
current_character.rotation = rotation
|
|
|
|
func sync_hammer(node_name, rotation):
|
|
var current_character = get_tree().root.get_node("./"+map_name+"/"+node_name+"/hammer")
|
|
current_character.rotation = rotation
|
|
|
|
func sync_computers(node_name, current):
|
|
var current_character = get_tree().root.get_node("./"+map_name+"/computers/"+node_name)
|
|
current_character.current = current
|
|
|
|
func sync_beast(player):
|
|
while !get_tree().root.has_node("./"+map_name+"/player"+str(player)):
|
|
await get_tree().create_timer(0.001).timeout
|
|
var current_character = get_tree().root.get_node("./"+map_name+"/player"+str(player))
|
|
current_character.beast_init()
|