예제 #1
0
  public PlayerSpring(Wall w) {
    this.wall = w;
    points = new Points();
    points.add(lh = new XYPoint(-0.5, 2.0));
    points.add(le = new XYPoint(-0.3, 1.7));
    points.add(ls = new XYPoint(-0.2, 1.58));

    points.add(rh = new XYPoint(0.5, 2.0));
    points.add(re = new XYPoint(0.3, 1.7));
    points.add(rs = new XYPoint(0.2, 1.58));

    points.add(n = new XYPoint(0.0, 1.58));
    points.add(p = new XYPoint(0.0, 1.0));

    points.add(rn = new XYPoint(0.2, 0.7));
    points.add(rf = new XYPoint(0.2, 0.2));

    points.add(ln = new XYPoint(-0.2, 0.7));
    points.add(lf = new XYPoint(-0.2, 0.2));

    double k = 0.4;

    springs = new ArrayList<Spring>();

    springs.add(lClav = new Spring(0.2, k, n, ls, points));
    springs.add(lHum = new Spring(0.3, k, ls, le, points));
    springs.add(lRad = new Spring(0.33, k, le, lh, points));

    springs.add(rClav = new Spring(0.2, k, n, rs, points));
    springs.add(rHum = new Spring(0.3, k, rs, re, points));
    springs.add(rRad = new Spring(0.33, k, re, rh, points));

    springs.add(Lum1 = new Spring(0.58, k, n, p, points));
    springs.add(Lum2 = new Spring(0.58, k, p, n, points));

    springs.add(lFem = new Spring(0.44, k, p, ln, points));
    springs.add(lTib = new Spring(0.5, k, ln, lf, points));

    springs.add(rFem = new Spring(0.44, k, p, rn, points));
    springs.add(rTib = new Spring(0.5, k, rn, rf, points));

    joints = new ArrayList<Joint>();
    joints.add(new Joint(Lum2, lClav, Math.PI / 2.0, Math.PI / 2.0));
    joints.add(new Joint(Lum2, rClav, -Math.PI / 2.0, -Math.PI / 2.0));

    joints.add(new Joint(rClav, rHum, -Math.PI / 2.0, Math.PI / 2.0));
    joints.add(new Joint(rHum, rRad, 0.0, Math.PI / 2.0));

    joints.add(new Joint(lClav, lHum, -Math.PI / 2.0, Math.PI / 2.0));
    joints.add(new Joint(lHum, lRad, -Math.PI / 2.0, 0.0));

    joints.add(new Joint(Lum1, rFem, 0.1, 0.4));
    joints.add(new Joint(rFem, rTib, -0.2, 0.1));

    joints.add(new Joint(Lum1, lFem, -0.4, -0.1));
    joints.add(new Joint(lFem, lTib, -0.1, 0.2));

    points.translate(new XYPoint(5.0, 1.0));

    forces = new Points(points.size());
    velocity = new Points(points.size());
    velocity.zero();

    lhf = new XYPoint(0.0, 0.0);
    rhf = new XYPoint(0.0, 0.0);
    lff = new XYPoint(0.0, 0.0);
    rff = new XYPoint(0.0, 0.0);
    bf = new XYPoint(0.0, 0.0);

    leftaction = false;

    for (Spring s : springs) {
      XYPoint p1 = points.get(s.p1index);
      XYPoint p2 = points.get(s.p2index);
      XYPoint dif1 = s.p1distance().scale(0.6);
      XYPoint dif2 = s.p1distance().scale(-0.3);
      p2.translate(dif1);
      p1.translate(dif2);
    }

    for (Joint j : joints) {
      XYPoint v1 = j.s1.vector();
      XYPoint v2 = j.s2.vector();

      double angle = v1.angle(v2);

      if (angle < j.mina) {
        XYPoint v2r = v2.rotate(-(angle - j.mina));
        points.get(j.s2.p2index).set(points.get(j.s2.p1index).add(v2r));
      } else if (angle > j.maxa) {
        XYPoint v2r = v2.rotate((j.maxa - angle));
        points.get(j.s2.p2index).set(points.get(j.s2.p1index).add(v2r));
      }
    }
  }
