89 lines
3.0 KiB
Go
89 lines
3.0 KiB
Go
package mdb
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
|
|
"zombiezen.com/go/sqlite"
|
|
"zombiezen.com/go/sqlite/sqlitex"
|
|
|
|
"git.sunturtle.xyz/zephyr/horse"
|
|
)
|
|
|
|
var (
|
|
//go:embed sql/character.sql
|
|
characterSQL string
|
|
//go:embed sql/affinity.sql
|
|
affinitySQL string
|
|
//go:embed sql/uma.sql
|
|
umaSQL string
|
|
//go:embed sql/conversation.sql
|
|
conversationSQL string
|
|
)
|
|
|
|
// Characters retrieves all named characters.
|
|
func Characters(ctx context.Context, db *sqlitex.Pool) ([]horse.Character, error) {
|
|
return load(ctx, db, make([]horse.Character, 0, 128), characterSQL, func(s *sqlite.Stmt) horse.Character {
|
|
return horse.Character{
|
|
ID: horse.CharacterID(s.ColumnInt(0)),
|
|
Name: s.ColumnText(1),
|
|
}
|
|
})
|
|
}
|
|
|
|
// AffinitySummary gets precomputed base affinity for all pairs and trios of characters.
|
|
func AffinitySummary(ctx context.Context, db *sqlitex.Pool) ([]horse.AffinityRelation, error) {
|
|
return load(ctx, db, nil, affinitySQL, func(s *sqlite.Stmt) horse.AffinityRelation {
|
|
return horse.AffinityRelation{
|
|
IDA: s.ColumnInt(0),
|
|
IDB: s.ColumnInt(1),
|
|
IDC: s.ColumnInt(2),
|
|
Affinity: s.ColumnInt(3),
|
|
}
|
|
})
|
|
}
|
|
|
|
// Umas retrieves all trainable Uma variants.
|
|
func Umas(ctx context.Context, db *sqlitex.Pool) ([]horse.Uma, error) {
|
|
return load(ctx, db, make([]horse.Uma, 0, 128), umaSQL, func(s *sqlite.Stmt) horse.Uma {
|
|
return horse.Uma{
|
|
ID: horse.UmaID(s.ColumnInt(0)),
|
|
CharacterID: horse.CharacterID(s.ColumnInt(1)),
|
|
Name: s.ColumnText(2),
|
|
Variant: s.ColumnText(3),
|
|
Sprint: horse.AptitudeLevel(s.ColumnInt(5)),
|
|
Mile: horse.AptitudeLevel(s.ColumnInt(6)),
|
|
Medium: horse.AptitudeLevel(s.ColumnInt(7)),
|
|
Long: horse.AptitudeLevel(s.ColumnInt(8)),
|
|
Front: horse.AptitudeLevel(s.ColumnInt(9)),
|
|
Pace: horse.AptitudeLevel(s.ColumnInt(10)),
|
|
Late: horse.AptitudeLevel(s.ColumnInt(11)),
|
|
End: horse.AptitudeLevel(s.ColumnInt(12)),
|
|
Turf: horse.AptitudeLevel(s.ColumnInt(13)),
|
|
Dirt: horse.AptitudeLevel(s.ColumnInt(14)),
|
|
Unique: horse.SkillID(s.ColumnInt(15)),
|
|
Skill1: horse.SkillID(s.ColumnInt(16)),
|
|
Skill2: horse.SkillID(s.ColumnInt(17)),
|
|
Skill3: horse.SkillID(s.ColumnInt(18)),
|
|
SkillPL2: horse.SkillID(s.ColumnInt(19)),
|
|
SkillPL3: horse.SkillID(s.ColumnInt(20)),
|
|
SkillPL4: horse.SkillID(s.ColumnInt(21)),
|
|
SkillPL5: horse.SkillID(s.ColumnInt(22)),
|
|
}
|
|
})
|
|
}
|
|
|
|
func Conversations(ctx context.Context, db *sqlitex.Pool) ([]horse.Conversation, error) {
|
|
return load(ctx, db, make([]horse.Conversation, 0, 1024), conversationSQL, func(s *sqlite.Stmt) horse.Conversation {
|
|
return horse.Conversation{
|
|
CharacterID: horse.CharacterID(s.ColumnInt(0)),
|
|
Number: s.ColumnInt(1),
|
|
Location: horse.LobbyConversationLocationID(s.ColumnInt(2)),
|
|
Chara1: horse.CharacterID(s.ColumnInt(3)),
|
|
Chara2: horse.CharacterID(s.ColumnInt(4)),
|
|
Chara3: horse.CharacterID(s.ColumnInt(5)),
|
|
ConditionType: s.ColumnInt(6),
|
|
}
|
|
})
|
|
}
|