Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

 
Reply to this topicStart new topic
> PR Input, New Faster Input Module
night walker
post Jul 29 2008, 10:33 PM
Post #1


Level 8
Group Icon

Group: Revolutionary
Posts: 120
Type: None
RM Skill: Skilled







This script is faster then the old ones because it handles the KeyState calls inside the dll.

Extra credits to poccil, thanks to him we found out how to convert RGSS Object -> C variable



Only copy the DLL RGSSInput.dll to your game folder and copy the script. You MUST add every additional key using Input.add_key(key), otherwise the DLL will not read it.
To clear the added keys, use Input.clear.


CODE
#===============================================================================
# Input module
#-------------------------------------------------------------------------------
# Créditos: PRCoders
#              poccil  - Thanks to him we discovered how to convert RGSS Objects into C variables
#===============================================================================

module Input
  
  #--------------------------------------------------------------------------
  # * Váriáveis
  #--------------------------------------------------------------------------
  
  @keys = Array.new(256)
  @pressed = Array.new(256)
  @repeated = Array.new(256)
  @released = Array.new(256)
  
  #--------------------------------------------------------------------------
  # * Constantes
  #--------------------------------------------------------------------------
  
  Mouse_Left = 1
  Mouse_Right = 2
  Mouse_Middle = 4
  Back= 8
  Tab = 9
  Enter = 13
  SHIFT = Shift = 16
  CTRL = Ctrl = 17
  ALT = Alt = 18
  Esc = 0x1B
  LEFT = 0x25
  UP = 0x26  
  RIGHT = 0x27
  DOWN = 0x28
  Space = 32
  Numberkeys = {}
  Numberkeys[0] = 48        # => 0
  Numberkeys[1] = 49        # => 1
  Numberkeys[2] = 50        # => 2
  Numberkeys[3] = 51        # => 3
  Numberkeys[4] = 52        # => 4
  Numberkeys[5] = 53        # => 5
  Numberkeys[6] = 54        # => 6
  Numberkeys[7] = 55        # => 7
  Numberkeys[8] = 56        # => 8
  Numberkeys[9] = 57        # => 9
  Numberpad = {}
  Numberpad[0] = 96
  Numberpad[1] = 97
  Numberpad[2] = 98
  Numberpad[3] = 99
  Numberpad[4] = 100
  Numberpad[5] = 101
  Numberpad[6] = 102
  Numberpad[7] = 103
  Numberpad[8] = 104
  Numberpad[9] = 105
  Letters = {}
  Letters["A"] = 65
  Letters["B"] = 66
  Letters["C"] = 67
  Letters["D"] = 68
  Letters["E"] = 69
  Letters["F"] = 70
  Letters["G"] = 71
  Letters["H"] = 72
  Letters["I"] = 73
  Letters["J"] = 74
  Letters["K"] = 75
  Letters["L"] = 76
  Letters["M"] = 77
  Letters["N"] = 78
  Letters["O"] = 79
  Letters["P"] = 80
  Letters["Q"] = 81
  Letters["R"] = 82
  Letters["S"] = 83
  Letters["T"] = 84
  Letters["U"] = 85
  Letters["V"] = 86
  Letters["W"] = 87
  Letters["X"] = 88
  Letters["Y"] = 89
  Letters["Z"] = 90
  Fkeys = {}
  F1 = Fkeys[1] = 112
  F2 = Fkeys[2] = 113
  F3 = Fkeys[3] = 114
  F4 = Fkeys[4] = 115
  F5 = Fkeys[5] = 116
  F6 = Fkeys[6] = 117
  F7 = Fkeys[7] = 118
  F8 = Fkeys[8] = 119
  F9 = Fkeys[9] = 120
  F10 = Fkeys[10] = 121
  F11 = Fkeys[11] = 122
  F12 = Fkeys[12] = 123
  Collon = 186        # => \ |
  Equal = 187         # => = +
  Comma = 188         # => , <
  Underscore = 189    # => - _
  Dot = 190           # => . >
  Backslash = 191     # => / ?
  Lb = 219
  Rb = 221
  Quote = 222         # => '"
  
  #--------------------------------------------------------------------------
  # * Constantes originais
  #--------------------------------------------------------------------------
  
  A = Letters["C"]
  B = [Letters["X"], Esc]
  C = [Letters["Z"], Space, Enter]
  X = Letters["A"]
  Y = Letters["S"]
  Z = Letters["D"]
  L = Letters["Q"]
  R = Letters["W"]
  
  #--------------------------------------------------------------------------
  # * Métodos da DLL
  #--------------------------------------------------------------------------
  
  UPDATE = Win32API.new("RGSSInput", "UpdateInputArray", "llll", "")
  ADDKEY = Win32API.new("RGSSInput", "InputAddUsedKey", "i", "")
  
  #--------------------------------------------------------------------------
  # * Adiciona uma tecla para ser atualizada
  #--------------------------------------------------------------------------
  
  def self.add_key(key)
    if (key.is_a?(Array))
      for k in key
        self.add_key(k)
      end
      return
    end
    ADDKEY.call(key)
  end
  
  #--------------------------------------------------------------------------
  # * Reseta as teclas atualizadas
  #--------------------------------------------------------------------------
  
  def self.clear
    Win32API.new("RGSSInput", "ClearUsedKeys", "", "").call()
  end
  
  #--------------------------------------------------------------------------
  # * Atualização
  #--------------------------------------------------------------------------
  
  def self.update
    UPDATE.call(@keys.__id__, @pressed.__id__, @repeated.__id__, @released.__id__)
  end
  
  #--------------------------------------------------------------------------
  # * Trigger?
  #--------------------------------------------------------------------------
  
  def self.trigger?(key)
    if (key.is_a?(Array))
      return key.any? { |k| self.trigger?(k) }
    end
    return @keys[key]
  end
  
  #--------------------------------------------------------------------------
  # * Press?
  #--------------------------------------------------------------------------
  
  def self.press?(key)
    if (key.is_a?(Array))
      return key.any? { |k| self.press?(k) }
    end
    return @pressed[key]
  end
  
  #--------------------------------------------------------------------------
  # * Repeat?
  #--------------------------------------------------------------------------
  
  def self.repeat?(key)
    if (key.is_a?(Array))
      return key.any? { |k| self.repeat?(k) }
    end
    return @repeated[key]
  end
  
  #--------------------------------------------------------------------------
  # * Release?
  #--------------------------------------------------------------------------
  
  def self.release?(key)
    if (key.is_a?(Array))
      return key.any? { |k| self.release?(k) }
    end
    return @released[key]
  end
  
  #--------------------------------------------------------------------------
  # * Dir4
  #--------------------------------------------------------------------------
  
  def self.dir4
    return 8 if @pressed[UP]
    return 6 if @pressed[RIGHT]
    return 4 if @pressed[LEFT]
    return 2 if @pressed[DOWN]
    return 0
  end

  #--------------------------------------------------------------------------
  # * Dir8
  #--------------------------------------------------------------------------
  
  def self.dir8
    if @pressed[UP]
      return 9 if @pressed[RIGHT]
      return 7 if @pressed[LEFT]
      return 8
    end
    if @pressed[DOWN]
      return 3 if @pressed[RIGHT]
      return 1 if @pressed[LEFT]
      return 2
    end
    return 6 if @pressed[RIGHT]
    return 4 if @pressed[LEFT]
    return 0
  end

  
  self.clear
  