예제 #2
0
  public void update(GameComponent canvas, Wall wall) {
    /*
     * forces.zero(); for (XYPoint f : forces) { f.translate(new
     * XYPoint(0.0,-0.001)); }
     *
     * forces.get(points.indexOf(lh)).translate(lhf); lhf.zero();
     *
     * // spring force for (Spring s : springs) {
     * forces.get(s.p1index).translate(s.p1force());
     * forces.get(s.p2index).translate(s.p2force()); }
     *
     * // damperner for (int i = 0; i< springs.size(); i++) { Spring s =
     * springs.get(i); XYPoint v1 = forces.get(s.p1index); XYPoint v2 =
     * forces.get(s.p2index); XYPoint vel1 = velocity.get(s.p1index);
     * XYPoint vel2 = velocity.get(s.p2index);
     *
     * XYPoint dif = vel1.sub(vel2); XYPoint v1d = dif.scale(0.1); XYPoint
     * v2d = dif.scale(-0.1); v1.translate(v2d); v2.translate(v1d); }
     *
     *
     * for (int i = 0; i< velocity.size(); i++) {
     * velocity.get(i).translate(forces.get(i)); }
     *
     *
     *
     *
     * for (int i = 0; i< points.size(); i++) { XYPoint p = points.get(i);
     * p.translate(velocity.get(i)); if (p.y < 0.2) { p.y = 0.2; } }
     */

    if (lhf.length() > 0.0) {
      movelim(lhf, lh, le, ls, lRad, lHum);
    }

    if (rhf.length() > 0.0) {
      movelim(rhf, rh, re, rs, rRad, rHum);
    }

    if (lff.length() > 0.0) {
      movelim(lff, lf, ln, p, lFem, lTib);
    }

    if (rff.length() > 0.0) {
      movelim(rff, rf, rn, p, rFem, rTib);
    }

    if (bf.length() > 0.0) {
      if (canmovelim(bf, rh, re, rs, rRad, rHum)
          && canmovelim(bf, lf, ln, p, lFem, lTib)
          && canmovelim(bf, lh, le, ls, lRad, lHum)
          && canmovelim(bf, rf, rn, p, rFem, rTib)) {
        domovelim(bf, rh, re, rs, rRad, rHum);
        domovelim(bf, lf, ln, p, lFem, lTib);
        domovelim(bf, lh, le, ls, lRad, lHum);
        domovelim(bf, rf, rn, p, rFem, rTib);
        p.translate(bf);
        n.translate(bf);
        ls.translate(bf);
        rs.translate(bf);
        bf.zero();
      }
    }

    /*
     * // reset the lengths for (Spring s : springs) { XYPoint p1 =
     * points.get(s.p1index); XYPoint p2 = points.get(s.p2index); XYPoint
     * dif1 = s.p1distance().scale(0.6); XYPoint dif2 =
     * s.p1distance().scale(-0.3); p2.translate(dif1); p1.translate(dif2); }
     *
     * // limit the angles
     *
     * for (Joint j : joints) { XYPoint v1 = j.s1.vector(); XYPoint v2 =
     * j.s2.vector();
     *
     * double angle = v1.angle(v2);
     *
     *
     * if (angle < j.mina) { XYPoint v2r = v2.rotate(-(angle-j.mina));
     * points.get(j.s2.p2index).set(points.get(j.s2.p1index).add(v2r)); }
     * else if (angle > j.maxa) { XYPoint v2r = v2.rotate((j.maxa-angle));
     * points.get(j.s2.p2index).set(points.get(j.s2.p1index).add(v2r)); } }
     */

  }