Files
i-mic-fps/lib/states/game_states/loading_state.rb
2018-12-12 09:02:33 -06:00

76 lines
2.2 KiB
Ruby

class IMICFPS
class LoadingState < GameState
def setup
@header = Text.new("I-MIC FPS", y: 10, size: 100, alignment: :center)
@subheading = Text.new("Loading Assets", y: 100, size: 50, alignment: :center)
@state = Text.new("Preparing...", y: $window.height/2-40, size: 40, alignment: :center)
@percentage = Text.new("0%", y: $window.height-50-25, size: 50, alignment: :center)
@dummy_game_object = nil
@assets = []
@asset_index = 0
add_asset(:obj, "objects/randomish_terrain.obj")
add_asset(:obj, "objects/skydome.obj")
add_asset(:obj, "objects/tree.obj")
add_asset(:obj, "objects/biped.obj")
# Currently broken
Shader.new(name: "lighting", vertex_file: "shaders/vertex/lighting.glsl", fragment_file: "shaders/fragment/lighting.glsl")
@act = false
@cycled = false
@completed_for_ms = 0
@lock = false
end
def draw
@header.draw
@subheading.draw
@state.draw
fill(Gosu::Color.rgba(127, 64, 0, 150))
progressbar
end
def update
# puts (@asset_index.to_f/@assets.count)
@percentage.text = "#{((@asset_index.to_f/@assets.count)*100.0).round}%"
@act = true if @cycled
if @act && (@asset_index+1 <= @assets.count)
@act = false
@cycled = false
hash = @assets[@asset_index]
ModelLoader.new(type: hash[:type], file_path: hash[:path], game_object: @dummy_game_object)
@asset_index+=1
end
unless @asset_index < @assets.count
if @act && Gosu.milliseconds-@completed_for_ms > 250
push_game_state(@options[:forward])
else
@act = true
@completed_for_ms = Gosu.milliseconds unless @lock
@lock = true
end
else
@state.text = "Loading #{@assets[@asset_index][:path].split('/').last}..."
@state.x = ($window.width/2)-(@state.width/2)
@cycled = true
end
end
def add_asset(type, path)
@assets << {type: type, path: path}
end
def progressbar
@percentage.draw
progress = (@asset_index.to_f/@assets.count)*$window.width
draw_rect(0, $window.height-100, progress, 100, Gosu::Color.rgb(255,127,0))
end
end
end