added branch selection

This commit is contained in:
2025-11-06 15:04:01 -08:00
parent 98a190eb5e
commit 99c46cec29
3 changed files with 207 additions and 54 deletions

View File

@@ -6,6 +6,9 @@
#define SPIREL_MOD 0.618055f
#define NOMAI_END_OF_THOUGHT(id) <*ID:#id/>
#define NOMAI_MARKERS_TO_STRING(marker) #marker
struct nomiSpirel {
struct tart_cell selected_cell;
@@ -18,31 +21,111 @@ struct nomiSpirel {
};
struct nomiMenu {
struct nomiSpirel branches[30];
struct nomiSpirel branches[MAX_BRANCHES];
struct tart_vec2 startPos;
struct tart_vec2 size;
struct tart_vec2 origin;
unsigned char brachIds[30];
unsigned char brachIds[MAX_BRANCHES];
};
struct nomiNavigation {
branchId branches[30]; // this list of the traveld branches.
unsigned char depth; // The current depth is the id of the selected branch.
branch* selectedBranch;
};
struct nomiNavigation __nav__ = {
.branches = {0},
.depth = 0,
};
/*
* This will Init Nomi
*/
void NomiInit();
void NomiInit(trunk* tr) {
__nav__ = (struct nomiNavigation){ .branches = {0}, .depth = 0, .selectedBranch = &tr->branches[0] };
}
branchId* NomiNavigation(char input) {
switch(input) {
case '1':
__nav__.branches[__nav__.depth] = 1;
__nav__.depth++;
break;
case '2':
__nav__.branches[__nav__.depth] = 2;
__nav__.depth++;
break;
case '3':
__nav__.branches[__nav__.depth] = 3;
__nav__.depth++;
break;
case '0':
if(__nav__.depth > 0) {
__nav__.branches[__nav__.depth] = 0;
__nav__.depth--;
__nav__.branches[__nav__.depth] = 0;
}
break;
}
return __nav__.branches;
}
/*
* This will create the truk of the note.
* */
trunk* CreateTrunk();
trunk CreateTrunk(char* title, branch root) {
trunk t = {
.title = title,
.branchCount = 1,
.branches = {0},
.text = 0,
};
t.branches[0] = root;
return t;
}
void DrawTrunk(trunk *tr, struct tart_window* w, tart_byte b) {
unsigned int f = 30;
for(int i = 0; i < tr->branchCount; i++) {
DrawBranch(&tr->branches[i], 100, w, b);
}
}
/*
* This is a test
* */
void CreaetBranch(trunk* trunk);
void AddBranch(trunk* t, branch br) {
if(t->branchCount < MAX_BRANCHES) {
t->branches[t->branchCount] = br;
t->branchCount++;
}
}
/*
* Locate Branch
* */
branch* LocateBranch();
branchId* LocateBranch(trunk* t) {
char found = 1;
for(int i = 0; i < t->branchCount; i++) {
found = 1;
for(int idIdx = 0; idIdx < 30; idIdx++) {
if(t->branches[i].navId[idIdx] != __nav__.branches[idIdx]){
found = 0;
}
}
if(found == 1) {
__nav__.selectedBranch->cell.background = TART_COLOR_GREEN_FOREGROUND;
__nav__.selectedBranch = &t->branches[i];
__nav__.selectedBranch->cell.background = TART_COLOR_WHITE_FOREGROUND;
}
}
return __nav__.selectedBranch->navId;
}
float t = 0;
@@ -80,20 +163,57 @@ nomi_curve RotateCurve(nomi_curve og, nomi_vec2 d) {
branch create_branch(branch* parent, nomi_vec2 d, unsigned char percent,
unsigned char b) {
branch branch;
branch.curve.start = (nomi_vec2){
branch br = {
.navId = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
.childrenCount = 0,
.parent = parent
};
br.curve.start = (nomi_vec2){
0,
0};
branch.curve.c0 = (nomi_vec2){
br.curve.c0 = (nomi_vec2){
(( 25) * -1),
((35/2.f) * -1)}; // controle point 0
branch.curve.c1 = (nomi_vec2){
br.curve.c1 = (nomi_vec2){
(( -10) * -1),
((35/2.f) * -1)}; // controle point 1
branch.curve.end = (nomi_vec2){
br.curve.end = (nomi_vec2){
(( 3) * -1),
((20/2.f) * -1)};
branch.curve = RotateCurve(branch.curve, d);
br.curve = RotateCurve(br.curve, d);
branch* p = parent;
branchId tmpId[MAX_BRANCHES] = {1};
int depth = 1;
br.id = 1;
if (parent != NULL) {
parent->childrenCount++;
br.id = parent->childrenCount;
tmpId[0] = br.id;
for(int i = 1; i < MAX_BRANCHES; i++) {
tmpId[i] = p->id;
depth = i+1;
if(p->parent != NULL) {
p = p->parent;
}else {
break;
}
}
for(int i = 0; i < depth; i++) {
br.navId[i] = tmpId[depth-1 - i];
}
}else {
depth = 0;
br.navId[0] = 1;
br.id = 1;
}
br.depth = depth;
if(parent != NULL) {
float count = percent/100.f;
@@ -107,17 +227,17 @@ branch create_branch(branch* parent, nomi_vec2 d, unsigned char percent,
count *((1-count)*((1-count)*parent->curve.c0.y + count * parent->curve.c1.y) +
count * ((1-count)*parent->curve.c1.y + parent->curve.end.y)),
};
branch.startPos.x = dpos.x += parent->startPos.x;
branch.startPos.y = dpos.y += parent->startPos.y*1;
branch.cell = NULL_CELL;
branch.cell.background = b;
return branch;
br.startPos.x = dpos.x += parent->startPos.x;
br.startPos.y = dpos.y += parent->startPos.y*1;
br.cell = NULL_CELL;
br.cell.background = b;
return br;
}
branch.cell = NULL_CELL;
branch.cell.background = b;
branch.startPos.x = term_current_size().x/2.f;
branch.startPos.y = term_current_size().y/2.f;
return branch;
br.cell = NULL_CELL;
br.cell.background = b;
br.startPos.x = term_current_size().x/2.f;
br.startPos.y = term_current_size().y/2.f;
return br;
}
/*
@@ -130,7 +250,7 @@ branch create_branch(branch* parent, nomi_vec2 d, unsigned char percent,
*/
void DrawBranch(branch* branch, unsigned char p, struct tart_window* w, tart_byte b) {
// List of random chars to be renderd
char cellChart[] = {'%','*','\\','/','l','&','7','+','=','^',':'};
char cellChart[] = {'0','1','2','3','l','&','7','+','=','^',':'};
unsigned int iderations = 0;
@@ -143,7 +263,12 @@ void DrawBranch(branch* branch, unsigned char p, struct tart_window* w, tart_byt
iderations++; // for selecting a random char to be renderd
branch->cell.display = cellChart[rand_r(&iderations)%11];
//branch->cell.display = cellChart[rand_r(&iderations)%11];
if(branch->id > 0 && branch->id < 11) {
branch->cell.display = cellChart[branch->id];
}else {
branch->cell.display = cellChart[10];
}
dpos = (struct tart_vec2){
(1-count)*((1-count)*((1-count)*branch->curve.start.x + count * branch->curve.c0.x) +