2022-09-18 17:40:23 +00:00
#GAME:
# Controls output space, loading descriptions and options for each locale and
# appending to the history array.
extends Control
#Source for module file: to the GU
#export(String, FILE, "*.json") var module_file_path:String
#DKM TEMP:
var module_file_path = " res://_userFiles/Module_Demo_001.json "
onready var history_source = get_node ( " /root/History " ) . historyScreensSingleton
onready var settings = get_node ( " /root/GlobalSaveInstance " ) . settingsInstance
#Abstract class we instance when wanted in game as child of HistoryReference
const TextOutput = preload ( " res://UserInterface/Response.tscn " )
const InputResponse = preload ( " res://UserInterface/InputResponse.tscn " )
const OptionOutput = preload ( " res://UserInterface/Option.tscn " )
onready var current_text = $ Background / MarginContainer / Rows / GameInfo / CurrentText
onready var options_container = $ Background / MarginContainer / Rows / InputArea / ScrollContainer / OptionsContainer
onready var pSingleton = get_node ( " /root/PlayerCharacter " )
onready var charSheet = $ Con_charSheet / MarginContainer / VBoxContainer / CharacterSheet
#DKM TEMP: this is just a temp file solution for grabbing map/module, will be replaced with DB
# or desired load approach
onready var module_map = " res://_userFiles/temp_map.save "
var nodeArray
func _ready ( ) - > void :
save_module ( )
theme = load ( settings . themeFile )
#DKM TEMP: testing:
var moduleDict = loadJSONToDict ( module_file_path )
#DKM TEMP: this needs to be refactored to reposition this initialization
var i = 0
#print("Looking for JSON at: " + module_file_path)
#print("Json returned as: " + str(moduleDict))
var initialNode = Locale . new ( )
nodeArray = [ initialNode ]
for moduleNode in moduleDict . values ( ) :
if nodeArray . size ( ) < = i :
var newNode = Locale . new ( )
nodeArray . append ( newNode )
nodeArray [ i ] . locale_name = moduleNode . get ( " Id " )
nodeArray [ i ] . locale_description = moduleNode . get ( " Text " )
nodeArray [ i ] . locale_action = moduleNode . get ( " Action " )
var actionParameters = moduleNode . get ( " A_Params " )
for p in actionParameters :
nodeArray [ i ] . locale_action_params . append ( p )
var nodeOptions = moduleNode . get ( " Option_Labels " )
for option in nodeOptions :
nodeArray [ i ] . options_array . append ( option )
#print("For #" + str(i) + ": appended option of: " + str(option))
var nodeDestinations = moduleNode . get ( " Option_GoTos " )
for dest in nodeDestinations :
nodeArray [ i ] . destinations_array . append ( dest )
#print("For #" + str(i) + ": appended go to destination of: " + str(dest))
#print("Node array name for #" + str(i) + ": " + nodeArray[i].locale_name)
i = i + 1
current_text . show ( )
#Load character sheet:
charSheet . text = pSingleton . pc . pcText
create_response ( nodeArray [ 0 ] . locale_description )
#DKM TEMP: another that needs to be broken out when ready:
clear_prior_options ( )
i = 0
for option in nodeArray [ 0 ] . options_array :
var destArr = nodeArray [ 0 ] . destinations_array
create_option ( option , destArr [ i ] )
i = i + 1
options_container . get_child ( 0 ) . grab_focus ( )
#DKM TEMP: convert JSON file to dictionary for module import:
func loadJSONToDict ( filepath : String ) - > Dictionary :
var file = File . new ( )
#assert file.file_exists(filepath)
file . open ( filepath , file . READ )
var moduleDict = parse_json ( file . get_as_text ( ) )
#assert moduleDict.size() > 0
return moduleDict
#Handles input text
func create_response ( response_text : String ) :
var response = TextOutput . instance ( )
response . text = response_text
add_response_to_game ( response )
#Copies the response output to add to both current game output, and the
# history array.
func add_response_to_game ( response : Control ) :
add_response_to_history ( response )
if ( current_text . get_child_count ( ) > 0 ) :
current_text . remove_child ( current_text . get_child ( 0 ) )
current_text . add_child ( response )
func add_response_to_history ( response : Control ) - > void :
#DKM TEMP: so here we
#1. var response_history = response.duplicate()
var response_for_history = response . duplicate ( )
#2. get the history array from the singleton,
#3. Add this to the history array
history_source . output_history_array . append ( response_for_history )
func clear_prior_options ( ) - > void :
for n in options_container . get_children ( ) :
options_container . remove_child ( n )
n . queue_free ( )
func create_option ( option : String , dest : String ) - > void :
#print("Received request to make option for label: " + option +"; and destination: " + dest)
var optionNew = OptionOutput . instance ( )
optionNew . destinationLabel = dest
optionNew . text = option
add_option_to_game ( optionNew )
func add_option_to_game ( optionNew : Control ) - > void :
options_container . add_child ( optionNew )
var newOptNumber = options_container . get_child_count ( )
if newOptNumber - 1 > = 0 :
#print("New added opt is: " + str(newOptNumber-1))
options_container . get_child ( newOptNumber - 1 ) . connect ( " option_pressed " , self , " _on_option_pressed " )
#DKM TEMP: these need to be dynamically added with the options themselves
func _on_option_pressed ( destinationSelected : String ) - > void :
#print("Destination node for pressed option is: " + destinationSelected)
change_node ( destinationSelected )
func get_node_by_name ( nodeName : String ) - > Locale :
for n in nodeArray :
if n . locale_name == nodeName :
return n
return nodeArray [ 0 ]
func change_node ( destinationNode : String , destinationParams : Array = [ ] ) - > void :
var target_Locale = get_node_by_name ( destinationNode )
#Run provided action:
if target_Locale . locale_action == " ShowText " :
action_show_text ( target_Locale )
elif target_Locale . locale_action == " RollDice " && target_Locale . destinations_array . size ( ) == 1 :
action_roll_die ( target_Locale )
#DKM TEMP: testing passed param handling by node to node
elif target_Locale . locale_action == " TestHandleNodeParams " :
create_response ( target_Locale . locale_description + str ( destinationParams ) )
clear_prior_options ( )
var i = 0
for option in target_Locale . options_array :
var destArr = target_Locale . destinations_array
create_option ( option , destArr [ i ] )
i = i + 1
2022-09-25 20:46:10 +00:00
#DKM TEMP: running an ability check test on passed node: -- this is only built out for agility and strength in this test
# Def needs all kinds of refactor
elif target_Locale . locale_action == " TestAbstractAbilityCheck " :
var check_result = " NA "
print ( " DKM TEMP: passed stat is : " + target_Locale . locale_action_params [ 0 ] )
if ( target_Locale . locale_action_params [ 0 ] in pSingleton . pc . viableCharStats ) :
match target_Locale . locale_action_params [ 0 ] :
" AG " :
if ( int ( destinationParams [ 0 ] ) < = pSingleton . pc . agility ) :
check_result = " PASS "
else :
check_result = " FAIL "
" ST " :
if ( int ( destinationParams [ 0 ] ) < = pSingleton . pc . strength ) :
check_result = " PASS "
else :
check_result = " FAIL "
create_response ( target_Locale . locale_description + check_result + " with roll of: " + str ( destinationParams ) + " ; on ability of: " + str ( pSingleton . pc . strength ) )
clear_prior_options ( )
var i = 0
for option in target_Locale . options_array :
var destArr = target_Locale . destinations_array
create_option ( option , destArr [ i ] )
i = i + 1
2022-09-18 17:40:23 +00:00
options_container . get_child ( 0 ) . grab_focus ( )
func action_show_text ( newLocale : Locale ) - > void :
create_response ( newLocale . locale_description )
clear_prior_options ( )
var i = 0
for option in newLocale . options_array :
var destArr = newLocale . destinations_array
create_option ( option , destArr [ i ] )
i = i + 1
func action_roll_die ( newLocale : Locale ) - > void :
print ( " Running test action " + newLocale . locale_action + " ; with parameters of: " )
var nodeParameters = [ ]
for param in newLocale . locale_action_params :
print ( param )
nodeParameters . append ( param )
#DKM TEST: testing the die roller with Andrew's code; randomly assigning percentage to pass.
# Should this param be optional if you purely want to roll dice?
var dieParams = nodeParameters
DiceRoller . dieManager . clearData ( )
DiceRoller . dieManager . setDieManager ( dieParams , 0.5 )
var result = DiceRoller . dieManager . rollDice ( )
print ( " Rolled values: " + str ( result [ 0 ] ) )
2022-09-25 20:46:10 +00:00
if ( DiceRoller . dieManager . isPercentageRoll ) :
var percDie = int ( result [ 1 ] * 100 )
print ( " DKM TEMP: is percentage roll and perc res is: " + str ( percDie ) )
var perc_result = [ percDie ]
change_node ( newLocale . destinations_array [ 0 ] , perc_result )
else :
change_node ( newLocale . destinations_array [ 0 ] , result [ 0 ] )
2022-09-18 17:40:23 +00:00
#DKM TEMP: Andrew's code for ref:
#assigning variable names to each of them for better clarity
# var rolledValues = result[0]
# var percentRolled = result[1]
# var passResult = result[2]
# var neededPercent = result[3]
# var degreeOfSuccess = result[4]
# var dice = result[5]
#DKM TEMP: saves the entire scene in one packed scene file
func save_module ( ) :
var scene = PackedScene . new ( )
scene . pack ( self )
ResourceSaver . save ( " user://game_01.tscn " , scene )