Skip Navigation

On-Kill/On-Hit effects: Signal train vs reference passing

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!

7

You're viewing a single thread.

7 comments
  • I tend to prefer the latter, but I totally get that feeling where signals seem like they "should" be better. I just find in practice that references are a little easier to work with in some cases.

    You can easily solve the owner dying issue by just using is_instance_valid() before attempting to call anything on the owner reference.

    That said, you can probably simplify your signal code if you connected the bullet killed_enemy signal directly to the player's on-hit handler. It seems like the weapon on-kill handler is redundant? But I don't know the details of your implementation, I just know that there's often ways to simplify chains like this.

    I find that signals are great in some use cases, and less good in other use cases.

7 comments