@@ -121,10 +121,27 @@ Set `prefix_config.key = false` on your object instead.]]):format(obj.key), obj.
121121 return false
122122 end
123123
124+ function SMODS .GameObject :__internal_register (obj , class_to_compare )
125+ -- only add the object to each unique table/buffer once
126+ if self .obj_table ~= class_to_compare .obj_table then
127+ self .obj_table [obj .key ] = obj
128+ end
129+ if self .obj_buffer ~= class_to_compare .obj_buffer then
130+ self .obj_buffer [# self .obj_buffer + 1 ] = obj .key
131+ end
132+ end
133+
124134 function SMODS .GameObject :register ()
125135 if self :check_dependencies () then
126- self .obj_table [self .key ] = self
127- self .obj_buffer [# self .obj_buffer + 1 ] = self .key
136+ -- start with this class and propagate up to all parent classes that can have objects
137+ self :__internal_register (self , {})
138+ local parent = self .super or {}
139+ local child = self
140+ while parent .obj_buffer and parent .obj_table do
141+ parent :__internal_register (self , child )
142+ parent = parent .super or {}
143+ child = child .super
144+ end
128145 self .registered = true
129146 end
130147 end
@@ -1033,10 +1050,13 @@ Set `prefix_config.key = false` on your object instead.]]):format(obj.key), obj.
10331050 ---- ---------------------------------------------------------------------------------------------
10341051 ---- --- API CODE GameObject.ConsumableType
10351052 ---- ---------------------------------------------------------------------------------------------
1036-
1053+ local ctype_buffer = {}
10371054 SMODS .ConsumableTypes = {}
10381055 SMODS .ConsumableType = SMODS .ObjectType :extend {
1039- ctype_buffer = {},
1056+ obj_table = SMODS .ConsumableTypes ,
1057+ obj_buffer = ctype_buffer ,
1058+ -- DEPRECATED
1059+ ctype_buffer = ctype_buffer ,
10401060 visible_buffer = {},
10411061 set = ' ConsumableType' ,
10421062 required_params = {
@@ -1056,13 +1076,12 @@ Set `prefix_config.key = false` on your object instead.]]):format(obj.key), obj.
10561076 register = function (self )
10571077 SMODS .ConsumableType .super .register (self )
10581078 if self :check_dependencies () then
1059- SMODS . ConsumableType . ctype_buffer [ # SMODS . ConsumableType . ctype_buffer + 1 ] = self . key
1079+ -- this is duplicate information but it's more convenient to keep
10601080 if not self .no_collection then SMODS .ConsumableType .visible_buffer [# SMODS .ConsumableType .visible_buffer + 1 ] = self .key end
10611081 end
10621082 end ,
10631083 inject = function (self )
10641084 SMODS .ObjectType .inject (self )
1065- SMODS .ConsumableTypes [self .key ] = self
10661085 G .localization .descriptions [self .key ] = G .localization .descriptions [self .key ] or {}
10671086 G .C .SET [self .key ] = self .primary_colour
10681087 G .C .SECONDARY_SET [self .key ] = self .secondary_colour
0 commit comments