Advertisement
Zetu

Scriptletter v1.03

Jul 10th, 2011
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 4.97 KB | None | 0 0
  1. #===============================================================================
  2. # Scripletter v1.03 by Zetu
  3. #===============================================================================
  4.  
  5. module Z
  6.   INPUT_LETTERS = [
  7.    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  8.    'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
  9.    'U', 'V', 'W', 'X', 'Y', 'Z'
  10.   ]
  11.   INPUT_NUMBERS = [
  12.    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'
  13.   ]
  14.   SHIFT_NUM = {
  15.    1 => '!', 2 => '@', 3 => '#', 4 => '$', 5 => '%',
  16.    6 => '^', 7 => '&', 8 => '*', 9 => '(', 0 => ')'
  17.   }
  18. end
  19.  
  20. class Scriptletter
  21.   attr_accessor :active
  22.   attr_reader   :text
  23.   attr_reader   :width, :x, :y
  24.  
  25.   def initialize(x, y, width)
  26.     @window = Script_Input_Window.new(x, y, width)
  27.     @x = x
  28.     @y = y
  29.     @width = width
  30.     @text = ""
  31.     @active = true
  32.   end
  33.  
  34.   def create_output(lines)
  35.     @output.dispose unless @output.nil?
  36.     @output = Output.new(self.x, self.y - lines*24, self.width, lines)
  37.   end
  38.  
  39.   def height
  40.     return 56
  41.   end
  42.  
  43.   def clear
  44.     @text = ""
  45.     @window.text = @text
  46.     @window.refresh
  47.   end
  48.  
  49.   def add_key(value)
  50.     Sound.play_decision
  51.     @text += value
  52.     @window.text = @text
  53.   end
  54.  
  55.   def remove_key
  56.     Sound.play_cancel
  57.     @text = @text.chop
  58.     @window.text = @text
  59.   end
  60.  
  61.   def update
  62.     JetInput.update
  63.     return unless @active
  64.     check_key_input_letters
  65.     check_key_input_numbers
  66.     check_special
  67. #~     detect_input
  68.     @window.refresh
  69.   end
  70.  
  71.   def detect_input
  72.     for i in 0..0xFF
  73.       if JetInput.trigger?(i)
  74.         print i
  75.       end
  76.     end
  77.   end
  78.  
  79.   def check_key_input_letters
  80.     for key in Z::INPUT_LETTERS
  81.       if eval("JetInput.trigger?(JetInput::#{key})")
  82.         if JetInput.shift_state
  83.           add_key(key.upcase)
  84.         else
  85.           add_key(key.downcase)
  86.         end
  87.         return
  88.       end
  89.     end
  90.   end
  91.  
  92.   def check_key_input_numbers
  93.     for key in Z::INPUT_NUMBERS
  94.       if eval("JetInput.trigger?(JetInput::NUM_#{key})")
  95.         if JetInput.press?(JetInput::SHIFT)
  96.           add_key(Z::SHIFT_NUM[eval(key)])
  97.         else
  98.           add_key(key)
  99.         end
  100.         return
  101.       end
  102.     end
  103.   end
  104.  
  105.   def check_special
  106.     if JetInput.trigger?(JetInput::BACK) or JetInput.trigger?(JetInput::DELETE)
  107.       remove_key
  108.     elsif JetInput.trigger?(JetInput::SPACE)
  109.       add_key(" ")
  110.     elsif JetInput.trigger?(186)
  111.       if JetInput.press?(JetInput::SHIFT)
  112.         add_key(":")
  113.       else
  114.         add_key(";")
  115.       end
  116.     elsif JetInput.trigger?(219)
  117.       unless JetInput.press?(JetInput::SHIFT)
  118.         add_key("[")
  119.       else
  120.         add_key("{")
  121.       end
  122.     elsif JetInput.trigger?(221)
  123.       unless JetInput.press?(JetInput::SHIFT)
  124.         add_key("]")
  125.       else
  126.         add_key("}")
  127.       end
  128.     elsif JetInput.trigger?(222)
  129.       unless JetInput.press?(JetInput::SHIFT)
  130.         add_key("'")
  131.       else
  132.         add_key("\"")
  133.       end
  134.     elsif JetInput.trigger?(188)
  135.       unless JetInput.press?(JetInput::SHIFT)
  136.         add_key(",")
  137.       else
  138.         add_key("<")
  139.       end
  140.     elsif JetInput.trigger?(190)
  141.       unless JetInput.press?(JetInput::SHIFT)
  142.         add_key(".")
  143.       else
  144.         add_key(">")
  145.       end
  146.     elsif JetInput.trigger?(191)
  147.       unless JetInput.press?(JetInput::SHIFT)
  148.         add_key("/")
  149.       else
  150.         add_key("?")
  151.       end
  152.     elsif JetInput.trigger?(220)
  153.       unless JetInput.press?(JetInput::SHIFT)
  154.         add_key("\\")
  155.       else
  156.         add_key("|")
  157.       end
  158.     elsif JetInput.trigger?(189)
  159.       unless JetInput.press?(JetInput::SHIFT)
  160.         add_key("-")
  161.       else
  162.         add_key("_")
  163.       end
  164.     elsif JetInput.trigger?(187)
  165.       unless JetInput.press?(JetInput::SHIFT)
  166.         add_key("=")
  167.       else
  168.         add_key("+")
  169.       end
  170.     end
  171.   end
  172.  
  173.   def dispose
  174.     @window.dispose
  175.     @output.dispose unless @output.nil?
  176.   end
  177.  
  178.   def output
  179.     return @output
  180.   end
  181.  
  182. end
  183.  
  184. class Script_Input_Window < Window_Base
  185.   attr_accessor  :text
  186.  
  187.   def initialize(x, y, width)
  188.     super(x, y, width, 56)
  189.     @text = ""
  190.     self.opacity = 0
  191.   end
  192.  
  193.   def refresh
  194.     self.contents.clear
  195.     text = "@> #{@text}"
  196.     text += "_" if (Graphics.frame_count % Graphics.frame_rate) > 40 if active
  197.     self.contents.draw_text(0, 0, self.contents.width, WLH, text)
  198.   end
  199.  
  200. end
  201.  
  202. class Output < Window_Base
  203.  
  204.   def initialize(x, y, width, lines = 1)
  205.     super(x, y, width, lines*WLH + 32)
  206.     @lines = lines
  207.     @data = []
  208.     self.opacity = 0
  209.   end
  210.  
  211.   def print(string)
  212.     @data.push(string)
  213.     if @data.size > @lines
  214.       @data.delete_at(0)
  215.     end
  216.     refresh
  217.   end
  218.  
  219.   def clear
  220.     @data = []
  221.     refresh
  222.   end
  223.  
  224.   def refresh
  225.     self.contents.clear
  226.     y = self.contents.height - WLH*@data.size
  227.     for i in 0...@data.size
  228.       self.contents.draw_text(0, y+i*WLH, self.contents.width, WLH, "@> #{@data[i]}")
  229.     end
  230.   end
  231.  
  232. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement