Files
GGJ26/scenes/managers/masked_chara.gd
minimata 69e5bea39c
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 10s
Create tag and build when new code gets to main / Export (push) Successful in 1m26s
bro this starts looking good
2026-01-31 21:21:51 +01:00

55 lines
1.8 KiB
GDScript

extends Resource
class_name MaskedChara
@export var character: CharacterResource
@export var face_mask: MaskResource
@export var mouth_mask: MaskResource
@export var pref_score_map: Dictionary[CharacterResource.Preference, float] = {
CharacterResource.Preference.LOVE: 2.0,
CharacterResource.Preference.APPROVE: 1.0,
CharacterResource.Preference.DONT_CARE: 0.0,
CharacterResource.Preference.DISAPPROVE: -1.0,
CharacterResource.Preference.HATE: -2.0,
}
func _init(
p_character: CharacterResource = CharacterResource.new(),
p_mask_face: MaskResource = MaskResource.new(),
p_mask_mouth: MaskResource = MaskResource.new()):
character = p_character
face_mask = p_mask_face
mouth_mask = p_mask_mouth
func compute_score(other_guests: Array[MaskedChara]) -> float:
var overall_score = 0.0
var preferences = character.preferences
for guest in other_guests:
if guest == null:
continue
var guest_mouth_mask = guest.mouth_mask
var guest_traits = guest.character.traits
var guest_appreciation = 0.0
for guest_trait in guest_traits:
var trait_strength = 0.0
for stimuli in guest_trait.stimulis:
var strength = stimuli
if guest_mouth_mask != null and stimuli == guest_mouth_mask.stimuli:
strength *= guest_mouth_mask.stimuli_multiplier
if face_mask != null and stimuli == face_mask.stimuli:
strength *= face_mask.stimuli_multiplier
trait_strength += strength
var preference = character.preferences.get(guest_trait.tag) if guest_trait.tag in character.preferences else CharacterResource.Preference.APPROVE
var score_multiplier = pref_score_map.get(preference) if preference in pref_score_map else 1.0
guest_appreciation += trait_strength*score_multiplier
overall_score += guest_appreciation
print("%s score: %s" % [character.name, overall_score])
return overall_score