Class: Legion::Extensions::Agentic::Defense::Quicksilver::Helpers::QuicksilverEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb

Instance Method Summary collapse

Constructor Details

#initializeQuicksilverEngine

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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

#dropletsObject



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

#poolsObject



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_reportObject



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