remove infinite loop

This commit is contained in:
farisawan-2000
2020-12-13 22:24:18 -05:00
parent 54869be8a3
commit 1d7881bf3c
5 changed files with 97 additions and 47 deletions

2
init.c
View File

@@ -1,3 +1,5 @@
#include <ultra64.h>
#include <PR/gs2dex.h>
#include "init.h"
void s2d_init(void) {

16
mtx.c
View File

@@ -1,7 +1,5 @@
#include <ultra64.h>
#include <PR/gs2dex.h>
#include "stack.h"
// #include "fixedpoint.h"
#include <PR/gu.h>
#define ftoq FTOFIX32
@@ -75,14 +73,14 @@ void mat2_translate_vec(uObjMtx *m, f32 degrees, f32 mag) {
m->m.Y += FTOFIX16(mag * sinf(degrees));
}
void get_final_mat(uObjMtx *dst) {
u32 s_temp_top = stack_top;
if (s_isempty()) return;
// void get_final_mat(uObjMtx *dst) {
// u32 s_temp_top = stack_top;
// if (s_isempty()) return;
while (s_temp_top != 0) {
mat2_mul(dst, &stack[s_temp_top]);
}
}
// while (s_temp_top != 0) {
// mat2_mul(dst, &stack[s_temp_top]);
// }
// }
typedef float Mat4[4][4];
void gu_to_gs2dex(uObjMtx *m1, Mat4 m2) {

2
mtx.h
View File

@@ -1,7 +1,7 @@
#include <ultra64.h>
#include <PR/gs2dex.h>
#include <PR/gu.h>
#include "stack.h"
// #include "stack.h"
typedef float Mat4[4][4];
extern void mat2_dst_mul(uObjMtx *dst, uObjMtx *m1, uObjMtx *m2);

View File

@@ -77,6 +77,7 @@ void s2d_print(int x, int y, const char *str, uObjMtx *buf) {
draw_s2d_glyph(r, (x += ((8 * myScale))) + tx, y + ty, (buf++));
}
// myDegrees += saved_degrees;
p++;
} while (*p != '\0');
myScale = 1;
myDegrees = 0;
@@ -85,3 +86,10 @@ void s2d_print(int x, int y, const char *str, uObjMtx *buf) {
ty = 0;
}
void s2d_type_print(int x, int y, char *str, uObjMtx *buf, int pos) {
char t = str[pos];
str[pos] = '\0';
s2d_print(x, y, str, buf);
str[pos] = t;
}

View File

@@ -1,7 +1,42 @@
// int s2d_atoi(char *s, char **s2) {
// int ret = 0;
// int isNegative = (*s == '-');
// if (isNegative) {s++; (*s2)++;}
// for (; *s != '\0' && *s != ' ' && *s >= '0' && *s <= '9'; s++) {
// ret *= 10;
// if (*s >= '0' && *s <= '9')
// ret += *s - '0';
// else break;
// if (!(*(s+1) != '\0' && *(s+1) != ' ' && *(s+1) >= '0' && *(s+1) <= '9')) break;
// (*s2)++;
// }
// if (isNegative) ret *= -1;
// return ret;
// }
#define SCALE "\x80" // SCALE (some scale)
#define ROTATE "\x81" // ROTATE (degrees) // TODO: maybe add axis?
#define TRANSLATE "\x82" // TRANSLATE (x) (y)
#define CH_SCALE '\x80'
#define CH_ROT '\x81'
#define CH_TRANSLATE '\x82'
#define CH_GET_NEXT(x) (*(++x))
#define CH_SKIP(x) ((++x))
int saved_degrees = 0;
int myScale = 1;
int myDegrees = 0;
char *t = "TEST CRINGE";
int s2d_atoi(char *s, char **s2) {
int ret = 0;
int isNegative = (*s == '-');
if (isNegative) {s++; (*s2)++;}
if (isNegative) {
s++;
(*s2)++;
}
for (; *s != '\0' && *s != ' ' && *s >= '0' && *s <= '9'; s++) {
ret *= 10;
if (*s >= '0' && *s <= '9')
@@ -13,70 +48,77 @@ int s2d_atoi(char *s, char **s2) {
if (isNegative) ret *= -1;
return ret;
}
#define SCALE "\x80" // SCALE (some scale)
#define ROTATE "\x81" // ROTATE (degrees) // TODO: maybe add axis?
#define TRANSLATE "\x82" // TRANSLATE (x) (y)
#define CH_SCALE '\x80'
#define CH_ROT '\x81'
#define CH_TRANSLATE '\x82'
extern unsigned int gGlobalTimer;
#define CH_GET_NEXT(x) (*(++x))
int saved_degrees = 0;
int myScale = 1;
int myDegrees = 0;
char *t = "TEST" TRANSLATE "10 10CRINGE";
void s2d_print(int x, int y, const char *str) {
void s2d_print(int x, int y, char *str) {
char *p = str;
int tx = 0, ty = 0;
// int r = 0, g = 0, b = 0, a = 0;
if (*p == '\0') return;
do {
char r = *p;
int s, rd, tx = 0, ty = 0;
int s, rd;
switch (r) {
case CH_SCALE:
s = CH_GET_NEXT(p);
printf("%s\n", p);
CH_SKIP(p);
s = s2d_atoi(p, &p);
printf("%d\n", s);
myScale = s;
break;
case CH_ROT:
rd = CH_GET_NEXT(p);
CH_SKIP(p);
rd = s2d_atoi(p, &p);
saved_degrees = rd;
myDegrees = rd;
break;
case CH_TRANSLATE:
CH_GET_NEXT(p);
tx = s2d_atoi(p, &p);
printf("%d\n", tx);
CH_GET_NEXT(p);
CH_GET_NEXT(p);
ty = s2d_atoi(p, &p);
// CH_GET_NEXT(p);
printf("%d\n", ty);
CH_SKIP(p);
x = s2d_atoi(p, &p);
CH_SKIP(p);
CH_SKIP(p);
y = s2d_atoi(p, &p);
break;
// case CH_COLOR:
// CH_SKIP(p);
// s2d_red = s2d_atoi(p, &p);
// CH_SKIP(p); CH_SKIP(p);
// s2d_green = s2d_atoi(p, &p);
// CH_SKIP(p); CH_SKIP(p);
// s2d_blue = s2d_atoi(p, &p);
// CH_SKIP(p); CH_SKIP(p);
// s2d_alpha = s2d_atoi(p, &p);
// break;
// break;
default:
printf("%c %d\n",r, myScale);
break;
// if (myDegrees == 0)
// // draw_s2d_glyph(r, (x += (8 * myScale)) + tx, y + ty, (buf++));
// else
// draw_s2d_glyph(r, (x += ((8 * myScale))) + tx, y + ty, (buf++));
}
p++;
// myDegrees += saved_degrees;
} while (*(++p) != '\0');
} while (*p != '\0');
myScale = 1;
myDegrees = 0;
saved_degrees = 0;
tx = 0;
ty = 0;
}
void s2d_type_print(int x, int y, char *str, int pos) {
char t = str[pos];
str[pos] = '\0';
s2d_print(x, y, str);
str[pos] = t;
}
int main(void) {
char *s = t;
s++;
s++;
s++;
s++;
// printf("%d\n", s2d_atoi(s, &s));
// printf("%s\n", s);
s2d_print(0,0, t);