diff options
| author | Amir Rajan <[email protected]> | 2021-03-11 13:15:40 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-03-11 13:15:40 -0600 |
| commit | cd14cc76cb4e17465fcc228d69dc1ae7efca81b1 (patch) | |
| tree | 108dfffe6555edee92ef0fb5e3bb5332d1e37b70 | |
| parent | 9aed616a037d9630946e261b84d889cd95a7e321 (diff) | |
| download | dragonruby-game-toolkit-contrib-cd14cc76cb4e17465fcc228d69dc1ae7efca81b1.tar.gz dragonruby-game-toolkit-contrib-cd14cc76cb4e17465fcc228d69dc1ae7efca81b1.zip | |
Create entity.rb
| -rw-r--r-- | dragon/entity.rb | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/dragon/entity.rb b/dragon/entity.rb new file mode 100644 index 0000000..09fa794 --- /dev/null +++ b/dragon/entity.rb @@ -0,0 +1,91 @@ +# coding: utf-8 +# Copyright 2019 DragonRuby LLC +# MIT License +# entity.rb has been released under MIT (*only this file*). + +module GTK + class Entity + def self.id! + @id ||= 0 + @id += 1 + @id + end + + def self.__reset_id__! + @id = 0 + end + + def self.strict_entities + @strict_entities ||= {} + @strict_entities + end + + def self.parse_serialization_data data + r = Entity.parse_serialization_data data + return r if r.is_a? OpenEntity + return r if r.is_a? StrictEntity + raise <<-S +* ERROR: +The save data looks to be corrupt. + +S + end + + def self.parse_serialization_data value + if value.is_a?(Hash) && value[:entity_id] && value[:entity_strict] + o = new_entity_strict value[:entity_name], value + o.load_entity_data! value + return o + elsif value.is_a?(Hash) && value[:entity_id] + o = OpenEntity.new + o.load_entity_data! value + return o + elsif value.is_a? Array + return value.map { |entry| Entity.parse_serialization_data entry } + else + return value + end + end + + def self.new_entity entity_type, init_hash = nil, block = nil + n = OpenEntity.new(entity_type) + n.entity_type = entity_type + n.created_at = Kernel.tick_count + n.global_created_at = Kernel.global_tick_count + + if init_hash + init_hash.each do |k, v| + n.as_hash[k] = v + end + end + + block.call(n) if block + + n + end + + def self.new_entity_strict entity_type, init_hash = nil, block = nil + if !Entity.strict_entities[entity_type] + init_hash ||= { } + + n = new_entity entity_type, init_hash, block + klass = Class.new(StrictEntity) + + klass.class_eval do + init_hash.each do |k, v| + attr_accessor k + end + + n.as_hash.each do |k, v| + attr_accessor k if !init_hash[k] + end + end + + Entity.strict_entities[entity_type] = klass + end + + klass = Entity.strict_entities[entity_type] + (klass.new entity_type, init_hash, block) + end + end +end |
