Advertisement
polectron

Untitled

Jan 19th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.48 KB | None | 0 0
  1. class SongNote
  2. attr_accessor :note
  3. attr_accessor :step_distance
  4. attr_accessor :x
  5. attr_accessor :sprite
  6. attr_accessor :range
  7. attr_accessor :hit
  8.  
  9. def initialize(note_name, sprite, distance, x_pos)
  10. self.note = note_name
  11. self.step_distance = distance
  12. self.x = x_pos
  13. self.sprite = sprite
  14. self.range = 40
  15. self.hit = false
  16. end
  17.  
  18. def check(input, selector_x)
  19. if (self.x - selector_x).abs < self.range && self.note == input && !self.hit
  20. self.sprite.bitmap = RPG::Cache.picture("idol_project/"+self.note+"_good.png")
  21. self.hit = true
  22. pbSEPlay("idol_hit")
  23. return 1
  24. else
  25. return 0
  26.  
  27. end
  28. end
  29.  
  30. def doStep
  31. self.x -= step_distance
  32. self.sprite.x = self.x
  33. end
  34.  
  35. end
  36.  
  37. class Idol
  38.  
  39. attr_accessor :speed
  40. attr_accessor :good
  41.  
  42. def update;end
  43.  
  44. def initialize
  45. self.good = 0
  46. end
  47.  
  48. def initText
  49. @sprites["text"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  50. @sprites["text"].z = 99999
  51. @texts=@sprites["text"].bitmap
  52. @sprites["text"].zoom_x=1
  53. @sprites["text"].zoom_y=1
  54. @sprites["text"].bitmap.clear
  55. @baseColor=Color.new(255, 255, 255) # COLOR DE FONT
  56. @shadowColor=Color.new(42,42,42) # COLOR DE SOMBRA
  57. pbSetSystemFont(@sprites["text"].bitmap)
  58. end
  59.  
  60. def pbStartScene # CARGA LAS COSAS
  61. @sprites={}
  62. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  63. @viewport.z=99999
  64.  
  65. @sprites["bg"] = Sprite.new(@viewport)
  66. @sprites["bg"].bitmap=RPG::Cache.picture("idol_project/idol_bg")
  67.  
  68. @sprites["selector"]=Sprite.new(@viewport)
  69. @sprites["selector"].bitmap=RPG::Cache.picture("idol_project/selector")
  70. @sprites["selector"].x = Graphics.width/2 - @sprites["selector"].bitmap.width/2
  71. @sprites["selector"].y = Graphics.height/2 - @sprites["selector"].bitmap.height/2
  72.  
  73. @sprites["cool"]=AnimatedSprite.new("Graphics/Pictures/idol_project/cool-sheet",5,59,19,4,@viewport)
  74. @sprites["cool"].x = Graphics.width/2 - (@sprites["cool"].bitmap.width/5)/2
  75. @sprites["cool"].y = Graphics.height/2 - @sprites["cool"].bitmap.height/2 - 50
  76.  
  77. steps = 0
  78. id = 0
  79. px_per_frame = 12
  80.  
  81. tempo = 130.0
  82. distance = 35
  83. time_per_note = Float((1.0/(tempo/60.0))/2.0)
  84. frames_per_note = Float(time_per_note * 25.0)
  85. px_per_frame = Float(distance/frames_per_note)
  86. Kernel.pbMessage(_INTL("{1}; {2}; {3}",time_per_note,frames_per_note,px_per_frame))
  87. begin_x = Graphics.width/2
  88.  
  89. @song = ["up", "", "up", "", "up", "", "up", "up", "up", "", "up", "", "up", "up", "up", "up", "up", "", "up", "", "up", "", "up", "up", "up", "", "up", "", "up", "up", "up", "up"]
  90. @notes = []
  91.  
  92.  
  93. pbBGMPlay("prueba_tempo")
  94.  
  95. for note in @song
  96. @sprites[id] = Sprite.new(@viewport)
  97.  
  98. if note == "up"
  99. icon = "up.png"
  100. elsif note == "right"
  101. icon = "right.png"
  102. elsif note == "down"
  103. icon = "down.png"
  104. elsif note == "left"
  105. icon = "left.png"
  106. else
  107. icon = "empty.png"
  108. end
  109.  
  110. @sprites[id].bitmap=RPG::Cache.picture("idol_project/"+icon)
  111. @sprites[id].x = distance*steps
  112. @sprites[id].y = Graphics.height/2 - @sprites[id].bitmap.height/2
  113. #normal speed 5
  114. @notes.push(SongNote.new(note,@sprites[id],px_per_frame,begin_x+distance*steps))
  115. steps += 1
  116. id += 1
  117. end
  118.  
  119. initText
  120. @textos=[]
  121. @textos.push([_INTL("Project Idol"),192,30,false,@baseColor,@shadowColor])
  122. pbDrawTextPositions(@texts,@textos) # LO IMPRIME EN PANTALLA
  123.  
  124. pbSEPlay("menu")
  125. end
  126.  
  127. def pbEndScene # CUANDO TERMINA...
  128. pbDisposeSpriteHash(@sprites)
  129. @viewport.dispose if @viewport
  130. return self.good
  131. end
  132.  
  133. def pbUpdate
  134. frames = 0
  135. loop do
  136. pbUpdateSpriteHash(@sprites)
  137. Graphics.update
  138. Input.update
  139. frames += 1
  140.  
  141.  
  142. ################### FUNCIONES AQUÍ #######
  143.  
  144. if Input.trigger?(Input::UP) || Input.trigger?(Input::RIGHT) || Input.trigger?(Input::DOWN) || Input.trigger?(Input::LEFT)
  145.  
  146. if Input.trigger?(Input::UP)
  147. input = "up"
  148. elsif Input.trigger?(Input::RIGHT)
  149. input = "right"
  150. elsif Input.trigger?(Input::DOWN)
  151. input = "down"
  152. elsif Input.trigger?(Input::LEFT)
  153. input = "left"
  154. end
  155.  
  156. for note in @notes
  157. selector_x = Graphics.width/2 - @sprites["selector"].bitmap.width/2
  158. if note.check(input, selector_x) > 0
  159. self.good += 1
  160. frames = 0
  161. @sprites["cool"].play
  162. end
  163. end
  164. end
  165.  
  166. if frames > 20
  167. @sprites["cool"].stop
  168. end
  169.  
  170. for note in @notes
  171. note.doStep()
  172. end
  173.  
  174. if @notes.last.x < Graphics.width/2 - 150
  175. break
  176. end
  177.  
  178. ###########################################
  179.  
  180. if Input.trigger?(Input::B)#si pulsamos la X nos pregunta si queremos salir
  181. command=Kernel.pbMessage(_INTL("¿Cancelar?"),[
  182. _INTL("Sí"),_INTL("No")
  183. ],-1)
  184. if command==0 # Read
  185. break
  186. end
  187. end
  188. end
  189. end
  190. end # Cierra la class
  191.  
  192. ###################################################
  193.  
  194. def pbCallIdol
  195. scene=Idol.new
  196. scene.pbStartScene
  197. scene.pbUpdate
  198. good = scene.pbEndScene
  199. return good
  200. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement