1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include "player.h"
// Please set your dStageActor_c's z coordinate
// Please check return for -1
char NearestPlayer(dStageActor_c* actor) {
char nearest = -1;
float current = 1000000000000000000000000000000.0;
OSReport("FINDING NEAREST PLAYER\n");
for(char ii = 0; ii < 4; ii++) {
OSReport("K, let's check out Player %d\n", ii);
dStageActor_c* player = GetSpecificPlayerActor(ii);
if(!player) {
OSReport("Player %d is NULL\n", ii);
continue;
}
OSReport("Player %d is ok\n", ii);
OSReport("[%f,%f,%f] - [%f,%f,%f]\n",
actor->pos.x, actor->pos.y, actor->pos.z,
player->pos.x, player->pos.y, player->pos.z);
float distance = VECDistance(&actor->pos, &player->pos);
OSReport("Distance: %f [%f]\n", distance, current);
if(distance < current) {
current = distance;
nearest = ii;
OSReport("Nearest is now %d\n", ii);
}
}
OSReport("NearestPlayer returning %d\n", nearest);
if(nearest < 0) {
OSReport("***FIX ME IMMEDIATELY***\n***NEED Z COORDINATES FOR ACTOR***\n");
}
return nearest;
}
void setNewActivePhysicsRect(dStageActor_c* actor, Vec* scale) {
float amtX = scale->x;
float amtY = scale->y;
ActivePhysics::Info info;
info.xDistToCenter = 0.0;
info.yDistToCenter = 3.0 * amtY;
info.xDistToEdge = 4.0 * amtX;
info.yDistToEdge = 4.0 * amtY;
info.category1 = actor->aPhysics.info.category1;
info.category2 = actor->aPhysics.info.category2;
info.bitfield1 = actor->aPhysics.info.bitfield1;
info.bitfield2 = actor->aPhysics.info.bitfield2;
info.unkShort1C = actor->aPhysics.info.unkShort1C;
info.callback = actor->aPhysics.info.callback;
//OSReport("Making new Physics Class and adding to the list\n");
actor->aPhysics.removeFromList();
actor->aPhysics.initWithStruct(actor, &info);
actor->aPhysics.addToList();
}
|