200 lines
6.7 KiB
GDScript
200 lines
6.7 KiB
GDScript
class_name Config
|
|
extends Node
|
|
|
|
enum SpritesheetAnimType {
|
|
DEFAULT,
|
|
IDLE
|
|
}
|
|
static var SpritesheetAnchorIndices = [
|
|
"TOP_LEFT",
|
|
"TOP",
|
|
"TOP_RIGHT",
|
|
"LEFT",
|
|
"CENTER",
|
|
"RIGHT",
|
|
"BOTTOM_LEFT",
|
|
"BOTTOM",
|
|
"BOTTOM_RIGHT"
|
|
]
|
|
static var SpritesheetAnchor = {
|
|
TOP_LEFT = [BoxContainer.AlignmentMode.ALIGNMENT_BEGIN, BoxContainer.AlignmentMode.ALIGNMENT_BEGIN],
|
|
TOP = [BoxContainer.AlignmentMode.ALIGNMENT_CENTER, BoxContainer.AlignmentMode.ALIGNMENT_BEGIN],
|
|
TOP_RIGHT = [BoxContainer.AlignmentMode.ALIGNMENT_END, BoxContainer.AlignmentMode.ALIGNMENT_BEGIN],
|
|
LEFT = [BoxContainer.AlignmentMode.ALIGNMENT_BEGIN, BoxContainer.AlignmentMode.ALIGNMENT_CENTER],
|
|
CENTER = [BoxContainer.AlignmentMode.ALIGNMENT_CENTER, BoxContainer.AlignmentMode.ALIGNMENT_CENTER],
|
|
RIGHT = [BoxContainer.AlignmentMode.ALIGNMENT_END, BoxContainer.AlignmentMode.ALIGNMENT_CENTER],
|
|
BOTTOM_LEFT = [BoxContainer.AlignmentMode.ALIGNMENT_BEGIN, BoxContainer.AlignmentMode.ALIGNMENT_END],
|
|
BOTTOM = [BoxContainer.AlignmentMode.ALIGNMENT_CENTER, BoxContainer.AlignmentMode.ALIGNMENT_END],
|
|
BOTTOM_RIGHT = [BoxContainer.AlignmentMode.ALIGNMENT_END, BoxContainer.AlignmentMode.ALIGNMENT_END]
|
|
}
|
|
|
|
# OSD and UI
|
|
var osd_dwell_time = 2000
|
|
var osd_fade_time = 1000
|
|
var osd_opacity = 1.0
|
|
var menu_opacity = 1.0
|
|
var background_opacity = 0.1
|
|
|
|
# BPM snap
|
|
var coarse_bpm_snap = 10.0
|
|
var fine_bpm_snap = 0.5
|
|
|
|
# Tempo
|
|
var tempo_default = 120.0
|
|
var tempo_numerator = 4
|
|
|
|
# Sparrow spritesheet data
|
|
var spritesheet_data = "res://assets/BOYFRIEND.xml"
|
|
var spritesheet_image = "res://assets/BOYFRIEND.png"
|
|
var spritesheet_anims = {
|
|
"BF idle dance" = {
|
|
alias = null,
|
|
type = SpritesheetAnimType.IDLE
|
|
},
|
|
"BF NOTE LEFT" = {
|
|
alias = "left",
|
|
type = SpritesheetAnimType.DEFAULT
|
|
},
|
|
"BF NOTE DOWN" = {
|
|
alias = "down",
|
|
type = SpritesheetAnimType.DEFAULT
|
|
},
|
|
"BF NOTE UP" = {
|
|
alias = "up",
|
|
type = SpritesheetAnimType.DEFAULT
|
|
},
|
|
"BF NOTE RIGHT" = {
|
|
alias = "right",
|
|
type = SpritesheetAnimType.DEFAULT
|
|
},
|
|
"BF HEY!!" = {
|
|
alias = "special",
|
|
type = SpritesheetAnimType.DEFAULT
|
|
}
|
|
}
|
|
var spritesheet_anchor = SpritesheetAnchor.BOTTOM
|
|
var sprite_scale = 1.0
|
|
var sprite_flip = false
|
|
var sprite_hold = false
|
|
var spritesheet_default_opacity = 1.0
|
|
|
|
# Keybinds
|
|
# Bind change keys
|
|
var bpm_is_global = true
|
|
var bpm_needs_enable = true
|
|
var bpm_increase:Array[Key] = [ KEY_R ]
|
|
var bpm_decrease:Array[Key] = [ KEY_F ]
|
|
var bpm_tsincrease:Array[Key] = [ KEY_T ]
|
|
var bpm_tsdecrease:Array[Key] = [ KEY_G ]
|
|
var bpm_opaincrease:Array[Key] = [ KEY_Y ]
|
|
var bpm_opadecrease:Array[Key] = [ KEY_H ]
|
|
var bpm_reset:Array[Key] = [ KEY_V ]
|
|
|
|
# Bind modifiers
|
|
var mod_enable:Array[Key] = [ KEY_SHIFT ]
|
|
var mod_snap_fine:Array[Key] = [ KEY_TAB ]
|
|
var mod_snap_coarse:Array[Key] = [ KEY_CTRL ]
|
|
|
|
# Bind animations
|
|
var anim_is_global = true
|
|
var anim_needs_enable = false
|
|
var anim_binds = {
|
|
left = [ KEY_A, KEY_LEFT ],
|
|
down = [ KEY_S, KEY_DOWN ],
|
|
up = [ KEY_W, KEY_UP ],
|
|
right = [ KEY_D, KEY_RIGHT ],
|
|
special = [ KEY_Q ]
|
|
}
|
|
|
|
static func new_clear() -> Config:
|
|
var config:Config = Config.new()
|
|
config.spritesheet_anims = {}
|
|
config.bpm_increase = []
|
|
config.bpm_decrease = []
|
|
config.bpm_tsincrease = []
|
|
config.bpm_tsdecrease = []
|
|
config.bpm_opaincrease = []
|
|
config.bpm_opadecrease = []
|
|
config.bpm_reset = []
|
|
config.mod_enable = []
|
|
config.mod_snap_fine = []
|
|
config.mod_snap_coarse = []
|
|
config.anim_binds = {}
|
|
return config
|
|
|
|
func clone_config(config) -> void:
|
|
self.osd_dwell_time = config.osd_dwell_time
|
|
self.osd_fade_time = config.osd_fade_time
|
|
self.osd_opacity = config.osd_opacity
|
|
self.menu_opacity = config.menu_opacity
|
|
self.background_opacity = config.background_opacity
|
|
self.coarse_bpm_snap = config.coarse_bpm_snap
|
|
self.fine_bpm_snap = config.fine_bpm_snap
|
|
self.tempo_default = config.tempo_default
|
|
self.tempo_numerator = config.tempo_numerator
|
|
self.spritesheet_data = config.spritesheet_data
|
|
self.spritesheet_image = config.spritesheet_image
|
|
self.spritesheet_anims = config.spritesheet_anims.duplicate(true)
|
|
self.spritesheet_anchor = config.spritesheet_anchor
|
|
self.sprite_scale = config.sprite_scale
|
|
self.sprite_flip = config.sprite_flip
|
|
self.sprite_hold = config.sprite_hold
|
|
self.spritesheet_default_opacity = config.spritesheet_default_opacity
|
|
self.bpm_is_global = config.bpm_is_global
|
|
self.bpm_needs_enable = config.bpm_needs_enable
|
|
self.bpm_increase = config.bpm_increase.duplicate(true)
|
|
self.bpm_decrease = config.bpm_decrease.duplicate(true)
|
|
self.bpm_tsincrease = config.bpm_tsincrease.duplicate(true)
|
|
self.bpm_tsdecrease = config.bpm_tsdecrease.duplicate(true)
|
|
self.bpm_opaincrease = config.bpm_opaincrease.duplicate(true)
|
|
self.bpm_opadecrease = config.bpm_opadecrease.duplicate(true)
|
|
self.bpm_reset = config.bpm_reset.duplicate(true)
|
|
self.mod_enable = config.mod_enable.duplicate(true)
|
|
self.mod_snap_fine = config.mod_snap_fine.duplicate(true)
|
|
self.mod_snap_coarse = config.mod_snap_coarse.duplicate(true)
|
|
self.anim_is_global = config.anim_is_global
|
|
self.anim_needs_enable = config.anim_needs_enable
|
|
self.anim_binds = config.anim_binds.duplicate(true)
|
|
|
|
func format_config() -> Dictionary:
|
|
var dict = {}
|
|
dict.osd_dwell_time = self.osd_dwell_time
|
|
dict.osd_fade_time = self.osd_fade_time
|
|
dict.osd_opacity = self.osd_opacity
|
|
dict.menu_opacity = self.menu_opacity
|
|
dict.background_opacity = self.background_opacity
|
|
dict.coarse_bpm_snap = self.coarse_bpm_snap
|
|
dict.fine_bpm_snap = self.fine_bpm_snap
|
|
dict.tempo_default = self.tempo_default
|
|
dict.tempo_numerator = self.tempo_numerator
|
|
dict.spritesheet_data = self.spritesheet_data
|
|
dict.spritesheet_image = self.spritesheet_image
|
|
dict.spritesheet_anims = self.spritesheet_anims.duplicate(true)
|
|
dict.sprite_scale = self.sprite_scale
|
|
dict.sprite_flip = self.sprite_flip
|
|
dict.sprite_hold = self.sprite_hold
|
|
dict.spritesheet_anchor = self.spritesheet_anchor
|
|
dict.spritesheet_default_opacity = self.spritesheet_default_opacity
|
|
dict.bpm_is_global = self.bpm_is_global
|
|
dict.bpm_needs_enable = self.bpm_needs_enable
|
|
dict.bpm_increase = self.bpm_increase.duplicate(true)
|
|
dict.bpm_decrease = self.bpm_decrease.duplicate(true)
|
|
dict.bpm_tsincrease = self.bpm_tsincrease.duplicate(true)
|
|
dict.bpm_tsdecrease = self.bpm_tsdecrease.duplicate(true)
|
|
dict.bpm_opaincrease = self.bpm_opaincrease.duplicate(true)
|
|
dict.bpm_opadecrease = self.bpm_opadecrease.duplicate(true)
|
|
dict.bpm_reset = self.bpm_reset.duplicate(true)
|
|
dict.mod_enable = self.mod_enable.duplicate(true)
|
|
dict.mod_snap_fine = self.mod_snap_fine.duplicate(true)
|
|
dict.mod_snap_coarse = self.mod_snap_coarse.duplicate(true)
|
|
dict.anim_is_global = self.anim_is_global
|
|
dict.anim_needs_enable = self.anim_needs_enable
|
|
dict.anim_binds = self.anim_binds.duplicate(true)
|
|
return dict
|
|
|
|
func save_to_file(file:String) -> void:
|
|
var dict = self.format_config()
|
|
var config = ConfigFile.new()
|
|
for key in dict:
|
|
config.set_value("FunkPanion", key, dict[key])
|
|
config.save(file)
|