Class: Legion::Extensions::Agentic::Defense::Quicksand::Helpers::QuicksandEngine
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Defense::Quicksand::Helpers::QuicksandEngine
- Defined in:
- lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb
Instance Method Summary collapse
- #add_trap_to_pit(trap_id:, pit_id:) ⇒ Object
- #all_pits ⇒ Object
- #all_traps ⇒ Object
- #attempt_escape(trap_id:) ⇒ Object
- #avg_depth ⇒ Object
- #calm(trap_id:, rate: Constants::CALM_RATE) ⇒ Object
- #calm_all! ⇒ Object
- #create_pit(saturation: nil, danger_level: nil) ⇒ Object
- #create_trap(trap_type:, domain:, content:, depth: nil, viscosity: nil) ⇒ Object
- #deadliest_pits(limit: 5) ⇒ Object
- #deepest(limit: 5) ⇒ Object
-
#initialize ⇒ QuicksandEngine
constructor
A new instance of QuicksandEngine.
- #quicksand_report ⇒ Object
- #shallowest(limit: 5) ⇒ Object
- #sink_all! ⇒ Object
- #sink_trap(trap_id:, rate: Constants::SINK_RATE) ⇒ Object
- #struggle(trap_id:) ⇒ Object
- #stuck_traps ⇒ Object
- #submerged_traps ⇒ Object
- #traps_by_type ⇒ Object
Constructor Details
#initialize ⇒ QuicksandEngine
Returns a new instance of QuicksandEngine.
10 11 12 13 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 10 def initialize @traps = {} @pits = {} end |
Instance Method Details
#add_trap_to_pit(trap_id:, pit_id:) ⇒ Object
56 57 58 59 60 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 56 def add_trap_to_pit(trap_id:, pit_id:) fetch_trap(trap_id) pit = fetch_pit(pit_id) pit.add_trap(trap_id) end |
#all_pits ⇒ Object
118 119 120 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 118 def all_pits @pits.values end |
#all_traps ⇒ Object
114 115 116 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 114 def all_traps @traps.values end |
#attempt_escape(trap_id:) ⇒ Object
50 51 52 53 54 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 50 def attempt_escape(trap_id:) trap = fetch_trap(trap_id) result = trap.escape! { trap: trap, result: result } end |
#avg_depth ⇒ Object
96 97 98 99 100 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 96 def avg_depth return 0.0 if @traps.empty? (@traps.values.sum(&:depth) / @traps.size).round(10) end |
#calm(trap_id:, rate: Constants::CALM_RATE) ⇒ Object
44 45 46 47 48 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 44 def calm(trap_id:, rate: Constants::CALM_RATE) trap = fetch_trap(trap_id) trap.calm!(rate: rate) trap end |
#calm_all! ⇒ Object
66 67 68 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 66 def calm_all! @traps.each_value(&:calm!) end |
#create_pit(saturation: nil, danger_level: nil) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 24 def create_pit(saturation: nil, danger_level: nil) raise ArgumentError, 'pit limit reached' if @pits.size >= Constants::MAX_PITS p = Pit.new(saturation: saturation, danger_level: danger_level) @pits[p.id] = p p end |
#create_trap(trap_type:, domain:, content:, depth: nil, viscosity: nil) ⇒ Object
15 16 17 18 19 20 21 22 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 15 def create_trap(trap_type:, domain:, content:, depth: nil, viscosity: nil) raise ArgumentError, 'trap limit reached' if @traps.size >= Constants::MAX_TRAPS t = Trap.new(trap_type: trap_type, domain: domain, content: content, depth: depth, viscosity: viscosity) @traps[t.id] = t t end |
#deadliest_pits(limit: 5) ⇒ Object
92 93 94 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 92 def deadliest_pits(limit: 5) @pits.values.sort_by { |p| -p.danger_level }.first(limit) end |
#deepest(limit: 5) ⇒ Object
76 77 78 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 76 def deepest(limit: 5) @traps.values.sort_by { |t| -t.depth }.first(limit) end |
#quicksand_report ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 102 def quicksand_report { total_traps: @traps.size, total_pits: @pits.size, by_type: traps_by_type, submerged: submerged_traps.size, stuck: stuck_traps.size, avg_depth: avg_depth, deadly_pits: @pits.values.count(&:deadly?) } end |
#shallowest(limit: 5) ⇒ Object
80 81 82 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 80 def shallowest(limit: 5) @traps.values.sort_by(&:depth).first(limit) end |
#sink_all! ⇒ Object
62 63 64 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 62 def sink_all! @traps.each_value(&:sink!) end |
#sink_trap(trap_id:, rate: Constants::SINK_RATE) ⇒ Object
32 33 34 35 36 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 32 def sink_trap(trap_id:, rate: Constants::SINK_RATE) trap = fetch_trap(trap_id) trap.sink!(rate: rate) trap end |
#struggle(trap_id:) ⇒ Object
38 39 40 41 42 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 38 def struggle(trap_id:) trap = fetch_trap(trap_id) trap.struggle! { trap: trap, depth: trap.depth, struggle_count: trap.struggle_count } end |
#stuck_traps ⇒ Object
88 89 90 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 88 def stuck_traps @traps.values.select(&:stuck?) end |
#submerged_traps ⇒ Object
84 85 86 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 84 def submerged_traps @traps.values.select(&:submerged?) end |
#traps_by_type ⇒ Object
70 71 72 73 74 |
# File 'lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb', line 70 def traps_by_type counts = Constants::TRAP_TYPES.to_h { |t| [t, 0] } @traps.each_value { |t| counts[t.trap_type] += 1 } counts end |