parent
5930d63672
commit
b2483213f6
2 changed files with 52 additions and 18 deletions
|
@ -27,6 +27,15 @@ type I8PSet struct {
|
||||||
// I8PType is a category of cards to be seeded into packs
|
// I8PType is a category of cards to be seeded into packs
|
||||||
type I8PType string
|
type I8PType string
|
||||||
|
|
||||||
|
// I8PSchema is a schema to seed a single I8PCube pack
|
||||||
|
type I8PSchema []I8PSchemaSlot
|
||||||
|
|
||||||
|
// I8PSchemaSlot is a single slot of a I8PSchema
|
||||||
|
type I8PSchemaSlot struct {
|
||||||
|
Amount int
|
||||||
|
Type I8PType
|
||||||
|
}
|
||||||
|
|
||||||
// All types used for seeding packs
|
// All types used for seeding packs
|
||||||
const (
|
const (
|
||||||
I8PTypeBlue I8PType = "blue"
|
I8PTypeBlue I8PType = "blue"
|
||||||
|
@ -39,20 +48,24 @@ const (
|
||||||
I8PTypeMulti I8PType = "multi"
|
I8PTypeMulti I8PType = "multi"
|
||||||
I8PTypeEntry I8PType = "entry"
|
I8PTypeEntry I8PType = "entry"
|
||||||
I8PTypeProblem I8PType = "problem"
|
I8PTypeProblem I8PType = "problem"
|
||||||
|
|
||||||
|
// Special types
|
||||||
|
I8PTypeAll I8PType = "all" // all means "from any other non-problem type"
|
||||||
)
|
)
|
||||||
|
|
||||||
// I8PPool is a pool of card divided into categories
|
// I8PPool is a pool of card divided into categories
|
||||||
type I8PPool map[I8PType][]Card
|
type I8PPool map[I8PType][]Card
|
||||||
|
|
||||||
// MakeI8PCube takes an organized set of cards and sorts them into a draftable I8PCube
|
// MakeI8PCube takes an organized set of cards and sorts them into a draftable I8PCube
|
||||||
func MakeI8PCube(cards I8PPool) *I8PCube {
|
func MakeI8PCube(cards I8PPool, schema I8PSchema) *I8PCube {
|
||||||
return &I8PCube{
|
return &I8PCube{
|
||||||
Main: makeMainSet(cards),
|
Main: makeMainSet(cards, schema),
|
||||||
Problems: makeProblemSet(cards),
|
Problems: makeProblemSet(cards),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeMainSet(cards I8PPool) (set *I8PSet) {
|
func makeMainSet(cards I8PPool, schema I8PSchema) (set *I8PSet) {
|
||||||
|
// Create set with the given card pool
|
||||||
set = &I8PSet{
|
set = &I8PSet{
|
||||||
Cards: I8PPool{
|
Cards: I8PPool{
|
||||||
I8PTypeBlue: cards[I8PTypeBlue],
|
I8PTypeBlue: cards[I8PTypeBlue],
|
||||||
|
@ -66,20 +79,25 @@ func makeMainSet(cards I8PPool) (set *I8PSet) {
|
||||||
I8PTypeEntry: cards[I8PTypeEntry],
|
I8PTypeEntry: cards[I8PTypeEntry],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
//TODO Make schema more flexible
|
// Build PackSchema from given I8PSchema
|
||||||
|
var slots []draft.PackSlot
|
||||||
|
for _, slot := range schema {
|
||||||
|
// Check for special cases
|
||||||
|
var provider draft.CardProvider
|
||||||
|
switch slot.Type {
|
||||||
|
case I8PTypeAll:
|
||||||
|
provider = set.ProviderOther()
|
||||||
|
default:
|
||||||
|
provider = set.ProviderByType(slot.Type)
|
||||||
|
}
|
||||||
|
// Add slot
|
||||||
|
slots = append(slots, draft.PackSlot{
|
||||||
|
Amount: slot.Amount,
|
||||||
|
Provider: provider,
|
||||||
|
})
|
||||||
|
}
|
||||||
set.Schema = draft.PackSchema{
|
set.Schema = draft.PackSchema{
|
||||||
Slots: []draft.PackSlot{
|
Slots: slots,
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypeBlue)},
|
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypeOrange)},
|
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypePink)},
|
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypePurple)},
|
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypeWhite)},
|
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypeYellow)},
|
|
||||||
{Amount: 1, Provider: set.ProviderByType(I8PTypeNone)},
|
|
||||||
{Amount: 2, Provider: set.ProviderByType(I8PTypeMulti)},
|
|
||||||
{Amount: 2, Provider: set.ProviderByType(I8PTypeEntry)},
|
|
||||||
{Amount: 1, Provider: set.ProviderOther()},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -157,3 +175,19 @@ func (s *I8PSet) shuffle(typ I8PType) {
|
||||||
s.Cards[typ][i], s.Cards[typ][j] = s.Cards[typ][j], s.Cards[typ][i]
|
s.Cards[typ][i], s.Cards[typ][j] = s.Cards[typ][j], s.Cards[typ][i]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DefaultI8PSchema returns I8Pages' schema as specified in his docs
|
||||||
|
func DefaultI8PSchema() I8PSchema {
|
||||||
|
return I8PSchema{
|
||||||
|
{Amount: 1, Type: I8PTypeBlue},
|
||||||
|
{Amount: 1, Type: I8PTypeOrange},
|
||||||
|
{Amount: 1, Type: I8PTypePink},
|
||||||
|
{Amount: 1, Type: I8PTypePurple},
|
||||||
|
{Amount: 1, Type: I8PTypeWhite},
|
||||||
|
{Amount: 1, Type: I8PTypeYellow},
|
||||||
|
{Amount: 1, Type: I8PTypeNone},
|
||||||
|
{Amount: 2, Type: I8PTypeMulti},
|
||||||
|
{Amount: 2, Type: I8PTypeEntry},
|
||||||
|
{Amount: 1, Type: I8PTypeAll},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ func TestDraftI8PCube(t *testing.T) {
|
||||||
mlp.I8PTypeEntry: mockCards("e1", "e2", "e3", "e4", "e5"),
|
mlp.I8PTypeEntry: mockCards("e1", "e2", "e3", "e4", "e5"),
|
||||||
mlp.I8PTypeProblem: mockCards("P1", "P2"),
|
mlp.I8PTypeProblem: mockCards("P1", "P2"),
|
||||||
}
|
}
|
||||||
cube := mlp.MakeI8PCube(pool)
|
cube := mlp.MakeI8PCube(pool, mlp.DefaultI8PSchema())
|
||||||
|
|
||||||
pack1 := draft.MakePack(cube.Main)
|
pack1 := draft.MakePack(cube.Main)
|
||||||
pack2 := draft.MakePack(cube.Main)
|
pack2 := draft.MakePack(cube.Main)
|
||||||
|
@ -58,7 +58,7 @@ func TestDryCube(t *testing.T) {
|
||||||
mlp.I8PTypeMulti: mockCards("m1", "m4"),
|
mlp.I8PTypeMulti: mockCards("m1", "m4"),
|
||||||
mlp.I8PTypeEntry: mockCards("e1", "e4"),
|
mlp.I8PTypeEntry: mockCards("e1", "e4"),
|
||||||
}
|
}
|
||||||
cube := mlp.MakeI8PCube(pool)
|
cube := mlp.MakeI8PCube(pool, mlp.DefaultI8PSchema())
|
||||||
pack := draft.MakePack(cube.Main)
|
pack := draft.MakePack(cube.Main)
|
||||||
if len(pack) != 11 {
|
if len(pack) != 11 {
|
||||||
t.Errorf("Expected 11 cards in pack but got %d", len(pack))
|
t.Errorf("Expected 11 cards in pack but got %d", len(pack))
|
||||||
|
|
Loading…
Reference in a new issue