Weighted character selection
This commit is contained in:
@@ -26,7 +26,7 @@ func create_boss_button(boss: Dictionary) -> TextureButton:
|
||||
|
||||
|
||||
func _on_button_hovered(button: TextureButton, boss: Dictionary):
|
||||
#current_member = member
|
||||
#Generates the hovered tooltips
|
||||
#The backslash \ allows you to continue to the next line while concatenating the string
|
||||
var tooltip_text = "" + str(boss["name"]) + "\n" + "" + str(boss["description"]) + "\n" + "Total Health: " + str(boss["totalHealth"]) + "\n" + \
|
||||
"Minimum DPS Required: " + str(boss["minDPS"])
|
||||
@@ -38,7 +38,18 @@ func _on_button_exited(button: TextureButton):
|
||||
|
||||
|
||||
func _on_button_pressed(button: TextureButton, boss: Dictionary):
|
||||
#var character_manager = get_node("/root/Root/UI/CharacterRoll")
|
||||
#character_manager.roll_character()
|
||||
|
||||
$CharacterRoll.roll_character()
|
||||
#Checks you have the prerquisites, deducts damage
|
||||
if Global.globalDamagePerClick >= int(boss["minClickDmg"]):
|
||||
if Global.globalDamagePerSec >= int(boss["minDPS"]):
|
||||
if Global.globalDamage >= int(boss["totalHealth"]):
|
||||
var damageCost = int(boss["totalHealth"])
|
||||
var bossTier = boss["bossTier"]
|
||||
Global.globalDamage -= damageCost
|
||||
$CharacterRoll.roll_character(bossTier)
|
||||
else:
|
||||
print("Not enough Total Damage!")
|
||||
else:
|
||||
print("Not enough DPS!")
|
||||
else:
|
||||
print("Not enough Damage per Click!")
|
||||
|
||||
|
||||
@@ -2,11 +2,20 @@ extends PanelContainer
|
||||
|
||||
func _ready():
|
||||
load_character_inventory()
|
||||
|
||||
#pass
|
||||
|
||||
var character_data = []
|
||||
var getMembers = []
|
||||
|
||||
const Rarity = {
|
||||
"COMMON":1.0,
|
||||
"UNCOMMON": 0.8,
|
||||
"RARE": 0.4,
|
||||
"SUPERRARE": 0.08,
|
||||
"LEGENDARY": 0.02
|
||||
}
|
||||
|
||||
func load_character_inventory():
|
||||
var file_path = "user://MemberDatabase/memberData.json"
|
||||
if FileAccess.file_exists(file_path):
|
||||
@@ -52,17 +61,34 @@ func update_character(index, new_data):
|
||||
else:
|
||||
print("Invalid character index: ", index)
|
||||
|
||||
func roll_character():
|
||||
func roll_character(bossTier):
|
||||
if character_data.size() == 0:
|
||||
print("No characters in inventory.")
|
||||
return
|
||||
print("Boss tier is:", bossTier)
|
||||
getMembers = character_data["members"]
|
||||
var random_index = randi() % getMembers.size()
|
||||
var random_character = getMembers[random_index]
|
||||
if not random_character["isObtained"]:
|
||||
random_character["isObtained"] = true
|
||||
random_character["memberAmount"] += 1
|
||||
save_character_inventory()
|
||||
print("Rolled character: ", random_character["name"])
|
||||
var rolledcharacter = choose_weighted_random_member(getMembers)
|
||||
print("Weighted Character:", rolledcharacter)
|
||||
for entry in getMembers:
|
||||
if entry["name"] == rolledcharacter["name"]:
|
||||
#var random_character = getMembers[entry]
|
||||
#print ("Matched", entry["name"], "to", rolledcharacter["name"])
|
||||
if not rolledcharacter["isObtained"]:
|
||||
rolledcharacter["isObtained"] = true
|
||||
rolledcharacter["memberAmount"] += 1
|
||||
save_character_inventory()
|
||||
|
||||
|
||||
func choose_weighted_random_member(getMembers):
|
||||
var total_weight = 0.0
|
||||
for member in getMembers:
|
||||
total_weight += Rarity.get(member["rarity"], 0)
|
||||
|
||||
var random_value = randf() * total_weight
|
||||
var cumulative_weight = 0.0
|
||||
|
||||
for member in getMembers:
|
||||
cumulative_weight += Rarity.get(member["rarity"], 0)
|
||||
if random_value < cumulative_weight:
|
||||
return member
|
||||
return null # Fallback if something goes wrong
|
||||
|
||||
Reference in New Issue
Block a user