open-fpsz/entities/flag/flag.gd
2024-04-24 07:45:04 +00:00

29 lines
751 B
GDScript

class_name Flag extends Node3D
enum FlagState { FLAG_STATE_ON_STAND, FLAG_STATE_DROPPED, FLAG_STATE_TAKEN }
@export var flag_state : FlagState = FlagState.FLAG_STATE_ON_STAND
signal grabbed(grabber : Player)
signal regrabbed
signal dropped
var last_carrier : Player = null
func can_be_grabbed() -> bool:
return flag_state != FlagState.FLAG_STATE_TAKEN
func grab(grabber : Player) -> void:
if flag_state != FlagState.FLAG_STATE_TAKEN:
flag_state = FlagState.FLAG_STATE_TAKEN
if (last_carrier == null) or (grabber != last_carrier):
grabbed.emit(grabber)
last_carrier = grabber
else:
regrabbed.emit()
func drop() -> void:
if flag_state == FlagState.FLAG_STATE_TAKEN:
flag_state = FlagState.FLAG_STATE_DROPPED
dropped.emit()