- Home /
How to handle a single use script?
I've got a bunch of C# classes that inherit from a base class that inherits from ScriptableObject and has a single method doSomething. Most of them are used only once. They're work like event handlers, delegates, or runnables depending on the language you're most familiar with.
Right now I have to create that script file then create an asset from that script file and attach set a property on another script to that asset file. For example NPCs have a List and each Conversation has a property called Criteria that is of type Predicate. Predicate has a single method Evaluate that takes some game state info and returns true/false to indicate whether this Conversation can be had.
Whenever I want to make a different kind of decision I subclass Predicate and implement the Evaluate method to make the decision. Unfortunately to attach a Predicate subclass to a Conversation I have to make an Asset out of the Predicate which feels like extra baggage because I now have 2 copies of something I use only once. It's bad enough I have to create the first one. Ideally I'd like to just double click the Criteria property type in some code and be done with it.
First, is this the expected or best practice way to do what I'm trying to do? I'm open to other alternatives including replacing Predicate with something else. In other engines I'd use an object based expression tree and then just store this as data. The problem with this approach is property drawers don't work well for this type of data due to issues with serialization of polymorphic types and some display issues when the nesting gets deep.
Second, is there a better way to implement this kind of code (the Evaluate method or some kind of event handler)?