public override void PlayerControl(Input input) { //fistNode.movement.active = false; //fistNode.body.velocity = fistNode.body.effvelocity * nodeKnockback; Vector2R newstickpos = input.GetRightStick().toV2R(); Vector2R relVel = newstickpos - oldstickpos; if (state == fistmode.ready) { fistNode.body.pos = parent.body.pos; fistNode.body.orient = parent.body.orient; //if stick is moving away from center of stick if (newstickpos.LengthSquared() > oldstickpos.LengthSquared()) { //if stick is moving fast enough float len = relVel.Length(); if (relVel.Length() > 0.2f) //deadzone { state = fistmode.punching; float power = (float)Math.Log((double)len + 2.0, 2.0) / 2f; //Console.WriteLine(power); VMath.NormalizeSafe(ref relVel); relVel *= power; //Console.WriteLine(relVel.X + " : " + relVel.Y); //fistNode.body.ApplyForce(relVel); fistNode.body.velocity = relVel * 10f; fistNode.body.orient = VMath.VectorToAngle(relVel); } } } else if (state == fistmode.punching) { //check if fully punched. if (Vector2R.Distance(fistNode.body.pos, parent.body.pos) > fistReach) { state = fistmode.retracting; } } else if (state == fistmode.retracting) { //fistNode.body.pos = Vector2.Lerp(fistNode.body.pos, parent.body.pos, 0.1f); //Vector2 vel = (parent.body.pos - fistNode.body.pos); //VMath.NormalizeSafe(ref vel); //vel *= 1; //fistNode.body.velocity = vel; Vector2R vel = (parent.body.pos - fistNode.body.pos); //if (vel.Length() < 5) //{ VMath.NormalizeSafe(ref vel); vel *= 20; //} fistNode.body.velocity = vel; if (Vector2R.DistanceSquared(fistNode.body.pos, parent.body.pos) < 50 * 50) { state = fistmode.ready; } } //if (state != fistmode.ready) // Console.WriteLine(state); oldstickpos = newstickpos; }
public override void PlayerControl(Input input) { //fistNode.movement.active = false; //fistNode.body.velocity = fistNode.body.effvelocity * nodeKnockback; Vector2 newstickpos = input.GetRightStick(); Vector2 relVel = newstickpos - oldstickpos; if (state == fistmode.ready) { fistNode.body.pos = parent.body.pos; fistNode.body.orient = parent.body.orient; //if stick is moving away from center of stick if (newstickpos.LengthSquared() > oldstickpos.LengthSquared()) { //if stick is moving fast enough float len = relVel.Length(); if (relVel.Length() > 0.2f) //deadzone { state = fistmode.punching; float power = (float)Math.Log((double)len + 2.0, 2.0) / 2f; //Console.WriteLine(power); VMath.NormalizeSafe(ref relVel); relVel *= power; //Console.WriteLine(relVel.X + " : " + relVel.Y); //fistNode.body.ApplyForce(relVel); fistNode.body.velocity = relVel * 10f; fistNode.body.orient = VMath.VectorToAngle(relVel); } } } else if (state == fistmode.punching) { //check if fully punched. if (Vector2.Distance(fistNode.body.pos, parent.body.pos) > fistReach) { state = fistmode.retracting; } } else if (state == fistmode.retracting) { //fistNode.body.pos = Vector2.Lerp(fistNode.body.pos, parent.body.pos, 0.1f); //Vector2 vel = (parent.body.pos - fistNode.body.pos); //VMath.NormalizeSafe(ref vel); //vel *= 1; //fistNode.body.velocity = vel; Vector2 vel = (parent.body.pos - fistNode.body.pos); //if (vel.Length() < 5) //{ VMath.NormalizeSafe(ref vel); vel *= 20; //} fistNode.body.velocity = vel; if (Vector2.DistanceSquared(fistNode.body.pos, parent.body.pos) < 50 * 50) { state = fistmode.ready; } } //if (state != fistmode.ready) // Console.WriteLine(state); oldstickpos = newstickpos; }