diff --git a/cardinal/component/building.go b/cardinal/component/building.go index 39beb41..7993c73 100644 --- a/cardinal/component/building.go +++ b/cardinal/component/building.go @@ -94,8 +94,8 @@ var BuildingConfigs = map[BuildingType]BuildingConstants{ {Type: Fish, Amount: constants.ShipyardResourcesFishAmount}, }, Effect: &Effect{ - Type: Raft, - Amount: constants.ShipyardEffectRaftAmount, + Type: Raft, + Capacity: constants.ShipyardEffectRaftCapacity, }, TileType: CoastlineTile, }, @@ -149,9 +149,12 @@ func GetBuilding(buildingType BuildingType) (Building, error) { }, nil case Shipyard: return Building{ - Level: 1, - Type: buildingType, - Effect: config.Effect, + Level: 1, + Type: buildingType, + Effect: &Effect{ + Type: config.Effect.Type, + Amount: 1, + }, }, nil case Warehouse: return Building{ diff --git a/cardinal/component/effect.go b/cardinal/component/effect.go index 63260f9..eef007a 100644 --- a/cardinal/component/effect.go +++ b/cardinal/component/effect.go @@ -14,7 +14,7 @@ func GetAllEffectTypes() []EffectType { type Effect struct { Type EffectType `json:"type"` - Amount int `json:"amount"` + Amount int `json:"amount,omitempty"` Capacity int `json:"capacity,omitempty"` } diff --git a/cardinal/constants/buildings.go b/cardinal/constants/buildings.go index ec04143..44ab4ff 100644 --- a/cardinal/constants/buildings.go +++ b/cardinal/constants/buildings.go @@ -24,7 +24,7 @@ const ( ShipyardResourcesWoodAmount = 20 ShipyardResourcesStoneAmount = 30 ShipyardResourcesFishAmount = 10 - ShipyardEffectRaftAmount = 1 + ShipyardEffectRaftCapacity = 1 ) const ( diff --git a/cardinal/main.go b/cardinal/main.go index c821acd..e15fc8c 100644 --- a/cardinal/main.go +++ b/cardinal/main.go @@ -40,6 +40,7 @@ func MustInitWorld(w *cardinal.World) { cardinal.RegisterComponent[component.Building](w), cardinal.RegisterComponent[component.PlayerResources](w), cardinal.RegisterComponent[component.TileMap](w), + cardinal.RegisterComponent[component.Effect](w), ) // Register messages (user action) diff --git a/cardinal/msg/delete_building.go b/cardinal/msg/delete_building.go index facf32c..1a1a96c 100644 --- a/cardinal/msg/delete_building.go +++ b/cardinal/msg/delete_building.go @@ -1,7 +1,7 @@ package msg type DeleteBuildingMsg struct { - TileIndex int `json:"tileID"` + TileIndex int `json:"tileIndex"` } type DeleteBuildingResult struct { diff --git a/cardinal/system/create_building.go b/cardinal/system/create_building.go index 7017042..fc32d3e 100644 --- a/cardinal/system/create_building.go +++ b/cardinal/system/create_building.go @@ -30,6 +30,11 @@ func CreateBuildingSystem(world cardinal.WorldContext) error { return msg.CreateBuildingResult{Success: false}, fmt.Errorf("index of tiles out of range") } + if tiles[request.Msg.TileIndex].Tile != comp.BuildingConfigs[building.Type].TileType { + return msg.CreateBuildingResult{Success: false}, + fmt.Errorf("failed to create building, this building doesn't fit this tiletype") + } + if err := SubtractResourcesToBuild(world, building, request.Tx.PersonaTag); err != nil { return msg.CreateBuildingResult{Success: false}, err } @@ -48,7 +53,7 @@ func CreateBuildingSystem(world cardinal.WorldContext) error { return msg.CreateBuildingResult{Success: false}, fmt.Errorf("failed to create building: %w", err) } - playerEntityID, _ := cardinal.Create(world, + buildingEntityID, _ := cardinal.Create(world, player, comp.Building{ Level: building.Level, @@ -65,17 +70,13 @@ func CreateBuildingSystem(world cardinal.WorldContext) error { Type: building.Farming.Type, Speed: building.Farming.Speed, } - _ = cardinal.AddComponentTo[comp.Farming](world, playerEntityID) - _ = cardinal.SetComponent(world, playerEntityID, farmingComponent) + _ = cardinal.AddComponentTo[comp.Farming](world, buildingEntityID) + _ = cardinal.SetComponent(world, buildingEntityID, farmingComponent) } if building.Effect != nil { - effectComponent := &comp.Effect{ - Type: building.Effect.Type, - Amount: building.Effect.Amount, - } - _ = cardinal.AddComponentTo[comp.Effect](world, playerEntityID) - _ = cardinal.SetComponent(world, playerEntityID, effectComponent) + _ = cardinal.AddComponentTo[comp.Effect](world, buildingEntityID) + _ = cardinal.SetComponent(world, buildingEntityID, building.Effect) } return msg.CreateBuildingResult{Success: true}, nil