From 6c9a123318d4aa67816394884a1134c0abdf1972 Mon Sep 17 00:00:00 2001 From: ducc Date: Sat, 26 Oct 2024 22:11:05 -0400 Subject: [PATCH 1/5] Changed engine interface --- pkg/engine/engine.go | 2 +- pkg/engine/info/interface.go | 4 + pkg/mock/mock_engine.go | 176 +++++++++++++++++++++++------------ pkg/model/character.pb.go | 16 ++-- pkg/model/enemy.pb.go | 50 +++++----- pkg/model/enum.pb.go | 6 +- pkg/model/result.pb.go | 30 +++--- pkg/model/sim.pb.go | 17 ++-- tests/mock/mock_engine.go | 8 +- 9 files changed, 184 insertions(+), 125 deletions(-) diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index 90d02656..8108f115 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -239,7 +239,7 @@ type Target interface { Neutrals() []key.TargetID // TODO: target type, (Light, Dark, Neutral) - AddNeutralTarget() key.TargetID + AddNeutralTarget(key key.NeutralTarget) key.TargetID RemoveNeutralTarget(id key.TargetID) diff --git a/pkg/engine/info/interface.go b/pkg/engine/info/interface.go index 11a8e9b3..f412d256 100644 --- a/pkg/engine/info/interface.go +++ b/pkg/engine/info/interface.go @@ -35,3 +35,7 @@ type ActionState interface { type EnemyInstance interface { Action(target key.TargetID, state ActionState) } + +type NeutralTargetInstance interface { + Attack(target key.TargetID, state ActionState) +} diff --git a/pkg/mock/mock_engine.go b/pkg/mock/mock_engine.go index 58d016b8..1083272d 100644 --- a/pkg/mock/mock_engine.go +++ b/pkg/mock/mock_engine.go @@ -54,17 +54,17 @@ func (mr *MockEngineMockRecorder) AddModifier(arg0, arg1 interface{}) *gomock.Ca } // AddNeutralTarget mocks base method. -func (m *MockEngine) AddNeutralTarget() key.TargetID { +func (m *MockEngine) AddNeutralTarget(arg0 key.NeutralTarget) key.TargetID { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddNeutralTarget") + ret := m.ctrl.Call(m, "AddNeutralTarget", arg0) ret0, _ := ret[0].(key.TargetID) return ret0 } // AddNeutralTarget indicates an expected call of AddNeutralTarget. -func (mr *MockEngineMockRecorder) AddNeutralTarget() *gomock.Call { +func (mr *MockEngineMockRecorder) AddNeutralTarget(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNeutralTarget", reflect.TypeOf((*MockEngine)(nil).AddNeutralTarget)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNeutralTarget", reflect.TypeOf((*MockEngine)(nil).AddNeutralTarget), arg0) } // AddShield mocks base method. @@ -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) } +// GetModifersByBehaviorFlag mocks base method. +func (m *MockEngine) GetModifersByBehaviorFlag(arg0 key.TargetID, arg1 model.BehaviorFlag) []info.Modifier { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetModifersByBehaviorFlag", arg0, arg1) + ret0, _ := ret[0].([]info.Modifier) + return ret0 +} + +// GetModifersByBehaviorFlag indicates an expected call of GetModifersByBehaviorFlag. +func (mr *MockEngineMockRecorder) GetModifersByBehaviorFlag(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetModifersByBehaviorFlag", reflect.TypeOf((*MockEngine)(nil).GetModifersByBehaviorFlag), arg0, arg1) +} + // GetModifiers mocks base method. func (m *MockEngine) GetModifiers(arg0 key.TargetID, arg1 key.Modifier) []info.Modifier { m.ctrl.T.Helper() @@ -344,6 +358,20 @@ func (mr *MockEngineMockRecorder) HasModifier(arg0, arg1 interface{}) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasModifier", reflect.TypeOf((*MockEngine)(nil).HasModifier), arg0, arg1) } +// HasModifierFromSource mocks base method. +func (m *MockEngine) HasModifierFromSource(arg0, arg1 key.TargetID, arg2 key.Modifier) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HasModifierFromSource", arg0, arg1, arg2) + ret0, _ := ret[0].(bool) + return ret0 +} + +// HasModifierFromSource indicates an expected call of HasModifierFromSource. +func (mr *MockEngineMockRecorder) HasModifierFromSource(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasModifierFromSource", reflect.TypeOf((*MockEngine)(nil).HasModifierFromSource), arg0, arg1, arg2) +} + // HasShield mocks base method. func (m *MockEngine) HasShield(arg0 key.TargetID, arg1 key.Shield) bool { m.ctrl.T.Helper() @@ -394,6 +422,20 @@ func (mr *MockEngineMockRecorder) InsertAction(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertAction", reflect.TypeOf((*MockEngine)(nil).InsertAction), arg0) } +// IsAlive mocks base method. +func (m *MockEngine) IsAlive(arg0 key.TargetID) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsAlive", arg0) + ret0, _ := ret[0].(bool) + return ret0 +} + +// IsAlive indicates an expected call of IsAlive. +func (mr *MockEngineMockRecorder) IsAlive(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsAlive", reflect.TypeOf((*MockEngine)(nil).IsAlive), arg0) +} + // IsCharacter mocks base method. func (m *MockEngine) IsCharacter(arg0 key.TargetID) bool { m.ctrl.T.Helper() @@ -464,22 +506,50 @@ func (mr *MockEngineMockRecorder) MaxEnergy(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MaxEnergy", reflect.TypeOf((*MockEngine)(nil).MaxEnergy), arg0) } -// ModifierCount mocks base method. -func (m *MockEngine) ModifierCount(arg0 key.TargetID, arg1 model.StatusType) int { +// MaxStance mocks base method. +func (m *MockEngine) MaxStance(arg0 key.TargetID) float64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MaxStance", arg0) + ret0, _ := ret[0].(float64) + return ret0 +} + +// MaxStance indicates an expected call of MaxStance. +func (mr *MockEngineMockRecorder) MaxStance(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MaxStance", reflect.TypeOf((*MockEngine)(nil).MaxStance), arg0) +} + +// ModifierStackCount mocks base method. +func (m *MockEngine) ModifierStackCount(arg0, arg1 key.TargetID, arg2 key.Modifier) float64 { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifierCount", arg0, arg1) + ret := m.ctrl.Call(m, "ModifierStackCount", arg0, arg1, arg2) + ret0, _ := ret[0].(float64) + return ret0 +} + +// ModifierStackCount indicates an expected call of ModifierStackCount. +func (mr *MockEngineMockRecorder) ModifierStackCount(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifierStackCount", reflect.TypeOf((*MockEngine)(nil).ModifierStackCount), arg0, arg1, arg2) +} + +// ModifierStatusCount mocks base method. +func (m *MockEngine) ModifierStatusCount(arg0 key.TargetID, arg1 model.StatusType) int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ModifierStatusCount", arg0, arg1) ret0, _ := ret[0].(int) return ret0 } -// ModifierCount indicates an expected call of ModifierCount. -func (mr *MockEngineMockRecorder) ModifierCount(arg0, arg1 interface{}) *gomock.Call { +// ModifierStatusCount indicates an expected call of ModifierStatusCount. +func (mr *MockEngineMockRecorder) ModifierStatusCount(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifierCount", reflect.TypeOf((*MockEngine)(nil).ModifierCount), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifierStatusCount", reflect.TypeOf((*MockEngine)(nil).ModifierStatusCount), arg0, arg1) } // ModifyCurrentGaugeCost mocks base method. -func (m *MockEngine) ModifyCurrentGaugeCost(arg0 float64) { +func (m *MockEngine) ModifyCurrentGaugeCost(arg0 info.ModifyCurrentGaugeCost) { m.ctrl.T.Helper() m.ctrl.Call(m, "ModifyCurrentGaugeCost", arg0) } @@ -491,94 +561,80 @@ func (mr *MockEngineMockRecorder) ModifyCurrentGaugeCost(arg0 interface{}) *gomo } // ModifyEnergy mocks base method. -func (m *MockEngine) ModifyEnergy(arg0 key.TargetID, arg1 float64) error { +func (m *MockEngine) ModifyEnergy(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyEnergy", arg0, arg1) + ret := m.ctrl.Call(m, "ModifyEnergy", arg0) ret0, _ := ret[0].(error) return ret0 } // ModifyEnergy indicates an expected call of ModifyEnergy. -func (mr *MockEngineMockRecorder) ModifyEnergy(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) ModifyEnergy(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyEnergy", reflect.TypeOf((*MockEngine)(nil).ModifyEnergy), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyEnergy", reflect.TypeOf((*MockEngine)(nil).ModifyEnergy), arg0) } // ModifyEnergyFixed mocks base method. -func (m *MockEngine) ModifyEnergyFixed(arg0 key.TargetID, arg1 float64) error { +func (m *MockEngine) ModifyEnergyFixed(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyEnergyFixed", arg0, arg1) + ret := m.ctrl.Call(m, "ModifyEnergyFixed", arg0) ret0, _ := ret[0].(error) return ret0 } // ModifyEnergyFixed indicates an expected call of ModifyEnergyFixed. -func (mr *MockEngineMockRecorder) ModifyEnergyFixed(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) ModifyEnergyFixed(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyEnergyFixed", reflect.TypeOf((*MockEngine)(nil).ModifyEnergyFixed), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyEnergyFixed", reflect.TypeOf((*MockEngine)(nil).ModifyEnergyFixed), arg0) } // ModifyGaugeAV mocks base method. -func (m *MockEngine) ModifyGaugeAV(arg0 key.TargetID, arg1 float64) error { +func (m *MockEngine) ModifyGaugeAV(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyGaugeAV", arg0, arg1) + ret := m.ctrl.Call(m, "ModifyGaugeAV", arg0) ret0, _ := ret[0].(error) return ret0 } // ModifyGaugeAV indicates an expected call of ModifyGaugeAV. -func (mr *MockEngineMockRecorder) ModifyGaugeAV(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) ModifyGaugeAV(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyGaugeAV", reflect.TypeOf((*MockEngine)(nil).ModifyGaugeAV), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyGaugeAV", reflect.TypeOf((*MockEngine)(nil).ModifyGaugeAV), arg0) } // ModifyGaugeNormalized mocks base method. -func (m *MockEngine) ModifyGaugeNormalized(arg0 key.TargetID, arg1 float64) error { +func (m *MockEngine) ModifyGaugeNormalized(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyGaugeNormalized", arg0, arg1) + ret := m.ctrl.Call(m, "ModifyGaugeNormalized", arg0) ret0, _ := ret[0].(error) return ret0 } // ModifyGaugeNormalized indicates an expected call of ModifyGaugeNormalized. -func (mr *MockEngineMockRecorder) ModifyGaugeNormalized(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyGaugeNormalized", reflect.TypeOf((*MockEngine)(nil).ModifyGaugeNormalized), arg0, arg1) -} - -// ModifyHPByAmount mocks base method. -func (m *MockEngine) ModifyHPByAmount(arg0, arg1 key.TargetID, arg2 float64) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyHPByAmount", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// ModifyHPByAmount indicates an expected call of ModifyHPByAmount. -func (mr *MockEngineMockRecorder) ModifyHPByAmount(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) ModifyGaugeNormalized(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyHPByAmount", reflect.TypeOf((*MockEngine)(nil).ModifyHPByAmount), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyGaugeNormalized", reflect.TypeOf((*MockEngine)(nil).ModifyGaugeNormalized), arg0) } // ModifyHPByRatio mocks base method. -func (m *MockEngine) ModifyHPByRatio(arg0, arg1 key.TargetID, arg2 info.ModifyHPByRatio) error { +func (m *MockEngine) ModifyHPByRatio(arg0 info.ModifyHPByRatio) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyHPByRatio", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "ModifyHPByRatio", arg0) ret0, _ := ret[0].(error) return ret0 } // ModifyHPByRatio indicates an expected call of ModifyHPByRatio. -func (mr *MockEngineMockRecorder) ModifyHPByRatio(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) ModifyHPByRatio(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyHPByRatio", reflect.TypeOf((*MockEngine)(nil).ModifyHPByRatio), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyHPByRatio", reflect.TypeOf((*MockEngine)(nil).ModifyHPByRatio), arg0) } // ModifySP mocks base method. -func (m *MockEngine) ModifySP(arg0 int) int { +func (m *MockEngine) ModifySP(arg0 info.ModifySP) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ModifySP", arg0) - ret0, _ := ret[0].(int) + ret0, _ := ret[0].(error) return ret0 } @@ -589,17 +645,17 @@ func (mr *MockEngineMockRecorder) ModifySP(arg0 interface{}) *gomock.Call { } // ModifyStance mocks base method. -func (m *MockEngine) ModifyStance(arg0, arg1 key.TargetID, arg2 float64) error { +func (m *MockEngine) ModifyStance(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ModifyStance", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "ModifyStance", arg0) ret0, _ := ret[0].(error) return ret0 } // ModifyStance indicates an expected call of ModifyStance. -func (mr *MockEngineMockRecorder) ModifyStance(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) ModifyStance(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyStance", reflect.TypeOf((*MockEngine)(nil).ModifyStance), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModifyStance", reflect.TypeOf((*MockEngine)(nil).ModifyStance), arg0) } // Neutrals mocks base method. @@ -707,7 +763,7 @@ func (mr *MockEngineMockRecorder) SP() *gomock.Call { } // SetCurrentGaugeCost mocks base method. -func (m *MockEngine) SetCurrentGaugeCost(arg0 float64) { +func (m *MockEngine) SetCurrentGaugeCost(arg0 info.ModifyCurrentGaugeCost) { m.ctrl.T.Helper() m.ctrl.Call(m, "SetCurrentGaugeCost", arg0) } @@ -719,31 +775,31 @@ func (mr *MockEngineMockRecorder) SetCurrentGaugeCost(arg0 interface{}) *gomock. } // SetGauge mocks base method. -func (m *MockEngine) SetGauge(arg0 key.TargetID, arg1 float64) error { +func (m *MockEngine) SetGauge(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetGauge", arg0, arg1) + ret := m.ctrl.Call(m, "SetGauge", arg0) ret0, _ := ret[0].(error) return ret0 } // SetGauge indicates an expected call of SetGauge. -func (mr *MockEngineMockRecorder) SetGauge(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) SetGauge(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetGauge", reflect.TypeOf((*MockEngine)(nil).SetGauge), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetGauge", reflect.TypeOf((*MockEngine)(nil).SetGauge), arg0) } // SetHP mocks base method. -func (m *MockEngine) SetHP(arg0, arg1 key.TargetID, arg2 float64) error { +func (m *MockEngine) SetHP(arg0 info.ModifyAttribute) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetHP", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "SetHP", arg0) ret0, _ := ret[0].(error) return ret0 } // SetHP indicates an expected call of SetHP. -func (mr *MockEngineMockRecorder) SetHP(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockEngineMockRecorder) SetHP(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHP", reflect.TypeOf((*MockEngine)(nil).SetHP), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHP", reflect.TypeOf((*MockEngine)(nil).SetHP), arg0) } // Stance mocks base method. diff --git a/pkg/model/character.pb.go b/pkg/model/character.pb.go index b12e7a47..23fdc19a 100644 --- a/pkg/model/character.pb.go +++ b/pkg/model/character.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.1 +// protoc-gen-go v1.27.1 +// protoc v3.12.4 // source: pb/model/character.proto package model @@ -470,7 +470,7 @@ func file_pb_model_character_proto_rawDescGZIP() []byte { } var file_pb_model_character_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_pb_model_character_proto_goTypes = []any{ +var file_pb_model_character_proto_goTypes = []interface{}{ (*Character)(nil), // 0: model.Character (*Abilities)(nil), // 1: model.Abilities (*LightCone)(nil), // 2: model.LightCone @@ -499,7 +499,7 @@ func file_pb_model_character_proto_init() { } file_pb_model_enum_proto_init() if !protoimpl.UnsafeEnabled { - file_pb_model_character_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_pb_model_character_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Character); i { case 0: return &v.state @@ -511,7 +511,7 @@ func file_pb_model_character_proto_init() { return nil } } - file_pb_model_character_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_pb_model_character_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Abilities); i { case 0: return &v.state @@ -523,7 +523,7 @@ func file_pb_model_character_proto_init() { return nil } } - file_pb_model_character_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_pb_model_character_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LightCone); i { case 0: return &v.state @@ -535,7 +535,7 @@ func file_pb_model_character_proto_init() { return nil } } - file_pb_model_character_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_pb_model_character_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Relic); i { case 0: return &v.state @@ -547,7 +547,7 @@ func file_pb_model_character_proto_init() { return nil } } - file_pb_model_character_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_pb_model_character_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RelicStat); i { case 0: return &v.state diff --git a/pkg/model/enemy.pb.go b/pkg/model/enemy.pb.go index 67fd596b..fc0c1177 100644 --- a/pkg/model/enemy.pb.go +++ b/pkg/model/enemy.pb.go @@ -1,15 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.1 +// protoc-gen-go v1.27.1 +// protoc v3.12.4 // source: pb/model/enemy.proto package model import ( + _struct "github.com/golang/protobuf/ptypes/struct" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) @@ -81,14 +81,14 @@ type Enemy struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Level uint32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` - Weaknesses []DamageType `protobuf:"varint,3,rep,packed,name=weaknesses,proto3,enum=model.DamageType" json:"weaknesses,omitempty"` - DebuffRes []*DebuffRES `protobuf:"bytes,4,rep,name=debuff_res,json=debuffRes,proto3" json:"debuff_res,omitempty"` - DamageRes []*DamageRES `protobuf:"bytes,5,rep,name=damage_res,json=damageRes,proto3" json:"damage_res,omitempty"` - Rank EnemyRank `protobuf:"varint,6,opt,name=rank,proto3,enum=model.EnemyRank" json:"rank,omitempty"` - BaseStats *BaseStats `protobuf:"bytes,7,opt,name=base_stats,json=baseStats,proto3" json:"base_stats,omitempty"` - Parameters *structpb.Struct `protobuf:"bytes,10,opt,name=parameters,proto3" json:"parameters,omitempty"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Level uint32 `protobuf:"varint,2,opt,name=level,proto3" json:"level,omitempty"` + Weaknesses []DamageType `protobuf:"varint,3,rep,packed,name=weaknesses,proto3,enum=model.DamageType" json:"weaknesses,omitempty"` + DebuffRes []*DebuffRES `protobuf:"bytes,4,rep,name=debuff_res,json=debuffRes,proto3" json:"debuff_res,omitempty"` + DamageRes []*DamageRES `protobuf:"bytes,5,rep,name=damage_res,json=damageRes,proto3" json:"damage_res,omitempty"` + Rank EnemyRank `protobuf:"varint,6,opt,name=rank,proto3,enum=model.EnemyRank" json:"rank,omitempty"` + BaseStats *BaseStats `protobuf:"bytes,7,opt,name=base_stats,json=baseStats,proto3" json:"base_stats,omitempty"` + Parameters *_struct.Struct `protobuf:"bytes,10,opt,name=parameters,proto3" json:"parameters,omitempty"` } func (x *Enemy) Reset() { @@ -172,7 +172,7 @@ func (x *Enemy) GetBaseStats() *BaseStats { return nil } -func (x *Enemy) GetParameters() *structpb.Struct { +func (x *Enemy) GetParameters() *_struct.Struct { if x != nil { return x.Parameters } @@ -478,15 +478,15 @@ func file_pb_model_enemy_proto_rawDescGZIP() []byte { var file_pb_model_enemy_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_pb_model_enemy_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_pb_model_enemy_proto_goTypes = []any{ - (EnemyRank)(0), // 0: model.EnemyRank - (*Enemy)(nil), // 1: model.Enemy - (*DebuffRES)(nil), // 2: model.DebuffRES - (*DamageRES)(nil), // 3: model.DamageRES - (*BaseStats)(nil), // 4: model.BaseStats - (DamageType)(0), // 5: model.DamageType - (*structpb.Struct)(nil), // 6: google.protobuf.Struct - (BehaviorFlag)(0), // 7: model.BehaviorFlag +var file_pb_model_enemy_proto_goTypes = []interface{}{ + (EnemyRank)(0), // 0: model.EnemyRank + (*Enemy)(nil), // 1: model.Enemy + (*DebuffRES)(nil), // 2: model.DebuffRES + (*DamageRES)(nil), // 3: model.DamageRES + (*BaseStats)(nil), // 4: model.BaseStats + (DamageType)(0), // 5: model.DamageType + (*_struct.Struct)(nil), // 6: google.protobuf.Struct + (BehaviorFlag)(0), // 7: model.BehaviorFlag } var file_pb_model_enemy_proto_depIdxs = []int32{ 5, // 0: model.Enemy.weaknesses:type_name -> model.DamageType @@ -511,7 +511,7 @@ func file_pb_model_enemy_proto_init() { } file_pb_model_enum_proto_init() if !protoimpl.UnsafeEnabled { - file_pb_model_enemy_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_pb_model_enemy_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Enemy); i { case 0: return &v.state @@ -523,7 +523,7 @@ func file_pb_model_enemy_proto_init() { return nil } } - file_pb_model_enemy_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_pb_model_enemy_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DebuffRES); i { case 0: return &v.state @@ -535,7 +535,7 @@ func file_pb_model_enemy_proto_init() { return nil } } - file_pb_model_enemy_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_pb_model_enemy_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DamageRES); i { case 0: return &v.state @@ -547,7 +547,7 @@ func file_pb_model_enemy_proto_init() { return nil } } - file_pb_model_enemy_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_pb_model_enemy_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BaseStats); i { case 0: return &v.state diff --git a/pkg/model/enum.pb.go b/pkg/model/enum.pb.go index c40271be..c6b8dfe3 100644 --- a/pkg/model/enum.pb.go +++ b/pkg/model/enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.1 +// protoc-gen-go v1.27.1 +// protoc v3.12.4 // source: pb/model/enum.proto package model @@ -1218,7 +1218,7 @@ func file_pb_model_enum_proto_rawDescGZIP() []byte { } var file_pb_model_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 13) -var file_pb_model_enum_proto_goTypes = []any{ +var file_pb_model_enum_proto_goTypes = []interface{}{ (Property)(0), // 0: model.Property (BehaviorFlag)(0), // 1: model.BehaviorFlag (StatusType)(0), // 2: model.StatusType diff --git a/pkg/model/result.pb.go b/pkg/model/result.pb.go index 1e2a9f3b..560e0d36 100644 --- a/pkg/model/result.pb.go +++ b/pkg/model/result.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.1 +// protoc-gen-go v1.27.1 +// protoc v3.12.4 // source: pb/model/result.proto package model @@ -177,11 +177,11 @@ type Statistics struct { unknownFields protoimpl.UnknownFields Iterations uint32 `protobuf:"varint,6,opt,name=iterations,proto3" json:"iterations,omitempty"` - // damage stats + //damage stats TotalDamageDealt *DescriptiveStats `protobuf:"bytes,7,opt,name=total_damage_dealt,proto3,oneof" json:"total_damage_dealt,omitempty"` TotalDamageTaken *DescriptiveStats `protobuf:"bytes,8,opt,name=total_damage_taken,proto3,oneof" json:"total_damage_taken,omitempty"` TotalDamageDealtPerCycle *OverviewStats `protobuf:"bytes,9,opt,name=total_damage_dealt_per_cycle,proto3,oneof" json:"total_damage_dealt_per_cycle,omitempty"` - // turn stats + //turn stats TotalAv *DescriptiveStats `protobuf:"bytes,10,opt,name=total_av,proto3,oneof" json:"total_av,omitempty"` DamageDealtByCycle []*OverviewStats `protobuf:"bytes,11,rep,name=damage_dealt_by_cycle,proto3" json:"damage_dealt_by_cycle,omitempty"` DamageTakenByCycle []*OverviewStats `protobuf:"bytes,12,rep,name=damage_taken_by_cycle,proto3" json:"damage_taken_by_cycle,omitempty"` @@ -651,7 +651,7 @@ func file_pb_model_result_proto_rawDescGZIP() []byte { } var file_pb_model_result_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_pb_model_result_proto_goTypes = []any{ +var file_pb_model_result_proto_goTypes = []interface{}{ (*Version)(nil), // 0: model.Version (*SimResult)(nil), // 1: model.SimResult (*Statistics)(nil), // 2: model.Statistics @@ -684,7 +684,7 @@ func file_pb_model_result_proto_init() { } file_pb_model_sim_proto_init() if !protoimpl.UnsafeEnabled { - file_pb_model_result_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_pb_model_result_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Version); i { case 0: return &v.state @@ -696,7 +696,7 @@ func file_pb_model_result_proto_init() { return nil } } - file_pb_model_result_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_pb_model_result_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SimResult); i { case 0: return &v.state @@ -708,7 +708,7 @@ func file_pb_model_result_proto_init() { return nil } } - file_pb_model_result_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_pb_model_result_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Statistics); i { case 0: return &v.state @@ -720,7 +720,7 @@ func file_pb_model_result_proto_init() { return nil } } - file_pb_model_result_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_pb_model_result_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IterationResult); i { case 0: return &v.state @@ -732,7 +732,7 @@ func file_pb_model_result_proto_init() { return nil } } - file_pb_model_result_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_pb_model_result_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OverviewStats); i { case 0: return &v.state @@ -744,7 +744,7 @@ func file_pb_model_result_proto_init() { return nil } } - file_pb_model_result_proto_msgTypes[5].Exporter = func(v any, i int) any { + file_pb_model_result_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DescriptiveStats); i { case 0: return &v.state @@ -757,10 +757,10 @@ func file_pb_model_result_proto_init() { } } } - file_pb_model_result_proto_msgTypes[1].OneofWrappers = []any{} - file_pb_model_result_proto_msgTypes[2].OneofWrappers = []any{} - file_pb_model_result_proto_msgTypes[4].OneofWrappers = []any{} - file_pb_model_result_proto_msgTypes[5].OneofWrappers = []any{} + file_pb_model_result_proto_msgTypes[1].OneofWrappers = []interface{}{} + file_pb_model_result_proto_msgTypes[2].OneofWrappers = []interface{}{} + file_pb_model_result_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_pb_model_result_proto_msgTypes[5].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/model/sim.pb.go b/pkg/model/sim.pb.go index fc1b74ec..9f216733 100644 --- a/pkg/model/sim.pb.go +++ b/pkg/model/sim.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.1 +// protoc-gen-go v1.27.1 +// protoc v3.12.4 // source: pb/model/sim.proto package model @@ -30,7 +30,6 @@ type SimConfig struct { Enemies []*Enemy `protobuf:"bytes,3,rep,name=enemies,proto3" json:"enemies,omitempty"` // TODO: waves Engage *Engage `protobuf:"bytes,6,opt,name=engage,proto3" json:"engage,omitempty"` // Types that are assignable to Logic: - // // *SimConfig_Gcsl Logic isSimConfig_Logic `protobuf_oneof:"logic"` } @@ -320,7 +319,7 @@ func file_pb_model_sim_proto_rawDescGZIP() []byte { } var file_pb_model_sim_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_pb_model_sim_proto_goTypes = []any{ +var file_pb_model_sim_proto_goTypes = []interface{}{ (*SimConfig)(nil), // 0: model.SimConfig (*SimulatorSettings)(nil), // 1: model.SimulatorSettings (*Wave)(nil), // 2: model.Wave @@ -349,7 +348,7 @@ func file_pb_model_sim_proto_init() { file_pb_model_enemy_proto_init() file_pb_model_character_proto_init() if !protoimpl.UnsafeEnabled { - file_pb_model_sim_proto_msgTypes[0].Exporter = func(v any, i int) any { + file_pb_model_sim_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SimConfig); i { case 0: return &v.state @@ -361,7 +360,7 @@ func file_pb_model_sim_proto_init() { return nil } } - file_pb_model_sim_proto_msgTypes[1].Exporter = func(v any, i int) any { + file_pb_model_sim_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SimulatorSettings); i { case 0: return &v.state @@ -373,7 +372,7 @@ func file_pb_model_sim_proto_init() { return nil } } - file_pb_model_sim_proto_msgTypes[2].Exporter = func(v any, i int) any { + file_pb_model_sim_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Wave); i { case 0: return &v.state @@ -385,7 +384,7 @@ func file_pb_model_sim_proto_init() { return nil } } - file_pb_model_sim_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_pb_model_sim_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Engage); i { case 0: return &v.state @@ -398,7 +397,7 @@ func file_pb_model_sim_proto_init() { } } } - file_pb_model_sim_proto_msgTypes[0].OneofWrappers = []any{ + file_pb_model_sim_proto_msgTypes[0].OneofWrappers = []interface{}{ (*SimConfig_Gcsl)(nil), } type x struct{} diff --git a/tests/mock/mock_engine.go b/tests/mock/mock_engine.go index 79f71fd5..1083272d 100644 --- a/tests/mock/mock_engine.go +++ b/tests/mock/mock_engine.go @@ -54,17 +54,17 @@ func (mr *MockEngineMockRecorder) AddModifier(arg0, arg1 interface{}) *gomock.Ca } // AddNeutralTarget mocks base method. -func (m *MockEngine) AddNeutralTarget() key.TargetID { +func (m *MockEngine) AddNeutralTarget(arg0 key.NeutralTarget) key.TargetID { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AddNeutralTarget") + ret := m.ctrl.Call(m, "AddNeutralTarget", arg0) ret0, _ := ret[0].(key.TargetID) return ret0 } // AddNeutralTarget indicates an expected call of AddNeutralTarget. -func (mr *MockEngineMockRecorder) AddNeutralTarget() *gomock.Call { +func (mr *MockEngineMockRecorder) AddNeutralTarget(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNeutralTarget", reflect.TypeOf((*MockEngine)(nil).AddNeutralTarget)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNeutralTarget", reflect.TypeOf((*MockEngine)(nil).AddNeutralTarget), arg0) } // AddShield mocks base method. From 8f2e52a870121e5a4fb8e003daf0c435e53d3971 Mon Sep 17 00:00:00 2001 From: ducc Date: Sat, 26 Oct 2024 22:12:38 -0400 Subject: [PATCH 2/5] Added structure for neutral targets --- pkg/engine/info/neutral-target.go | 11 ++++ pkg/engine/target/neutral-target/add.go | 24 +++++++++ pkg/engine/target/neutral-target/config.go | 19 +++++++ pkg/engine/target/neutral-target/manager.go | 57 ++++++++++++++++++++ pkg/engine/target/neutral-target/register.go | 27 ++++++++++ pkg/key/neutral-target.go | 8 +++ pkg/simulation/simulation.go | 2 + pkg/simulation/target.go | 7 ++- 8 files changed, 153 insertions(+), 2 deletions(-) create mode 100644 pkg/engine/info/neutral-target.go create mode 100644 pkg/engine/target/neutral-target/add.go create mode 100644 pkg/engine/target/neutral-target/config.go create mode 100644 pkg/engine/target/neutral-target/manager.go create mode 100644 pkg/engine/target/neutral-target/register.go create mode 100644 pkg/key/neutral-target.go diff --git a/pkg/engine/info/neutral-target.go b/pkg/engine/info/neutral-target.go new file mode 100644 index 00000000..740684ff --- /dev/null +++ b/pkg/engine/info/neutral-target.go @@ -0,0 +1,11 @@ +package info + +import ( + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +type NeutralTarget struct { + Key key.NeutralTarget `json:"key"` + Element model.DamageType `json:"element"` +} diff --git a/pkg/engine/target/neutral-target/add.go b/pkg/engine/target/neutral-target/add.go new file mode 100644 index 00000000..d4623203 --- /dev/null +++ b/pkg/engine/target/neutral-target/add.go @@ -0,0 +1,24 @@ +package neutraltarget + +import ( + "fmt" + + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/key" +) + +func (mgr *Manager) AddNeutral(id key.TargetID, key key.NeutralTarget) error { + config, ok := neutralCatalog[key] + if !ok { + return fmt.Errorf("Invalid neutral target %v", key) + } + + info := info.NeutralTarget{ + Key: key, + Element: config.Element, + } + + mgr.info[id] = info + mgr.instances[id] = config.Create(mgr.engine, id, info) + return nil +} diff --git a/pkg/engine/target/neutral-target/config.go b/pkg/engine/target/neutral-target/config.go new file mode 100644 index 00000000..69278d97 --- /dev/null +++ b/pkg/engine/target/neutral-target/config.go @@ -0,0 +1,19 @@ +package neutraltarget + +import ( + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/model" +) + +type Config struct { + Create func(engine engine.Engine, id key.TargetID, info info.NeutralTarget) info.NeutralTargetInstance + Attack Attack + Speed float64 + Element model.DamageType +} + +type Attack struct { + TargetType model.TargetType +} diff --git a/pkg/engine/target/neutral-target/manager.go b/pkg/engine/target/neutral-target/manager.go new file mode 100644 index 00000000..2ce9c2de --- /dev/null +++ b/pkg/engine/target/neutral-target/manager.go @@ -0,0 +1,57 @@ +package neutraltarget + +import ( + "fmt" + + "github.com/simimpact/srsim/pkg/engine" + "github.com/simimpact/srsim/pkg/engine/attribute" + "github.com/simimpact/srsim/pkg/engine/info" + "github.com/simimpact/srsim/pkg/key" + "github.com/simimpact/srsim/pkg/logic" +) + +type Manager struct { + engine engine.Engine + attr attribute.Manager + eval logic.Eval + instances map[key.TargetID]info.NeutralTargetInstance + info map[key.TargetID]info.NeutralTarget +} + +func New(engine engine.Engine, attr attribute.Manager, eval logic.Eval) *Manager { + return &Manager{ + engine: engine, + attr: attr, + eval: eval, + instances: make(map[key.TargetID]info.NeutralTargetInstance, 4), + info: make(map[key.TargetID]info.NeutralTarget, 4), + } +} + +func (mgr *Manager) Get(id key.TargetID) (info.NeutralTargetInstance, error) { + if instance, ok := mgr.instances[id]; ok { + return instance, nil + } + + return nil, fmt.Errorf("Target id was not a neutral target: %v", id) +} + +func (mgr *Manager) Info(id key.TargetID) (info.NeutralTarget, error) { + if info, ok := mgr.info[id]; ok { + return info, nil + } + + return info.NeutralTarget{}, fmt.Errorf("Target id was not a neutral target: %v", id) +} + +func (mgr *Manager) Neutrals() map[key.TargetID]info.NeutralTarget { + return mgr.info +} + +func (mgr *Manager) AttackInfo(id key.TargetID) (Attack, error) { + if target, ok := mgr.info[id]; ok { + return neutralCatalog[target.Key].Attack, nil + } + + return Attack{}, fmt.Errorf("Id was not a neutral %v", id) +} diff --git a/pkg/engine/target/neutral-target/register.go b/pkg/engine/target/neutral-target/register.go new file mode 100644 index 00000000..5238eb0d --- /dev/null +++ b/pkg/engine/target/neutral-target/register.go @@ -0,0 +1,27 @@ +package neutraltarget + +import ( + "sync" + + "github.com/simimpact/srsim/pkg/key" +) + +var ( + mu sync.Mutex + neutralCatalog = make(map[key.NeutralTarget]Config) +) + +func Register(key key.NeutralTarget, neutral Config) { + mu.Lock() + defer mu.Unlock() + + if _, dup := neutralCatalog[key]; dup { + panic("duplicate registration attempt: " + key) + } + + if neutral.Create == nil { + panic("Neutral create function must be defined: " + key) + } + + neutralCatalog[key] = neutral +} diff --git a/pkg/key/neutral-target.go b/pkg/key/neutral-target.go new file mode 100644 index 00000000..b0b8f7ec --- /dev/null +++ b/pkg/key/neutral-target.go @@ -0,0 +1,8 @@ +package key + +type NeutralTarget string + +const ( + LightningLord NeutralTarget = "lightninglord" + Numby NeutralTarget = "Numby" +) diff --git a/pkg/simulation/simulation.go b/pkg/simulation/simulation.go index d59c6991..b1c650b6 100644 --- a/pkg/simulation/simulation.go +++ b/pkg/simulation/simulation.go @@ -15,6 +15,7 @@ import ( "github.com/simimpact/srsim/pkg/engine/shield" "github.com/simimpact/srsim/pkg/engine/target/character" "github.com/simimpact/srsim/pkg/engine/target/enemy" + neutraltarget "github.com/simimpact/srsim/pkg/engine/target/neutral-target" "github.com/simimpact/srsim/pkg/engine/turn" "github.com/simimpact/srsim/pkg/key" "github.com/simimpact/srsim/pkg/logic" @@ -42,6 +43,7 @@ type Simulation struct { Modifier *modifier.Manager Attr attribute.Manager Char *character.Manager + Neutral *neutraltarget.Manager Enemy *enemy.Manager Turn turn.Manager Combat *combat.Manager diff --git a/pkg/simulation/target.go b/pkg/simulation/target.go index 9d56afce..8c830030 100644 --- a/pkg/simulation/target.go +++ b/pkg/simulation/target.go @@ -7,8 +7,11 @@ import ( ) // TODO: AddTarget -func (sim *Simulation) AddNeutralTarget() key.TargetID { - panic("not implemented") // TODO: Implement +func (sim *Simulation) AddNeutralTarget(key key.NeutralTarget) key.TargetID { + id := sim.IDGen.New() + sim.Neutral.AddNeutral(id, key) + sim.neutrals = append(sim.neutrals, id) + return id } // TODO: AddTarget From e37da06079e8f3ac998ca9a5ed3f3f5f4e382427 Mon Sep 17 00:00:00 2001 From: ducc Date: Sat, 26 Oct 2024 23:09:48 -0400 Subject: [PATCH 3/5] Added support for removing neutral targets --- pkg/simulation/target.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/simulation/target.go b/pkg/simulation/target.go index 8c830030..ea00b07c 100644 --- a/pkg/simulation/target.go +++ b/pkg/simulation/target.go @@ -11,12 +11,21 @@ func (sim *Simulation) AddNeutralTarget(key key.NeutralTarget) key.TargetID { id := sim.IDGen.New() sim.Neutral.AddNeutral(id, key) sim.neutrals = append(sim.neutrals, id) + sim.Targets[id] = info.ClassNeutral return id } // TODO: AddTarget func (sim *Simulation) RemoveNeutralTarget(id key.TargetID) { - panic("not implemented") // TODO: Implement + for i, neutral := range sim.neutrals { + if neutral == id { + sim.neutrals = append(sim.neutrals[:i], sim.neutrals[i+1:]...) + sim.Turn.RemoveTarget(id) + delete(sim.Targets, id) + break + } + } + // TODO: Do something if they key was not present? } func (sim *Simulation) IsValid(target key.TargetID) bool { From a20551a09c202b94d2c796c4a3c693cc8ad7cdfe Mon Sep 17 00:00:00 2001 From: ducc Date: Sat, 26 Oct 2024 23:11:42 -0400 Subject: [PATCH 4/5] Added some notes --- pkg/engine/target/neutral-target/add.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/engine/target/neutral-target/add.go b/pkg/engine/target/neutral-target/add.go index d4623203..cf77dfaa 100644 --- a/pkg/engine/target/neutral-target/add.go +++ b/pkg/engine/target/neutral-target/add.go @@ -7,6 +7,7 @@ import ( "github.com/simimpact/srsim/pkg/key" ) +// TODO: Add some way for neutrals to refer back to their owners/summoners to use their stats? func (mgr *Manager) AddNeutral(id key.TargetID, key key.NeutralTarget) error { config, ok := neutralCatalog[key] if !ok { From 182db73e63548f2bd359e29a90adc261a4e1c393 Mon Sep 17 00:00:00 2001 From: ducc Date: Mon, 28 Oct 2024 11:53:56 -0400 Subject: [PATCH 5/5] More notes --- pkg/simulation/target.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/simulation/target.go b/pkg/simulation/target.go index ea00b07c..9877ef8a 100644 --- a/pkg/simulation/target.go +++ b/pkg/simulation/target.go @@ -26,6 +26,7 @@ func (sim *Simulation) RemoveNeutralTarget(id key.TargetID) { } } // TODO: Do something if they key was not present? + // Also TODO: Add method to kill neutrals automatically when owner/summon dies? } func (sim *Simulation) IsValid(target key.TargetID) bool {