mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
276 lines
7.2 KiB
Ruby
276 lines
7.2 KiB
Ruby
class CharacterSelectMenuPresenter
|
|
attr_accessor :options
|
|
attr_reader :current_index
|
|
|
|
OPTION_NAME = 'Name'
|
|
OPTION_AGE = "Age"
|
|
OPTION_GENDER = "Gender"
|
|
OPTION_HAIR = "Hair"
|
|
OPTION_SKIN = "Skin"
|
|
OPTION_CONFIRM = "Confirm"
|
|
|
|
MIN_AGE = 10
|
|
MAX_AGE = 17
|
|
DEFAULT_NAMES = ["Green", "Red"]
|
|
|
|
MIN_SKIN_COLOR = 1
|
|
MAX_SKIN_COLOR = 6
|
|
SKIN_COLOR_IDS = ["Type A", "Type B", "Type C", "Type D", "Type E", "Type F"]
|
|
GENDERS_IDS = ["Female", "Male"]
|
|
|
|
HAIR_COLOR_IDS = [1, 2, 3, 4]
|
|
HAIR_COLOR_NAMES = ["Blonde", "Light Brown", "Dark Brown", "Black"]
|
|
|
|
#ids for displayed text sprites
|
|
NAME_TEXT_ID = "name"
|
|
HAIR_TEXT_ID = "hair"
|
|
SKIN_TEXT_ID = "skin"
|
|
|
|
def initialize(view)
|
|
@view = view
|
|
|
|
@gender = 1
|
|
@age = MIN_AGE
|
|
@name = ""
|
|
@skinTone = 5
|
|
@hairstyle = "red"
|
|
@hairColor = 2
|
|
|
|
@options = [OPTION_NAME, OPTION_GENDER, OPTION_AGE, OPTION_SKIN, OPTION_HAIR, OPTION_CONFIRM]
|
|
|
|
@trainerPreview = TrainerClothesPreview.new(300, 80, false, "POKEBALL")
|
|
@trainerPreview.show()
|
|
@closed = false
|
|
@current_index = 0
|
|
@view.setMaxIndex(@options.length - 1)
|
|
end
|
|
|
|
def main()
|
|
pbSEPlay("GUI naming tab swap start", 80, 100)
|
|
@current_index = 0
|
|
loop do
|
|
@view.updateGraphics()
|
|
if Input.trigger?(Input::DOWN)
|
|
@current_index = move_menu_vertical(1)
|
|
elsif Input.trigger?(Input::UP)
|
|
@current_index = move_menu_vertical(-1)
|
|
elsif Input.trigger?(Input::RIGHT)
|
|
move_menu_horizontal(@current_index, 1)
|
|
elsif Input.trigger?(Input::LEFT)
|
|
move_menu_horizontal(@current_index, -1)
|
|
elsif Input.trigger?(Input::ACTION) || Input.trigger?(Input::USE)
|
|
action_button_pressed(@current_index)
|
|
end
|
|
break if @closed
|
|
end
|
|
end
|
|
|
|
def updateTrainerPreview
|
|
@trainerPreview.resetOutfits
|
|
@trainerPreview.updatePreview
|
|
end
|
|
|
|
def action_button_pressed(current_index)
|
|
selected_option = @options[current_index]
|
|
case selected_option
|
|
when OPTION_NAME
|
|
pbSEPlay("GUI summary change page", 80, 100)
|
|
@name = pbEnterPlayerName(_INTL("Enter your name"), 0, Settings::MAX_PLAYER_NAME_SIZE)
|
|
@name = getDefaultName() if @name == ''
|
|
pbSEPlay("GUI trainer card open", 80, 100)
|
|
updateDisplayedName(current_index)
|
|
applyHair() #for easter egg lol
|
|
when OPTION_CONFIRM
|
|
pbSEPlay("GUI save choice", 80, 100)
|
|
@current_index = @options.length - 1
|
|
update_cursor(@current_index)
|
|
@name = getDefaultName if @name == ""
|
|
updateDisplayedName(getOptionIndex(OPTION_NAME))
|
|
cmd = pbMessage("Is this information correct?", [_INTL("Yes"), _INTL("No")])
|
|
if cmd == 0
|
|
pbSEPlay("GUI naming confirm", 80, 100)
|
|
#pbMessage("You will be able to customize your appearance further while playing")
|
|
applyAllSelectedValues()
|
|
close_menu()
|
|
end
|
|
else
|
|
pbSEPlay("GUI save choice", 80, 100)
|
|
@current_index = @options.length - 1
|
|
update_cursor(@current_index)
|
|
@name = getDefaultName if @name == ""
|
|
updateDisplayedName(getOptionIndex(OPTION_NAME))
|
|
end
|
|
end
|
|
|
|
def getDefaultName()
|
|
return DEFAULT_NAMES[@gender]
|
|
end
|
|
|
|
def updateDisplayedName(current_index)
|
|
@view.displayText(NAME_TEXT_ID, @name, current_index)
|
|
end
|
|
|
|
def applyAllSelectedValues
|
|
applyGender(@gender)
|
|
echoln @age
|
|
pbSet(VAR_TRAINER_AGE, @age)
|
|
$Trainer.skin_tone = @skinTone
|
|
$Trainer.name = @name
|
|
end
|
|
|
|
def getOptionIndex(option_name)
|
|
i = 0
|
|
for option in @options
|
|
return i if option == option_name
|
|
i += 1
|
|
end
|
|
return -1
|
|
end
|
|
|
|
#VERTICAL NAVIGATION
|
|
|
|
def move_menu_vertical(offset)
|
|
pbSEPlay("GUI sel decision", 80, 100)
|
|
@current_index += offset
|
|
@current_index = 0 if @current_index > @options.length - 1
|
|
@current_index = @options.length - 1 if @current_index <= -1
|
|
|
|
update_cursor(@current_index)
|
|
return @current_index
|
|
end
|
|
|
|
def update_cursor(index)
|
|
@view.sprites["select"].y = @view.get_cursor_y_position(index)
|
|
@view.sprites["select"].x = @view.get_cursor_x_position(index)
|
|
|
|
set_custom_cursor(index)
|
|
end
|
|
|
|
def close_menu
|
|
@trainerPreview.erase()
|
|
Kernel.pbClearNumber()
|
|
Kernel.pbClearText()
|
|
pbDisposeSpriteHash(@view.sprites)
|
|
pbDisposeSpriteHash(@view.textValues)
|
|
@closed = true
|
|
end
|
|
|
|
def set_custom_cursor(index)
|
|
selected_option = @options[index]
|
|
case selected_option
|
|
when OPTION_GENDER
|
|
@view.showSideArrows(index)
|
|
when OPTION_AGE
|
|
@view.showSideArrows(index)
|
|
when OPTION_HAIR
|
|
@view.showSideArrows(index)
|
|
when OPTION_SKIN
|
|
@view.showSideArrows(index)
|
|
else
|
|
@view.hideSideArrows
|
|
end
|
|
end
|
|
|
|
#HORIZONTAL NAVIGATION
|
|
def move_menu_horizontal(current_index, incr)
|
|
pbSEPlay("GUI sel cursor", 80, 100)
|
|
selected_option = @options[current_index]
|
|
case selected_option
|
|
when OPTION_GENDER then
|
|
setGender(current_index, incr)
|
|
when OPTION_HAIR then
|
|
setHairColor(current_index, incr)
|
|
when OPTION_SKIN then
|
|
setSkinColor(current_index, incr)
|
|
when OPTION_AGE then
|
|
setAge(current_index, incr)
|
|
end
|
|
updateTrainerPreview()
|
|
end
|
|
|
|
def setGender(current_index, incr)
|
|
@gender += incr
|
|
@gender = 0 if @gender >= 2
|
|
@gender = 1 if @gender <= -1
|
|
applyGender(@gender)
|
|
label = GENDERS_IDS[@gender]
|
|
@view.displayText(GENDERS_IDS, label, current_index)
|
|
end
|
|
|
|
def setSkinColor(current_index, incr)
|
|
@skinTone += incr
|
|
@skinTone = MIN_SKIN_COLOR if @skinTone > MAX_SKIN_COLOR
|
|
@skinTone = MAX_SKIN_COLOR if @skinTone < MIN_SKIN_COLOR
|
|
$Trainer.skin_tone = @skinTone
|
|
label = SKIN_COLOR_IDS[@skinTone - 1]
|
|
@view.displayText(SKIN_TEXT_ID, label, current_index)
|
|
end
|
|
|
|
def setHairColor(current_index, incr)
|
|
max_id = HAIR_COLOR_IDS.length - 1
|
|
@hairColor += incr
|
|
@hairColor = 0 if @hairColor > max_id
|
|
@hairColor = max_id if @hairColor <= -1
|
|
applyHair()
|
|
@view.displayText(HAIR_TEXT_ID, HAIR_COLOR_NAMES[@hairColor], current_index)
|
|
end
|
|
|
|
def applyHair()
|
|
applyHairEasterEggs()
|
|
hairColorId = HAIR_COLOR_IDS[@hairColor]
|
|
hairId = hairColorId.to_s + "_" + @hairstyle.to_s
|
|
$Trainer.hair = hairId
|
|
end
|
|
|
|
def applyHairEasterEggs()
|
|
@hairstyle = HAIR_RIVAL if @name == "Gary" && @gender == 1
|
|
@hairstyle = HAIR_BROCK if @name == "Brock" && @gender == 1
|
|
@hairstyle = HAIR_MISTY1 if @name == "Misty" && @gender == 0
|
|
|
|
end
|
|
|
|
def applyGender(gender_index)
|
|
# outfitId = gender + 1
|
|
pbSet(VAR_TRAINER_GENDER, gender_index)
|
|
|
|
outfitId = get_outfit_id_from_index(gender_index)
|
|
@hairstyle = outfitId
|
|
applyHair()
|
|
#$Trainer.hair = outfitId
|
|
$Trainer.clothes = outfitId
|
|
$Trainer.hat = outfitId
|
|
end
|
|
|
|
def get_outfit_id_from_index(gender_index)
|
|
if gender_index == 1 #Male
|
|
return "red"
|
|
else
|
|
#Female
|
|
return "leaf"
|
|
end
|
|
end
|
|
|
|
#AGE
|
|
def setAge(y_index, incr)
|
|
@age += incr
|
|
@age = MIN_AGE if @age > MAX_AGE
|
|
@age = MAX_AGE if @age < MIN_AGE
|
|
|
|
@view.displayAge(@age, y_index)
|
|
end
|
|
|
|
def setInitialValues()
|
|
genderIndex = getOptionIndex(OPTION_GENDER)
|
|
hairIndex = getOptionIndex(OPTION_HAIR)
|
|
skinIndex = getOptionIndex(OPTION_SKIN)
|
|
ageIndex = getOptionIndex(OPTION_AGE)
|
|
|
|
setGender(genderIndex, 0)
|
|
setAge(ageIndex, 0)
|
|
setHairColor(hairIndex, 0)
|
|
setSkinColor(skinIndex, 0)
|
|
updateTrainerPreview()
|
|
end
|
|
|
|
end
|