TempleOSCDV4.12.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:47:56 +02:00
1 parent 93ca216483
commit b84bbff6db
381 files changed
+18356 -18798

No files matched your search

+27 -27
View File
@@ -21,27 +21,27 @@ U0 SpanBridge1Init(CMathODE *)
{
I64 i;
MyMass *tempm;
tempm=PlaceMass(GR_WIDTH-FIXED_X1,FIXED_Y1);
tempm->flags|=MSF_FIXED;
tempm=PlaceMass(GR_WIDTH-FIXED_X2,FIXED_Y1);
tempm->flags|=MSF_FIXED;
tempm=PlaceMass(GR_WIDTH-FIXED_X1,FIXED_Y2);
tempm->flags|=MSF_FIXED;
tempm=PlaceMass(FIXED_X1,FIXED_Y1);
tempm->flags|=MSF_FIXED;
tempm=PlaceMass(FIXED_X2,FIXED_Y1);
tempm->flags|=MSF_FIXED;
tempm=PlaceMass(FIXED_X1,FIXED_Y2);
tempm->flags|=MSF_FIXED;
tempm=PlaceMass(FIXED_X3,FIXED_Y3);
tempm->flags|=MSF_FIXED;
MyMass *tmpm;
tmpm=PlaceMass(GR_WIDTH-FIXED_X1,FIXED_Y1);
tmpm->flags|=MSF_FIXED;
tmpm=PlaceMass(GR_WIDTH-FIXED_X2,FIXED_Y1);
tmpm->flags|=MSF_FIXED;
tmpm=PlaceMass(GR_WIDTH-FIXED_X1,FIXED_Y2);
tmpm->flags|=MSF_FIXED;
tmpm=PlaceMass(FIXED_X1,FIXED_Y1);
tmpm->flags|=MSF_FIXED;
tmpm=PlaceMass(FIXED_X2,FIXED_Y1);
tmpm->flags|=MSF_FIXED;
tmpm=PlaceMass(FIXED_X1,FIXED_Y2);
tmpm->flags|=MSF_FIXED;
tmpm=PlaceMass(FIXED_X3,FIXED_Y3);
tmpm->flags|=MSF_FIXED;
for (i=0;i<LOAD_WEIGHTS;i++) {
tempm=PlaceMass(FIXED_X1+(i+1)*(GR_WIDTH-2*FIXED_X1)/(LOAD_WEIGHTS+1),
tmpm=PlaceMass(FIXED_X1+(i+1)*(GR_WIDTH-2*FIXED_X1)/(LOAD_WEIGHTS+1),
FIXED_Y1);
tempm->load_t=(i+1.0)/LOAD_WEIGHTS;
tempm->color=RED;
tmpm->load_t=(i+1.0)/LOAD_WEIGHTS;
tmpm->color=RED;
}
DocClear;
@@ -62,19 +62,19 @@ U0 SpanBridge1Init(CMathODE *)
U0 AdjustLoads(CMathODE *ode)
{
MyMass *tempm=ode->next_mass;
MyMass *tmpm=ode->next_mass;
F64 d,tt=SpanTime/10.0;
while (tempm!=&ode->next_mass) {
if (tempm->load_t) {
while (tmpm!=&ode->next_mass) {
if (tmpm->load_t) {
if (tt) {
d=Abs(Sin(tempm->load_t*ã+tt)); //0.0<=d<=1.0
tempm->mass=100.0*Sqr(Sqr(d+1.0));
tempm->radius=7.0*d+2.0;
d=Abs(Sin(tmpm->load_t*ã+tt)); //0.0<=d<=1.0
tmpm->mass=100.0*Sqr(Sqr(d+1.0));
tmpm->radius=7.0*d+2.0;
} else {
tempm->mass=MASS_MASS;
tempm->radius=MASS_RADIUS;
tmpm->mass=MASS_MASS;
tmpm->radius=MASS_RADIUS;
}
}
tempm=tempm->next;
tmpm=tmpm->next;
}
}
+17 -17
View File
@@ -7,32 +7,32 @@ U0 MyDerivative(CMathODE *ode,F64,COrder2D3 *,COrder2D3 *)
CTask *task=ode->win_task;
F64 d,dd;
CD3 p,p2;
MyMass *tempm1,*tempm2;
MyMass *tmpm1,*tmpm2;
//Collisions
tempm1=ode->next_mass;
while (tempm1!=&ode->next_mass) {
tempm2=tempm1->next;
while (tempm2!=&ode->next_mass) {
D3Sub(&p,&tempm2->state->x,&tempm1->state->x);
tmpm1=ode->next_mass;
while (tmpm1!=&ode->next_mass) {
tmpm2=tmpm1->next;
while (tmpm2!=&ode->next_mass) {
D3Sub(&p,&tmpm2->state->x,&tmpm1->state->x);
dd=D3NormSqr(&p);
if (dd<=Sqr(tempm1->radius+tempm2->radius)) {
if (dd<=Sqr(tmpm1->radius+tmpm2->radius)) {
d=Sqrt(dd)+0.0001;
dd=10.0*Sqr(Sqr(Sqr(tempm1->radius+tempm2->radius)-dd));
dd=10.0*Sqr(Sqr(Sqr(tmpm1->radius+tmpm2->radius)-dd));
D3MulEqu(&p,dd/d);
D3AddEqu(&tempm2->DstateDt->DxDt,&p);
D3SubEqu(&tempm1->DstateDt->DxDt,&p);
D3AddEqu(&tmpm2->DstateDt->DxDt,&p);
D3SubEqu(&tmpm1->DstateDt->DxDt,&p);
}
tempm2=tempm2->next;
tmpm2=tmpm2->next;
}
tempm1=tempm1->next;
tmpm1=tmpm1->next;
}
tempm1=ode->next_mass;
while (tempm1!=&ode->next_mass) {
if (!(tempm1->flags&MSF_FIXED))
tempm1->DstateDt->DyDt+=10.0*tempm1->mass; //Gravity
tempm1=tempm1->next;
tmpm1=ode->next_mass;
while (tmpm1!=&ode->next_mass) {
if (!(tmpm1->flags&MSF_FIXED))
tmpm1->DstateDt->DyDt+=10.0*tmpm1->mass; //Gravity
tmpm1=tmpm1->next;
}
if (cursor_mass) {
+137 -137
View File
@@ -8,36 +8,36 @@ F64 SpanTime()
F64 Cost(CMathODE *ode)
{
MyMass *tempm;
MySpring *temps;
MyMass *tmpm;
MySpring *tmps;
F64 res=0;
tempm=ode->next_mass;
while (tempm!=&ode->next_mass) {
res+=tempm->cost;
tempm=tempm->next;
tmpm=ode->next_mass;
while (tmpm!=&ode->next_mass) {
res+=tmpm->cost;
tmpm=tmpm->next;
}
temps=ode->next_spring;
while (temps!=&ode->next_spring) {
res+=temps->cost;
temps=temps->next;
tmps=ode->next_spring;
while (tmps!=&ode->next_spring) {
res+=tmps->cost;
tmps=tmps->next;
}
return res;
}
U0 DrawIt(CTask *task,CDC *dc)
{
MyMass *tempm;
MySpring *temps;
MyMass *tmpm;
MySpring *tmps;
temps=ode->next_spring;
while (temps!=&ode->next_spring) {
if (!(temps->flags&SSF_INACTIVE)) {
dc->color=temps->color;
dc->pen_width=temps->pen_width;
GrLine3(dc,temps->end1->x,temps->end1->y,0,
temps->end2->x,temps->end2->y,0);
tmps=ode->next_spring;
while (tmps!=&ode->next_spring) {
if (!(tmps->flags&SSF_INACTIVE)) {
dc->color=tmps->color;
dc->pen_width=tmps->pen_width;
GrLine3(dc,tmps->end1->x,tmps->end1->y,0,
tmps->end2->x,tmps->end2->y,0);
}
temps=temps->next;
tmps=tmps->next;
}
if (cursor_mass) {
@@ -48,19 +48,19 @@ U0 DrawIt(CTask *task,CDC *dc)
cursor_mass->x,cursor_mass->y,0);
}
tempm=ode->next_mass;
while (tempm!=&ode->next_mass) {
if (!(tempm->flags&MSF_INACTIVE)) {
tmpm=ode->next_mass;
while (tmpm!=&ode->next_mass) {
if (!(tmpm->flags&MSF_INACTIVE)) {
dc->color=BLACK;
GrCircle(dc,tempm->x,tempm->y,tempm->radius);
GrFloodFill(dc,tempm->x,tempm->y,TRUE);
dc->color=tempm->color;
GrCircle(dc,tempm->x,tempm->y,tempm->radius);
GrFloodFill(dc,tempm->x,tempm->y,TRUE);
GrCircle(dc,tmpm->x,tmpm->y,tmpm->radius);
GrFloodFill(dc,tmpm->x,tmpm->y,TRUE);
dc->color=tmpm->color;
GrCircle(dc,tmpm->x,tmpm->y,tmpm->radius);
GrFloodFill(dc,tmpm->x,tmpm->y,TRUE);
dc->color=BLACK;
GrCircle(dc,tempm->x,tempm->y,tempm->radius);
GrCircle(dc,tmpm->x,tmpm->y,tmpm->radius);
}
tempm=tempm->next;
tmpm=tmpm->next;
}
dc->color=BLACK;
@@ -70,69 +70,69 @@ U0 DrawIt(CTask *task,CDC *dc)
MyMass *PlaceMass(I64 x, I64 y)
{
MyMass *tempm=CAlloc(sizeof(MyMass));
tempm->drag_profile_factor=1.0;
tempm->x=x;
tempm->y=y;
tempm->mass=MASS_MASS;
tempm->radius=MASS_RADIUS;
tempm->cost=25.0*COST_SCALE;
tempm->color=YELLOW;
QueIns(tempm,ode->last_mass);
return tempm;
MyMass *tmpm=CAlloc(sizeof(MyMass));
tmpm->drag_profile_factor=1.0;
tmpm->x=x;
tmpm->y=y;
tmpm->mass=MASS_MASS;
tmpm->radius=MASS_RADIUS;
tmpm->cost=25.0*COST_SCALE;
tmpm->color=YELLOW;
QueIns(tmpm,ode->last_mass);
return tmpm;
}
U0 NullSpring(MySpring *temps,F64 scale)
U0 NullSpring(MySpring *tmps,F64 scale)
{
F64 d=D3Dist(&temps->end1->x,&temps->end2->x);
temps->rest_len=d*scale;
temps->compression_strength=
temps->base_compression_strength/(temps->rest_len+1.0);
temps->tensile_strength=temps->base_tensile_strength/(temps->rest_len+1.0);
temps->const=temps->base_const/(temps->rest_len+1.0);
temps->cost=temps->base_cost*temps->rest_len;
F64 d=D3Dist(&tmps->end1->x,&tmps->end2->x);
tmps->rest_len=d*scale;
tmps->compression_strength=
tmps->base_compression_strength/(tmps->rest_len+1.0);
tmps->tensile_strength=tmps->base_tensile_strength/(tmps->rest_len+1.0);
tmps->const=tmps->base_const/(tmps->rest_len+1.0);
tmps->cost=tmps->base_cost*tmps->rest_len;
}
U0 MoveMass(MyMass *tempm,I64 x, I64 y)
U0 MoveMass(MyMass *tmpm,I64 x, I64 y)
{
MySpring *temps;
tempm->x=x;
tempm->y=y;
tempm->DxDt=0;
tempm->DyDt=0;
temps=ode->next_spring;
while (temps!=&ode->next_spring) {
if (temps->end1==tempm || temps->end2==tempm) {
if (temps->flags&SSF_NO_COMPRESSION)
NullSpring(temps,WIRE_PERCENT);
MySpring *tmps;
tmpm->x=x;
tmpm->y=y;
tmpm->DxDt=0;
tmpm->DyDt=0;
tmps=ode->next_spring;
while (tmps!=&ode->next_spring) {
if (tmps->end1==tmpm || tmps->end2==tmpm) {
if (tmps->flags&SSF_NO_COMPRESSION)
NullSpring(tmps,WIRE_PERCENT);
else
NullSpring(temps,1.0);
NullSpring(tmps,1.0);
}
temps=temps->next;
tmps=tmps->next;
}
}
U0 DelSpring(MySpring *temps)
U0 DelSpring(MySpring *tmps)
{
QueRem(temps);
Free(temps);
QueRem(tmps);
Free(tmps);
}
U0 DelMass(MyMass *tempm)
U0 DelMass(MyMass *tmpm)
{
MySpring *temps,*temps1;
temps=ode->next_spring;
while (temps!=&ode->next_spring) {
temps1=temps->next;
if (temps->end1==tempm || temps->end2==tempm)
DelSpring(temps);
temps=temps1;
MySpring *tmps,*tmps1;
tmps=ode->next_spring;
while (tmps!=&ode->next_spring) {
tmps1=tmps->next;
if (tmps->end1==tmpm || tmps->end2==tmpm)
DelSpring(tmps);
tmps=tmps1;
}
QueRem(tempm);
Free(tempm);
QueRem(tmpm);
Free(tmpm);
}
U0 DrawSpring(CDC *dc,MyMass *tempm,I64 x,I64 y)
U0 DrawSpring(CDC *dc,MyMass *tmpm,I64 x,I64 y)
{
switch (mode_button.state) {
case MD_CONCRETE:
@@ -148,66 +148,66 @@ U0 DrawSpring(CDC *dc,MyMass *tempm,I64 x,I64 y)
dc->pen_width=1;
break;
}
GrLine3(dc,tempm->x,tempm->y,0,x,y,0);
GrLine3(dc,tmpm->x,tmpm->y,0,x,y,0);
}
U0 PlaceSpring(MyMass *tempm1,MyMass *tempm2)
U0 PlaceSpring(MyMass *tmpm1,MyMass *tmpm2)
{
MySpring *temps=CAlloc(sizeof(MySpring));
temps->end1=tempm1;
temps->end2=tempm2;
MySpring *tmps=CAlloc(sizeof(MySpring));
tmps->end1=tmpm1;
tmps->end2=tmpm2;
switch (mode_button.state) {
case MD_CONCRETE:
temps->base_const = 3.00*SPRING_SCALE;
temps->base_compression_strength=10.00*STRENGTH_SCALE;
temps->base_tensile_strength = 0.35*STRENGTH_SCALE;
temps->base_cost = 0.30*COST_SCALE;
NullSpring(temps,1.0);
temps->color=LTGRAY;
temps->pen_width=2;
tmps->base_const = 3.00*SPRING_SCALE;
tmps->base_compression_strength=10.00*STRENGTH_SCALE;
tmps->base_tensile_strength = 0.35*STRENGTH_SCALE;
tmps->base_cost = 0.30*COST_SCALE;
NullSpring(tmps,1.0);
tmps->color=LTGRAY;
tmps->pen_width=2;
break;
case MD_STEEL:
temps->base_const = 1.00*SPRING_SCALE;
temps->base_compression_strength= 1.00*STRENGTH_SCALE;
temps->base_tensile_strength = 1.00*STRENGTH_SCALE;
temps->base_cost = 1.00*COST_SCALE;
NullSpring(temps,1.0);
temps->color=DKGRAY;
temps->pen_width=2;
tmps->base_const = 1.00*SPRING_SCALE;
tmps->base_compression_strength= 1.00*STRENGTH_SCALE;
tmps->base_tensile_strength = 1.00*STRENGTH_SCALE;
tmps->base_cost = 1.00*COST_SCALE;
NullSpring(tmps,1.0);
tmps->color=DKGRAY;
tmps->pen_width=2;
break;
case MD_WIRE:
temps->base_const = 0.25*SPRING_SCALE;
temps->base_compression_strength= 0.00;
temps->base_tensile_strength = 0.50*STRENGTH_SCALE;
temps->base_cost = 0.10*COST_SCALE;
NullSpring(temps,WIRE_PERCENT);
temps->color=RED;
temps->pen_width=1;
temps->flags|=SSF_NO_COMPRESSION;
tmps->base_const = 0.25*SPRING_SCALE;
tmps->base_compression_strength= 0.00;
tmps->base_tensile_strength = 0.50*STRENGTH_SCALE;
tmps->base_cost = 0.10*COST_SCALE;
NullSpring(tmps,WIRE_PERCENT);
tmps->color=RED;
tmps->pen_width=1;
tmps->flags|=SSF_NO_COMPRESSION;
break;
}
QueIns(temps,ode->last_spring);
QueIns(tmps,ode->last_spring);
}
U0 AnimateTask(SpanAnimateStruct *a)
{
MySpring *temps,*temps1;
MySpring *tmps,*tmps1;
Bool old_run=FALSE;
F64 f;
while (TRUE) {
temps=ode->next_spring;
while (temps!=&ode->next_spring) {
temps1=temps->next;
f=temps->f;
if (f>0 && f>temps->compression_strength &&
!(temps->flags&SSF_NO_COMPRESSION)||
f<0 && -f>temps->tensile_strength &&
!(temps->flags&SSF_NO_TENSION))
temps->flags|=SSF_INACTIVE;
temps=temps1;
tmps=ode->next_spring;
while (tmps!=&ode->next_spring) {
tmps1=tmps->next;
f=tmps->f;
if (f>0 && f>tmps->compression_strength &&
!(tmps->flags&SSF_NO_COMPRESSION)||
f<0 && -f>tmps->tensile_strength &&
!(tmps->flags&SSF_NO_TENSION))
tmps->flags|=SSF_INACTIVE;
tmps=tmps1;
}
AdjustLoads(ode);
WinMgrSync; //CMathODE updated once per refresh.
Refresh; //CMathODE updated once per refresh.
if (old_run!=run_button.state) {
if (run_button.state) {
if (!a->elapsed_t || !a->saved_ode) {
@@ -231,7 +231,7 @@ U0 Init(SpanAnimateStruct *a)
ode=SpanNew;
run_button.state=0;
WinMgrSync(2); //Allow stop to reg in animate task.
Refresh(2); //Allow stop to reg in animate task.
if (a->saved_ode)
SpanLoad(ode,a->saved_ode);
@@ -258,8 +258,8 @@ U0 SongTask(I64)
U0 Span()
{
I64 msg_code,a1,a2;
MyMass *tempm1=NULL,*tempm2=NULL;
MySpring *temps;
MyMass *tmpm1=NULL,*tmpm2=NULL;
MySpring *tmps;
CCtrl *bt_run,*bt_mode;
U8 *src;
CDC *dc=DCAlias;
@@ -328,7 +328,7 @@ U0 Span()
DCFill(dc);
switch (msg_code) {
case MSG_IP_L_DOWN:
cursor_mass=tempm1=tempm2=NULL;
cursor_mass=tmpm1=tmpm2=NULL;
switch (mode_button.state) {
case MD_MASS:
PlaceMass(a1,a2);
@@ -336,21 +336,21 @@ U0 Span()
case MD_CONCRETE:
case MD_STEEL:
case MD_WIRE:
tempm1=MassFind(ode,a1,a2);
tmpm1=MassFind(ode,a1,a2);
break;
case MD_MOVE:
if (run_button.state)
cursor_mass=MassFind(ode,a1,a2);
else
if (tempm1=MassFind(ode,a1,a2))
MoveMass(tempm1,a1,a2);
if (tmpm1=MassFind(ode,a1,a2))
MoveMass(tmpm1,a1,a2);
break;
case MD_DELETE:
MassOrSpringFind(ode,&tempm1,&temps,a1,a2);
if (tempm1)
DelMass(tempm1);
if (temps)
DelSpring(temps);
MassOrSpringFind(ode,&tmpm1,&tmps,a1,a2);
if (tmpm1)
DelMass(tmpm1);
if (tmps)
DelSpring(tmps);
break;
}
break;
@@ -359,27 +359,27 @@ U0 Span()
case MD_CONCRETE:
case MD_STEEL:
case MD_WIRE:
if (tempm1 && (tempm2=MassFind(ode,a1,a2)) && tempm1!=tempm2)
PlaceSpring(tempm1,tempm2);
if (tmpm1 && (tmpm2=MassFind(ode,a1,a2)) && tmpm1!=tmpm2)
PlaceSpring(tmpm1,tmpm2);
break;
case MD_MOVE:
if (!run_button.state && tempm1)
MoveMass(tempm1,a1,a2);
if (!run_button.state && tmpm1)
MoveMass(tmpm1,a1,a2);
break;
}
cursor_mass=tempm1=tempm2=NULL;
cursor_mass=tmpm1=tmpm2=NULL;
break;
case MSG_IP_MOVE:
switch (mode_button.state) {
case MD_MOVE:
if (!run_button.state && tempm1)
MoveMass(tempm1,a1,a2);
if (!run_button.state && tmpm1)
MoveMass(tmpm1,a1,a2);
break;
case MD_CONCRETE:
case MD_STEEL:
case MD_WIRE:
if (tempm1) {
DrawSpring(dc,tempm1,a1,a2);
if (tmpm1) {
DrawSpring(dc,tmpm1,a1,a2);
}
break;
}
@@ -388,7 +388,7 @@ U0 Span()
mode_button.state++;
if (mode_button.state>=MD_NUM_MODES)
mode_button.state=0;
cursor_mass=tempm1=tempm2=NULL;
cursor_mass=tmpm1=tmpm2=NULL;
break;
case MSG_KEY_DOWN:
switch (a1) {
+21 -21
View File
@@ -26,8 +26,8 @@ U8 *SpanSave(CMathODE *ode,I64 *_size=NULL)
{
I64 cnt;
U8 *res,*ptr;
MyMass *tempm;
MySpring *temps;
MyMass *tmpm;
MySpring *tmps;
SpanHeader h;
ODERenum(ode);
@@ -47,18 +47,18 @@ U8 *SpanSave(CMathODE *ode,I64 *_size=NULL)
MemCpy(ptr,&h,sizeof(SpanHeader));
ptr+=sizeof(SpanHeader);
tempm=ode->next_mass;
while (tempm!=&ode->next_mass) {
MemCpy(ptr,&tempm->start,M_SIZE);
tmpm=ode->next_mass;
while (tmpm!=&ode->next_mass) {
MemCpy(ptr,&tmpm->start,M_SIZE);
ptr+=M_SIZE;
tempm=tempm->next;
tmpm=tmpm->next;
}
temps=ode->next_spring;
while (temps!=&ode->next_spring) {
MemCpy(ptr,&temps->start,S_SIZE);
tmps=ode->next_spring;
while (tmps!=&ode->next_spring) {
MemCpy(ptr,&tmps->start,S_SIZE);
ptr+=S_SIZE;
temps=temps->next;
tmps=tmps->next;
}
if (_size) *_size=cnt;
return res;
@@ -71,7 +71,7 @@ Bool SpanWrite(CMathODE *ode)
Bool res=FALSE,old_silent=Silent;
MkDir("~/Span");
Silent(old_silent);
if (name=PopUpFileName("~/Span/Game.DAT")) {
if (name=PopUpFileName("~/Span/Game.DATA")) {
if (buf=SpanSave(ode,&size)) {
FileWrite(name,buf,size);
Free(buf);
@@ -85,8 +85,8 @@ Bool SpanWrite(CMathODE *ode)
U0 SpanLoad(CMathODE *ode,U8 *src)
{
I64 i;
MyMass *tempm;
MySpring *temps;
MyMass *tmpm;
MySpring *tmps;
SpanHeader h;
if (!src) return;
@@ -95,19 +95,19 @@ U0 SpanLoad(CMathODE *ode,U8 *src)
src+=sizeof(SpanHeader);
for (i=0;i<h.num_masses;i++) {
tempm=CAlloc(sizeof(MyMass));
MemCpy(&tempm->start,src,M_SIZE);
tmpm=CAlloc(sizeof(MyMass));
MemCpy(&tmpm->start,src,M_SIZE);
src+=M_SIZE;
QueIns(tempm,ode->last_mass);
QueIns(tmpm,ode->last_mass);
}
for (i=0;i<h.num_springs;i++) {
temps=CAlloc(sizeof(MySpring));
MemCpy(&temps->start,src,S_SIZE);
tmps=CAlloc(sizeof(MySpring));
MemCpy(&tmps->start,src,S_SIZE);
src+=S_SIZE;
QueIns(temps,ode->last_spring);
temps->end1=MassFindNum(ode,temps->end1_num);
temps->end2=MassFindNum(ode,temps->end2_num);
QueIns(tmps,ode->last_spring);
tmps->end1=MassFindNum(ode,tmps->end1_num);
tmps->end2=MassFindNum(ode,tmps->end2_num);
}
}