update module
This commit is contained in:
@@ -1,3 +1,60 @@
|
||||
/******************************************************
|
||||
* Copyright 2024 Max Amundsen - All Rights Reserved
|
||||
******************************************************
|
||||
|
||||
Console Screen Rendering:
|
||||
|
||||
Terminal emulators, or consoles, are programs that display text from a sequence of characters.
|
||||
These characters are usually fixed-width, meaning each character takes up the same amount of space on screen.
|
||||
The dimensions of your console window determines how the console will display the text in rows and columns.
|
||||
|
||||
This module is designed to draw simple 2d, or 3d shapes, inside a standard terminal emulator program.
|
||||
|
||||
--------------------------------------------------------------
|
||||
Suppose the following sequence of characters is sent to the console:
|
||||
|
||||
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U']
|
||||
|
||||
For a console displaying 7 characters horizontally, and 3 characters vertically, the result would be the following:
|
||||
|
||||
0123456
|
||||
_________
|
||||
0 |ABCDEFG|
|
||||
1 |HIJKLMN|
|
||||
2 |OPQRSTU|
|
||||
---------
|
||||
|
||||
=> Calculating the two dimensional area of the console output yields the number of elements in the initial 1D sequence:
|
||||
|
||||
(7 * 3) = 21
|
||||
|
||||
This may appear obvious, however this is an important connection to make, when considering how the console represents its output.
|
||||
|
||||
--------------------------------------------------------------
|
||||
The console application automatically transforms our 1D sequence, to a 2D sequence displayed on your monitor, based on the size of the console window.
|
||||
|
||||
As displayed in the above figure, the 0th element, 'A', in the sequence represents (0,0) in 2D space, while the 9th element, 'J' represents (2,1).
|
||||
The console application will automatically draw the characters on your screen for you.
|
||||
|
||||
Because the console application is responsible for transforming our 1D array into a 2D output, we must provide the console with a 1D array.
|
||||
Therefore in order to draw 2D and 3D elements on the screen, we must construct procedures in the code to represent the transformations from
|
||||
higher dimensions, down to the first dimension.
|
||||
|
||||
This simple 2d -> 1d transformation is implemented as the `draw` procedure found in the `draw.jai` file in this module.
|
||||
|
||||
*/
|
||||
|
||||
Screen :: struct {
|
||||
width : s64;
|
||||
height: s64;
|
||||
buffer: [..] Char_Info;
|
||||
}
|
||||
|
||||
Char_Info :: struct {
|
||||
color: COLOR;
|
||||
char : PIXEL_CHAR;
|
||||
}
|
||||
|
||||
COLOR :: enum u32 {
|
||||
FG_BLACK :: 0x0000;
|
||||
FG_DARK_BLUE :: 0x0001;
|
||||
@@ -33,24 +90,13 @@ COLOR :: enum u32 {
|
||||
BG_WHITE :: 0x00F0;
|
||||
}
|
||||
|
||||
PIXEL_TYPE :: enum u32 {
|
||||
PIXEL_CHAR :: enum u32 {
|
||||
PIXEL_SOLID :: 0x2588;
|
||||
PIXEL_THREEQUARTERS :: 0x2593;
|
||||
PIXEL_HALF :: 0x2592;
|
||||
PIXEL_QUARTER :: 0x2591;
|
||||
}
|
||||
|
||||
Char_Info :: struct {
|
||||
color: COLOR;
|
||||
type : PIXEL_TYPE;
|
||||
}
|
||||
|
||||
Screen :: struct {
|
||||
width : s64;
|
||||
height: s64;
|
||||
buffer: [..] Char_Info;
|
||||
}
|
||||
|
||||
init_screen :: (screen: *Screen, width: s64, height: s64) {
|
||||
buffer : [..] Char_Info;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user