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)); } } }
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)); } } */ }