Adding modding folder with a hacked build.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package text
|
||||
|
||||
import (
|
||||
"github.com/inkyblackness/hacked/ss1/resource"
|
||||
)
|
||||
|
||||
// ElectronicMessageCache retrieves messages from a localizer and keeps them decoded until they are invalidated.
|
||||
type ElectronicMessageCache struct {
|
||||
cp Codepage
|
||||
localizer resource.Localizer
|
||||
|
||||
messages map[resource.Key]ElectronicMessage
|
||||
}
|
||||
|
||||
// NewElectronicMessageCache returns a new instance.
|
||||
func NewElectronicMessageCache(cp Codepage, localizer resource.Localizer) *ElectronicMessageCache {
|
||||
cache := &ElectronicMessageCache{
|
||||
cp: cp,
|
||||
localizer: localizer,
|
||||
|
||||
messages: make(map[resource.Key]ElectronicMessage),
|
||||
}
|
||||
return cache
|
||||
}
|
||||
|
||||
// InvalidateResources lets the cache remove any texts from resources that are specified in the given slice.
|
||||
func (cache *ElectronicMessageCache) InvalidateResources(ids []resource.ID) {
|
||||
for _, id := range ids {
|
||||
for key := range cache.messages {
|
||||
if key.ID == id {
|
||||
delete(cache.messages, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Message retrieves and caches the message of given key.
|
||||
func (cache *ElectronicMessageCache) Message(key resource.Key) (ElectronicMessage, error) {
|
||||
cacheKey := resource.KeyOf(key.ID.Plus(key.Index), key.Lang, 0)
|
||||
value, existing := cache.messages[cacheKey]
|
||||
if existing {
|
||||
return value, nil
|
||||
}
|
||||
selector := cache.localizer.LocalizedResources(key.Lang)
|
||||
view, err := selector.Select(cacheKey.ID)
|
||||
if err != nil {
|
||||
return EmptyElectronicMessage(), err
|
||||
}
|
||||
if (view.ContentType() != resource.Text) || !view.Compound() {
|
||||
return EmptyElectronicMessage(), resource.ErrWrongType(key, resource.Text)
|
||||
}
|
||||
value, err = DecodeElectronicMessage(cache.cp, view)
|
||||
if err != nil {
|
||||
return EmptyElectronicMessage(), err
|
||||
}
|
||||
cache.messages[cacheKey] = value
|
||||
return value, nil
|
||||
}
|
||||
Reference in New Issue
Block a user