Cow_Life_Sim_RPG/Objects/Beach/Ball/Ball.gd

92 lines
2.5 KiB
GDScript

extends RigidBody2D
class_name Ball
var kickedPower = 70
var velocity = Vector2(2500, -1000)
var swimmingZones = []
var skimSpeed = 70
var kickSoundPlayer
var lastSoundIndex = -1
var kickSounds = []
var rng = RandomNumberGenerator.new()
func _ready():
initialize_kick_sounds()
func initialize_kick_sounds():
kickSoundPlayer = $KickSound
kickSounds.append(preload("res://Sounds/SFX/Kick/kick1.mp3"))
kickSounds.append(preload("res://Sounds/SFX/Kick/kick2.mp3"))
kickSounds.append(preload("res://Sounds/SFX/Kick/kick3.mp3"))
kickSounds.append(preload("res://Sounds/SFX/Kick/kick4.mp3"))
kickSounds.append(preload("res://Sounds/SFX/Kick/kick5.mp3"))
func _process(delta):
$SubViewport/Spatial/CharacterBody3D/MeshInstance3D.rotation.z += linear_velocity.x / 5999
$SubViewport/Spatial/CharacterBody3D/MeshInstance3D.rotation.x += linear_velocity.y / 5999
var texture = $SubViewport.get_texture()
$Sprite2D.texture = texture
handle_water()
func play_kick_sound():
var newIndex = rng.randi_range(0, kickSounds.size() - 1)
if newIndex == lastSoundIndex:
newIndex = rng.randi_range(0, kickSounds.size() - 1)
kickSoundPlayer.stream = kickSounds[newIndex]
kickSoundPlayer.play()
lastSoundIndex = newIndex
func handle_water():
if swimmingZones.size() > 0:
if !%Waves.visible:
%Waves.visible = true
var mainSwimmingZone = swimmingZones[0]
for zone in swimmingZones:
if zone.swimmingSpeed <= mainSwimmingZone.swimmingSpeed:
mainSwimmingZone = zone
%Waves.self_modulate = mainSwimmingZone.liquidColor
else:
%Waves.visible = false
if swimmingZones.size() > 0 and abs(linear_velocity.length()) > skimSpeed:
linear_damp = 1
$WaterSpray.emitting = true
else:
linear_damp = 0.6
$WaterSpray.emitting = false
func add_swimming_area(swimmingArea):
swimmingZones.append(swimmingArea)
func remove_swimming_area(swimmingArea):
swimmingZones.erase(swimmingArea)
func _on_kick_zone_body_entered(body):
if visible:
if (body is Cow) or (body is Pigeon) or (body is Seagull):
var kickDirection:Vector2 = global_position - body.global_position
kickDirection = kickDirection.normalized()
var kickForce = kickDirection * kickedPower
apply_central_impulse(kickForce)
play_kick_sound()
elif body is NPC and body.characterName == "Kid":
var kickDirection:Vector2 = global_position - body.global_position
kickDirection = kickDirection.normalized()
var kickForce = kickDirection * kickedPower * 3
apply_central_impulse(kickForce)
play_kick_sound()
AchievementManager.complete_achievement("Sports")