A little folders cleanup
This commit is contained in:
parent
997e3c0982
commit
545da7be1f
90 changed files with 68 additions and 1661 deletions
131
scripts/Classes/game.gd
Normal file
131
scripts/Classes/game.gd
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
extends Node
|
||||
class_name Game
|
||||
|
||||
## TODO: rewrite item system
|
||||
|
||||
enum ITEM_TYPE {VALUABLE, WEAPON, HULL, SHIELD, ENGINE, AMMUNITION}
|
||||
enum AMMO_TYPE {NULL, LASER_ENERGY, ROCKETS}
|
||||
enum BASE_TYPE {POWER, MINING, FOOD, TRADING, MODULE}
|
||||
enum Faction {None, Player, Peaceful, Neutral, Aggressive}
|
||||
|
||||
#const DEFAULT_ITEM = preload("res://items/test_item.tres")
|
||||
#const DEFAULT_WEAPON = preload("res://scenes/weapons/presets/SingleLaserMk1.tscn")
|
||||
#const DEFAULT_HULL = preload("res://scenes/hulls/starterhull.tscn")
|
||||
#const DEFAULT_ENGINE = preload("res://scenes/engines/starterengine.tscn")
|
||||
#const DEFAULT_SHIELD = preload("res://scenes/shields/startershield.tscn")
|
||||
|
||||
const salt = "2ndbeam"
|
||||
const gameversion = "Ifre 1.0"
|
||||
const beta = false
|
||||
|
||||
static var profile : Profile = Profile.new()
|
||||
|
||||
## Creates a new profile if it doesn't exist
|
||||
static func profile_create(profile_name : String) -> void:
|
||||
profile = Profile.new()
|
||||
profile.profile_meta['meta']['profile_name'] = profile_name
|
||||
profile_save_from_meta(profile.profile_meta)
|
||||
|
||||
## Saves profile meta and includes game data if there is an active session.
|
||||
static func profile_save(scene : Node) -> void:
|
||||
if scene.name != "MainMenu":
|
||||
profile.profile_meta['game'] = {
|
||||
"ammo" : scene.ship.hull.ammunition,
|
||||
"hp" : scene.ship.hull.hp,
|
||||
"fuel" : scene.ship.hull.fuel,
|
||||
"money" : scene.ship.money,
|
||||
"cargo" : scene.ship.hull.cargo,
|
||||
"hulls" : scene.ship.hulls,
|
||||
"engines" : scene.ship.engines,
|
||||
"shields" : scene.ship.shields,
|
||||
"weapons" : scene.ship.weapons
|
||||
}
|
||||
if !scene.ship.quest.new or scene.ship.quest_completed:
|
||||
profile.profile_meta['game']['quest'] = {
|
||||
'type' : scene.ship.quest.type,
|
||||
'progress_max' : scene.ship.quest.progress_max,
|
||||
'reward_money' : scene.ship.quest.reward_money,
|
||||
'restrictions' : scene.ship.quest.restrictions,
|
||||
'data' : scene.ship.quest.data,
|
||||
'got_reward' : scene.ship.quest_completed
|
||||
}
|
||||
profile.profile_meta['game']['ship_equipment'] = {
|
||||
'hull' : scene.ship.hull.id,
|
||||
'engine' : scene.ship.engine.id,
|
||||
'shield' : scene.ship.shield.id,
|
||||
'primary_weapon' : scene.ship.primary_slot.get_child(0).id,
|
||||
'secondary_weapon' : scene.ship.secondary_slot.get_child(0).id
|
||||
}
|
||||
profile_save_from_meta(profile.profile_meta)
|
||||
|
||||
## Saves profile with provided profile meta
|
||||
static func profile_save_from_meta(profile_meta : Dictionary) -> void:
|
||||
var path = "user://"+profile_meta['meta']['profile_name']+".cosmic"
|
||||
profile_meta['meta']['last_version'] = gameversion
|
||||
profile_meta['meta']['last_updated'] = Time.get_datetime_string_from_system()
|
||||
for key in profile_meta['meta']:
|
||||
profile_meta['hash'][key] = (str(profile_meta['meta'][key]) + salt).sha256_buffer().hex_encode()
|
||||
if 'game' in profile_meta:
|
||||
for key in profile_meta['game']:
|
||||
profile_meta['hash'][key] = (str(profile_meta['game'][key]) + salt).sha256_buffer().hex_encode()
|
||||
var json_string = JSON.stringify(profile_meta, "\t")
|
||||
var file = FileAccess.open(path, FileAccess.WRITE)
|
||||
file.store_string(json_string)
|
||||
|
||||
## Returns profile meta of profile if it exists
|
||||
static func profile_load(profile_name : String) -> Dictionary:
|
||||
var path = "user://"+profile_name+".cosmic"
|
||||
if not FileAccess.file_exists(path):
|
||||
return {}
|
||||
var file = FileAccess.open(path, FileAccess.READ)
|
||||
var string = file.get_as_text()
|
||||
var profile_meta = JSON.parse_string(string)
|
||||
return profile_meta
|
||||
|
||||
## Deletes profile file if it exists
|
||||
static func profile_delete(profile_name : String) -> void:
|
||||
var path = "user://{profile}.cosmic".format({"profile": profile_name})
|
||||
if FileAccess.file_exists(path):
|
||||
var dir = DirAccess.open("user://")
|
||||
dir.remove(path)
|
||||
|
||||
## Compares existing hash and calculated hash of file and if they are not equal resaves file with legit = false. Either way it returns profile meta.
|
||||
static func profile_legit_check(profile_meta : Dictionary) -> Dictionary:
|
||||
var old_hash = []
|
||||
var new_hash = []
|
||||
if profile_meta == {}:
|
||||
return {}
|
||||
for key in profile_meta['meta']:
|
||||
old_hash.append(profile_meta['hash'][key])
|
||||
new_hash.append((str(profile_meta['meta'][key]) + salt).sha256_buffer().hex_encode())
|
||||
if 'game' in profile_meta:
|
||||
for key in profile_meta['game']:
|
||||
old_hash.append(profile_meta['hash'][key])
|
||||
new_hash.append((str(profile_meta['game'][key]) + salt).sha256_buffer().hex_encode())
|
||||
old_hash.sort()
|
||||
new_hash.sort()
|
||||
if old_hash == new_hash and profile_meta['meta']['legit']:
|
||||
return profile_meta
|
||||
profile_meta['meta']['legit'] = false
|
||||
profile_save_from_meta(profile_meta)
|
||||
return profile_meta
|
||||
|
||||
## Returns copy of loaded item resource in directory if it exists or DEFAULT_ITEM instead.
|
||||
static func get_item(id : String) -> Item:
|
||||
var path_name = id.to_lower().replace(" ", "_")
|
||||
var path = "res://items/{name}.tres".format({"name": path_name})
|
||||
if ResourceLoader.exists(path):
|
||||
var res = load(path)
|
||||
return res.duplicate()
|
||||
return null
|
||||
|
||||
## Returns weapon packed scene if it exists or DEFAULT_WEAPON instead
|
||||
static func get_weapon(id : String) -> PackedScene:
|
||||
var path = "res://scenes/weapons/presets/{name}.tscn".format({"name": id})
|
||||
var res = load(path)
|
||||
return res
|
||||
|
||||
static func get_module(id : String, type : String) -> PackedScene:
|
||||
var path = "res://scenes/{type}s/{name}.tscn".format({"name": id, "type": type})
|
||||
var res = load(path)
|
||||
return res
|
||||
11
scripts/Classes/item.gd
Normal file
11
scripts/Classes/item.gd
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
extends Resource
|
||||
|
||||
class_name Item
|
||||
|
||||
@export var name : String
|
||||
@export var description : String
|
||||
@export var min_price : float
|
||||
@export var max_price : float
|
||||
@export var weight : float
|
||||
@export var icon : Texture
|
||||
@export var type : Game.ITEM_TYPE
|
||||
32
scripts/Classes/profile.gd
Normal file
32
scripts/Classes/profile.gd
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
class_name Profile
|
||||
|
||||
var profile_meta = {
|
||||
'hash' : {},
|
||||
'meta' : {
|
||||
'created_in_version' : Game.gameversion,
|
||||
'creation_date' : Time.get_datetime_string_from_system(),
|
||||
'last_version' : Game.gameversion,
|
||||
'last_updated' : Time.get_datetime_string_from_system(),
|
||||
'profile_name' : "",
|
||||
'legit' : true
|
||||
}
|
||||
}
|
||||
|
||||
var path : set = _set_path
|
||||
|
||||
var is_root : set = _check_root
|
||||
|
||||
func _check_root(file_path):
|
||||
return file_path == "user://.cosmic"
|
||||
|
||||
func _set_path(name):
|
||||
return "user://{name}.cosmic".format({"name" : name})
|
||||
|
||||
static func create(meta):
|
||||
var profile = Profile.new()
|
||||
profile.profile_meta = meta
|
||||
profile.path = profile.profile_meta['meta']['profile_name']
|
||||
profile.is_root = profile.path
|
||||
if profile.is_root:
|
||||
profile.profile_meta['profiles'] = {}
|
||||
return profile
|
||||
41
scripts/Classes/quest.gd
Normal file
41
scripts/Classes/quest.gd
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
class_name Quest
|
||||
|
||||
enum TYPE {ELIMINATION, DELIVERY, ESCORT, RACE, DIVERSE}
|
||||
enum RESTRICTIONS{NO_DEATHS,NO_WEAPON,TIMER}
|
||||
|
||||
var type : Quest.TYPE = Quest.TYPE.ELIMINATION
|
||||
var progress_max : int = 1
|
||||
var progress : int = 0
|
||||
var reward_money : float
|
||||
var restrictions : Array[RESTRICTIONS] = []
|
||||
var data : Dictionary = {}
|
||||
var new : bool = true
|
||||
|
||||
signal quest_added
|
||||
signal quest_ended
|
||||
signal quest_failed
|
||||
|
||||
func create(type : TYPE, progress_max : int, reward_money : float, restrictions : Array[RESTRICTIONS] = [], data : Dictionary = {}) -> void:
|
||||
self.type = type
|
||||
self.progress_max = progress_max
|
||||
self.reward_money = reward_money
|
||||
self.restrictions = restrictions
|
||||
self.data = data
|
||||
quest_added.emit(self)
|
||||
self.new = false
|
||||
|
||||
func do_progress() -> void:
|
||||
progress += 1
|
||||
if progress >= progress_max:
|
||||
quest_ended.emit(true)
|
||||
|
||||
func fail() -> void:
|
||||
quest_failed.emit(false)
|
||||
|
||||
func _restriction_no_deaths() -> void:
|
||||
if restrictions.has(RESTRICTIONS.NO_DEATHS):
|
||||
fail()
|
||||
|
||||
func _restriction_no_weapon() -> void:
|
||||
if restrictions.has(RESTRICTIONS.NO_WEAPON):
|
||||
fail()
|
||||
Loading…
Add table
Add a link
Reference in a new issue