Code: |
class Editor def main @titles = ["Editeur", "Editeur d'Objet", "Editeur de Pokémon", "Editeur d'Attaque", "Editeur de Capacités Spéciales", "Editeur de Nature"] @commands = ["Liste des Objets", "Liste des Pokémon", "Liste des Attaques", "Liste des Capacités Spéciales", "Liste des Natures", "Quitter"] @infos = ["Créer un nouvel objet ou éditer un objet existant.", "Créer un nouveau pokémon ou éditer un pokémon existant.", "Créer une nouvelle attaque ou éditer une attaque existante.", "Créer une nouvelle capacité spéciale ou éditer une capacité spéciale existante.", "Créer une nouvelle nature ou éditer une nature existante.", "Quitter l'Editeur de données."] @items_list = [] for i in 0..$data_items.size-1 @items_list.push(ItemData.name(i+1)) end @pokemon_list = [] for i in 0..$data_pokemon.size-1 @pokemon_list.push(PokemonData.name(i+1)) end @skills_list = [] for i in 0..$data_skills.size-1 @skills_list.push(SkillData.name(i+1)) end @abilitys_list = [] for i in 0..$data_abilitys.size-1 @abilitys_list.push(AbilityData.name(i+1)) end @natures_list = [] for i in 0..$data_natures.size-1 @natures_list.push(NatureData.name(i)) end @lists = [@items_list,@pokemon_list,@skills_list,@abilitys_list,@natures_list] @current_title = @titles[0] @current_commands_list = @commands @current_infos_list = @infos @current_command = 0 @progression_level = 0 @space = 2 @length = 0 @title_sprite = Sprite.new make_bitmap_title_sprite @commands_sprite = Sprite.new make_bitmap_commands_sprite @info_sprite = Sprite.new @info_sprite.bitmap = Bitmap.new(100,Font.default_size) remake_bitmap_info_sprite @cursor = Sprite.new @cursor.bitmap = Bitmap.new(Directory.editor+"Curseur") @cursor.ox = @cursor.width/2 @cursor.oy = @cursor.height/2 @cursor.x = @commands_sprite.x - @cursor.width - 2 @cursor.y = @commands_sprite.y update_title update_info update_commands_list(@current_commands_list) Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze dispose end def update update_quit_command update_validation_command update_current_command update_cursor update_y_commands_sprite update_info end def make_bitmap_title_sprite @title_sprite.bitmap = Bitmap.new(100,Font.default_size) @title_length = @title_sprite.bitmap.text_size(@current_title).width @title_sprite.bitmap = Bitmap.new(@title_length,Font.default_size) @title_sprite.x = Graphics.width/2 - @title_sprite.width/2 @title_sprite.y = 2 @title_sprite.z = 5 end def update_y_commands_sprite if @progression_level != 0 if @cursor.y > Graphics.height/2 - @cursor.height/2 and Input.trigger?(Input::DOWN) @commands_sprite.y -= Font.default_size+@space end if @cursor.y > Graphics.height/2 - @cursor.height/2 and Input.trigger?(Input::UP) if @commands_sprite.y != @title_sprite.y + @title_sprite.height + 10 @commands_sprite.y += Font.default_size+@space end end end end def make_bitmap_commands_sprite @height = @commands.size * Font.default_size + @space*(@current_commands_list.size-1) @commands_sprite.bitmap = Bitmap.new(100,@height) for i in 0..@current_commands_list.size-1 if @commands_sprite.bitmap.text_size(@current_commands_list[i]).width > @length @length = @commands_sprite.bitmap.text_size(@current_commands_list[i]).width end end @commands_sprite.bitmap = Bitmap.new(@length,@height) @commands_sprite.x = Graphics.width/2 - @commands_sprite.width/2 @commands_sprite.y = @title_sprite.y + @title_sprite.height + 10 end def update_title @title_sprite.bitmap.clear make_bitmap_title_sprite @title_sprite.bitmap.draw_text(0,0,@title_length,Font.default_size,@current_title) end def update_info if @progression_level < 1 @info_sprite.bitmap.clear remake_bitmap_info_sprite @info_sprite.bitmap.draw_text(0,0,@info_length,Font.default_size,@current_infos_list[@current_command]) end end def remake_bitmap_info_sprite @info_length = @info_sprite.bitmap.text_size(@current_infos_list[@current_command]).width @info_sprite.bitmap = Bitmap.new(@info_length,Font.default_size) @info_sprite.x = Graphics.width/2 - @info_sprite.width/2 @info_sprite.y = @commands_sprite.y + @commands_sprite.height + 10 @info_sprite.z = 5 end def update_commands_list(list) @commands_sprite.bitmap.clear for i in 0..list.size-1 @commands_sprite.bitmap.draw_text(0,i*Font.default_size+@space,@length,Font.default_size,list[i]) end end def update_current_command if Input.trigger?(Input::UP) and @current_command > 0 @current_command -= 1 end if Input.trigger?(Input::DOWN) and @current_command < @current_commands_list.size-1 @current_command += 1 end end def update_validation_command if Input.trigger?(Input::C) @progression_level += 1 if @progression_level == 1 @current_title = @titles[@current_command+1] @current_commands_list = @lists[@current_command] end refresh end end def update_quit_command if Input.trigger?(Input::B) @progression_level -=1 if @progression_level == 0 @current_title = @titles[0] @current_commands_list = @commands end refresh end end def refresh @current_infos_list = @infos @current_command = 0 update_title update_info make_bitmap_commands_sprite update_commands_list(@current_commands_list) refresh_cursor @info_sprite.bitmap.clear end def refresh_cursor @cursor.y = @commands_sprite.y end def update_cursor @cursor.x = @commands_sprite.x - @cursor.width - 2 if @cursor.y <= Graphics.height/2 - @cursor.height/2 or @commands_sprite.y == @title_sprite.y + @title_sprite.height + 10 @cursor.y = @commands_sprite.y + @current_command*Font.default_size + @space*@current_command end @cursor.angle -= 3 end def dispose @title_sprite.dispose @commands_sprite.dispose end end |
Citation: |
Au passage, j'ai aussi un problème avec mon curseur qui ne s'affiche pas bien en face de l'objet, plus je descend et plus il est excentré, pourtant ma formule de calcul des y semblent correcte... |
Nuri Yuri a écrit: |
Là aujourd'hui j'ai un peu la flemme de réfléchir à ton problème. Mais j'avais déjà programmé un système d'édition de BDD assez costaux sur le RGSS et je sais par expérience que c'est un peu chiant... Je te proposerais un truc assez simple pour ton SK, tu dois certainement savoir que Pokémon SDK c'est pas que un Starter Kit, je développe des outils à coté pour éditer la BDD, celui que l'on a actuellement c'est Ruby Host. Qu'est-ce que c'est ? Un exécutable qui lance Ruby 2.1.5 (bientot Ruby 2.2.0 je vais faire l'update), dans l'exécutable il y a les fenêtre sous forme de Dialog et on utilise l'API de Windows pour faire dialoguer les fenêtre qui forment l'éditeur et Ruby qui permet l'édition des fichiers en toute simplicité. Même mieux, Ruby permet de gérer les interaction avec les fenêtre par le biais d'un définition de singleton method qui agissent comme si tu écrivais un WND Proc en C++, sauf que c'est géré en Ruby (ce qui permet l'édition facile de la chose). Si t'es pas contre ce genre d'outil, je pourrais te passer une version et t'expliquer comment cela fonctionne en détail pour que tu puisse faire ce qu'il faut pour l'édition de ton SK. |
Nuri Yuri a écrit: |
Palb' a modifié réussi à modifier l'affichage du vérificateur d'évolution donc pourquoi tu n'arriverais pas à l'utiliser :d Cela dit, faudra attendre un peu avant que je l'envoie avec la documentation (je dois construire le site de PSP/CSP avant x)). (Sinon dans l'update du cursor, si tu fais juste @cursor.y = @commands_sprite.y ça devrait pas fonctionner ?) |
Pαlвσlѕку a écrit: |
Un lien vers une démo jouable serait le mieux je pense, on gagnerait du temps. Envoie moi le lien, si ne je trouve pas de solutions je le renverrais à Yuri. |