示例#1
0
Team::Team(Stage* stage, const Team& team)
	: QObject(stage),
	color_(team.color()),
	goals_(team.goals()),
	yellowCards_(team.yellowCards()),
	redCards_(team.redCards())
{
	stage_ = stage;
	for(int i=0; i<team.size(); i++){
		Robot* r = new Robot( *(team.at(i)) );
		r->setTeam(this);
		r->setStage(stage);
		this->push_back(r);
	}
	
}
void Controller2::step() {
	CXBOXController* controller = new CXBOXController(id);
	qreal sx = 0.0, sy = 0.0, dx = 0.0, dy = 0.0, sBoost = 1.0, aBoostAng = 1.0;
	qint32 dribSign = 1;

	if(controller->IsConnected()){
		//rotation
		qreal t_dx = controller->ThumbRX();
		qreal t_dy = controller->ThumbRY();

		if(t_dx * t_dx + t_dy * t_dy < .05) {
			t_dx = 0;
			t_dy = 0;
		}
		if(controller->ButtonPressed(XINPUT_GAMEPAD_RIGHT_THUMB)) {
			aBoostAng = 5.0;
		} else {
			aBoostAng = 1.0;
		}
		move->setSpeedAngular(-t_dx * 5);
		//steer->setRate(0.06 * aBoostAng);

		//movement
		sx = controller->ThumbLX();
		sy = controller->ThumbLY();
		// dead zone
		if(sx * sx + sy * sy < .05) {
			sx = 0;
			sy = 0;
		}

		//direcionais
		if(controller->ButtonPressed(XINPUT_GAMEPAD_DPAD_DOWN)) {
			sx = 0;
			sy = -1;
		}
		if(controller->ButtonPressed(XINPUT_GAMEPAD_DPAD_UP)) {
			sx = 0;
			sy = 1;
		}
		if(controller->ButtonPressed(XINPUT_GAMEPAD_DPAD_LEFT)) {
			sx = -1;
			sy = 0;
		}
		if(controller->ButtonPressed(XINPUT_GAMEPAD_DPAD_RIGHT)) {
			sx = 1;
			sy = 0;
		}

		if(controller->ButtonPressed(XINPUT_GAMEPAD_LEFT_THUMB)) {
			sBoost = 10.0;
		} else {
			sBoost = 1.0;
		}
		//steer->setAll(sx * sBoost * speed, sy * sBoost * speed, dx, dy);
		qreal theta = robot()->orientation();
		qreal ssx = sx * cos(theta) - sy * sin(theta);
		qreal ssy = sx * sin(theta) + sy * cos(theta);
		//steer->setAll(ssx * sBoost * speed, ssy * sBoost * speed, dx, dy);

		move->setSpeeds(ssy * sBoost * speed, - ssx * sBoost * speed);

		//dribbler
		if(controller->ButtonPressed(XINPUT_GAMEPAD_LEFT_SHOULDER)) {
			dribSign = -1;
		} else {
			dribSign = 1;
		}
		robot()->dribble(dribSign * controller->TriggerL());

		//kicker
		if(controller->ButtonPressed(XINPUT_GAMEPAD_RIGHT_SHOULDER)) {
			robot()->kick(controller->TriggerR());
		} else {
			robot()->kick(0.0);
		}
		//steer->step();

		//blocker
		if(controller->ButtonPressed(XINPUT_GAMEPAD_A)) {
			bl->step();
		}
		
		else if(controller->ButtonPressed(XINPUT_GAMEPAD_B)) {
			Team* team = robot()->team();
			int id = robot()->id();
			id++;
			id%=team->size();
			this->setRobot(team->at(id));
		}

		//goalkeeper
		else if(controller->ButtonPressed(XINPUT_GAMEPAD_X)) {
			gk->step();
		}

		//zickler
		else if(controller->ButtonPressed(XINPUT_GAMEPAD_Y)) {
			zk->step();
		}
		else if(controller->ButtonPressed(XINPUT_GAMEPAD_START)) {
			kt->setPoint(*(robot()->enemyGoal()));
			kt->step();
		}
		else if(controller->ButtonPressed(XINPUT_GAMEPAD_BACK)) {
			at->step();
		}

		else 
			move->step();
	}
}