diff options
| author | arngo <[email protected]> | 2022-01-29 01:53:51 -0500 |
|---|---|---|
| committer | arngo <[email protected]> | 2022-01-29 01:53:51 -0500 |
| commit | 1cdf293e313533e7e661e053eec870b2a907ca7e (patch) | |
| tree | a130a596bf1c5c309a7565a16c856a1e66511199 /src | |
| parent | fe619e4f748ab38a128d80adaa013854d78e4a2f (diff) | |
| download | orc-arena-of-time-1cdf293e313533e7e661e053eec870b2a907ca7e.tar.gz orc-arena-of-time-1cdf293e313533e7e661e053eec870b2a907ca7e.zip | |
menu to game transition
Diffstat (limited to 'src')
| -rw-r--r-- | src/logic.rb | 249 |
1 files changed, 143 insertions, 106 deletions
diff --git a/src/logic.rb b/src/logic.rb index 8519e9f..d800d93 100644 --- a/src/logic.rb +++ b/src/logic.rb @@ -209,6 +209,105 @@ Resetting = false ScissorPath = 10000 ScissorSize = 1 +#FECS::Scn.new('Common') +#FECS::Scn::Common.add( +FECS::Sys.new('Music') do + #puts 'check web' + if Rl.platform == 'web' + #puts 'check mouse press' + if Rl.mouse_button_pressed? 0 + #puts 'check if device redy' + unless Rl.audio_device_ready? + #puts 'load device' + Rl.init_audio_device + #puts 'set master' + Rl.set_master_volume(0.1) + end + end + #puts 'check if sound exists' + next unless Rl.audio_device_ready? + if !Music + #puts 'load it' + Music = Rl::Sound.new('./assets/music.ogg') + #puts 'set volume' + #Music.volume = 0.05 + #puts 'check if its playing' + elsif !Music.playing? + #puts 'play it' + Music.play + end + end + #if Rl.key_pressed? 87 + #end + #unless Music.playing? + # Music.play + #end +end +FECS::Sys.new('Transition') do + cmp = FECS::Cmp::Transition.first + #cmp.state = 'into_init' if Rl.mouse_button_pressed? 0 + next if cmp.state == 'none' + if cmp.state == 'into_init' + FECS::Cmp::Player.first.moved = false + cmp.state = 'into' + cmp.time = 0 + end + if cmp.state == 'into' + cmp.time += Rl.frame_time + if cmp.time >= 1 + cmp.state = 'outof_init' + cmp.time = 1 + end + #ScissorPath = [(cmp.time**3), + # (cmp.time**3)] + easeTime = (1 - cmp.time) ** 3 + + n1 = 7.5625 + d1 = 2.75 + time = (cmp.time) + + if time < (1 / d1) + easeTime = n1 * time * time + elsif time < (2 / d1) + easeTime = n1 * (time -= (1.5 / d1)) * time + 0.75 + elsif time < (2.5 / d1) + easeTime = n1 * (time -= (2.25 / d1)) * time + 0.9375 + else + easeTime = n1 * (time -= (2.625 / d1)) * time + 0.984375 + end + easeTime = 1 - easeTime + + newsize = [easeTime * ScissorSize[0], + easeTime * ScissorSize[1]] + ScissorPath = [ + ScissorPath[0] + ((ScissorSize[0] - newsize[0])/2), + ScissorPath[1] + ((ScissorSize[1] - newsize[1])/2) + ] + ScissorSize = newsize + elsif cmp.state == 'outof_init' + cmp.state = 'outof' + cmp.time = -0.5 + end + if cmp.state == 'outof' + cmp.time += Rl.frame_time + if cmp.time >= 1 + cmp.state = 'none' + cmp.time = 1 + end + c1 = 1.70158 + c3 = c1 + 1 + easeTime = [1 + c3 * ((cmp.time - 1)**3) + c1 * ((cmp.time - 1)**2),0].max + newsize = [easeTime * ScissorSize[0], + easeTime * ScissorSize[1]] + ScissorPath = [ + ScissorPath[0] + ((ScissorSize[0] - newsize[0])/2), + ScissorPath[1] + ((ScissorSize[1] - newsize[1])/2) + ] + ScissorSize = newsize + end +end + + FECS::Scn.new('Menu') FECS::Scn::Menu.add( FECS::Sys.new('Button') do @@ -216,32 +315,50 @@ FECS::Scn::Menu.add( ent = button.entity sprite = ent.component[FECS::Cmp::Sprite] hitbox = ent.component[FECS::Cmp::Hitbox] + trans = FECS::Cmp::Transition.first if button.clicked sprite.texture = button.pressed_texture else sprite.texture = button.unpressed_texture end - if hitbox.rec.collide_with_point? Rl.mouse_position + if hitbox.rec.collide_with_point?(Rl.mouse_position) && trans.state == 'none' if Rl.mouse_button_down? 0 button.clicked = true - elsif Rl.mouse_button_up? 0 and button.clicked + elsif Rl.mouse_button_up?(0) && button.clicked button.clicked = false - FECS::Sys::DestroyTitleScreen.call + #FECS::Sys::DestroyTitleScreen.call + trans.state = 'into_init' end else button.clicked = false end + if trans.state == 'outof_init' + FECS::Sys::DestroyTitleScreen.call + end end end, + FECS::Sys.new('ScissorMenu') do + ScissorPath = [325,212] + ScissorSize = [250,250] + end, FECS::Sys.new('RenderMenu') do - FECS::Cmp::Sprite.each do |sprite_cmp| - Rl.draw_texture_pro(texture: sprite_cmp.texture, - origin: Rl::Vector2.new(0,0), - source_rec: sprite_cmp.source_rec, - dest_rec: sprite_cmp.dest_rec) - end + scissor_path = ScissorPath + scissor_size = ScissorSize + Rl::Rectangle.new(scissor_path[0], scissor_path[1], scissor_size[0], scissor_size[1]).draw(color: Rl::Color.new(52,52,64,255)) + Rl.scissor_mode( + x: scissor_path[0], + y: scissor_path[1], + width: scissor_size[0], + height: scissor_size[1]) do + FECS::Cmp::Sprite.each do |sprite_cmp| + Rl.draw_texture_pro(texture: sprite_cmp.texture, + origin: Rl::Vector2.new(0,0), + source_rec: sprite_cmp.source_rec, + dest_rec: sprite_cmp.dest_rec) + end + end end, - FECS::Sys.new('ApplyPositionToSprite') do + FECS::Sys.new('ApplyPositionToSpriteMenu') do FECS::Cmp::Position.each do |position_cmp| ent = position_cmp.entity next if ent.components[FECS::Cmp::Sprite].nil? @@ -257,38 +374,6 @@ FECS::Scn::Menu.add( FECS::Scn.new('Play') FECS::Scn::Play.add( - FECS::Sys.new('Music') do - puts 'check web' - if Rl.platform == 'web' - puts 'check mouse press' - if Rl.mouse_button_pressed? 0 - puts 'check if device redy' - unless Rl.audio_device_ready? - puts 'load device' - Rl.init_audio_device - puts 'set master' - Rl.set_master_volume(0.1) - end - end - puts 'check if sound exists' - next unless Rl.audio_device_ready? - if !Music - puts 'load it' - Music = Rl::Sound.new('./assets/music.ogg') - puts 'set volume' - #Music.volume = 0.05 - puts 'check if its playing' - elsif !Music.playing? - puts 'play it' - Music.play - end - end - #if Rl.key_pressed? 87 - #end - #unless Music.playing? - # Music.play - #end - end, FECS::Sys.new('PlayerInput') do Input.move_up = Rl.key_down? 87 # W Input.move_left = Rl.key_down? 65 # A @@ -768,69 +853,6 @@ FECS::Scn::Play.add( end end end, - FECS::Sys.new('Transition') do - cmp = FECS::Cmp::Transition.first - #cmp.state = 'into_init' if Rl.mouse_button_pressed? 0 - next if cmp.state == 'none' - if cmp.state == 'into_init' - FECS::Cmp::Player.first.moved = false - cmp.state = 'into' - cmp.time = 0 - end - if cmp.state == 'into' - cmp.time += Rl.frame_time - if cmp.time >= 1 - cmp.state = 'outof_init' - cmp.time = 1 - end - #ScissorPath = [(cmp.time**3), - # (cmp.time**3)] - easeTime = (1 - cmp.time) ** 3 - - n1 = 7.5625 - d1 = 2.75 - time = (cmp.time) - - if time < (1 / d1) - easeTime = n1 * time * time - elsif time < (2 / d1) - easeTime = n1 * (time -= (1.5 / d1)) * time + 0.75 - elsif time < (2.5 / d1) - easeTime = n1 * (time -= (2.25 / d1)) * time + 0.9375 - else - easeTime = n1 * (time -= (2.625 / d1)) * time + 0.984375 - end - easeTime = 1 - easeTime - - newsize = [easeTime * ScissorSize[0], - easeTime * ScissorSize[1]] - ScissorPath = [ - ScissorPath[0] + ((ScissorSize[0] - newsize[0])/2), - ScissorPath[1] + ((ScissorSize[1] - newsize[1])/2) - ] - ScissorSize = newsize - elsif cmp.state == 'outof_init' - cmp.state = 'outof' - cmp.time = -0.5 - end - if cmp.state == 'outof' - cmp.time += Rl.frame_time - if cmp.time >= 1 - cmp.state = 'none' - cmp.time = 1 - end - c1 = 1.70158 - c3 = c1 + 1 - easeTime = [1 + c3 * ((cmp.time - 1)**3) + c1 * ((cmp.time - 1)**2),0].max - newsize = [easeTime * ScissorSize[0], - easeTime * ScissorSize[1]] - ScissorPath = [ - ScissorPath[0] + ((ScissorSize[0] - newsize[0])/2), - ScissorPath[1] + ((ScissorSize[1] - newsize[1])/2) - ] - ScissorSize = newsize - end - end, FECS::Sys.new('Render') do scissor_path = ScissorPath #Levels[CurrentLevel.level][:scissor_path].call(FECS::Cmp::ScissorTime.first.time) scissor_size = ScissorSize #Levels[CurrentLevel.level][:scissor_size].call(FECS::Cmp::ScissorTime.first.time) @@ -924,11 +946,26 @@ FECS::Scn::Play.add( #CurrentLevel.level = 0 FECS::Sys::ConstructTitleScreen.call -FECS::Stg.add(FECS::Scn::Menu) +FECS::Scn::Menu.add( + FECS::Sys::Transition, + FECS::Sys::Music, +) +FECS::Scn::Play.add( + FECS::Sys::Transition, + FECS::Sys::Music, +) +FECS::Stg.add( + FECS::Scn::Menu, +) FelECS::Order.sort( FECS::Sys::PlayerInput, + FECS::Sys::PlayerReset, + FECS::Sys::Button, + FECS::Sys::ScissorMenu, + FECS::Sys::Scissor, FECS::Sys::Transition, + FECS::Sys::RenderMenu, FECS::Sys::PlayerMovement, FECS::Sys::Damage, FECS::Sys::Walls, |
