basic score computing
This commit is contained in:
@@ -11,6 +11,9 @@ class_name GameManager
|
||||
@export var guest_list: List
|
||||
@export var mask_list: List
|
||||
|
||||
@export_category("Tables")
|
||||
@export var tables: Array[Table]
|
||||
|
||||
@export_category("Predetermined levels")
|
||||
@export_group("Level 1")
|
||||
@export var lvl1_guest_1: MaskedChara
|
||||
@@ -43,6 +46,7 @@ var current_guest: MaskedChara
|
||||
var selected_seat: Seat
|
||||
|
||||
@onready var camera_2d: Camera2D = $"../Camera2D"
|
||||
@onready var ring_bell: Sprite2D = $"../RingBell"
|
||||
|
||||
|
||||
func create_new_roster() -> void:
|
||||
@@ -97,7 +101,28 @@ func review_next_guest():
|
||||
character.come_in()
|
||||
|
||||
func compute_ending():
|
||||
print("to ending")
|
||||
var camera_tween = get_tree().create_tween()
|
||||
camera_tween.set_ease(Tween.EASE_IN_OUT)
|
||||
camera_tween.set_trans(Tween.TRANS_CUBIC)
|
||||
camera_tween.tween_property(camera_2d, "position", Vector2(2720.0, 0), 1.0)
|
||||
camera_tween.tween_callback(ending_tween_cb)
|
||||
|
||||
func ending_tween_cb():
|
||||
var final_score = 0.0
|
||||
for table in tables:
|
||||
final_score += table.compute_score()
|
||||
|
||||
print("Final score: %s" % final_score)
|
||||
|
||||
# Progress levels
|
||||
current_game_state = GameState.READY
|
||||
ring_bell.visible = true
|
||||
mask_list.visible = false
|
||||
if current_level == Levels.LVL1:
|
||||
current_level = Levels.LVL2
|
||||
else:
|
||||
current_level = Levels.RANDOM
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
@@ -118,18 +143,16 @@ func on_ready_bell_pressed() -> void:
|
||||
if(current_game_state != GameState.READY):
|
||||
return
|
||||
|
||||
print("ready bell pressed")
|
||||
|
||||
if current_level == Levels.LVL1:
|
||||
print("prepare_level_one")
|
||||
current_chara_roster = [lvl1_guest_1, lvl1_guest_2]
|
||||
elif current_level == Levels.LVL2:
|
||||
print("prepare_level_two")
|
||||
current_chara_roster = [lvl2_guest_1, lvl2_guest_2]
|
||||
else:
|
||||
create_new_roster()
|
||||
|
||||
current_game_state = GameState.GUEST_REVIEW
|
||||
ring_bell.visible = false
|
||||
mask_list.visible = true
|
||||
first_guest = true
|
||||
review_next_guest()
|
||||
|
||||
|
||||
@@ -5,10 +5,14 @@ class_name MaskedChara
|
||||
@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,
|
||||
}
|
||||
|
||||
# Make sure that every parameter has a default value.
|
||||
# Otherwise, there will be problems with creating and editing
|
||||
# your resource via the inspector.
|
||||
func _init(
|
||||
p_character: CharacterResource = CharacterResource.new(),
|
||||
p_mask_face: MaskResource = MaskResource.new(),
|
||||
@@ -16,3 +20,35 @@ func _init(
|
||||
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 stimuli == guest_mouth_mask.stimuli:
|
||||
strength *= guest_mouth_mask.stimuli_multiplier
|
||||
if 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
|
||||
|
||||
Reference in New Issue
Block a user