how are you all?
William Labbett

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

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.

William Labbett

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

On to my second year of four for a CompSci degree, have 10 days til classes start again for the summer term...

Glad you're making progress Will. ;)

verthex

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

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.

weapon_S

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
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

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

Elias

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

Dizzy Egg

...aww...Cambs...

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

AMCerasoli

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!

Thread #610215. Printed from Allegro.cc