#How to pass data through emit_signal() :Camera Shake

34 messages · Page 1 of 1 (latest)

scenic vessel
#

Hey guys i have two functions in my Camera2D both of these functions controls shake effects by using "lerpf" the reason i use 2 functions is because i want different value for different effect when emitted. is this the best way of doing it? or i can pass value from emit() if so how? ```extends Camera2D
@export var randomStrength: float = 100.0
@export var shakeFade: float = 5.0

@export var airShake: float = 100.0
@export var airFade: float = 5.0

@onready var ShakeActive: bool = false
@onready var ShakeairActive: bool = false
var rng = RandomNumberGenerator.new()

var shake_strength: float = 0.0
var air_strength: float = 0.0

func apply_air_shake():
ShakeairActive = true
print("airshake")
if ShakeairActive:
air_strength = airShake

func apply_shake():
ShakeActive = true
print("normalshake")
if ShakeActive:
shake_strength = randomStrength

func _process (delta):
if ShakeActive:
if shake_strength > 0:
shake_strength = lerpf(shake_strength,0,shakeFade * delta)
#ShakeairActive = false
offset = randomOffset()
if ShakeairActive:
if airShake > 0:
airShake = lerpf(airShake,0,airFade * delta)
ShakeActive = false
offset = randomOffset()

func randomOffset() -> Vector2:
return Vector2(rng.randf_range(-shake_strength,shake_strength),rng.randf_range(-shake_strength, shake_strength))

scenic vessel
#

Anyone?

stuck vector
#

😉

stuck vector
#

What did you get with those results

scenic vessel
scenic vessel
# stuck vector What did you get with those results

@export var default_random_strength: float = 100.0
@export var default_shake_fade: float = 5.0

@onready var shake_active: bool = false
var rng = RandomNumberGenerator.new()

var shake_strength: float = 0.0
var shake_fade: float = 0.0

# This function will be called with different shake parameters
func apply_shake(strength: float, fade: float):
    shake_active = true
    shake_strength = strength
    shake_fade = fade

func _process(delta):
    if shake_active:
        if shake_strength > 0:
            shake_strength = lerpf(shake_strength, 0, shake_fade * delta)
            offset = random_offset()
        else:
            shake_active = false
            offset = Vector2.ZERO  # Reset offset when shake is done

func random_offset() -> Vector2:
    return Vector2(rng.randf_range(-shake_strength, shake_strength), rng.randf_range(-shake_strength, shake_strength))```
so it makes 1 function and i control it through my player script
#

but

#
            velocity.y = movement_data.jump_velocity * 0.8
            var airjumpInstance = Aireffect.instantiate()
            emit_signal("airjump")
            airjumpInstance.global_position = $aireffect.global_position
            get_parent().add_child(airjumpInstance)
            air_jump = false```
#

how to change here?

#

ahh i see

#

chat gpt help

#

me

#

signal airjump(strength: float, fade: float)

#

bruh ive never use things like this before

#

i thought chatgpt is trash for godot

#

last time i used it just gives me old code

#

and when i use it gives me bunch of errors

stuck vector
#

You gotta tell it which documentation and train it a little at a time

#

But technically you don’t need to emit a signal at all just CameraRef.apply_shake(strengthvar,fadevar)

#

And it’ll tell the camera to perform a shake with your parameters

scenic vessel
#

what is this

stuck vector
#

You already defined your variables

#

So use air shake etc

#

camera.apply_shake(camera.airShake, camera.airFade)

scenic vessel
#

damn it works

#

thanks so much bro

#

i didnt know u could do that

#

where do you think i should start learning godot?