mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
175 lines
5.5 KiB
Ruby
175 lines
5.5 KiB
Ruby
class OutfitSelector
|
|
attr_reader :clothes_list
|
|
attr_reader :hats_list
|
|
attr_reader :hairstyles_list
|
|
|
|
def initialize()
|
|
@clothes_list = parse_clothes_folder()
|
|
@hats_list = parse_hats_folder()
|
|
@hairstyles_list =parse_hairstyles_folder()
|
|
end
|
|
|
|
|
|
def parse_clothes_folder
|
|
return list_folders(get_clothes_sets_list_path())
|
|
end
|
|
|
|
def parse_hats_folder
|
|
return list_folders(get_hats_sets_list_path())
|
|
end
|
|
|
|
def parse_hairstyle_types_folder
|
|
return list_folders(get_hair_sets_list_path())
|
|
end
|
|
|
|
def generate_hats_choice(baseOptions=true,additionalIds=[],additionalTags=[],filterOutTags=[])
|
|
list = []
|
|
list += additionalIds
|
|
list += search_hats(additionalTags)
|
|
if baseOptions
|
|
list += get_hats_base_options()
|
|
list += search_hats(get_regional_sets_tags())
|
|
end
|
|
return list
|
|
end
|
|
|
|
def generate_clothes_choice(baseOptions=true,additionalIds=[],additionalTags=[],filterOutTags=[])
|
|
list = []
|
|
list += additionalIds
|
|
list += search_clothes(additionalTags)
|
|
if baseOptions
|
|
list += get_clothes_base_options()
|
|
list += search_clothes(get_regional_sets_tags())
|
|
end
|
|
return list
|
|
end
|
|
|
|
def generate_hairstyle_choice(baseOptions=true,additionalIds=[],additionalTags=[],filterOutTags=[])
|
|
list = []
|
|
list += additionalIds
|
|
list += search_hairstyles(additionalTags)
|
|
if baseOptions
|
|
list += get_hairstyle_salon_base_options()
|
|
list += search_hairstyles(get_regional_sets_tags())
|
|
end
|
|
list << HAIR_BALD
|
|
return list
|
|
end
|
|
|
|
def get_regional_sets_tags()
|
|
regional_tags = []
|
|
regional_tags << "kanto" if $game_switches[SWITCH_KANTO_HAIR_COLLECTION]
|
|
regional_tags << "johto" if $game_switches[SWITCH_JOHTO_HAIR_COLLECTION]
|
|
regional_tags << "hoenn" if $game_switches[SWITCH_HOENN_HAIR_COLLECTION]
|
|
regional_tags << "sinnoh" if $game_switches[SWITCH_SINNOH_HAIR_COLLECTION]
|
|
regional_tags << "unova" if $game_switches[SWITCH_UNOVA_HAIR_COLLECTION]
|
|
regional_tags << "kalos" if $game_switches[SWITCH_KALOS_HAIR_COLLECTION]
|
|
regional_tags << "alola" if $game_switches[SWITCH_ALOLA_HAIR_COLLECTION]
|
|
regional_tags << "galar" if $game_switches[SWITCH_GALAR_HAIR_COLLECTION]
|
|
regional_tags << "paldea" if $game_switches[SWITCH_PALDEA_HAIR_COLLECTION]
|
|
return regional_tags
|
|
end
|
|
|
|
def get_hairstyle_salon_base_options()
|
|
return search_hairstyles(["default"])
|
|
end
|
|
|
|
def get_clothes_base_options()
|
|
return search_clothes(["default"])
|
|
end
|
|
|
|
def get_hats_base_options()
|
|
return search_hats(["default"])
|
|
end
|
|
|
|
def parse_hairstyles_folder
|
|
hairstyle_types= list_folders(get_hair_sets_list_path())
|
|
max_versions_number = 10
|
|
list= []
|
|
for hairstyle in hairstyle_types
|
|
for i in 1..max_versions_number
|
|
type = i.to_s + "_" + hairstyle
|
|
filePath = getOverworldHairFilename(type)
|
|
if pbResolveBitmap(filePath)
|
|
list << type
|
|
end
|
|
end
|
|
end
|
|
return list
|
|
end
|
|
|
|
def list_folders(path)
|
|
entries= Dir.entries(path)
|
|
return entries.select { |entry| File.directory?(File.join(path, entry)) && entry != '.' && entry != '..' }
|
|
end
|
|
|
|
|
|
def filter_unlocked_outfits(outfits_list,unlocked_outfits)
|
|
available_outfits = []
|
|
outfits_list.each do |outfit|
|
|
available_outfits << outfit if unlocked_outfits.include?(outfit)
|
|
end
|
|
return available_outfits
|
|
end
|
|
|
|
|
|
def selectNextOutfit(currentOutfit, incr, outfits_list, versions = [], allowNone = true, prefix_filter = nil,unlockedOutfits=[],everythingUnlocked=false)
|
|
available_outfits = []
|
|
available_outfits = outfits_list if everythingUnlocked
|
|
available_outfits << "" if allowNone
|
|
available_outfits += filter_unlocked_outfits(outfits_list,unlockedOutfits) if !everythingUnlocked
|
|
#available_outfits += list_available_outfits(directory, versions, unlockedOutfits, prefix_filter) #unlockedOutfits = nil for all outfits unlocked
|
|
last_outfit = available_outfits[-1]
|
|
|
|
current_outfit_index = get_current_outfit_position(currentOutfit, available_outfits)
|
|
next_outfit_index = current_outfit_index +incr
|
|
|
|
nextOutfit = available_outfits[next_outfit_index]
|
|
nextOutfit = last_outfit if next_outfit_index < 0
|
|
|
|
nextOutfit = available_outfits[0] if next_outfit_index >= available_outfits.length()
|
|
|
|
return nextOutfit if available_outfits.include?(nextOutfit)
|
|
return currentOutfit
|
|
end
|
|
|
|
def changeToNextClothes(incr,all_unlocked=false)
|
|
$player.unlocked_clothes = [] if !$player.unlocked_clothes
|
|
|
|
|
|
currentOutfit = $player.clothes
|
|
currentOutfit = 0 if !currentOutfit
|
|
nextOutfit = selectNextOutfit(currentOutfit, incr, @clothes_list, [], false,nil,$player.unlocked_clothes,all_unlocked)
|
|
$player.clothes = nextOutfit
|
|
$player.clothes_color = 0
|
|
echoln $player.clothes
|
|
|
|
end
|
|
|
|
def changeToNextHat(incr,all_unlocked=false)
|
|
$player.unlocked_hats = [] if !$player.unlocked_hats
|
|
|
|
currentHat = $player.hat
|
|
currentHat = 0 if !currentHat
|
|
nextOutfit = selectNextOutfit(currentHat, incr, @hats_list, [], true, "hat",$player.unlocked_hats,all_unlocked)
|
|
$player.hat = nextOutfit
|
|
$player.hat_color = 0
|
|
echoln $player.hat
|
|
|
|
end
|
|
|
|
def changeToNextHairstyle(incr,all_unlocked=false)
|
|
$player.unlocked_hairstyles = [] if !$player.unlocked_hairstyles
|
|
|
|
currentHair = $player.hair
|
|
currentHair = 0 if !currentHair
|
|
nextOutfit = selectNextOutfit(currentHair, incr, @hairstyles_list, ["a", "b", "c", "d"], true,nil,$player.unlocked_hairstyles,all_unlocked)
|
|
$player.hair_color = 0
|
|
$player.hair = nextOutfit
|
|
echoln $player.hair
|
|
|
|
end
|
|
|
|
|
|
end
|