Physics in a Game World

Member
Posts: 281
Joined: 2009.04
Post: #1
OK, hello again.

I have a physics-less game game and am writing some functions for my game. Currently I am using a function like this:

and the code is this:

Code:
```void gravPhysics(Mesh *mesh) {          float x1;     float y1;     float z1;     x1 = (mesh->verts[counter+1]);   // *     z1 = (mesh->verts[counter+2]);   //  |  This finds the first point       y1 = (mesh->verts[counter+3]);   // *               for (indexSQ = 0; (indexSQ <= 25600) ; indexSQ += 0 )     {                                     printf("Entered for loop...\n");         printf("SQRX is %i\n", (indexSQ % 160));                           x1 = mesh->verts[counter+1];   // *         z1 = mesh->verts[counter+2];   //  |  This finds the first point           y1 = mesh->verts[counter+3];   // *                        printf("x1 = %f y1 = %f z1 = %f\n",x1,y1,z1);                           if ( (x1 <= sqrx) && (x1 >= sqrx) && (z1 <= sqry) && (z1 >= (sqry -1))) // checks if the first point is in the square designated by sqr         {             counter += 3;                          vt += y1;             vtcount ++;                          printf("The vertex is in the box...\n");                      }         else         {                                       if (vtcount > 0)             {                 squares[sqrx][sqry] = (vt/vtcount);                 vtcount = 0;                 vt = 0;                                  printf("Setting Y position of vertex: %d\n" , counter+1);                              }             else             {                                               indexSQ ++;                              sqrx = (indexSQ % 160);                 sqry = ( indexSQ - sqrx ) / 160;                          }                                   }                   }              }```
]

Now, I can't get this code to work (help would be appreciated) but when I did, all it would spit out is the average y for a wide square of map, which would be OK for deserts, but rubbish for anything else, e.g. the player walks halfway up a wall.

Is there another option? Or should I just increase the 160 to 512 or something?

~ Bring a Pen ~
Member
Posts: 281
Joined: 2009.04
Post: #2
P.S. I realised I did not include the bit that when finished searching the box's vertices sets the y for squares[sqrx][sqry] to VT/vtcount.

~ Bring a Pen ~
Member
Posts: 65
Joined: 2009.01
Post: #3
A couple things.
This line appears to increment by zero

for (indexSQ = 0; (indexSQ <= 25600) ; indexSQ += 0 )

and this line would only be true when x1 == sqrx

if ( (x1 <= sqrx) && (x1 >= sqrx) && (z1 <= sqry) && (z1 >= (sqry -1)))
Member
Posts: 281
Joined: 2009.04
Post: #4
Quote:This line appears to increment by zero

for (indexSQ = 0; (indexSQ <= 25600) ; indexSQ += 0 )

Well, as you can see from the flowchart, indexSQ only changes when we move the squares block.

Quote:if ( (x1 <= sqrx) && (x1 >= sqrx) && (z1 <= sqry) && (z1 >= (sqry -1)))

Oops, my mistake. as you can see from y1's example, it should be this:
Code:
`if ( (x1 <= sqrx) && (x1 >= (sqrx-1)) && (z1 <= sqry) && (z1 >= (sqry -1)))`

~ Bring a Pen ~
Member
Posts: 245
Joined: 2005.11
Post: #5
mikey Wrote:Well, as you can see from the flowchart, indexSQ only changes when we move the squares block.
Perhaps it would be more appropriate to use this then:
Code:
`while (indexSQ <= 25600)`
Using the type of loop appropriate to what you're doing helps other people to understand your code and differentiate between mistakes and intentional weirdness.
Did the new version of that if statement help with your problem?
Member
Posts: 281
Joined: 2009.04
Post: #6
Yeah, I originally wanted to put an if in a for loop? But this can't be done.

And no, it did not fix my problem.I think I'm going to use octrees:

split the map into 4 and then figure out which corner the player is nearest to, then find the closest vertex by checking all the vertex' in that corner. Thanks anyway though, I may use this code in a flight sim. *cuckoo*

~ Bring a Pen ~