Ejemplo n.º 1
0
void Spaceman::updateAction(const vector<GravObject*> *g_objs) {
    switch (_action) {
        case Action::STILL: {
            _action = Action::RUNNING;
            break;
        }

        case Action::RUNNING: {
            if (_on_planet_region == -1) {
                // FIXME
                // float speed = ((_facing == RIGHT) ? _running_speed : -_running_speed)/((_on_planet->getWidth()/150)*2);
                // Point2D pt = Math::rotatePtAroundPt(_on_planet->getCentre(), getCentre(), speed);
                //
                // setX(pt.getX() - (getWidth()/2));
                // setY(pt.getY() - (getHeight()/2));

            }
            else {
                if (_facing == RIGHT) {
                    setX(getX() + (_running_speed*_running_unit_vector.getX()));
                    setY(getY() + (_running_speed*_running_unit_vector.getY()));
                }
                else {
                    setX(getX() + (_running_speed*-_running_unit_vector.getX()));
                    setY(getY() + (_running_speed*-_running_unit_vector.getY()));
                }
            }
            break;
        }

        case Action::FLYING:
        case Action::LANDING: {
            // Convert angle to anti-clockwise direction
            float angle = Math::normalizeAngle(180 - getRotAngle(), 0, 360);

            // Thrust up
            Physics::genInitVel(*this, angle, PLAYER_THRUST_MIN_INIT_V, PLAYER_THRUST_MAX_INIT_V, PLAYER_THRUST_OFFSET);
            resetTime(Game::getElapsedTime());
            _trail.buildTrail(_base.getX(), 
                              _base.getY(), 
                              360 - getRotAngle(), 
                              _colour_theme);
            break;
        }
    }

    // Animate
    if (_frame < 29)
        _frame++;
    else
        _frame = 0;
}
Ejemplo n.º 2
0
void Spaceman::draw(PlayerRenderer* rend, TextureHandler *tex) {
    // Render
    rend->render(getVerticeData(),
                 Colour::getColour(_colour_theme),
                 TextureHandler::calcTexVerticesFromSpritesheet(1925, 2760, 5, 6, _frame, (_facing != RIGHT)),
                 tex->getTex(TEX_SPACEMAN), 
                 getRotAngle(),
                 GL_TRIANGLE_STRIP);
}
Ejemplo n.º 3
0
void RigidBody::processBodyRot_() {
	if(!body_) {
		return;
	}

	float rx = getRotX();
	float ry = getRotY();
	float rz = getRotZ();
	float ra = getRotAngle();

	// Stop setting invalid rotations that crash bullet...
	if(rx == 0.0 && ry == 0.0 && rz == 0.0) {
		rx = 1.0;
	}

	btTransform xform;
	xform = getBody().getWorldTransform();
	xform.setRotation(btQuaternion (btVector3(rx, ry, rz), ra*(PI/180)));
	//((btPairCachingGhostObject*)body_)->setWorldTransform (xform);
	body_->setWorldTransform (xform);
}
Ejemplo n.º 4
0
void cSphere::render(float rotAngle)
{
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();

	glEnable(GL_TEXTURE_2D);
	glEnable(GL_NORMALIZE);
	glEnable(GL_COLOR_MATERIAL);


	glBindTexture(GL_TEXTURE_2D, m_TextureID);

	glTranslatef(m_Position.x, m_Position.y, m_Position.z);
	glRotatef(90.0f, 1.0f, 0.0f, 0.0f); // Rotate Sphere to take account of gluSphere caps
	glRotatef(getRotAngle(), 0, 0, 1);	// Rotation is now on z rather than Y to make sphere spin

	gluSphere(quad, sRadius, sSlices, sStacks);

	glDisable(GL_NORMALIZE);
	glDisable(GL_COLOR_MATERIAL);
	glDisable(GL_TEXTURE_2D);

	glPopMatrix();
}
task main()
{
	initializeRobot();
//	waitForStart();
	ClearTimer(T1);
  ClearTimer(T2);

  while (true) {
  	getJoyValues();
   	DriveUpdate();

   	//dangerous
    //motor[Mtr_ParaLift]   = armjy1;
    //motor[Mtr_RingSlider] = armjy2;

  	//if(armButton4) putPullSliderAllOut();
   	//if(armButton2) putPullSliderAllIn();
   	//if(armButton3) adjustPullSlider(-1.0);
   	//if(armButton1) adjustPullSlider(1.0);

   	//slider control on arm right joystick
   	//pulling forward backward
   	if(abs(armjy2)>0) {
   		f_pullTarget+=0.002*armjy2;
   		putPullSliderTo(f_pullTarget);
   		B_adjustingPull=true;
   	}
   	else {
   		f_pullTarget=getPullSliderPosition();
   		B_adjustingPull=false;
   	}

   	if(abs(armjx2)>0) {
   		f_rotTarget+=0.002*armjx2;
   		putRotServoTo(f_rotTarget);
   		B_adjustingRot=true;
   	}
   	else {
   		f_rotTarget=getRotAngle();
   		B_adjustingRot=false;
   	}
   	//arm control of ringslider
   	//would be better with encoder!
   	motor[Mtr_RingSlider] = armjy1;

   	//driver control of parallel lifter and emergency
   	if(driveButton9) globalAbort();//!!!!!!!!!!!!!!
   	///////////////////////////////////////////////////////
   	if(driveButton4) { B_liftTargetSet=true; f_targetHeight=36.0; }
   	if(driveButton3) { B_liftTargetSet=true; f_targetHeight=18.0; }
   	if(driveButton2) { B_liftTargetSet=true; f_targetHeight=0.0; }
   	if(driveButton1) { B_liftTargetSet=false; }

 		//actual control of lift motors is here
   	if(B_liftTargetSet){
   		if(PL_set_height_target(f_targetHeight)==0){
   			B_liftTargetSet=false; //reached target
   		};
   	}
   	else{
   		if(driveTopHat==0)  motor[Mtr_ParaLift]= 100;
   		if(driveTopHat==4)  motor[Mtr_ParaLift]=-100;
   		if(driveTopHat==-1) motor[Mtr_ParaLift]=   0;
   	}
  }
}