From 063314b1eedf931497663e7bd0076e29ae9c4fd5 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Thu, 22 Aug 2024 18:17:07 +0200 Subject: [PATCH 1/4] Add `TurnOrder` helper uses existing `TurnOrder` implementation in `Turn` package * added `TurnOrder` to `Turn` interface in `engine` * exposed `TurnOrder` in simulation layer useful for implementations requiring check for turn order, such as BTBIO --- pkg/engine/engine.go | 3 +++ pkg/simulation/attribute.go | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index b93c8d2e..03079743 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -172,6 +172,9 @@ type Insert interface { } type Turn interface { + // Returns a list of TargetIDs sorted by their AV + TurnOrder() []key.TargetID + // Sets the gauge for the given target. The amount is specified in gauge units (base = 10,000) SetGauge(data info.ModifyAttribute) error diff --git a/pkg/simulation/attribute.go b/pkg/simulation/attribute.go index f9206843..fe9b1691 100644 --- a/pkg/simulation/attribute.go +++ b/pkg/simulation/attribute.go @@ -92,6 +92,10 @@ func (sim *Simulation) ModifyEnergyFixed(data info.ModifyAttribute) error { return sim.Attr.ModifyEnergyFixed(data) } +func (sim *Simulation) TurnOrder() []key.TargetID { + return sim.Turn.TurnOrder() +} + func (sim *Simulation) SetGauge(data info.ModifyAttribute) error { sim.ActionTargets[data.Target] = true return sim.Turn.SetGauge(data) From 2f2b6c2024a536220d7e6e0982d9dd5403aea59c Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Thu, 22 Aug 2024 20:01:33 +0200 Subject: [PATCH 2/4] Add `TurnOrder` to mock by running `MockGen` --- tests/mock/mock_engine.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/mock/mock_engine.go b/tests/mock/mock_engine.go index f8a557d3..5d48bc76 100644 --- a/tests/mock/mock_engine.go +++ b/tests/mock/mock_engine.go @@ -815,3 +815,17 @@ func (mr *MockEngineMockRecorder) Stats(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stats", reflect.TypeOf((*MockEngine)(nil).Stats), arg0) } + +// TurnOrder mocks base method. +func (m *MockEngine) TurnOrder() []key.TargetID { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TurnOrder") + ret0, _ := ret[0].([]key.TargetID) + return ret0 +} + +// TurnOrder indicates an expected call of TurnOrder. +func (mr *MockEngineMockRecorder) TurnOrder() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TurnOrder", reflect.TypeOf((*MockEngine)(nil).TurnOrder)) +} From 7fd0d38edd48805b2028aeedc3927249f8793538 Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sat, 28 Sep 2024 20:55:50 +0200 Subject: [PATCH 3/4] Add `GetActiveTarget` helper * added `GetActiveTarget` to `Turn` interface in `engine` * exposed `GetActiveTarget` in simulation layer * added `GetActiveTarget` to mock by running `MockGen` useful for implementations requiring check for active target, such as BTBIO closes https://github.com/simimpact/srsim/issues/210 --- pkg/engine/engine.go | 3 +++ pkg/engine/turn/turn.go | 5 +++++ pkg/simulation/attribute.go | 4 ++++ tests/mock/mock_engine.go | 14 ++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index 03079743..721988fd 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -175,6 +175,9 @@ type Turn interface { // Returns a list of TargetIDs sorted by their AV TurnOrder() []key.TargetID + // Returns the ID of the target that is active/is taking the turn + GetActiveTarget() key.TargetID + // Sets the gauge for the given target. The amount is specified in gauge units (base = 10,000) SetGauge(data info.ModifyAttribute) error diff --git a/pkg/engine/turn/turn.go b/pkg/engine/turn/turn.go index eb5704e3..1d942163 100644 --- a/pkg/engine/turn/turn.go +++ b/pkg/engine/turn/turn.go @@ -97,6 +97,11 @@ func (mgr *manager) TurnOrder() []key.TargetID { return targetOrder } +// GetActiveTarget returns the ID of the target that is active/is taking the turn from the Manager. +func (mgr *manager) GetActiveTarget() key.TargetID { + return mgr.activeTarget +} + // EventTurnStatus returns an array of event.TurnStatus structs populated with the current ID, Gauge, and AV of each target in the Manager's turnOrder. func (mgr *manager) EventTurnStatus() []event.TurnStatus { turnStatus := make([]event.TurnStatus, mgr.orderHandler.Len()) diff --git a/pkg/simulation/attribute.go b/pkg/simulation/attribute.go index fe9b1691..14a890d7 100644 --- a/pkg/simulation/attribute.go +++ b/pkg/simulation/attribute.go @@ -96,6 +96,10 @@ func (sim *Simulation) TurnOrder() []key.TargetID { return sim.Turn.TurnOrder() } +func (sim *Simulation) GetActiveTarget() key.TargetID { + return sim.Turn.GetActiveTarget() +} + func (sim *Simulation) SetGauge(data info.ModifyAttribute) error { sim.ActionTargets[data.Target] = true return sim.Turn.SetGauge(data) diff --git a/tests/mock/mock_engine.go b/tests/mock/mock_engine.go index 5d48bc76..d4579ace 100644 --- a/tests/mock/mock_engine.go +++ b/tests/mock/mock_engine.go @@ -283,6 +283,20 @@ func (mr *MockEngineMockRecorder) ExtendModifierDuration(arg0, arg1, arg2 interf return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExtendModifierDuration", reflect.TypeOf((*MockEngine)(nil).ExtendModifierDuration), arg0, arg1, arg2) } +// GetActiveTarget mocks base method. +func (m *MockEngine) GetActiveTarget() key.TargetID { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetActiveTarget") + ret0, _ := ret[0].(key.TargetID) + return ret0 +} + +// GetActiveTarget indicates an expected call of GetActiveTarget. +func (mr *MockEngineMockRecorder) GetActiveTarget() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetActiveTarget", reflect.TypeOf((*MockEngine)(nil).GetActiveTarget)) +} + // GetModifiers mocks base method. func (m *MockEngine) GetModifiers(arg0 key.TargetID, arg1 key.Modifier) []info.Modifier { m.ctrl.T.Helper() From 4c0765986a608d57931575abc9dd523883ca176e Mon Sep 17 00:00:00 2001 From: kdovtdc Date: Sun, 29 Sep 2024 15:37:55 +0200 Subject: [PATCH 4/4] Finish adding `activeTarget` to mock * added `activeTarget` field to `mockTurnManager` * updated `StartTurn` to set `activeTarget` field for manager * implemented `GetActiveTarget` in mock --- tests/teststub/mock.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/teststub/mock.go b/tests/teststub/mock.go index 220f3c88..f1f106b3 100644 --- a/tests/teststub/mock.go +++ b/tests/teststub/mock.go @@ -11,6 +11,7 @@ import ( type mockTurnManager struct { t *testing.T turnSequence []key.TargetID + activeTarget key.TargetID } type TurnCommand struct { @@ -22,6 +23,7 @@ func newMockManager(t *testing.T) *mockTurnManager { return &mockTurnManager{ t: t, turnSequence: nil, + activeTarget: 0, } } @@ -51,6 +53,7 @@ func (m *mockTurnManager) StartTurn() (key.TargetID, float64, []event.TurnStatus return 1, 100000, nil, nil } tgt := m.turnSequence[0] + m.activeTarget = tgt m.turnSequence = m.turnSequence[1:] return tgt, 0, nil, nil } @@ -63,6 +66,10 @@ func (m *mockTurnManager) ResetTurn() error { return nil } +func (m *mockTurnManager) GetActiveTarget() key.TargetID { + return m.activeTarget +} + func (m *mockTurnManager) SetGauge(data info.ModifyAttribute) error { return nil }