mirror of
https://forgejo.xatacraft.ru/Sunshine/mkxp-sunshine.git
synced 2026-08-19 21:39:57 +00:00
71 lines
1.5 KiB
Ruby
71 lines
1.5 KiB
Ruby
# Persistent data independent from save file.
|
|
# Stores settings and the like.
|
|
class LanguageCode
|
|
attr_accessor :full
|
|
attr_accessor :lang
|
|
attr_accessor :region
|
|
|
|
def initialize(str)
|
|
parts = str.split(/[_-]/)
|
|
if parts.size == 1
|
|
@lang, @region = parts.first.downcase.to_sym, nil
|
|
@full = @lang
|
|
elsif parts.size == 2
|
|
@lang, @region = parts.first.downcase.to_sym, parts.last.upcase.to_sym
|
|
@full = (parts.first.downcase + '_' + parts.last.upcase).to_sym
|
|
else
|
|
raise "malformed language code: #{str}"
|
|
end
|
|
end
|
|
end
|
|
|
|
class Persistent
|
|
attr_reader :lang
|
|
|
|
def initialize
|
|
self.lang = LanguageCode.new(Steam::LANG || Oneshot::LANG)
|
|
end
|
|
|
|
# Members
|
|
def lang=(val)
|
|
case val
|
|
when String
|
|
@lang = LanguageCode.new(val)
|
|
when LanguageCode
|
|
@lang = val
|
|
else
|
|
raise 'value passed to Persistent.lang neither String nor LanguageCode'
|
|
end
|
|
Language.set(@lang)
|
|
end
|
|
|
|
def langcode
|
|
self.lang.full.to_s
|
|
end
|
|
|
|
# MARSHAL
|
|
def marshal_dump
|
|
[@lang]
|
|
end
|
|
def marshal_load(array)
|
|
self.lang = array.first
|
|
end
|
|
|
|
# Save/Load global instance of persistent
|
|
FILE_NAME = Oneshot::SAVE_PATH + '/persistent.dat'
|
|
def save
|
|
File.open(FILE_NAME, 'wb') do |file|
|
|
Marshal.dump($persistent, file)
|
|
end
|
|
end
|
|
|
|
def self.load
|
|
if FileTest.exist?(FILE_NAME)
|
|
File.open(FILE_NAME, 'rb') do |file|
|
|
$persistent = Marshal.load(file)
|
|
end
|
|
else
|
|
$persistent = Persistent.new
|
|
end
|
|
end
|
|
end
|