package Blacknote; use Blacknote::Logging; BEGIN{ INFO "================ Bootstrapping ================"; } use Blacknote::Renderer::Curses; use Blacknote::Mapgen; use Blacknote::Input; use Blacknote::Interface; use Blacknote::System::State qw( bnsm_get_state bnsm_get_player bnsm_set_player bnsm_is_playing bnsm_cycle ); use Blacknote::Tiles; # Needed so that the tiles get auto-loaded use Blacknote::Equipment; use strict; use warnings FATAL => qw(all); use Curses; use Carp; use feature 'say'; use Blacknote::Map qw (load_dotmap); sub init { # $Blacknote::System::State::MAPDATA = load_dotmap("res/maps/hub.map"); $Blacknote::System::State::MAPDATA = Blacknote::Mapgen::gen_dungeon->layout; } sub update { bnsm_get_player->turn; bnsm_cycle; # Main turn processing bnsm_get_player->update; # Update player last for proper handling of messages from the turn queue } sub render_all { render_map \@$Blacknote::System::State::MAPDATA; render_items; render_player; render_messages; render_windows; } sub main { init; render_map $Blacknote::System::State::MAPDATA; render_player; doupdate; INFO "======= Bootstrap done ========"; INFO "======= Entering main loop ========"; #Blacknote::Mapgen::gen_items; #Blacknote::Mapgen::make_rand_room_walls 40, 20; render_all; MAIN: DEBUG "Before input processing..."; my $continue = Blacknote::Input::process_input; DEBUG "Input processing done. Before update..."; update; render_all; DEBUG "Update done. Before render..."; doupdate; refresh; DEBUG "Render done."; goto MAIN if $continue and bnsm_is_playing(); END: INFO "===== Main loop finished. Exiting program gracefully ====="; stop_render; INFO "===== Program finished ====="; exit 0; } 1; .