Class: Legion::Extensions::Agentic::Defense::Quicksilver::Helpers::QuicksilverEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Defense::Quicksilver::Helpers::QuicksilverEngine
- Defined in:
- lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb
Instance Method Summary collapse
- #add_to_pool(droplet_id:, pool_id:) ⇒ Object
- #agitate_pool(pool_id:) ⇒ Object
- #capture_droplet(droplet_id:) ⇒ Object
- #create_droplet(form:, content:) ⇒ Object
- #create_pool(surface_type:) ⇒ Object
- #droplets ⇒ Object
- #evaporate_all! ⇒ Object
-
#initialize ⇒ QuicksilverEngine
constructor
A new instance of QuicksilverEngine.
- #merge_droplets(droplet_a_id:, droplet_b_id:) ⇒ Object
- #pools ⇒ Object
- #quicksilver_report ⇒ Object
- #release_droplet(droplet_id:) ⇒ Object
- #shift_form(droplet_id:, new_form:) ⇒ Object
- #split_droplet(droplet_id:) ⇒ Object
Constructor Details
#initialize ⇒ QuicksilverEngine
Returns a new instance of QuicksilverEngine.
10 11 12 13 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 10 def initialize @droplets = {} @pools = {} end |
Instance Method Details
#add_to_pool(droplet_id:, pool_id:) ⇒ Object
62 63 64 65 66 67 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 62 def add_to_pool(droplet_id:, pool_id:) fetch_droplet!(droplet_id) pool = fetch_pool!(pool_id) pool.add_droplet(droplet_id) pool end |
#agitate_pool(pool_id:) ⇒ Object
69 70 71 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 69 def agitate_pool(pool_id:) fetch_pool!(pool_id).agitate! end |
#capture_droplet(droplet_id:) ⇒ Object
54 55 56 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 54 def capture_droplet(droplet_id:) fetch_droplet!(droplet_id).capture! end |
#create_droplet(form:, content:) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 15 def create_droplet(form:, content:, **) raise ArgumentError, 'droplet limit reached' if @droplets.size >= Constants::MAX_DROPLETS droplet = Droplet.new(form: form, content: content, **) @droplets[droplet.id] = droplet droplet end |
#create_pool(surface_type:) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 23 def create_pool(surface_type:, **) raise ArgumentError, 'pool limit reached' if @pools.size >= Constants::MAX_POOLS pool = Pool.new(surface_type: surface_type, **) @pools[pool.id] = pool pool end |
#droplets ⇒ Object
95 96 97 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 95 def droplets @droplets.values.map(&:to_h) end |
#evaporate_all! ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 73 def evaporate_all! vanished = [] @droplets.each_value(&:evaporate!) @droplets.each { |id, d| vanished << id if d.vanishing? } vanished.each { |id| @droplets.delete(id) } vanished end |
#merge_droplets(droplet_a_id:, droplet_b_id:) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 37 def merge_droplets(droplet_a_id:, droplet_b_id:) a = fetch_droplet!(droplet_a_id) b = fetch_droplet!(droplet_b_id) a.merge!(b) @droplets.delete(droplet_b_id) a end |
#pools ⇒ Object
99 100 101 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 99 def pools @pools.values.map(&:to_h) end |
#quicksilver_report ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 81 def quicksilver_report droplets = @droplets.values total = droplets.size { total_droplets: total, total_pools: @pools.size, captured_count: droplets.count(&:captured), elusive_count: droplets.count(&:elusive?), vanishing_count: droplets.count(&:vanishing?), avg_mass: avg_metric(droplets, total, :mass), avg_fluidity: avg_metric(droplets, total, :fluidity) } end |
#release_droplet(droplet_id:) ⇒ Object
58 59 60 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 58 def release_droplet(droplet_id:) fetch_droplet!(droplet_id).release! end |
#shift_form(droplet_id:, new_form:) ⇒ Object
31 32 33 34 35 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 31 def shift_form(droplet_id:, new_form:) droplet = fetch_droplet!(droplet_id) droplet.shift_form!(new_form) droplet end |
#split_droplet(droplet_id:) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb', line 45 def split_droplet(droplet_id:) droplet = fetch_droplet!(droplet_id) twin = droplet.split! return nil unless twin @droplets[twin.id] = twin [droplet, twin] end |