diff options
Diffstat (limited to 'src/logic.rb')
| -rw-r--r-- | src/logic.rb | 95 |
1 files changed, 81 insertions, 14 deletions
diff --git a/src/logic.rb b/src/logic.rb index d800d93..ffac917 100644 --- a/src/logic.rb +++ b/src/logic.rb @@ -80,7 +80,8 @@ FECS::Cmp.new('Transition', :state, :rec, :time).new( rec: Rl::Rectangle.new(0,0,0,0), time: 0) -BkgWhite = Rl::Color.new(255,255,255,255) +BkgWhite = Rl::Color.new(255,255,255,200) +PlayerBkgWhite = Rl::Color.new(255,200,200,150) #ScissorPath = Path.new( # lambda do |time| # [Math.bezier([200, 200, 1183, 200],time)-150, @@ -90,7 +91,7 @@ BkgWhite = Rl::Color.new(255,255,255,255) #FECS::Cmp::ScissorBox.new(rec: Rl::Rectangle.new(200,200,250,250)) - +ResetPrompt = Rl::Texture.new('./assets/resetprompt.png') FECS::Cmp::ScissorTime.new(time: 0) EndGoal = FECS::Cmp::EndGoal.new Input = FECS::Cmp::Input.new @@ -192,9 +193,9 @@ Player = FECS::Ent.new( rotation: 0 ), FECS::Cmp::Movement.new( - deceleration: 2500, - acceleration: 1000, - max_speed: 400, + deceleration: 1500, + acceleration: 1500, + max_speed: 300, ), FECS::Cmp::Hitbox.new( #rec: Rl::Rectangle.new(0,0,16*2,20*2), @@ -205,6 +206,9 @@ Player = FECS::Ent.new( ) Music = false # prevents a longjmp error in browsers +HurtSound = false +IntroSound = false +DeathSound = false Resetting = false ScissorPath = 10000 ScissorSize = 1 @@ -221,7 +225,7 @@ FECS::Sys.new('Music') do #puts 'load device' Rl.init_audio_device #puts 'set master' - Rl.set_master_volume(0.1) + Rl.set_master_volume(0.5) end end #puts 'check if sound exists' @@ -229,12 +233,15 @@ FECS::Sys.new('Music') do if !Music #puts 'load it' Music = Rl::Sound.new('./assets/music.ogg') + HurtSound = Rl::Sound.new('../assets/hurt.wav') + IntroSound = Rl::Sound.new('../assets/intro.ogg') + DeathSound = Rl::Sound.new('../assets/death.ogg') #puts 'set volume' - #Music.volume = 0.05 #puts 'check if its playing' elsif !Music.playing? #puts 'play it' Music.play + Music.volume = 0.09 end end #if Rl.key_pressed? 87 @@ -243,6 +250,13 @@ FECS::Sys.new('Music') do # Music.play #end end +FECS::Sys.new('IntroSound') do + button_clicked = FECS::Cmp::Button.first.clicked + if Rl.audio_device_ready? && IntroSound && !IntroSoundPlayed && button_clicked + IntroSoundPlayed = true + IntroSound.play + end +end FECS::Sys.new('Transition') do cmp = FECS::Cmp::Transition.first #cmp.state = 'into_init' if Rl.mouse_button_pressed? 0 @@ -253,7 +267,7 @@ FECS::Sys.new('Transition') do cmp.time = 0 end if cmp.state == 'into' - cmp.time += Rl.frame_time + cmp.time += (1.0/60.0)#Rl.frame_time if cmp.time >= 1 cmp.state = 'outof_init' cmp.time = 1 @@ -289,7 +303,7 @@ FECS::Sys.new('Transition') do cmp.time = -0.5 end if cmp.state == 'outof' - cmp.time += Rl.frame_time + cmp.time += (1.0/60.0)#Rl.frame_time if cmp.time >= 1 cmp.state = 'none' cmp.time = 1 @@ -333,6 +347,7 @@ FECS::Scn::Menu.add( button.clicked = false end if trans.state == 'outof_init' + IntroSound.play if Rl.platform == 'web' FECS::Sys::DestroyTitleScreen.call end end @@ -382,7 +397,7 @@ FECS::Scn::Play.add( Input.show_debug = Rl.key_down? 80 # P Input.reset = Rl.key_down? 82 # R #if Rl.key_pressed? 82 - #FECS::Sys::ConstructLevel.call + #FECS::Sys::ConstructLevel.call #end end, FECS::Sys.new('PlayerReset') do @@ -561,12 +576,18 @@ FECS::Scn::Play.add( if player_hitbox.rec.collide_with_rec?(dmg_hitbox.rec) FECS::Cmp::Player.first.state = 'set_damaged' hp_cmp.value -= dmg_hitbox.damage - hp_cmp.invincible_timer = hp_cmp.max_invincible_time #puts "oof -#{dmg_hitbox.damage} hp" #puts "hp: #{hp_cmp.value}" if hp_cmp.value <= 0 FECS::Cmp::Player.first.state = 'set_dead' #puts 'ded' + DeathSound.play if Rl.platform == 'web' + else + hp_cmp.invincible_timer = hp_cmp.max_invincible_time + if Rl.platform == 'web' + HurtSound.play + HurtSound.volume = 0.45 + end end break end @@ -574,12 +595,18 @@ FECS::Scn::Play.add( else FECS::Cmp::Player.first.state = 'set_damaged' hp_cmp.value -= 1 - hp_cmp.invincible_timer = hp_cmp.max_invincible_time #puts "oof -#{1} hp" #puts "hp: #{hp_cmp.value}" if hp_cmp.value <= 0 FECS::Cmp::Player.first.state = 'set_dead' #puts 'ded' + DeathSound.play if Rl.platform == 'web' + else + hp_cmp.invincible_timer = hp_cmp.max_invincible_time + if Rl.platform == 'web' + HurtSound.play + HurtSound.volume = 0.45 + end end end end @@ -848,7 +875,8 @@ FECS::Scn::Play.add( Rl.draw_texture_pro(texture: result.texture, origin: Rl::Vector2.new(0,0), source_rec: result.source_rec, - dest_rec: result.dest_rec) + dest_rec: result.dest_rec, + tint: BkgWhite) end end end @@ -866,7 +894,7 @@ FECS::Scn::Play.add( origin: sprite_cmp.origin, source_rec: sprite_cmp.tileset.rec, dest_rec: sprite_cmp.dest_rec, - tint: Rl::Color.new(255,255,255,100), + tint: PlayerBkgWhite, rotation: sprite_cmp.rotation) end Rl.scissor_mode( @@ -943,22 +971,60 @@ FECS::Scn::Play.add( end end ) +FECS::Sys.new('SetBackgroundColor') do + trans = FECS::Cmp::Transition.first + if trans.state == 'none' + BkgWhite.a = 150 + PlayerBkgWhite.a = 100 + elsif trans.state == 'into' + BkgWhite.a = [Math.interpolate(150,-50,[trans.time,0].max),0].max + PlayerBkgWhite.a = [Math.interpolate(100,-50,[trans.time,0].max),0].max + elsif trans.state == 'outof' + BkgWhite.a = [Math.interpolate(-50,150,[trans.time,0].max),0].max + PlayerBkgWhite.a = [Math.interpolate(-50,100,[trans.time,0].max),0].max + end +end + +FECS::Sys.new('RenderResetText') do + trans = FECS::Cmp::Transition.first + if Player.component[FECS::Cmp::Hp].value <= 0 + if trans.state == 'into' + Rl.draw_texture_pro(texture: ResetPrompt, + origin: Rl::Vector2.new(0,0), + source_rec: Rl::Rectangle.new(0,0,900,650), + dest_rec: Rl::Rectangle.new(0,0,900,650), + tint: Rl::Color.new(255,255,255,Math.interpolate(255,0,trans.time))) + elsif trans.state == 'none' + Rl.draw_texture_pro(texture: ResetPrompt, + origin: Rl::Vector2.new(0,0), + source_rec: Rl::Rectangle.new(0,0,900,650), + dest_rec: Rl::Rectangle.new(0,0,900,650), + tint: WHITE) + + end + end +end #CurrentLevel.level = 0 FECS::Sys::ConstructTitleScreen.call FECS::Scn::Menu.add( FECS::Sys::Transition, + #FECS::Sys::IntroSound, FECS::Sys::Music, ) FECS::Scn::Play.add( FECS::Sys::Transition, FECS::Sys::Music, + FECS::Sys::SetBackgroundColor, + FECS::Sys::RenderResetText, ) FECS::Stg.add( FECS::Scn::Menu, ) FelECS::Order.sort( + #FECS::Sys::IntroSound, + FECS::Sys::Music, FECS::Sys::PlayerInput, FECS::Sys::PlayerReset, FECS::Sys::Button, @@ -980,4 +1046,5 @@ FelECS::Order.sort( FECS::Sys::Render, # Renders the debug hitboxes FECS::Sys::DebugRenderHitbox, + FECS::Sys::RenderResetText, ) |
