コード例 #1
0
ファイル: JoystickMethod.cpp プロジェクト: nstbayless/sdlgame
bool JoystickMethod::getAction(action a) {
	//menu selection:
	vector2F mv=getMovementVector();
	vector2F opt_move = mv*(!axis_opt_triggered);
	bool to_return = false;
	if (a==OPTION_UP)
		to_return = opt_move.getY()<-MIN_TRIGGER_OPTION_Y;
	if (a==OPTION_DOWN)
		to_return = opt_move.getY()>MIN_TRIGGER_OPTION_Y;
	if (a==OPTION_LEFT)
		to_return = opt_move.getX()<-MIN_TRIGGER_OPTION_X;
	if (a==OPTION_RIGHT)
		to_return = opt_move.getX()>MIN_TRIGGER_OPTION_X;
	if (a>=OPTION_UP&&a<=OPTION_RIGHT){
		//reset trigger if joystick neutral:
		if (mv.getMagnitude()<=MIN_TRIGGER_OPTION_Y
				&&mv.getMagnitude()<=MIN_TRIGGER_OPTION_X)
			axis_opt_triggered=false;
		//set triggered if option moves.
		//(this prevents option from repeatedly moving each frame.)
		if (to_return)
			axis_opt_triggered=true;
		return to_return;
	}
	//non-menu-selection:
	byte button = layout[a];
	if (a==InputMethod::DASH) //dash can be held:
		return inlib->getJoystickButtonDown(controller, button);
	if (a==InputMethod::AIM) //aim can be held:
		return inlib->getJoystickButtonDown(controller, button);
	return inlib->getJoystickButtonPressed(controller, button);
}
コード例 #2
0
ファイル: KeyboardMethod.cpp プロジェクト: nstbayless/sdlgame
std::pair<bool, vector2F> KeyboardMethod::getAimDir(const vector2F& prev) {
	if (prev.isZero()) {
		return {false,getMovementVector()};
	} else {
		vector2F v2f(getMovementVector());
		if (v2f.isZero())
			return {false,prev};
		float angle = v2f.getAngleDifference(prev);
		float aangle = fabs(angle);
		if (aangle<0.0003)
			return {false,prev};
		if (aangle<0.08)
			return {false,(v2f*.1 + prev*.9).normalize()};
		if (aangle > PI - 0.00001)
			return {false,prev};
		return {true,{0,-angle/abs(angle)}};
	}
}
コード例 #3
0
void MovingPlatform::onUpdate(sf::Time frametime)
{
    if(movementVector.x == 0 && movementVector.y == 0)
    {
        calculateMovementVector(frametime);
    }

    passedTime += frametime;
    floatPosition += getMovementVector();
    sprite.setPosition(int(floatPosition.x+0.5), int(floatPosition.y+0.5));
    shape.setPosition(int(floatPosition.x+0.5), int(floatPosition.y+0.5));

    if(passedTime > duration)
    {
        passedTime = sf::Time::Zero;
        originalx = sprite.getPosition().x;
        originaly = sprite.getPosition().y;
        goalx = -goalx;
        goaly = -goaly;
        calculateMovementVector(frametime);
    }
}
コード例 #4
0
order PossessorPlayer::getOrder() {
	if (getHUD() != nullptr && getHUD()->getUIState() != nullptr
			&& getHUD()->getUIState()->ui_active) {
		//do nothing
		return order();
	}
	assert(player);
	order o;
	auto method = player->getInputMethod();
	vector2F v = method->getMovementVector();
	if (v.getMagnitude() > 1)
		v.setMagnitude(1);
	o.movement = v;
	o.movement_magnitude_procuntual = true;
	if (method->getAction(InputMethod::AIM)) {
		o.movement=aim_dir;
		o.aim=aim_dir;
		o.stand_in_place=true;
	} else if (!o.movement.isZero()&&!o.stand_in_place) {
		aim_dir={0,0};
		aiming=false;
	}
	if (method->getAction(InputMethod::ATTACK_0)) {
		o.attack_type=0;
		o.do_attack=true;
	}
	if (method->getAction(InputMethod::ATTACK_1)) {
		o.attack_type=1;
		o.do_attack=true;
	}
	if (method->getAction(InputMethod::ATTACK_2)) {
		o.attack_type = 2;
		o.do_attack = true;
	}
	o.do_context_sensitive = method->getAction(InputMethod::CONTEXT_SENSITIVE);
	o.dash = method->getAction(InputMethod::DASH);
	return o;
}
コード例 #5
0
ファイル: JoystickMethod.cpp プロジェクト: nstbayless/sdlgame
std::pair<bool, vector2F> JoystickMethod::getAimDir(const vector2F&) {
	vector2F v2f = getMovementVector();
	if (v2f.getMagnitude()>0.2)
		return {false,v2f};
	return {false,{0,0}};
}