diff --git a/lib/states/game_states/loading_state.rb b/lib/states/game_states/loading_state.rb new file mode 100644 index 0000000..28b70bf --- /dev/null +++ b/lib/states/game_states/loading_state.rb @@ -0,0 +1,62 @@ +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-30, size: 30, alignment: :center) + @percentage = Text.new("0%", y: $window.height-50-15, size: 30, 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") + + @act = false + @cycled = false + end + + def draw + @header.draw + @subheading.draw + @state.draw + + fill(Gosu::Color.rgba(127, 64, 0, 150)) + progressbar + end + + def update + @percentage.text = "#{((@asset_index.to_f/@assets.count)*100.0).round}%" + @act = true if @cycled + + if @act + @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 + push_game_state(@options[:forward]) + else + @state.text = "Loading #{@assets[@asset_index][:path].split('/').last}..." + @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 \ No newline at end of file