mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-10 22:54:59 +00:00
release 6.2
This commit is contained in:
242
Data/Scripts/050_Outfits/001_OutfitsMain/LayeredClothes.rb
Normal file
242
Data/Scripts/050_Outfits/001_OutfitsMain/LayeredClothes.rb
Normal file
@@ -0,0 +1,242 @@
|
||||
def find_last_outfit(outfit_type_path, firstOutfit)
|
||||
for i in firstOutfit..Settings::MAX_NB_OUTFITS
|
||||
outfit_path = outfit_type_path + "/" + i.to_s #Settings::PLAYER_GRAPHICS_FOLDER + outfit_type_path + "/" + outfit_type_path + "_" + player_sprite + "_" + i.to_s
|
||||
return i - 1 if !Dir.exist?(outfit_path)
|
||||
end
|
||||
return firstOutfit
|
||||
end
|
||||
|
||||
def list_all_numeric_folders(directory_path)
|
||||
entries = Dir.entries(directory_path)
|
||||
# Filter out only the directories whose names are numeric (excluding "." and "..")
|
||||
numeric_folders = entries.select do |entry|
|
||||
full_path = File.join(directory_path, entry)
|
||||
File.directory?(full_path) && entry != '.' && entry != '..' && entry.match?(/^\d+$/)
|
||||
end
|
||||
|
||||
# Convert the folder names to integers and store in an array
|
||||
folder_integers = numeric_folders.map(&:to_i)
|
||||
folder_integers.sort!
|
||||
return folder_integers
|
||||
end
|
||||
|
||||
def list_all_numeric_files_with_filter(directory_path, prefix)
|
||||
entries = Dir.entries(directory_path)
|
||||
prefixless = []
|
||||
for file in entries
|
||||
next if file == "." || file == ".."
|
||||
prefixless << file.gsub((prefix + "_"), "")
|
||||
end
|
||||
|
||||
folder_integers = prefixless.map(&:to_i)
|
||||
folder_integers.sort!
|
||||
return folder_integers
|
||||
end
|
||||
|
||||
#unlocked:
|
||||
# -1 for all outfits unlocked
|
||||
# Otherwise, an array of the ids of unlocked outfits
|
||||
def list_available_outfits(directory, versions = [], unlocked = [], prefix_filter = nil)
|
||||
if prefix_filter
|
||||
outfits = list_all_numeric_files_with_filter(directory, prefix_filter)
|
||||
else
|
||||
outfits = list_all_numeric_folders(directory)
|
||||
end
|
||||
# #echoln outfits
|
||||
# return outfits #todo: remove this return for unlockable outfits
|
||||
available_outfits = []
|
||||
for outfit in outfits
|
||||
if !unlocked || unlocked.include?(outfit)
|
||||
for version in versions
|
||||
available_outfits << outfit.to_s + version
|
||||
end
|
||||
available_outfits << outfit.to_s if versions.empty?
|
||||
end
|
||||
end
|
||||
return available_outfits
|
||||
end
|
||||
|
||||
def get_current_outfit_position(currentOutfit_id, available_outfits)
|
||||
current_index = available_outfits.index(currentOutfit_id)
|
||||
return current_index.nil? ? 0 : current_index
|
||||
end
|
||||
|
||||
def setHairColor(hue_shift)
|
||||
$Trainer.hair_color = hue_shift
|
||||
end
|
||||
|
||||
def shiftHatColor(incr)
|
||||
$Trainer.hat_color = 0 if !$Trainer.hat_color
|
||||
$Trainer.hat_color += incr
|
||||
end
|
||||
|
||||
def shiftClothesColor(incr)
|
||||
$Trainer.clothes_color = 0 if !$Trainer.clothes_color
|
||||
$Trainer.clothes_color += incr
|
||||
end
|
||||
|
||||
def shiftHairColor(incr)
|
||||
$Trainer.hair_color = 0 if !$Trainer.hair_color
|
||||
$Trainer.hair_color += incr
|
||||
end
|
||||
|
||||
def pbLoadOutfitBitmap(outfitFileName)
|
||||
begin
|
||||
outfitBitmap = RPG::Cache.load_bitmap("", outfitFileName)
|
||||
return outfitBitmap
|
||||
rescue
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
def setOutfit(outfit_id)
|
||||
$Trainer.clothes = outfit_id
|
||||
end
|
||||
|
||||
def setHat(hat_id)
|
||||
$Trainer.hat = hat_id
|
||||
end
|
||||
|
||||
def getEasterEggHeldItem()
|
||||
map = $game_map.map_id
|
||||
return "HOTDOG" if [141, 194].include?(map) #restaurant
|
||||
return "SNOWBALL" if [670, 693, 698, 694].include?(map)
|
||||
return "WALLET" if [432, 433, 434, 435, 436, 292].include?(map) #dept. store
|
||||
return "ALARMCLOCK" if [43, 48, 67, 68, 69, 70, 71, 73].include?(map) #Player room
|
||||
return "SAFARIBALL" if [445, 484, 485, 486, 107, 487, 488, 717, 82, 75, 74].include?(map) #Safari Zone
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
def getCurrentPokeball()
|
||||
otherItem = getEasterEggHeldItem()
|
||||
return otherItem if otherItem
|
||||
firstPokemon = $Trainer.party[0]
|
||||
return firstPokemon.poke_ball if firstPokemon
|
||||
return nil
|
||||
end
|
||||
|
||||
def generate_front_trainer_sprite_bitmap(pokeball = nil, clothes_id = nil, hat_id = nil, hair_id = nil,
|
||||
skin_tone_id = nil, hair_color = nil, hat_color = nil, clothes_color = nil)
|
||||
clothes_id = $Trainer.clothes if !clothes_id
|
||||
hat_id = $Trainer.hat if !hat_id
|
||||
hair_id = $Trainer.hair if !hair_id
|
||||
skin_tone_id = $Trainer.skin_tone if !skin_tone_id
|
||||
hair_color = $Trainer.hair_color if !hair_color
|
||||
hat_color = $Trainer.hat_color if !hat_color
|
||||
clothes_color = $Trainer.clothes_color if !clothes_color
|
||||
|
||||
hairFilename = getTrainerSpriteHairFilename(hair_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAIR_FOLDER + "/hair_trainer_{1}", $Trainer.hair)
|
||||
outfitFilename = getTrainerSpriteOutfitFilename(clothes_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_CLOTHES_FOLDER + "/clothes_trainer_{1}", $Trainer.clothes)
|
||||
|
||||
hatFilename = getTrainerSpriteHatFilename(hat_id) # _INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAT_FOLDER + "/hat_trainer_{1}", $Trainer.hat)
|
||||
pokeball = getCurrentPokeball if !pokeball
|
||||
ballFilename = getTrainerSpriteBallFilename(pokeball) if pokeball
|
||||
|
||||
baseFilePath = getBaseTrainerSpriteFilename(skin_tone_id)
|
||||
|
||||
hair_color_shift = hair_color
|
||||
hat_color_shift = hat_color
|
||||
clothes_color_shift = clothes_color
|
||||
|
||||
hair_color_shift = 0 if !hair_color_shift
|
||||
hat_color_shift = 0 if !hat_color_shift
|
||||
clothes_color_shift = 0 if !clothes_color_shift
|
||||
|
||||
baseBitmap = AnimatedBitmap.new(baseFilePath) if pbResolveBitmap(baseFilePath)
|
||||
ballBitmap = pbLoadOutfitBitmap(ballFilename) if pbResolveBitmap(ballFilename)
|
||||
|
||||
if !pbResolveBitmap(outfitFilename)
|
||||
outfitFilename = getTrainerSpriteOutfitFilename(Settings::PLAYER_TEMP_OUTFIT_FALLBACK)
|
||||
end
|
||||
if !pbResolveBitmap(outfitFilename)
|
||||
raise "No temp clothes graphics available"
|
||||
end
|
||||
|
||||
outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) # if pbResolveBitmap(outfitFilename) #pb
|
||||
hairBitmapWrapper = AnimatedBitmap.new(hairFilename, hair_color_shift) if pbResolveBitmap(hairFilename)
|
||||
|
||||
hatBitmap = AnimatedBitmap.new(hatFilename, hat_color_shift) if pbResolveBitmap(hatFilename) #pbLoadOutfitBitmap(hatFilename) if pbResolveBitmap(hatFilename)
|
||||
|
||||
baseBitmap.bitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect) if outfitBitmap
|
||||
|
||||
baseBitmap.bitmap.blt(0, 0, hairBitmapWrapper.bitmap, hairBitmapWrapper.bitmap.rect) if hairBitmapWrapper
|
||||
baseBitmap.bitmap.blt(0, 0, hatBitmap.bitmap, hatBitmap.bitmap.rect) if hatBitmap
|
||||
baseBitmap.bitmap.blt(44, 42, ballBitmap, ballBitmap.rect) if ballBitmap
|
||||
|
||||
return baseBitmap
|
||||
end
|
||||
|
||||
def generateClothedBitmapStatic(trainer, action = "walk")
|
||||
baseBitmapFilename = getBaseOverworldSpriteFilename(action, trainer.skin_tone)
|
||||
if !pbResolveBitmap(baseBitmapFilename)
|
||||
baseBitmapFilename = Settings::PLAYER_GRAPHICS_FOLDER + action
|
||||
end
|
||||
baseSprite = AnimatedBitmap.new(baseBitmapFilename)
|
||||
|
||||
baseBitmap = baseSprite.bitmap.clone #nekkid sprite
|
||||
outfitFilename = getOverworldOutfitFilename(trainer.clothes, action) #
|
||||
outfitFilename = getOverworldOutfitFilename(Settings::PLAYER_TEMP_OUTFIT_FALLBACK) if !pbResolveBitmap(outfitFilename)
|
||||
hairFilename = getOverworldHairFilename(trainer.hair)
|
||||
hatFilename = getOverworldHatFilename(trainer.hat)
|
||||
|
||||
hair_color_shift = trainer.hair_color
|
||||
hat_color_shift = trainer.hat_color
|
||||
clothes_color_shift = trainer.clothes_color
|
||||
|
||||
hair_color_shift = 0 if !hair_color_shift
|
||||
hat_color_shift = 0 if !hat_color_shift
|
||||
clothes_color_shift = 0 if !clothes_color_shift
|
||||
#@hat.update(@character_name, hatFilename,hat_color_shift) if @hat
|
||||
if !pbResolveBitmap(outfitFilename)
|
||||
outfitFilename = Settings::PLAYER_TEMP_OUTFIT_FALLBACK
|
||||
end
|
||||
|
||||
outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) # if pbResolveBitmap(outfitFilename) #pbLoadOutfitBitmap(outfitFilename) if pbResolveBitmap(outfitFilename)
|
||||
hairBitmapWrapper = AnimatedBitmap.new(hairFilename, hair_color_shift) if pbResolveBitmap(hairFilename)
|
||||
|
||||
baseBitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect) if outfitBitmap
|
||||
|
||||
#baseBitmap.blt(0, 0, hairBitmapWrapper.bitmap, hairBitmapWrapper.bitmap.rect)
|
||||
|
||||
current_offset = 0 #getCurrentSpriteOffset()
|
||||
positionHair(baseBitmap, hairBitmapWrapper.bitmap, current_offset) if hairBitmapWrapper
|
||||
#baseBitmap.blt(0, 0, hatBitmap, hatBitmap.rect) if hatBitmap
|
||||
return baseBitmap
|
||||
end
|
||||
|
||||
def positionHair(baseBitmap, hairBirmap, offset)
|
||||
baseBitmap.blt(offset[0], offset[1], hairBirmap, hairBirmap.rect)
|
||||
end
|
||||
|
||||
def add_hat_to_bitmap(bitmap, hat_id, x_pos, y_pos, scale = 1, mirrored = false)
|
||||
base_scale = 1.5 #coz hat & poke sprites aren't the same size
|
||||
adjusted_scale = base_scale * scale
|
||||
hat_filename = getTrainerSpriteHatFilename(hat_id)
|
||||
hatBitmapWrapper = AnimatedBitmap.new(hat_filename, 0) if pbResolveBitmap(hat_filename)
|
||||
hatBitmapWrapper.scale_bitmap(adjusted_scale) if hatBitmapWrapper
|
||||
hatBitmapWrapper.mirror if mirrored
|
||||
bitmap.blt(x_pos * adjusted_scale, y_pos * adjusted_scale, hatBitmapWrapper.bitmap, hatBitmapWrapper.bitmap.rect) if hatBitmapWrapper
|
||||
end
|
||||
|
||||
class PokemonTemp
|
||||
attr_accessor :trainer_preview
|
||||
end
|
||||
|
||||
def display_outfit_preview(x = 320, y = 0, withBorder = true)
|
||||
hide_outfit_preview() if $PokemonTemp.trainer_preview
|
||||
$PokemonTemp.trainer_preview = TrainerClothesPreview.new(x, y, withBorder)
|
||||
$PokemonTemp.trainer_preview.show()
|
||||
end
|
||||
|
||||
def hide_outfit_preview()
|
||||
$game_screen.pictures[20].erase
|
||||
$PokemonTemp.trainer_preview.erase() if $PokemonTemp.trainer_preview
|
||||
$PokemonTemp.trainer_preview = nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
114
Data/Scripts/050_Outfits/001_OutfitsMain/OutfitSelector.rb
Normal file
114
Data/Scripts/050_Outfits/001_OutfitsMain/OutfitSelector.rb
Normal file
@@ -0,0 +1,114 @@
|
||||
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 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)
|
||||
$Trainer.unlocked_clothes = [] if !$Trainer.unlocked_clothes
|
||||
|
||||
|
||||
currentOutfit = $Trainer.clothes
|
||||
currentOutfit = 0 if !currentOutfit
|
||||
nextOutfit = selectNextOutfit(currentOutfit, incr, @clothes_list, [], false,nil,$Trainer.unlocked_clothes,all_unlocked)
|
||||
$Trainer.clothes = nextOutfit
|
||||
$Trainer.clothes_color = 0
|
||||
echoln $Trainer.clothes
|
||||
|
||||
end
|
||||
|
||||
def changeToNextHat(incr,all_unlocked=false)
|
||||
$Trainer.unlocked_hats = [] if !$Trainer.unlocked_hats
|
||||
|
||||
currentHat = $Trainer.hat
|
||||
currentHat = 0 if !currentHat
|
||||
nextOutfit = selectNextOutfit(currentHat, incr, @hats_list, [], true, "hat",$Trainer.unlocked_hats,all_unlocked)
|
||||
$Trainer.hat = nextOutfit
|
||||
$Trainer.hat_color = 0
|
||||
echoln $Trainer.hat
|
||||
|
||||
end
|
||||
|
||||
def changeToNextHairstyle(incr,all_unlocked=false)
|
||||
$Trainer.unlocked_hairstyles = [] if !$Trainer.unlocked_hairstyles
|
||||
|
||||
currentHair = $Trainer.hair
|
||||
currentHair = 0 if !currentHair
|
||||
nextOutfit = selectNextOutfit(currentHair, incr, @hairstyles_list, ["a", "b", "c", "d"], true,nil,$Trainer.unlocked_hairstyles,all_unlocked)
|
||||
$Trainer.hair_color = 0
|
||||
$Trainer.hair = nextOutfit
|
||||
echoln $Trainer.hair
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
75
Data/Scripts/050_Outfits/001_OutfitsMain/OutfitsGlobal.rb
Normal file
75
Data/Scripts/050_Outfits/001_OutfitsMain/OutfitsGlobal.rb
Normal file
@@ -0,0 +1,75 @@
|
||||
class PokemonGlobalMetadata
|
||||
attr_accessor :hats_data
|
||||
attr_accessor :hairstyles_data
|
||||
attr_accessor :clothes_data
|
||||
end
|
||||
|
||||
def update_global_hats_list()
|
||||
file_path = Settings::HATS_DATA_PATH
|
||||
json_data = File.read(file_path)
|
||||
hat_data = HTTPLite::JSON.parse(json_data)
|
||||
|
||||
$PokemonGlobal.hats_data = {}
|
||||
|
||||
# Iterate through the JSON data and create Hat objects
|
||||
hat_data.each do |data|
|
||||
tags = data['tags'] ? data['tags'].split(',') : []
|
||||
hat = Hat.new(
|
||||
data['id'],
|
||||
data['name'],
|
||||
data['description'],
|
||||
data['price'],
|
||||
tags
|
||||
)
|
||||
$PokemonGlobal.hats_data[hat.id] = hat
|
||||
end
|
||||
end
|
||||
|
||||
def update_global_hairstyles_list()
|
||||
file_path = Settings::HAIRSTYLE_DATA_PATH
|
||||
json_data = File.read(file_path)
|
||||
hair_data = HTTPLite::JSON.parse(json_data)
|
||||
|
||||
$PokemonGlobal.hairstyles_data = {}
|
||||
|
||||
# Iterate through the JSON data and create Hat objects
|
||||
hair_data.each do |data|
|
||||
tags = data['tags'] ? data['tags'].split(',') : []
|
||||
hair = Hairstyle.new(
|
||||
data['id'],
|
||||
data['name'],
|
||||
data['description'],
|
||||
data['price'],
|
||||
tags
|
||||
)
|
||||
$PokemonGlobal.hairstyles_data[hair.id] = hair
|
||||
end
|
||||
end
|
||||
|
||||
def update_global_clothes_list()
|
||||
file_path = Settings::CLOTHES_DATA_PATH
|
||||
json_data = File.read(file_path)
|
||||
outfits_data = HTTPLite::JSON.parse(json_data)
|
||||
|
||||
$PokemonGlobal.clothes_data = {}
|
||||
|
||||
# Iterate through the JSON data and create Hat objects
|
||||
outfits_data.each do |data|
|
||||
tags = data['tags'] ? data['tags'].split(',') : []
|
||||
outfit = Clothes.new(
|
||||
data['id'],
|
||||
data['name'],
|
||||
data['description'],
|
||||
data['price'],
|
||||
tags
|
||||
)
|
||||
$PokemonGlobal.clothes_data[outfit.id] = outfit
|
||||
end
|
||||
end
|
||||
|
||||
def update_global_outfit_lists()
|
||||
update_global_hats_list
|
||||
update_global_hairstyles_list
|
||||
update_global_clothes_list
|
||||
end
|
||||
|
||||
99
Data/Scripts/050_Outfits/001_OutfitsMain/OutfitsSearch.rb
Normal file
99
Data/Scripts/050_Outfits/001_OutfitsMain/OutfitsSearch.rb
Normal file
@@ -0,0 +1,99 @@
|
||||
#CLOTHES
|
||||
|
||||
def search_clothes(matching_tags = [], only_unlocked = false)
|
||||
update_global_outfit_lists()
|
||||
selector = OutfitSelector.new
|
||||
|
||||
full_data_list = $PokemonGlobal.clothes_data
|
||||
existing_files_list = selector.parse_clothes_folder()
|
||||
unlocked_list = $Trainer.unlocked_clothes
|
||||
return search_outfits_by_tag(full_data_list, matching_tags, existing_files_list, unlocked_list, only_unlocked)
|
||||
end
|
||||
|
||||
def filter_clothes(filter_tags = [], only_unlocked = false)
|
||||
update_global_outfit_lists()
|
||||
selector = OutfitSelector.new
|
||||
|
||||
full_data_list = $PokemonGlobal.hats_data
|
||||
existing_files_list = selector.parse_hats_folder()
|
||||
unlocked_list = $Trainer.unlocked_hats
|
||||
return filter_outfits_by_tag(full_data_list, filter_tags, existing_files_list, unlocked_list, only_unlocked)
|
||||
end
|
||||
|
||||
#HATS
|
||||
|
||||
def search_hats(matching_tags = [], only_unlocked = false)
|
||||
update_global_outfit_lists()
|
||||
selector = OutfitSelector.new
|
||||
|
||||
full_data_list = $PokemonGlobal.hats_data
|
||||
existing_files_list = selector.parse_hats_folder()
|
||||
unlocked_list = $Trainer.unlocked_hats
|
||||
return search_outfits_by_tag(full_data_list, matching_tags, existing_files_list, unlocked_list, only_unlocked)
|
||||
end
|
||||
|
||||
def filter_hats(filter_tags = [], only_unlocked = false)
|
||||
update_global_outfit_lists()
|
||||
selector = OutfitSelector.new
|
||||
|
||||
full_data_list = $PokemonGlobal.hats_data
|
||||
existing_files_list = selector.parse_hats_folder()
|
||||
echoln existing_files_list
|
||||
unlocked_list = $Trainer.unlocked_hats
|
||||
return filter_outfits_by_tag(full_data_list, filter_tags, existing_files_list, unlocked_list, only_unlocked)
|
||||
end
|
||||
|
||||
|
||||
# Generic searching methods
|
||||
|
||||
#Get outfits that have ANY of the tags
|
||||
def search_outfits_by_tag(outfits_map, matching_tags = [], physical_files_list = [], unlocked_list = [], require_unlocked = false)
|
||||
filtered_list = []
|
||||
outfits_map.each do |outfit_id, outfit|
|
||||
if outfit.tags.any? { |tag| matching_tags.include?(tag) }
|
||||
filtered_list << outfit_id if outfit_is_valid?(outfit_id, physical_files_list, unlocked_list, require_unlocked)
|
||||
end
|
||||
end
|
||||
return filtered_list
|
||||
end
|
||||
|
||||
#Get outfits that have ALL of the tags
|
||||
def filter_outfits_by_tag(outfits_map, filter_tags = [], physical_files_list = [], unlocked_list = [], require_unlocked = false)
|
||||
update_global_outfit_lists()
|
||||
|
||||
filtered_list = []
|
||||
outfits_map.each do |outfit_id, outfit|
|
||||
if filter_tags.all? { |tag| outfit.tags.include?(tag) }
|
||||
filtered_list << outfit_id if outfit_is_valid?(outfit_id, physical_files_list, unlocked_list, require_unlocked)
|
||||
end
|
||||
end
|
||||
return filtered_list
|
||||
end
|
||||
|
||||
|
||||
def outfit_is_valid?(outfit_id, physical_files_list, unlocked_list, require_unlocked)
|
||||
return false if require_unlocked && !unlocked_list.include?(outfit_id)
|
||||
return physical_files_list.include?(outfit_id)
|
||||
end
|
||||
|
||||
def add_tags(tags_list=[])
|
||||
newTag=pbEnterText("add tag",0,10)
|
||||
return tags_list if newTag.length == 0
|
||||
tags_list << newTag
|
||||
return tags_list
|
||||
end
|
||||
|
||||
def get_clothes_by_id(id)
|
||||
update_global_outfit_lists()
|
||||
return $PokemonGlobal.clothes_data.has_key?(id) ? $PokemonGlobal.clothes_data[id] : nil
|
||||
end
|
||||
|
||||
def get_hat_by_id(id)
|
||||
update_global_outfit_lists()
|
||||
return $PokemonGlobal.hats_data.has_key?(id) ? $PokemonGlobal.hats_data[id] : nil
|
||||
end
|
||||
|
||||
def get_hair_by_id(id)
|
||||
update_global_outfit_lists()
|
||||
return $PokemonGlobal.hairstyles_data.has_key?(id) ? $PokemonGlobal.hairstyles_data[id] : nil
|
||||
end
|
||||
Reference in New Issue
Block a user