end

# Adicionando as teclas mais utilizadas ao sistema

Input.add_key(Input::DOWN)
Input.add_key(Input::UP)
Input.add_key(Input::LEFT)
Input.add_key(Input::RIGHT)

Input.add_key(Input::A)
Input.add_key(Input::B)
Input.add_key(Input::C)
Input.add_key(Input::X)
Input.add_key(Input::Y)
Input.add_key(Input::Z)
Input.add_key(Input::L)
Input.add_key(Input::R)

Input.add_key(Input::CTRL)
Input.add_key(Input::SHIFT)
Input.add_key(Input::ALT)






NightWalker (Design)

PHCDO

RTH




This post has been edited by night walker: Jul 29 2008, 10:36 PM


__________________________
Go to the top of the page
 
+Quote Post
   
Netto
post Jul 29 2008, 10:43 PM
Post #2


芸術家
Group Icon

Group: Revolutionary
Posts: 708
Type: None
RM Skill: Skilled




Useful, thanks for the share.


__________________________
Current Project[RC]: Twilight Realm 3DMMORPG w/dx9, and char creation through mysql after I get a server, now C++ scripting
Current Project[VX]: Obsidian Trilogy just started 08/12/2008
Current Project[XP&RM2K3]: none
Go to the top of the page
 
+Quote Post
   

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 20th May 2013 - 12:52 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker