Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SongNote
- attr_accessor :note
- attr_accessor :step_distance
- attr_accessor :x
- attr_accessor :sprite
- attr_accessor :range
- attr_accessor :hit
- def initialize(note_name, sprite, distance, x_pos)
- self.note = note_name
- self.step_distance = distance
- self.x = x_pos
- self.sprite = sprite
- self.range = 40
- self.hit = false
- end
- def check(input, selector_x)
- if (self.x - selector_x).abs < self.range && self.note == input && !self.hit
- self.sprite.bitmap = RPG::Cache.picture("idol_project/"+self.note+"_good.png")
- self.hit = true
- pbSEPlay("idol_hit")
- return 1
- else
- return 0
- end
- end
- def doStep
- self.x -= step_distance
- self.sprite.x = self.x
- end
- end
- class Idol
- attr_accessor :speed
- attr_accessor :good
- def update;end
- def initialize
- self.good = 0
- end
- def initText
- @sprites["text"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
- @sprites["text"].z = 99999
- @texts=@sprites["text"].bitmap
- @sprites["text"].zoom_x=1
- @sprites["text"].zoom_y=1
- @sprites["text"].bitmap.clear
- @baseColor=Color.new(255, 255, 255) # COLOR DE FONT
- @shadowColor=Color.new(42,42,42) # COLOR DE SOMBRA
- pbSetSystemFont(@sprites["text"].bitmap)
- end
- def pbStartScene # CARGA LAS COSAS
- @sprites={}
- @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
- @viewport.z=99999
- @sprites["bg"] = Sprite.new(@viewport)
- @sprites["bg"].bitmap=RPG::Cache.picture("idol_project/idol_bg")
- @sprites["selector"]=Sprite.new(@viewport)
- @sprites["selector"].bitmap=RPG::Cache.picture("idol_project/selector")
- @sprites["selector"].x = Graphics.width/2 - @sprites["selector"].bitmap.width/2
- @sprites["selector"].y = Graphics.height/2 - @sprites["selector"].bitmap.height/2
- @sprites["cool"]=AnimatedSprite.new("Graphics/Pictures/idol_project/cool-sheet",5,59,19,4,@viewport)
- @sprites["cool"].x = Graphics.width/2 - (@sprites["cool"].bitmap.width/5)/2
- @sprites["cool"].y = Graphics.height/2 - @sprites["cool"].bitmap.height/2 - 50
- steps = 0
- id = 0
- px_per_frame = 12
- tempo = 130.0
- distance = 35
- time_per_note = Float((1.0/(tempo/60.0))/2.0)
- frames_per_note = Float(time_per_note * 25.0)
- px_per_frame = Float(distance/frames_per_note)
- Kernel.pbMessage(_INTL("{1}; {2}; {3}",time_per_note,frames_per_note,px_per_frame))
- begin_x = Graphics.width/2
- @song = ["up", "", "up", "", "up", "", "up", "up", "up", "", "up", "", "up", "up", "up", "up", "up", "", "up", "", "up", "", "up", "up", "up", "", "up", "", "up", "up", "up", "up"]
- @notes = []
- pbBGMPlay("prueba_tempo")
- for note in @song
- @sprites[id] = Sprite.new(@viewport)
- if note == "up"
- icon = "up.png"
- elsif note == "right"
- icon = "right.png"
- elsif note == "down"
- icon = "down.png"
- elsif note == "left"
- icon = "left.png"
- else
- icon = "empty.png"
- end
- @sprites[id].bitmap=RPG::Cache.picture("idol_project/"+icon)
- @sprites[id].x = distance*steps
- @sprites[id].y = Graphics.height/2 - @sprites[id].bitmap.height/2
- #normal speed 5
- @notes.push(SongNote.new(note,@sprites[id],px_per_frame,begin_x+distance*steps))
- steps += 1
- id += 1
- end
- initText
- @textos=[]
- @textos.push([_INTL("Project Idol"),192,30,false,@baseColor,@shadowColor])
- pbDrawTextPositions(@texts,@textos) # LO IMPRIME EN PANTALLA
- pbSEPlay("menu")
- end
- def pbEndScene # CUANDO TERMINA...
- pbDisposeSpriteHash(@sprites)
- @viewport.dispose if @viewport
- return self.good
- end
- def pbUpdate
- frames = 0
- loop do
- pbUpdateSpriteHash(@sprites)
- Graphics.update
- Input.update
- frames += 1
- ################### FUNCIONES AQUÍ #######
- if Input.trigger?(Input::UP) || Input.trigger?(Input::RIGHT) || Input.trigger?(Input::DOWN) || Input.trigger?(Input::LEFT)
- if Input.trigger?(Input::UP)
- input = "up"
- elsif Input.trigger?(Input::RIGHT)
- input = "right"
- elsif Input.trigger?(Input::DOWN)
- input = "down"
- elsif Input.trigger?(Input::LEFT)
- input = "left"
- end
- for note in @notes
- selector_x = Graphics.width/2 - @sprites["selector"].bitmap.width/2
- if note.check(input, selector_x) > 0
- self.good += 1
- frames = 0
- @sprites["cool"].play
- end
- end
- end
- if frames > 20
- @sprites["cool"].stop
- end
- for note in @notes
- note.doStep()
- end
- if @notes.last.x < Graphics.width/2 - 150
- break
- end
- ###########################################
- if Input.trigger?(Input::B)#si pulsamos la X nos pregunta si queremos salir
- command=Kernel.pbMessage(_INTL("¿Cancelar?"),[
- _INTL("Sí"),_INTL("No")
- ],-1)
- if command==0 # Read
- break
- end
- end
- end
- end
- end # Cierra la class
- ###################################################
- def pbCallIdol
- scene=Idol.new
- scene.pbStartScene
- scene.pbUpdate
- good = scene.pbEndScene
- return good
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement