GDSCRIPT spear - YeOldeDM/Pgeki GitHub Wiki

back to Code-Objects

Physics and logic for the player's primary weapon, his spear. Logic for the spear damaging enemies is handled in that enemy's script.

extends RigidBody2D

# Parameters
var TIME_LIMIT = 60	#Spear Lifetime (if not view-culled), in frames
var THROW_ATK=13	#frames before throwing

# Switches
var pre_throw=true
var did_hit=false
var blinker=true

# Holders
var lifetime = -1

# Timers
var hold_timer=0
var blink_timer=0


#  CUSTOM PHYSICS INTEGRATION  #
################################
func _integrate_forces(state):
	# Handle Collision
	for i in range(state.get_contact_count()):
		var c = state.get_contact_collider_object(i)
		
		if (c):	#Contact!
			set_mode(MODE_STATIC)	#Stick to the collider
			lifetime += 1			#increase lifetime from -1 (causing it to start the timer)
			if (not did_hit):		#switch: we hit
				did_hit = true
				get_node('sound').play('hit')	#Thud!

func _ready():
	# Initialize!
	set_process(true)



func _process(delta):
	#Holder for screen visibility
	var visible = get_node('visibility').is_on_screen() == true

	if (not visible):
		done()	#we have gone off-screen. We are done.
		
	elif(lifetime>=0):	#if not -1:
		lifetime += 1	#increase the timer
		
		if(lifetime>=TIME_LIMIT):
			done()	#our timelimit is up. We are done.
			
		if(lifetime >= TIME_LIMIT*0.65):	#Start blinking 65% into our life time
			blink()


func done():	#Tell the player he can shoot again, then kill ourselves
	get_node('/root/Root/Toon').call('done_shooting')
	queue_free()

# Hackity blink logic
# This should become modular, for any object that blinks
func blink():
	if(blinker):
		blink_timer += 1
		if(blink_timer > 2):
			get_child(0).set_modulate(Color(1.0,1.0,1.0,0.0))
			blink_timer = 0
			blinker=false
	else:
		blink_timer += 1
		if(blink_timer > 3):
			get_child(0).set_modulate(Color(1.0,1.0,1.0,1.0))
			blink_timer = 0
			blinker=true