colloquy: spin up a rust notcurses instance

pull/433/head
nick black 4 years ago
parent 8651486ad7
commit bd7bf65c62
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -1,3 +1,9 @@
extern crate libnotcurses_sys as ffi;
extern {
fn libc_stdout() -> *mut ffi::_IO_FILE;
}
fn main() { fn main() {
use clap::{load_yaml, App}; use clap::{load_yaml, App};
let yaml = load_yaml!("cli.yml"); let yaml = load_yaml!("cli.yml");
@ -9,21 +15,23 @@ fn main() {
std::process::exit(1); std::process::exit(1);
} }
let _ = libc::setlocale(libc::LC_ALL, std::ffi::CString::new("").unwrap().as_ptr()); unsafe{
let opts: notcurses_options = libnotcurses-sys::notcurses_options { let _ = libc::setlocale(libc::LC_ALL, std::ffi::CString::new("").unwrap().as_ptr());
inhibit_alternate_screen: true, let opts: ffi::notcurses_options = ffi::notcurses_options {
loglevel: 0, inhibit_alternate_screen: true,
termtype: std::ptr::null(), loglevel: 0,
retain_cursor: false, termtype: std::ptr::null(),
suppress_banner: false, retain_cursor: false,
no_winch_sighandler: false, suppress_banner: false,
no_quit_sighandlers: false, no_winch_sighandler: false,
renderfp: std::ptr::null_mut(), no_quit_sighandlers: false,
margin_t: 0, renderfp: std::ptr::null_mut(),
margin_r: 0, margin_t: 0,
margin_b: 0, margin_r: 0,
margin_l: 0, margin_b: 0,
}; margin_l: 0,
let nc = notcurses_init(&opts, libc_stdout()); };
notcurses_stop(nc); let nc = ffi::notcurses_init(&opts, libc_stdout());
ffi::notcurses_stop(nc);
}
} }

@ -1,18 +1,15 @@
// tidx is an index into tetriminos. yoff and xoff are relative to the // tidx is an index into tetriminos. yoff and xoff are relative to the
// terminal's origin. returns colored north-facing tetrimino on a plane. // terminal's origin. returns colored north-facing tetrimino on a plane.
std::unique_ptr<ncpp::Plane> NewPiece() { std::unique_ptr<ncpp::Plane> NewPiece() {
// "North-facing" tetrimino forms (form in which they are released from the // "North-facing" tetrimino forms (form in which they are released from the top) are expressed in terms of
// top) are expressed in terms of two rows having between 2 and 4 columns. // two rows having between 2 and 4 columns. We map each game column to four columns and each game row to two
// We map each game column to four columns and each game row to two rows. Each // rows. Each byte of the texture maps to one 4x4 component block (and wastes 7 bits).
// byte of the texture maps to one 4x4 component block (and wastes 7 bits).
static const struct tetrimino { static const struct tetrimino {
unsigned color; unsigned color;
const char* texture; const char* texture;
} tetriminos[] = { // OITLJSZ } tetriminos[] = { // OITLJSZ
{ 0xcbc900, "****"}, { 0x009caa, " ****"}, { 0x952d98, " * ***"}, { 0xcbc900, "****"}, { 0x009caa, " ****"}, { 0x952d98, " * ***"}, { 0xcf7900, " ****"},
{ 0xcf7900, " ****"}, { 0x0065bd, "* ***"}, { 0x69be28, " **** "}, { 0x0065bd, "* ***"}, { 0x69be28, " **** "}, { 0xbd2939, "** **"} };
{ 0xbd2939, "** **"} };
const int tidx = random() % 7; const int tidx = random() % 7;
const struct tetrimino* t = &tetriminos[tidx]; const struct tetrimino* t = &tetriminos[tidx];
const size_t cols = strlen(t->texture); const size_t cols = strlen(t->texture);
@ -27,8 +24,7 @@ std::unique_ptr<ncpp::Plane> NewPiece() {
n->set_fg(t->color); n->set_fg(t->color);
n->set_bg_alpha(CELL_ALPHA_TRANSPARENT); n->set_bg_alpha(CELL_ALPHA_TRANSPARENT);
n->set_base(channels, 0, ""); n->set_base(channels, 0, "");
y = 0; y = 0; x = 0;
x = 0;
for(size_t i = 0 ; i < strlen(t->texture) ; ++i){ for(size_t i = 0 ; i < strlen(t->texture) ; ++i){
if(t->texture[i] == '*'){ if(t->texture[i] == '*'){
if(n->putstr(y, x, "██") < 0){ if(n->putstr(y, x, "██") < 0){

Loading…
Cancel
Save