Created
September 9, 2024 13:58
-
-
Save Griefchief/de3b8f343aa8e53eb3dbd72cfe336c7c to your computer and use it in GitHub Desktop.
ActionPressNode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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