Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }