extends Control const MeritProfileScene = preload("res://addons/majority_judgment/nodes/MajorityJudgmentMeritProfileControl.tscn") export(Resource) var poll setget set_poll, get_poll #func _ready(): # set_poll(load("res://test_poll.tres")) func get_poll() -> MajorityJudgmentPoll: return poll func set_poll(__poll:MajorityJudgmentPoll): poll = __poll craft_nodes() update_nodes() var provider = MajorityJudgmentDemoProvider.new() start_provider(provider) # yield(get_tree().create_timer(3), "timeout") # # var j = MajorityJudgmentJudgment.new() # j.set_participant(MajorityJudgmentParticipant.make("Plume")) # j.set_grade(poll.grading.grades[2]) # j.set_candidate(poll.candidates[0]) # poll.add_judgment(j) # # var sylvain = MajorityJudgmentParticipant.make("Sylvain") # j = MajorityJudgmentJudgment.new() # j.set_participant(sylvain) # j.set_grade(poll.grading.grades[3]) # j.set_candidate(poll.candidates[0]) # poll.add_judgment(j) # j = MajorityJudgmentJudgment.new() # j.set_participant(sylvain) # j.set_grade(poll.grading.grades[3]) # j.set_candidate(poll.candidates[1]) # poll.add_judgment(j) # j = MajorityJudgmentJudgment.new() # j.set_participant(sylvain) # j.set_grade(poll.grading.grades[4]) # j.set_candidate(poll.candidates[2]) # poll.add_judgment(j) # # j = MajorityJudgmentJudgment.new() # j.set_participant(MajorityJudgmentParticipant.make("Sabre")) # j.set_grade(poll.grading.grades[5]) # j.set_candidate(poll.candidates[0]) # poll.add_judgment(j) # # update_nodes() # # yield(get_tree().create_timer(2), "timeout") # # var tiger = MajorityJudgmentParticipant.make("Tiger") # j = MajorityJudgmentJudgment.new() # j.set_participant(tiger) # j.set_grade(poll.grading.grades[4]) # j.set_candidate(poll.candidates[0]) # poll.add_judgment(j) # update_nodes() # # yield(get_tree().create_timer(2), "timeout") # # j = MajorityJudgmentJudgment.new() # j.set_participant(tiger) # j.set_grade(poll.grading.grades[1]) # j.set_candidate(poll.candidates[2]) # poll.add_judgment(j) # update_nodes() var profiles_nodes := Array() func craft_nodes(): var tally : MajorityJudgmentPollTally = get_poll().tally() var candidate_index = 0 # as they were initially written, before the sort for candidate in get_poll().get_candidates(): # var candidate_tally := tally.get_tally_of_candidate(candidate) # var merit_profile = candidate_tally.merit_profile var profile = create_merit_profile_scene(6) if tally: profile.refresh(tally.get_tally_of_candidate(candidate).merit_profile) var height = profile.compute_height() # profile.margin_top = candidate_index * 50 # profile.margin_left = 0 # profile.margin_right = 0 # profile.margin_bottom = candidate_index * 50 + 42 profile.rect_min_size = Vector2(400, height) var container = $CenterContainer/ProfilesContainer var wrapper = HBoxContainer.new() var candidate_label = Label.new() candidate_label.text = candidate.get_name() candidate_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL # candidate_label.size_flags_vertical = Control.SIZE_EXPAND_FILL candidate_label.rect_min_size = Vector2(70, height) candidate_label.valign = Label.VALIGN_CENTER candidate_label.align = Label.ALIGN_RIGHT wrapper.add_child(candidate_label) wrapper.add_child(profile) container.add_child(wrapper) profiles_nodes.append(profile) candidate_index += 1 func update_nodes(): var tally : MajorityJudgmentPollTally = get_poll().tally() var candidate_index = 0 # as they were initially written, before the sort for candidate in get_poll().get_candidates(): var profile = profiles_nodes[candidate_index] if tally: var merit = tally.get_tally_of_candidate(candidate).merit_profile profile.refresh(merit) else: var merit = poll.get_dummy_merit_profile(candidate) profile.refresh(merit) candidate_index += 1 #func test(): # var poll : MajorityJudgmentPoll = MajorityJudgmentPoll.make( # "Test", # MajorityJudgmentGrading.make_quality_6(), # [ # MajorityJudgmentCandidate.make("Candidate A"), # MajorityJudgmentCandidate.make("Candidate B"), # MajorityJudgmentCandidate.make("Candidate C"), # ] # ) # # var poll_tally = MajorityJudgmentPollTally.new() # poll_tally.poll = poll # var candidate_tallies = Array() # var candidate_tally := MajorityJudgmentCandidateTally.new() # candidate_tally.poll = poll # candidate_tally.merit_profile = MajorityJudgmentCandidateMeritProfile.new() # candidate_tally.merit_profile.grades = [ # 10, # 2, # 5, # 7, # 1, # 11, # ] # candidate_tally.merit_profile.candidate_tally = candidate_tally # candidate_tallies.append(candidate_tally) # create_merit_profile_scene(candidate_tally.merit_profile) # ## candidate_tally = MajorityJudgmentCandidateTally.new() ## candidate_tally.merit_profile = MajorityJudgmentCandidateMeritProfile.new() ## candidate_tally.merit_profile.grades = [ ## 2, ## 7, ## 10, ## 11, ## 1, ## 5, ## ] ## candidate_tallies.append(candidate_tally) ## create_merit_profile_scene(candidate_tally.merit_profile) # # poll_tally.candidates_tallies = candidate_tallies func create_merit_profile_scene(gradation_size:int): var mps = MeritProfileScene.instance() mps.set_poll(get_poll()) mps.craft_nodes(gradation_size) return mps var provider:MajorityJudgmentAbstractJudgmentsProvider func start_provider(__provider): self.provider = __provider var connected = self.provider.connect( "judgment_emitted", self, "__on_judgment_emitted" ) self.provider.start_providing() var known_participants := Dictionary() # id => Participant func get_or_create_participant(identifier:String) -> MajorityJudgmentParticipant: if not known_participants.has(identifier): known_participants[identifier] = MajorityJudgmentParticipant.make(identifier) return known_participants[identifier] func __on_judgment_emitted(author_identifier, grade_index, candidate_index): # Data comes from userland, best be careful here var j = MajorityJudgmentJudgment.new() j.set_participant(get_or_create_participant(author_identifier)) j.set_grade(poll.grading.grades[grade_index]) j.set_candidate(poll.candidates[candidate_index]) poll.add_judgment(j) update_nodes()