diff --git a/game_manager.gd b/game_manager.gd index 140e593..ab7f938 100644 --- a/game_manager.gd +++ b/game_manager.gd @@ -4,6 +4,9 @@ class_name GameManager extends Node2D @export var desk: Desk @export var turn_manager: TurnManager +signal lost +signal won + var paintings_sold = 0 @export var paintings_total = 7 @@ -31,36 +34,36 @@ signal new_painting_displayed func _ready() -> void: audience_manager.ask_accepted.connect(_handle_ask_accepted) desk.gavel.gavel_hit.connect(_handle_gavel_hit) - + #paintings_total = randi_range(7,10) target_sales = randi_range(2,5) * sales_magnitude - + var new_painting = 0 var new_painting_value: int - + while new_painting < paintings_total: new_painting_value = (target_sales/randf_range(paintings_total - 2, paintings_total + 2)) new_painting_value = snappedi(new_painting_value, single_painting_magnitude) print(str(new_painting_value)) paintings.append(new_painting_value) new_painting += 1 - + print(paintings) print("You have " + str(paintings_total) + " paintings. Sell them for at least $" + str(target_sales) + " or face the consequences!") print("Hit the gavel and input the starting price to begin!") - + DisplayServer.tts_speak("You have " + str(paintings_total) + " paintings. Sell them fast for at least $" + str(target_sales) + " or face the consequences!", turn_manager.voice_id, turn_manager.tts_volume, turn_manager.tts_pitch) DisplayServer.tts_speak("Hit the gavel and input the starting price to begin!", turn_manager.voice_id, turn_manager.tts_volume, turn_manager.tts_pitch) - + next_painting(0) #build out the initialization process, which should: # -- generate paintings and assign values # -- start the turn timer/auction timer # ---- also add an auction timer # -- have tts announcement of starting bid and start of auction - - - + + + func _handle_gavel_hit(): if state == bidding_state.CLOSED: @@ -81,7 +84,7 @@ func _handle_gavel_hit(): (print(str(state))) else: end_auction() - + else: pass @@ -101,7 +104,7 @@ func next_painting(a: int): $NextPainting.play() starting_price = paintings[a] current_bid = 0 - + # will need to add animation/image swap new_painting_displayed.emit() diff --git a/hotline_miami.gd b/hotline_miami.gd new file mode 100644 index 0000000..4fecabf --- /dev/null +++ b/hotline_miami.gd @@ -0,0 +1,26 @@ +extends Node2D + +@export var viewport_x_div: float +@export var viewport_y_div: float +@export var x_offset: float = 0.0 + +var sway_amplitude = 20 +var sway_speed = 1.0 +var tilt_amplitude = 0.1 +var tilt_lerp_speed = 5.0 + +var time := 0.0 +var base_position := Vector2.ZERO + +func _ready(): + var viewport_size = get_viewport_rect().size + base_position = Vector2(viewport_size.x / viewport_x_div + x_offset, viewport_size.y / viewport_y_div) + position = base_position + +func _process(delta): + time += delta + var sway_offset = sin(time * sway_speed) * sway_amplitude + position.x = base_position.x + sway_offset + var sway_velocity = cos(time * sway_speed) * sway_speed + var target_rotation = clamp(sway_velocity * tilt_amplitude, -tilt_amplitude, tilt_amplitude) + rotation = lerp(rotation, target_rotation, delta * tilt_lerp_speed) diff --git a/hotline_miami.gd.uid b/hotline_miami.gd.uid new file mode 100644 index 0000000..c779af7 --- /dev/null +++ b/hotline_miami.gd.uid @@ -0,0 +1 @@ +uid://bmn6cds78753q diff --git a/loss.ogg b/loss.ogg new file mode 100644 index 0000000..89dc3b0 Binary files /dev/null and b/loss.ogg differ diff --git a/loss.ogg.import b/loss.ogg.import new file mode 100644 index 0000000..7ae1390 --- /dev/null +++ b/loss.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://b5r5846lmi31v" +path="res://.godot/imported/loss.ogg-a53eed42c0a67db7c9fc2938cae26881.oggvorbisstr" + +[deps] + +source_file="res://loss.ogg" +dest_files=["res://.godot/imported/loss.ogg-a53eed42c0a67db7c9fc2938cae26881.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/main.tscn b/main.tscn index c2e9bf0..12d4d6b 100644 --- a/main.tscn +++ b/main.tscn @@ -47,6 +47,7 @@ texture = ExtResource("3_272bh") position = Vector2(1075, 130) [node name="GameManager" type="Node2D" parent="." node_paths=PackedStringArray("audience_manager", "desk", "turn_manager", "current_bid_display")] +unique_name_in_owner = true script = ExtResource("1_ig7tw") audience_manager = NodePath("../AudienceManager") desk = NodePath("../Desk") diff --git a/score_screen.gd b/score_screen.gd new file mode 100644 index 0000000..5917771 --- /dev/null +++ b/score_screen.gd @@ -0,0 +1,28 @@ +extends Node2D + +signal restart_game + +var input_received = false + +func _ready() -> void: + win() + +func win(): + $MorshoReactManager/MorshoHappy.visible = true + $MorshoReactManager/MorshoAngry.visible = false + %WinLossAudioPlayer.stream = load("res://win.ogg") + %WinLossAudioPlayer.play() + +func lose(): + $MorshoReactManager/MorshoAngry.visible = true + $MorshoReactManager/MorshoHappy.visible = false + %WinLossAudioPlayer.stream = load("res://loss.ogg") + %WinLossAudioPlayer.play() + +func _input(event): + if input_received: + return + + if event is InputEventKey or event is InputEventMouseButton: + input_received = true + emit_signal("restart_game") diff --git a/score_screen.gd.uid b/score_screen.gd.uid new file mode 100644 index 0000000..9f60175 --- /dev/null +++ b/score_screen.gd.uid @@ -0,0 +1 @@ +uid://cp71ivjeuuaaf diff --git a/score_screen.tscn b/score_screen.tscn index 0a7ebf9..5e92991 100644 --- a/score_screen.tscn +++ b/score_screen.tscn @@ -1,10 +1,13 @@ -[gd_scene load_steps=4 format=3 uid="uid://bcnpjrwddi5h8"] +[gd_scene load_steps=6 format=3 uid="uid://bcnpjrwddi5h8"] [ext_resource type="Theme" uid="uid://d2rlcffg7nguy" path="res://menus.tres" id="1_3r2db"] +[ext_resource type="Script" uid="uid://cp71ivjeuuaaf" path="res://score_screen.gd" id="1_cyy7t"] [ext_resource type="Texture2D" uid="uid://cabsfveh1oc6i" path="res://assets/menus/final score/morshu-happy-large.png" id="1_juxjb"] [ext_resource type="Texture2D" uid="uid://d24dlalqmr6r0" path="res://assets/menus/final score/morshu-anger-large.png" id="2_3r2db"] +[ext_resource type="Script" path="res://hotline_miami.gd" id="4_joumd"] [node name="ScoreScreen" type="Node2D"] +script = ExtResource("1_cyy7t") [node name="Control" type="Control" parent="."] layout_mode = 3 @@ -37,9 +40,12 @@ horizontal_alignment = 1 vertical_alignment = 1 [node name="MorshoReactManager" type="Node2D" parent="."] +texture_filter = 1 position = Vector2(870, 360) -rotation = 0.20420352 scale = Vector2(2.5, 2.5) +script = ExtResource("4_joumd") +viewport_x_div = 1.5 +viewport_y_div = 2.0 [node name="MorshoHappy" type="Sprite2D" parent="MorshoReactManager"] texture = ExtResource("1_juxjb") @@ -47,3 +53,6 @@ texture = ExtResource("1_juxjb") [node name="MorshoAngry" type="Sprite2D" parent="MorshoReactManager"] visible = false texture = ExtResource("2_3r2db") + +[node name="WinLossAudioPlayer" type="AudioStreamPlayer" parent="."] +unique_name_in_owner = true diff --git a/win.ogg b/win.ogg new file mode 100644 index 0000000..9c131e4 Binary files /dev/null and b/win.ogg differ diff --git a/win.ogg.import b/win.ogg.import new file mode 100644 index 0000000..5f8ae3a --- /dev/null +++ b/win.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://2g0mcrbwnkfc" +path="res://.godot/imported/win.ogg-925680d4a92658a999b17dd5ae4db057.oggvorbisstr" + +[deps] + +source_file="res://win.ogg" +dest_files=["res://.godot/imported/win.ogg-925680d4a92658a999b17dd5ae4db057.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/world.gd b/world.gd index 557fde3..abfeb1f 100644 --- a/world.gd +++ b/world.gd @@ -2,7 +2,6 @@ extends Control enum GameState { MAIN_MENU, GAME, LOSS, WIN } var current_game_state: GameState = GameState.MAIN_MENU -var manager var main_menu_scene = preload("res://main_menu.tscn") var game_scene = preload("res://main.tscn") @@ -16,41 +15,49 @@ func transition(new_state: GameState): if new_state == GameState.MAIN_MENU: var main_menu_instance = main_menu_scene.instantiate() - add_child(main_menu_scene) + add_child(main_menu_instance) elif new_state == GameState.GAME: var game_instance = game_scene.instantiate() add_child(game_instance) + var manager = game_instance.get_node("%GameManager") + manager.lost.connect(_on_loss) + manager.won.connect(_on_win) elif new_state == GameState.LOSS: var score_screen_instance = score_screen_scene.instantiate() add_child(score_screen_instance) - score_screen_instance.win() + score_screen_instance.lose() + score_screen_instance.restart_game.connect(_on_restart) elif new_state == GameState.WIN: - pass + var score_screen_instance = score_screen_scene.instantiate() + add_child(score_screen_instance) + score_screen_instance.win() + score_screen_instance.restart_game.connect(_on_restart) # Clean up old scene match (current_game_state): GameState.MAIN_MENU: var main_menu_instance = $MainMenu - var main_menu_instance.destroy() + main_menu_instance.queue_free() GameState.GAME: var main_instance = $Main - main_instance.destroy() + main_instance.queue_free() GameState.LOSS: var score_screen_instance = $ScoreScreen - score_screen_instance.destroy() + score_screen_instance.queue_free() GameState.WIN: var score_screen_instance = $ScoreScreen - score_screen_instance.destroy() + score_screen_instance.queue_free() current_game_state = new_state func _on_main_menu_interacted(): transition(GameState.GAME) - add_child(manager) - manager.failed.connect(_on_loss) func _on_loss(): transition(GameState.LOSS) func _on_win(): transition(GameState.WIN) + +func _on_restart(): + transition(GameState.GAME)