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); }
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)}}; } }
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); } }
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; }
std::pair<bool, vector2F> JoystickMethod::getAimDir(const vector2F&) { vector2F v2f = getMovementVector(); if (v2f.getMagnitude()>0.2) return {false,v2f}; return {false,{0,0}}; }