this post was submitted on 14 Mar 2024
15 points (100.0% liked)

Godot

6007 readers
20 users here now

Welcome to the programming.dev Godot community!

This is a place where you can discuss about anything relating to the Godot game engine. Feel free to ask questions, post tutorials, show off your godot game, etc.

Make sure to follow the Godot CoC while chatting

We have a matrix room that can be used for chatting with other members of the community here

Links

Other Communities

Rules

We have a four strike system in this community where you get warned the first time you break a rule, then given a week ban, then given a year ban, then a permanent ban. Certain actions may bypass this and go straight to permanent ban if severe enough and done with malicious intent

Wormhole

!roguelikedev@programming.dev

Credits

founded 2 years ago
MODERATORS
 

Wanted some opinions on ways to set up triggering "on-kill" effects. In short: The player can have abilities that trigger effects whenever they shoot and kill an enemy. I'm also looking to extend abilities to enemies as well, so can't just hardcode a player reference.

Currently I'm doing it like this:

  • Enemy signals that it died -> the bullet receives this and signals that it killed Enemy -> the player's weapon receives this and signals that it's bullet killed Enemy -> the player receives this and triggers it's on-kill abilities.

It simultaneously feels like a good way to go about it but also a long mess. The other option I've considered is:

  • Each bullet has a reference to it's owner (eg. player). When an enemy dies to a bullet, it looks to the bullet's owner reference and tells it to trigger it's on-kill effects.

This way is a lot simpler to write, but is error prone eg. In cases where the bullet's owner is killed while their attack is mid-air.

Thank you all!

you are viewing a single comment's thread
view the rest of the comments
[–] Jozzo@lemmy.world 1 points 9 months ago

Thanks for your input! The other commenters pointed out that I can use Godot's is_instance_valid() function to check if the bullet's owner exists before attempting to call anything on it, so will be reworking the system to use #2 + that.