Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte no desenvolvimento de jogos


5 participantes

    Mouse Diamond

    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : Mouse Diamond ZgLkiRU
    Mensagens : 5235
    Créditos : 1149

    Mouse Diamond Empty Mouse Diamond

    Mensagem por Valentine Ter Fev 17, 2015 10:11 pm

    Mouse Diamond
    Autor: Valentine
    Versão: 1.2

    Log:
    Spoiler:
    Versão 1.0 - 17/02/2015:

    • Versão 1.0 lançada para o RPG Maker XP

    Versão 1.1 - 22/04/2021:

    • Sistema disponível para o RPG Maker VX Ace
    • Não precisa mais adicionar $mouse.update nas scenes
    • Módulo de configurações adicionado para facilitar a alteração do ícone e opacidade do cursor

    Versão 1.2 - 17/06/2021:

    • Funções Mouse.click?, Mouse.press?, Mouse.double_click?, Mouse.x e Mouse.y adicionadas


    Script:
    Código:
    #==============================================================================
    # ** Mouse Diamond
    #------------------------------------------------------------------------------
    # Autor: Valentine
    #------------------------------------------------------------------------------
    # Versão: 1.2
    #==============================================================================

    module Mouse_Configs
      # Índice no IconSet.png do ícone do cursor
      CURSOR_ICON = 147
      
      # Opacidade do cursor (de 0 a 255)
      CURSOR_OPACITY = 255
    end

    #==============================================================================
    # ** Mouse
    #==============================================================================
    module Mouse
      class << self
        attr_reader   :x, :y
      end
      # Matriz dos botões
      @clicked = []
      @pressed = []
      @dbl_clicked = []
      @states = {}
      # Chave dos botões
      KEYS = {
        :LEFT => 1,
        :RIGHT => 2,
        :MIDDLE => 4
      }
      # Esconde o cursor original
      Win32API.new('user32', 'ShowCursor', 'i', 'i').call(0)
      # Win32 API
      ScreenToClient = Win32API.new('user32', 'ScreenToClient', 'lp', 'i')
      GetCursorPos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
      GetAsyncKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i')
      GetKeyState = Win32API.new('user32', 'GetKeyState', 'i', 'i')
      GetPrivateProfileStringA = Win32API.new('kernel32', 'GetPrivateProfileStringA', 'pppplp', 'l')
      FindWindowA = Win32API.new('user32', 'FindWindowA', 'pp', 'l')
      #--------------------------------------------------------------------------
      # * Inicialização
      #--------------------------------------------------------------------------
      def self.init
        @cursor_sprite = Sprite_Cursor.new
        update
      end
      #--------------------------------------------------------------------------
      # * Obtenção da posição do cursor
      #--------------------------------------------------------------------------
      def self.cursor_pos
        pos = [0, 0].pack('ll')
        GetCursorPos.call(pos)
        ScreenToClient.call(HWND, pos)
        pos.unpack('ll')
      end
      #--------------------------------------------------------------------------
      # * Obtenção do identificador
      #--------------------------------------------------------------------------
      def self.find_window
        game_name = "\0" * 256
        GetPrivateProfileStringA.call('Game', 'Title', '', game_name, 255, ".\\Game.ini")
        game_name.delete!("\0")
        FindWindowA.call('RGSS Player', game_name)
      end
      #--------------------------------------------------------------------------
      # * Verifica se clicou uma vez
      #     buttons : botões
      #--------------------------------------------------------------------------
      def self.click?(buttons)
        if buttons.is_a?(Array)
          buttons.any? { |button| click?(button) }
        else
          @clicked.include?(KEYS[buttons])
        end
      end
      #--------------------------------------------------------------------------
      # * Verifica se os botões estão sendo pressionandos
      #     buttons : botões
      #--------------------------------------------------------------------------
      def self.press?(buttons)
        if buttons.is_a?(Array)
          buttons.any? { |button| press?(button) }
        else
          @pressed.include?(KEYS[buttons])
        end
      end
      #--------------------------------------------------------------------------
      # * Verifica se clicou duas vezes
      #     buttons : botões
      #--------------------------------------------------------------------------
      def self.double_click?(buttons)
        if buttons.is_a?(Array)
          buttons.any? { |button| double_click?(button) }
        else
          @dbl_clicked.include?(KEYS[buttons])
        end
      end
      #--------------------------------------------------------------------------
      # * Atualização do frame
      #--------------------------------------------------------------------------
      def self.update
        @x, @y = *cursor_pos
        @cursor_sprite.x = @x
        @cursor_sprite.y = @y
        update_states
      end
      #--------------------------------------------------------------------------
      # * Atualização do estado dos botões
      #--------------------------------------------------------------------------
      def self.update_states
        @clicked.clear
        @pressed.clear
        @dbl_clicked.clear
        # Checa apenas uma vez a cada frame se o botão
        #foi ou está sendo pressionado
        KEYS.each_value do |button|
          clicked = (GetAsyncKeyState.call(button) & 0x01 == 1)
          @clicked << button if clicked
          @pressed << button if GetKeyState.call(button) > 1
          if clicked && @states[button] > 0
            @states[button] = 0
            @dbl_clicked << button
          elsif clicked
            @states[button] = 1
          else
            @states[button] = @states.has_key?(button) && @states[button] > 0 && @states[button] < 17 ? @states[button] + 1 : 0
          end
        end
      end
      # Mantém a posição do mouse atualizada, inclusive
      #quando o F2 for pressionado
      HWND = self.find_window
    end

    #==============================================================================
    # ** Sprite_Cursor
    #==============================================================================
    class Sprite_Cursor < Sprite
      #--------------------------------------------------------------------------
      # * Inicialização do objeto
      #--------------------------------------------------------------------------
      def initialize
        super
        self.bitmap = Bitmap.new(24, 24)
        self.opacity = Mouse_Configs::CURSOR_OPACITY
        self.z = 999
        refresh
      end
      #--------------------------------------------------------------------------
      # * Renovação
      #--------------------------------------------------------------------------
      def refresh
        bitmap = Cache.system('Iconset')
        rect = Rect.new(Mouse_Configs::CURSOR_ICON % 16 * 24, Mouse_Configs::CURSOR_ICON / 16 * 24, 24, 24)
        self.bitmap.blt(0, 0, bitmap, rect)
      end
    end

    #==============================================================================
    # ** Input
    #==============================================================================
    class << Input
      #--------------------------------------------------------------------------
      alias dmouse_update update
      #--------------------------------------------------------------------------
      # * Atualização do frame
      #--------------------------------------------------------------------------
      def update
        dmouse_update
        Mouse.update
      end
    end

    #==============================================================================
    # ** DataManager
    #==============================================================================
    class << DataManager
      #--------------------------------------------------------------------------
      alias dmouse_init init
      #--------------------------------------------------------------------------
      # * Inicialização
      #--------------------------------------------------------------------------
      def init
        # Inicializa o mouse quando iniciar o projeto e
        #toda vez que o F12 for pressionado
        Mouse.init
        dmouse_init
      end
    end

    Documentação:
    Github

    Créditos:
    Valentine


    Última edição por Valentine em Seg Jun 28, 2021 11:25 am, editado 21 vez(es)


    _________________
    Mouse Diamond Logof5
    Dooolly
    Dooolly
    Colaborador
    Colaborador

    Medalhas : Mouse Diamond Trophy12
    Mensagens : 1227
    Créditos : 152

    Ficha do personagem
    Nível: 1
    Experiência:
    Mouse Diamond Left_bar_bleue0/0Mouse Diamond Empty_bar_bleue  (0/0)
    Vida:
    Mouse Diamond Left_bar_bleue30/30Mouse Diamond Empty_bar_bleue  (30/30)

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Dooolly Ter Fev 17, 2015 10:14 pm

    Tá Feio, Refaça tudo Fuckthashit

    Muito bom Valentine gostosão, Continue estudando quem sabe você faz um melhor Trollface
    Vai ajudar muita gente, vou dar +1 Credito. Continue ajudando quem sabe vc fica importante
    avatar
    Trpino
    Membro Ativo
    Membro Ativo

    Mensagens : 300
    Créditos : 12

    Ficha do personagem
    Nível: 1
    Experiência:
    Mouse Diamond Left_bar_bleue0/0Mouse Diamond Empty_bar_bleue  (0/0)
    Vida:
    Mouse Diamond Left_bar_bleue30/30Mouse Diamond Empty_bar_bleue  (30/30)

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Trpino Ter Fev 17, 2015 10:19 pm

    muito bom valentine como sempre você a trazer novidades para a aldeia e ajudando a comunidade maker 
    +4 créditos


    _________________
                                                                                                                                          
    Jonny
    Jonny
    Aldeia Friend
    Aldeia Friend

    Medalhas : Mouse Diamond Trophy11Mouse Diamond 9P5Gx
    Mensagens : 1936
    Créditos : 327

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Jonny Qui Fev 19, 2015 4:03 pm

    @Trpino escreveu:muito bom valentine como sempre você a trazer novidades para a aldeia e ajudando a comunidade maker 
    +4 créditos

    sim ele e foda, obrigado valentine. pelo novedad Very Happy


    _________________
    Spoiler:

      


    Mouse Diamond KVIdx
    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : Mouse Diamond ZgLkiRU
    Mensagens : 5235
    Créditos : 1149

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Valentine Sab Jul 02, 2016 11:25 am

    Tópico atualizado.


    _________________
    Mouse Diamond Logof5
    Komuro Takashi
    Komuro Takashi
    Colaborador
    Colaborador

    Mensagens : 1045
    Créditos : 130

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Komuro Takashi Seg Jul 04, 2016 8:04 am

    Obrigado por compartilhar! +1


    _________________
    Mouse Diamond Takashi_komuro_by_minato8-d51g9o4

    Paga um café? Patreon
    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : Mouse Diamond ZgLkiRU
    Mensagens : 5235
    Créditos : 1149

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Valentine Qui Abr 22, 2021 11:21 am

    Versão 1.1 disponível.

    Log:

    • Sistema disponível para o RPG Maker VX Ace
    • Não precisa mais adicionar $mouse.update nas scenes
    • Módulo de configurações adicionado para facilitar a alteração do ícone e opacidade do cursor


    _________________
    Mouse Diamond Logof5

    DevWithCoffee gosta desta mensagem

    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : Mouse Diamond ZgLkiRU
    Mensagens : 5235
    Créditos : 1149

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Valentine Qui Jun 17, 2021 2:37 pm

    Versão 1.2 disponível.

    Log:

    • Funções Mouse.click?, Mouse.press?, Mouse.double_click?, Mouse.x e Mouse.y adicionadas


    _________________
    Mouse Diamond Logof5

    Conteúdo patrocinado

    Mouse Diamond Empty Re: Mouse Diamond

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sab Set 18, 2021 5:37 am