finished game 👍
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
extends Node2D
|
||||
|
||||
|
||||
func _ready():
|
||||
var v: bool = randi_range(0, 1) == 0
|
||||
if $Anchor/Audience1 == null or $Anchor/Audience2 == null:
|
||||
return
|
||||
|
||||
$Anchor/Audience1.visible = v
|
||||
$Anchor/Audience2.visible = not v
|
||||
|
||||
$AnimationPlayer.speed_scale = randf_range(0.75, 1.25)
|
||||
await get_tree().create_timer(randf_range(0, 2)).timeout
|
||||
$AnimationPlayer.play("bounce")
|
||||
@@ -0,0 +1 @@
|
||||
uid://dwbxgtss31a7h
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
|
||||
@export var speed: float = 1.0
|
||||
@export var increment: float = 0.01
|
||||
|
||||
|
||||
func _process(delta: float):
|
||||
if $AnimationPlayer.is_playing(): return
|
||||
|
||||
$AnimationPlayer.play("sway")
|
||||
speed += increment
|
||||
$AnimationPlayer.speed_scale = speed
|
||||
@@ -0,0 +1 @@
|
||||
uid://k468mwx8avg5
|
||||
@@ -0,0 +1,28 @@
|
||||
extends Control
|
||||
|
||||
|
||||
var main_menu = preload("res://scenes/main_menu.tscn")
|
||||
|
||||
|
||||
func trigger():
|
||||
$Survived.text = "Time Spent Surviving the Rapture: " \
|
||||
+ str(int($/root/Node2D.time_survived))
|
||||
self.visible = true
|
||||
$AnimationPlayer.play("GameOver")
|
||||
|
||||
|
||||
func _ready():
|
||||
self.visible = false
|
||||
|
||||
|
||||
func end():
|
||||
var menu = main_menu.instantiate()
|
||||
var tree = get_tree()
|
||||
tree.root.add_child(menu)
|
||||
var old_scene = tree.current_scene
|
||||
tree.current_scene = menu
|
||||
old_scene.free()
|
||||
|
||||
|
||||
func _on_back_to_menu_pressed():
|
||||
end()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dc0fcpq3htyy4
|
||||
@@ -0,0 +1,12 @@
|
||||
extends Node2D
|
||||
|
||||
|
||||
var time_survived: float = 0.0
|
||||
|
||||
|
||||
func _ready():
|
||||
get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_VIEWPORT
|
||||
|
||||
|
||||
func _process(delta: float):
|
||||
time_survived += delta
|
||||
@@ -0,0 +1 @@
|
||||
uid://hickb1h8ci77
|
||||
@@ -0,0 +1,74 @@
|
||||
extends RigidBody2D
|
||||
|
||||
|
||||
@export var particles: GPUParticles2D
|
||||
@export var rider: Node2D
|
||||
|
||||
|
||||
var held: bool
|
||||
var anchored: bool
|
||||
var anchor: Marker2D
|
||||
|
||||
|
||||
var is_init: bool = false
|
||||
|
||||
|
||||
func _ready():
|
||||
self.get_parent().children_ready += 1
|
||||
|
||||
|
||||
func init():
|
||||
anchor.limb = self
|
||||
is_init = true
|
||||
|
||||
|
||||
func _process(delta: float):
|
||||
if self.get_parent().is_init == true and not is_init:
|
||||
init()
|
||||
|
||||
if (not Input.is_mouse_button_pressed(MouseButton.MOUSE_BUTTON_LEFT) \
|
||||
or anchored) and held:
|
||||
held = false
|
||||
rider.is_grabbed_anywhere = false
|
||||
on_ungrab()
|
||||
|
||||
if not held and anchored: move_to(anchor.global_position, delta)
|
||||
|
||||
|
||||
func _physics_process(delta: float):
|
||||
if held: move_to(get_global_mouse_position(), delta)
|
||||
|
||||
|
||||
func _input_event(viewport: Viewport, event: InputEvent, shape_idx: int):
|
||||
if event is not InputEventMouseButton: return
|
||||
if event.button_index != MOUSE_BUTTON_LEFT: return
|
||||
|
||||
if event.is_pressed() and not anchored and not held \
|
||||
and not rider.is_grabbed_anywhere:
|
||||
held = true
|
||||
rider.is_grabbed_anywhere = true
|
||||
on_grab(get_global_mouse_position())
|
||||
|
||||
|
||||
func move_to(to: Vector2, delta: float):
|
||||
var dir = to - global_position
|
||||
const damping = 2
|
||||
|
||||
self.linear_velocity = (dir / delta) / damping
|
||||
|
||||
|
||||
func on_grab(pos: Vector2):
|
||||
particles.global_position = pos
|
||||
particles.emitting = true
|
||||
anchor.setVisible(true)
|
||||
|
||||
|
||||
func on_ungrab():
|
||||
anchor.setVisible(false)
|
||||
|
||||
|
||||
func ungrab():
|
||||
held = false
|
||||
if rider.is_grabbed_anywhere:
|
||||
rider.is_grabbed_anywhere = false
|
||||
on_ungrab()
|
||||
@@ -0,0 +1 @@
|
||||
uid://c78x72xskyxw8
|
||||
@@ -0,0 +1,20 @@
|
||||
extends Marker2D
|
||||
|
||||
|
||||
#var v_tween = get_tree().create_tween()
|
||||
var limb: RigidBody2D
|
||||
|
||||
|
||||
func _ready():
|
||||
setVisible(false)
|
||||
|
||||
|
||||
func setVisible(v: bool):
|
||||
$Sprite2D.visible = v
|
||||
|
||||
|
||||
func _on_area_2d_body_entered(body: Node2D) -> void:
|
||||
if body != limb: return
|
||||
if limb.held:
|
||||
limb.anchored = true
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://b1jqfxhbkdbjc
|
||||
@@ -0,0 +1,9 @@
|
||||
extends Control
|
||||
|
||||
|
||||
func _ready():
|
||||
get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_VIEWPORT
|
||||
|
||||
|
||||
func _on_play_button_pressed():
|
||||
get_tree().change_scene_to_file("res://scenes/game.tscn")
|
||||
@@ -0,0 +1 @@
|
||||
uid://c16iy4k5dj2y2
|
||||
@@ -0,0 +1,84 @@
|
||||
extends Node2D
|
||||
|
||||
|
||||
@export var release_timer_range: Vector2
|
||||
@export var release_particles: GPUParticles2D
|
||||
@export var bull: Node2D
|
||||
@export var anchored: Array[bool] = [true, true, true, true]
|
||||
|
||||
@onready var joint_l_arm: Marker2D = bull.get_node("Bull/LimbJoint_LeftArm")
|
||||
@onready var joint_r_arm: Marker2D = bull.get_node("Bull/LimbJoint_RightArm")
|
||||
@onready var joint_l_leg: Marker2D = bull.get_node("Bull/LimbJoint_LeftLeg")
|
||||
@onready var joint_r_leg: Marker2D = bull.get_node("Bull/LimbJoint_RightLeg")
|
||||
|
||||
|
||||
var is_grabbed_anywhere: bool = false
|
||||
var is_timer_active: bool = false
|
||||
var children_ready: int = 0
|
||||
var is_init: bool = false
|
||||
var has_game_over: bool = false
|
||||
|
||||
|
||||
func ready():
|
||||
$ArmL2.anchor = joint_l_arm
|
||||
$ArmR2.anchor = joint_r_arm
|
||||
$LegL2.anchor = joint_l_leg
|
||||
$LegR2.anchor = joint_r_leg
|
||||
|
||||
$ArmL2.anchored = anchored[0]
|
||||
$ArmR2.anchored = anchored[1]
|
||||
$LegL2.anchored = anchored[2]
|
||||
$LegR2.anchored = anchored[3]
|
||||
is_init = true
|
||||
|
||||
|
||||
func _process(delta: float):
|
||||
if children_ready == 4 and not is_init: ready()
|
||||
if not is_timer_active and not has_game_over: timer()
|
||||
|
||||
|
||||
func release():
|
||||
if has_game_over: return
|
||||
|
||||
var limbs = [
|
||||
$ArmL2,
|
||||
$ArmR2,
|
||||
$LegL2,
|
||||
$LegR2
|
||||
]
|
||||
|
||||
var attempts: int = 0
|
||||
|
||||
while true:
|
||||
attempts += 1
|
||||
|
||||
if has_game_over or attempts > 50: return
|
||||
|
||||
var i = limbs[randi_range(0, len(limbs) - 1)]
|
||||
if not i.anchored: continue
|
||||
i.anchored = false
|
||||
break
|
||||
|
||||
var amount_unanchored = 0
|
||||
for i in limbs: if not i.anchored: amount_unanchored += 1
|
||||
|
||||
if amount_unanchored < 4:
|
||||
release_particles.emitting = true
|
||||
else:
|
||||
$/root/Node2D/CanvasLayer/GameOver.trigger()
|
||||
|
||||
|
||||
func timer():
|
||||
is_timer_active = true
|
||||
|
||||
await get_tree().create_timer(randf_range(
|
||||
release_timer_range.x,
|
||||
release_timer_range.y
|
||||
)).timeout
|
||||
|
||||
is_timer_active = false
|
||||
|
||||
release_timer_range.x = max(0, release_timer_range.x - 0.1)
|
||||
release_timer_range.y = max(1, release_timer_range.y - 0.1)
|
||||
|
||||
release()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dls3kam5cig67
|
||||
Reference in New Issue
Block a user