diff --git a/lib/aethyr/core/components/storage.rb b/lib/aethyr/core/components/storage.rb index de1b36ab8fc0053f39438291fe34f3ea6dddb0b3..5300485b2aedb0fd82c454ae7c0e1d557c3ef45a 100644 --- a/lib/aethyr/core/components/storage.rb +++ b/lib/aethyr/core/components/storage.rb @@ -187,14 +187,6 @@ class StorageMachine volatile_data = object.dehydrate() - if object.is_a? Observable - observers = object.instance_variable_get(:@observer_peers) - unless observers.nil? - observers = observers.dup - object.delete_observers - end - end - open_store("goids", false) do |gd| gd[object.goid] = object.class.to_s end @@ -203,10 +195,6 @@ class StorageMachine gd[object.goid] = Marshal.dump(object) end - if object.is_a? Observable and not observers.nil? - object.instance_variable_set(:@observer_peers, observers) - end - if object.respond_to? :equipment object.equipment.each do |o| store_object(o) unless o.is_a? Player #this shouldn't happen, but who knows @@ -318,10 +306,7 @@ class StorageMachine end end - if object.is_a? Observable - fix_observers object - end - + object.rehydrate(nil) game_objects << object unless object.container.nil? or game_objects.loaded? object.container @@ -332,8 +317,6 @@ class StorageMachine end end - object.rehydrate(nil) - return object end @@ -494,14 +477,5 @@ class StorageMachine end end - #Fixes issue with changes with Observer between Ruby 1.8.7 and 1.9.1 - def fix_observers object - if RUBY_VERSION < "1.9.0" - object.instance_variable_set(:@observer_peers, []) - else - object.instance_variable_set(:@observer_peers, {}) - end - end - public :update_all_objects! end diff --git a/lib/aethyr/core/objects/game_object.rb b/lib/aethyr/core/objects/game_object.rb index ecef6a0fb9b24961c1e3d845196264f1856c2869..1fbd05ac56f9408a1b074aa9087909561828db78 100644 --- a/lib/aethyr/core/objects/game_object.rb +++ b/lib/aethyr/core/objects/game_object.rb @@ -18,6 +18,7 @@ class GameObject < Publisher alias :room :container alias :can? :respond_to? alias :goid :game_object_id + volatile :@observer_peers @@volatile = [] @@ -90,7 +91,14 @@ class GameObject < Publisher end def rehydrate(volatile_data) - return if volatile_data.nil? + if volatile_data.nil? + if RUBY_VERSION < "1.9.0" + self.instance_variable_set(:@observer_peers, []) + else + self.instance_variable_set(:@observer_peers, {}) + end + return + end volatile_data.each do |attr, data| self.instance_variable_set(attr, data) if @@volatile.include? attr end