Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - brainmaster

Pages: [1]
1
Support / Collision modes
« on: April 22, 2007, 01:50:44 am »
Hello. I can get my collision checks to work when the source object mode is only ...SELF and the target is only ...OTHER. Why can't setting the mode to (...SELF&...OTHER) for the objects work?

2
Support / Tank rotations out of control
« on: April 08, 2007, 03:33:12 am »
I am working on a simple tank game, move around in tank and shoot stuff. I based my move rotation on the car example (the tilting based on ground), but I am having problems. The tank moves correctly for a while on the hills i made, but it soon rotates out of control and flies upward. Any help?

Code: [Select]
public boolean place(Object3D ground) {
//get bottom direction
Object3D o = new Object3D(3);
o.addTriangle(getFrontTireRight().getTransformedCenter(),
getBackTireLeft().getTransformedCenter(),
getFrontTireLeft().getTransformedCenter());
o.calcNormals();
SimpleVector v = o.getPolygonManager().getTransformedNormal(0);
float dis = 300f;
boolean good = false;
Object3D body = getBody();
//move up in case of vertical ascending
body.translate(0,-150,0);
float disFrontLeftBottom  = getTireLeft().rayIntersectsAABB(
getFrontTireLeft().getTransformedCenter(),v,false);
float disFrontRightBottom = getTireRight().rayIntersectsAABB(
getFrontTireRight().getTransformedCenter(),v,false);
float disBackLeftBottom   = getTireLeft().rayIntersectsAABB(
getBackTireLeft().getTransformedCenter(),v,false);
float disBackRightBottom  = getTireRight().rayIntersectsAABB(
getBackTireRight().getTransformedCenter(),v,false);
float disCenterBottom     = getTireLeft().rayIntersectsAABB(
getTireInsideLeft().getTransformedCenter(),v,false);
SimpleVector vFrontLeft  = new SimpleVector(
getFrontTireLeft().getTransformedCenter());
SimpleVector vFrontRight = new SimpleVector(
getFrontTireRight().getTransformedCenter());
SimpleVector vBackLeft   = new SimpleVector(
getBackTireLeft().getTransformedCenter());
SimpleVector vBackRight  = new SimpleVector(
getBackTireRight().getTransformedCenter());
SimpleVector vBody       = new SimpleVector(
getBody().getTransformedCenter());
vFrontLeft.add(new SimpleVector(0,-disFrontLeftBottom,0));
vFrontRight.add(new SimpleVector(0,-disFrontRightBottom,0));
vBackLeft.add(new SimpleVector(0,-disBackLeftBottom,0));
vBackRight.add(new SimpleVector(0,-disBackRightBottom,0));
vBody.add(new SimpleVector(0,-disCenterBottom,0));
float tireFrontLeft  = ground.calcMinDistance(vFrontLeft,v,dis*10);
float tireFrontRight = ground.calcMinDistance(vFrontRight,v,dis*10);
float tireBackLeft   = ground.calcMinDistance(vBackLeft,v,dis*10);
float tireBackRight  = ground.calcMinDistance(vBackRight,v,dis*10);
float bodyDis        = ground.calcMinDistance(vBody,v,dis*10);
if (tireFrontLeft !=Object3D.COLLISION_NONE&&
tireFrontRight!=Object3D.COLLISION_NONE&&
tireBackLeft  !=Object3D.COLLISION_NONE&&
tireBackRight !=Object3D.COLLISION_NONE) {
good = true;

//Vert Balance, rotation on X
double angleFront=((tireFrontRight+tireFrontLeft)/2-bodyDis);
    double as=(angleFront/(bodyDisToFront))%1;
    angleFront=Math.asin(as);
    double angleRear=-((tireBackRight+tireBackLeft)/2-bodyDis);
        as=(angleRear/(bodyDisToBack))%1;
        angleRear=Math.asin(as);
    float rot=(float) ((angleFront+angleRear)/2);
        body.rotateX(rot);
       
    //Hori Balance, rotation on Z
        double angleLeft=((tireFrontLeft+tireBackLeft)/2-bodyDis);
        as=(angleLeft/(bodyDisToLeft))%1;
        angleLeft=Math.asin(as);
    double angleRight=-((tireBackRight+tireFrontRight)/2-bodyDis);
        as=(angleRight/(bodyDisToRight))%1;
        angleRight=Math.asin(as);
    rot=(float) ((angleLeft+angleRight)/2);
        body.rotateZ(rot);
       
        //move
        body.translate(0,bodyDis,0);
                     return good;
}

Pages: [1]