Skip to content

Instantly share code, notes, and snippets.

@Griefchief
Created September 9, 2024 13:58
Show Gist options
  • Save Griefchief/de3b8f343aa8e53eb3dbd72cfe336c7c to your computer and use it in GitHub Desktop.
Save Griefchief/de3b8f343aa8e53eb3dbd72cfe336c7c to your computer and use it in GitHub Desktop.
ActionPressNode
extends Node3D
signal player_frag(player_node)
signal entered_vehicle(car_ref:Node3D)
var ray_length = 1.5;
var did_player_shoot_this_frame = false
var camera_pos
var camera_normal
var num_cubes=0
var disable_input = false
@export var _camera:Camera3D
@export var ignoredNode3DList:Array[Node3D]
@export var actionArea3D:Area3D
@export var useAreaInsteadOfRay:bool = false
@export var characterNode:Node
@export var enabled:bool = true
#const TestCubeInstance = preload("res://Scenes/test_cube/TestCube.tscn")
func _ready():
pass
func register_player_action(ev):
print("register player action")
#var camera = get_node(_camera)
var camera = _camera
#var camera = get_node("../Yaw/Pitch/Camera")
#size is Vector2, divided by 2
var vec2 = get_viewport().size/2
camera_pos = camera.project_ray_origin(vec2)
#size is Vector2, divided by 2
camera_normal = camera_pos + camera.project_ray_normal(get_viewport().size/2) * ray_length
did_player_shoot_this_frame = true
func _physics_process(delta):
if(did_player_shoot_this_frame == true):
if not useAreaInsteadOfRay:
projectRay()
else:
useArea()
did_player_shoot_this_frame = false
func projectRay():
var space_state = get_world_3d().get_direct_space_state()
var qParams = PhysicsRayQueryParameters3D.create(camera_pos, camera_normal)#, 0xFFFFFFFF ,ignoredNode3DList)
var result = space_state.intersect_ray(qParams)
if (not result.is_empty()):
handleActionForBody(result.collider)
func handleActionForBody(collider:Node3D):
var was_handled = false
if(collider.is_in_group("actionable")):
collider.do_action()
was_handled = true
if "is_vehicle" in collider:
if(collider.is_vehicle):
print("CAR READY TO ENTER")
#result.collider.gain_user_control()
was_handled = true
var is_driving = collider.enter_car(characterNode)
emit_signal("entered_vehicle", collider, is_driving)
GlobalSignals.emit_signal(GlobalSignals.ENTERED_VEHICLE)
return was_handled
func useArea():
var bodies:Array[Node3D] = actionArea3D.get_overlapping_bodies()
print("num bodies is ", bodies)
for body in bodies:
if ignoredNode3DList.find(body) > -1:
continue;
print ("handling action for body ", body.get_path().get_concatenated_names())
print ("handling action for body ", body.get_path())
var handled = handleActionForBody(body)
if handled:
return
# bellow id defeinitely not used, copy paste artifact, need to remove at some time, leaving for now
var MAX_HEALTH = 100
var health = MAX_HEALTH;
@rpc("call_local") func decrease_health(decrease_value):
health -=10
print("decrease_health")
if health <= 0:
health = MAX_HEALTH
print ("player_frag_prc")
rpc("player_frag_rpc", self.get_parent().get_name())
@rpc("call_local") func player_frag_rpc(parent_node_name):
print("synced player frag")
emit_signal("player_frag", self.get_parent().get_name())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment