Allegro.cc - Online Community

Allegro.cc Forums » Off-Topic Ordeals » how are you all?

This thread is locked; no one can reply to it. rss feed Print
how are you all?
William Labbett
Member #4,486
March 2004
avatar

Just in case anyone was missing me :-[, I wanted to say hi again Allegro!

My absence hasn't meant I've not been programming. In fact I've been working really hard on my game and it's going very well indeed.

Here's an example of some code I wrote recently :

#SelectExpand
1/* circle_and_rotating_line_collision() : checks if a circle moving in a straight line, collides with a 2straight line which is rotating around a fixed point 3 4arguments: 5 6pai : polygon angle increment : angle in radians for how much the polygon rotated per update 7 8*/ 9int circle_and_rotating_line_collision(Circle *c, const double cr_x, const double cr_y, const double pai, Point v1, Point v2, PotentialMove& move) 10{ 11 12 Point v1_s, v2_s; // v1 shifted and v2 shifted by radius of circle in direction perpendicular to side of polygon away from centre of rotation 13 14 15 16 double psa2 = atan2( (v2.y - v1.y) , (v2.x - v1.x) ); 17 if( psa2 < 0.0 ) 18 { 19 psa2 += TWO_PI; 20 } 21 22 psa2 -= ALLEGRO_PI / 2.0f; 23 24 principal_value( &psa2 ); 25 26 v1_s.x = v1.x + c->radius * cos(psa2); 27 v1_s.y = v1.y + c->radius * sin(psa2); 28 v2_s.x = v2.x + c->radius * cos(psa2); 29 v2_s.y = v2.y + c->radius * sin(psa2); 30 31 const double k = c->remaining_distance / pai; // for storing the constant value : (distance circle travels) / (polygon increment angle) 32 const double xL = v1_s.x < v2_s.x ? v1_s.x - cr_x : v2_s.x - cr_x; 33 const double yL = v1_s.x < v2_s.x ? v1_s.y - cr_y : v2_s.y - cr_y; 34 const double xR = v1_s.x < v2_s.x ? v2_s.x - cr_x : v1_s.x - cr_x; 35 const double yR = v1_s.x < v2_s.x ? v2_s.y - cr_y : v1_s.y - cr_y; 36 const double sL = sqrt( (xR - xL) * (xR - xL) + (yR - yL) * (yR - yL) ); // length of polygon side 37 const double xt = ((xL * (xR - xL)) + (yL * (yR - yL))) / sL; // xt : x translation for the spiral 38 const double yt = (yL * xR - xL * yR) / sL; // yt : y translation for the spiral 39 const double cos_psa = (xR - xL) / sL; // cosine of the angle side of polygon makes 40 const double sin_psa = (yR - yL) / sL; // sine of the angle side of polygon makes 41 double pc[7]; // polynomial coeffecients 42 double z[ 12 ]; // array for real and imaginary parts of solutions to polynomial 43 int i; 44 gsl_poly_complex_workspace *w = gsl_poly_complex_workspace_alloc (7); 45 46 double r, pA; 47 48 double a = c->cc_x - cr_x; 49 double b = c->cc_y - cr_y; 50 51 //cout << "a" << a << "b" << b << "\n"; 52 double psa = atan2( yR - yL, xR - xL ); 53 54 if( psa < 0.0f ) 55 { 56 psa += TWO_PI; 57 } 58 59 60 //cout << "psa = " << psa << "\n"; 61 62 pc[0] = b * cos_psa - a * sin_psa - yt; 63 pc[1] = k * sin(c->circle_angle) * cos_psa - a * cos_psa - k * cos(c->circle_angle) * sin_psa - b * sin_psa; 64 pc[2] = - b * cos_psa / 2.0f + a * sin_psa / 2.0f - k * sin(c->circle_angle) * sin_psa - k * cos(c->circle_angle) * cos_psa; 65 pc[3] = k * sin(c->circle_angle) * cos_psa / 2.0f + a * cos_psa / 6.0 + b * sin_psa / 6.0f + k * cos(c->circle_angle) * sin_psa / 2.0f; 66 pc[4] = b * cos_psa / 24.0f - a * sin_psa / 24.0f + k * cos(c->circle_angle) * cos_psa / 6.0f + k * sin(c->circle_angle) * sin_psa / 6.0f; 67 pc[5] = k * sin(c->circle_angle) * cos_psa / 24.0f - k * cos(c->circle_angle) * sin_psa / 24.0f - a * cos_psa / 120.0f - b * sin_psa / 120.0f; 68 pc[6] = - k * cos(c->circle_angle) * cos_psa / 120.0f - k * sin(c->circle_angle) * sin_psa / 120.0f; 69 70 gsl_poly_complex_solve(pc, 7, w, z); 71 72 for(i = 0; i < 6; ++i) 73 { 74 if( z[ 2 * i + 1] == 0.0) 75 { 76 r = sqrt( pow( b + k * z[2*i] * sin( c->circle_angle ), 2) + pow( a + k * z[2*i] * cos( c->circle_angle ), 2) ); 77 78 pA = atan2( b + k * z[2*i] * sin( c->circle_angle ), a + k * z[2*i] * cos( c->circle_angle )); 79 80 if( z[2*i] >= 0.0 && z[2*i] <= pai && r * cos( pA - z[2*i] - psa) - xt >= 0 && r * cos( pA - z[2*i] - psa ) - xt <= sL ) 81 { 82 83 double hit_x, hit_xr; 84 double hit_y, hit_yr; 85 86 //cout << "degrees required to hit " << (z[2*i] * 180.0f / ALLEGRO_PI) << "\n"; 87 88 rotate_point( psa, r * cos( pA - z[2*i] - psa), r * sin( pA - z[2*i] - psa), &hit_x, &hit_y); 89 rotate_point( z[2*i], hit_x, hit_y, &hit_xr, &hit_yr); 90 91 move.x = hit_xr + cr_x; 92 move.y = hit_yr + cr_y; 93 94 double xLr, yLr, xRr, yRr; // for storing where the coordinates of the ends of the line where it 95 // it is when the circle hits it 96 97 // rotate points (xL, yL) and (xR, yR) to where they are when circle hits it so the angle of it 98 // can be worked out. This is needed to determine the angle the circle bounces off at 99 100 rotate_point(z[2*i], xL, yL, &xLr, &yLr); 101 rotate_point(z[2*i], xR, yR, &xRr, &yRr); 102 103 double side_angle = atan2( yRr - yLr, xRr - xLr ); 104 105 double new_angle = 2.0f * side_angle - c->circle_angle; 106 107 principal_value(&new_angle); 108 109 move.angle = new_angle; 110 111 //cout << "returning 1 from rotating line function.\n"; 112 //eek(); 113 114 return 1; 115 } 116 } 117 118 } 119 120 //cout << "rotating line function : returning 0.\n"; 121 122 return 0; 123}

It took me weeks to work it out but it works good. Very proud to have worked it out.

So here I am, finally getting somewhere with my game and they want to rope me in for a medical assessment to see if I'm fit for work.

Also, I'm now doing a maths degree and playing ping ping once a week.

Anyway, hope everyone's getting on alright,

Will

Dario ff
Member #10,065
August 2008
avatar

Hello Will! Nice to see you're still making progress with that project. Is it for that isometric project you posted some screens some time ago?

As for me, I'm on my 2nd year of Electronics Engineering and currently working on a large reverse-engineering/modding project. Ironically it has taught me a lot more and been a great motivation to learn how more modern 3D graphics engines work, and I'll surely try out all this stuff for probably building my dream engine once more.

Not using Allegro much lately, but I'll surely try to jump back in if Speedhack happens this year again.

TranslatorHack 2010, a human translation chain in a.cc.
My games: [GiftCraft] - [Blocky Rhythm[SH2011]] - [Elven Revolution] - [Dune Smasher!]

William Labbett
Member #4,486
March 2004
avatar

hi dario, thanks for saying hi.

Dario ff said:

Is it for that isometric project you posted some screens some time ago?

It's for a pong variation I'm working on :

{"name":"606007","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/6\/563db1236d17c276cfd44d6964358f8a.png","w":1070,"h":816,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/6\/563db1236d17c276cfd44d6964358f8a"}606007

Edgar Reynaldo
Member #8,592
May 2007
avatar

verthex
Member #11,340
September 2009
avatar

Haven't coded much recently. Went surfing 3 days in row for the first time since the summer of 2011! South shore is finally getting big on Oahu.

Specter Phoenix
Member #1,425
July 2001
avatar

Besides programming, I helped put a new rear bumper on my wife's grandfather's truck and been taping and painting their kitchen this past two weeks. Outside of that I have just been doing house chores and taking care of wife and son.

"Can't a man even talk to himself without being interrupted?" -Krull(1983)
"Through vengence I was born. Through war I was trained. Through love I was found. Through death I was released. Through release I was given a purpose." -- Specter Phoenix
"Programming == AWESOME the rest is just tools to accomplish it."
END OF LINE

weapon_S
Member #7,859
October 2006
avatar

Hi, William. I can't tell those people who use their real name apart, so I haven't missed you ;p Nice to see you back and doing well.
I'm working on a port of a game while learning Git, and my own little project while learning obscure language constructs.
I have no idea how that posted code works. But you know you could rewrite the pow(x, 2), and separate the cos/sin in the pc[] calculation? Modern compilers might do this during optimization.

verthex
Member #11,340
September 2009
avatar

weapon_S said:

Modern compilers might do this during optimization.

Its hard to say without benchmarking it. ;)
I've seem some types of multiplication run slower with the -O3 flag (with inline assembler). Go figure.

Niunio
Member #1,975
March 2002
avatar

Hi William! Glad to see you. :)

That "pong" looks nice. Does the "quads" rotate?

Myself I'm working hard in my Allegro wrapper for Pascal. It does work but only "sometimes".

verthex said:

I've seem some types of multiplication run slower with the -O3 flag (with inline assembler). Go figure.

IIRC Allegro 3 used -O2 because it had better bechmarking than -O3. :D

-----------------
Current projects: Allegro.pas | MinGRo

Elias
Member #358
May 2000

Hi William! Good to hear you're doing fine. Is this the game you mentioned half a year ago in Cambridge?

--
"Either help out or stop whining" - Evert

Dizzy Egg
Member #10,824
March 2009
avatar

...aww...Cambs...

Hello Willy! I'm eggsellent thanks, glad your still using oxygen (in a good way)

----------------------------------------------------
Please check out my songs:
https://soundcloud.com/dont-rob-the-machina

AMCerasoli
Member #11,955
May 2010
avatar

Hi man!, I'm on my 2nd year since I turned 21, and yesterday I saw a dog walking on the street, I said "GRRR" and the dog said "Hello". And talking about universities here's a joke. :D

A teacher asks her class if anyone can use the word fascinate in a sentence.
Brian raises his hand and says, "The sky is fascinating."
The teacher says, "No that's fascinating."
Jennifer raises her hand and says, "When I saw the tigers at the zoo I was fascinated."
The teacher says, "No that's fascinated."
So finally Little Johnny raises his hand and says, 
"My mom bought a new blouse with 12 pearl buttons, but her tit's are so 
big she could only fasten eight!

Go to: