示例#1
0
        public void Load(Demo demo, PhysicsSimulator physicsSimulator)
        {
            const int offset = 2;

            //Body
            const int bodyYRadius = 34;
            const int bodyXRadius = 18;

            _bodyBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, bodyXRadius, bodyYRadius, 1);
            _bodyBody.Position = _position;
            _bodyGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _bodyBody, bodyXRadius, bodyYRadius, 14, 0);
            demo.AddEllipseToCanvas(_bodyBody, Colors.White, bodyXRadius, bodyYRadius);

            //Head
            const int headYRadius = 14;
            const int headXRadius = 10;

            _headBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, headXRadius, headYRadius, 1);
            _headBody.Position = _position - new Vector2(0, bodyYRadius + headYRadius + offset);
            _headGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _headBody, headXRadius, headYRadius, 10);
            demo.AddEllipseToCanvas(_headBody, Colors.White, headXRadius, headYRadius);

            //Left upper arm
            const int leftUpperArmYRadius = 10;
            const int leftUpperArmXRadius = 6;

            _leftUpperArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftUpperArmXRadius, leftUpperArmYRadius, 1);
            _leftUpperArmBody.Position = _bodyBody.Position - new Vector2(bodyXRadius + leftUpperArmXRadius + offset, bodyYRadius / 2f);
            _leftUpperArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftUpperArmBody, leftUpperArmXRadius, leftUpperArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftUpperArmBody, Colors.White, leftUpperArmXRadius, leftUpperArmYRadius);

            //Right upper arm
            const int rightUpperArmYRadius = 10;
            const int rightUpperArmXRadius = 6;

            _rightUpperArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightUpperArmXRadius, rightUpperArmYRadius, 1);
            _rightUpperArmBody.Position = _bodyBody.Position + new Vector2(bodyXRadius + rightUpperArmXRadius + offset, -bodyYRadius / 2f);
            _rightUpperArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightUpperArmBody, rightUpperArmXRadius, rightUpperArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightUpperArmBody, Colors.White, rightUpperArmXRadius, rightUpperArmYRadius);

            //Left arm
            const int leftArmYRadius = 12;
            const int leftArmXRadius = 6;

            _leftArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftArmXRadius, leftArmYRadius, 1);
            _leftArmBody.Position = _leftUpperArmBody.Position + new Vector2(0, leftArmYRadius + leftArmYRadius);
            _leftArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftArmBody, leftArmXRadius, leftArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftArmBody, Colors.White, leftArmXRadius, leftArmYRadius);

            //Right arm
            const int rightArmYRadius = 12;
            const int rightArmXRadius = 6;

            _rightArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightArmXRadius, rightArmYRadius, 1);
            _rightArmBody.Position = _rightUpperArmBody.Position + new Vector2(0, rightArmYRadius + rightArmYRadius);
            _rightArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightArmBody, rightArmXRadius, rightArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightArmBody, Colors.White, rightArmXRadius, rightArmYRadius);

            //Left thigh
            const int leftThighYRadius = 12;
            const int leftThighXRadius = 6;

            _leftThighBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftThighXRadius, leftThighYRadius, 1);
            _leftThighBody.Position = _bodyBody.Position + new Vector2(bodyXRadius, bodyYRadius + leftThighYRadius);
            _leftThighGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftThighBody, leftThighXRadius, leftThighYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftThighBody, Colors.White, leftThighXRadius, leftThighYRadius);

            //right thigh
            const int rightThighYRadius = 12;
            const int rightThighXRadius = 6;

            _rightThighBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightThighXRadius, rightThighYRadius, 1);
            _rightThighBody.Position = _bodyBody.Position + new Vector2(-bodyXRadius, bodyYRadius + rightThighYRadius);
            _rightThighGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightThighBody, rightThighXRadius, rightThighYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightThighBody, Colors.White, rightThighXRadius, rightThighYRadius);

            //Left calf
            const int leftCalfYRadius = 12;
            const int leftCalfXRadius = 6;

            _leftCalfBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftCalfXRadius, leftCalfYRadius, 1);
            _leftCalfBody.Position = _leftThighBody.Position + new Vector2(0, leftThighYRadius + leftCalfYRadius);
            _leftCalfGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftCalfBody, leftCalfXRadius, leftCalfYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftCalfBody, Colors.White, leftCalfXRadius, leftCalfYRadius);

            //Right calf
            const int rightCalfYRadius = 12;
            const int rightCalfXRadius = 6;

            _rightCalfBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightCalfXRadius, rightCalfYRadius, 1);
            _rightCalfBody.Position = _rightThighBody.Position + new Vector2(0, rightThighYRadius + rightCalfYRadius);
            _rightCalfGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightCalfBody, rightCalfXRadius, rightCalfYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightCalfBody, Colors.White, rightCalfXRadius, rightCalfYRadius);

            //Create joints
            //Head -> body
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _headBody, new Vector2(0, headYRadius), _bodyBody, new Vector2(0, -bodyYRadius));

            //Left upper arm -> body
            PinJoint p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftUpperArmBody, new Vector2(0, -leftUpperArmYRadius), _bodyBody, new Vector2(-bodyXRadius / 2f, -bodyYRadius + bodyXRadius / 2));
            p.TargetDistance = 3;

            //Right upper arm -> body
            p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightUpperArmBody, new Vector2(0, -rightUpperArmYRadius), _bodyBody, new Vector2(bodyXRadius / 2f, -bodyYRadius + bodyXRadius / 2));
            p.TargetDistance = 3;

            //Left arm -> left upper arm
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftArmBody, new Vector2(0, -leftArmYRadius), _leftUpperArmBody, new Vector2(0, leftUpperArmYRadius));

            //Right arm -> right upper arm
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightArmBody, new Vector2(0, -rightArmYRadius), _rightUpperArmBody, new Vector2(0, rightUpperArmYRadius));

            //Left thigh -> body
            p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftThighBody, new Vector2(0, -leftThighYRadius), _bodyBody, new Vector2(bodyXRadius / 2f, bodyYRadius - bodyXRadius / 2));
            p.TargetDistance = 3;

            //Right thigh -> body
            p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightThighBody, new Vector2(0, -rightThighYRadius), _bodyBody, new Vector2(-bodyXRadius / 2f, bodyYRadius - bodyXRadius / 2));
            p.TargetDistance = 3;

            //Left calf -> left thigh
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftCalfBody, new Vector2(0, -leftCalfYRadius), _leftThighBody, new Vector2(0, leftThighYRadius));

            //Right calf -> right thigh
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightCalfBody, new Vector2(0, -rightCalfYRadius), _rightThighBody, new Vector2(0, rightThighYRadius));
        }
示例#2
0
        public void Load(Demo demo, PhysicsSimulator physicsSimulator)
        {
            const int offset = 2;

            //Body
            const int bodyYRadius = 34;
            const int bodyXRadius = 18;

            _bodyBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, bodyXRadius, bodyYRadius, 1);
            _bodyBody.Position = _position;
            _bodyGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _bodyBody, bodyXRadius, bodyYRadius, 14, 0);
            demo.AddEllipseToCanvas(_bodyBody, Colors.White, bodyXRadius, bodyYRadius);

            //Head
            const int headYRadius = 14;
            const int headXRadius = 10;

            _headBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, headXRadius, headYRadius, 1);
            _headBody.Position = _position - new Vector2(0, bodyYRadius + headYRadius + offset);
            _headGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _headBody, headXRadius, headYRadius, 10);
            demo.AddEllipseToCanvas(_headBody, Colors.White, headXRadius, headYRadius);

            //Left upper arm
            const int leftUpperArmYRadius = 10;
            const int leftUpperArmXRadius = 6;

            _leftUpperArmBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftUpperArmXRadius, leftUpperArmYRadius, 1);
            _leftUpperArmBody.Position = _bodyBody.Position - new Vector2(bodyXRadius + leftUpperArmXRadius + offset, bodyYRadius / 2f);
            _leftUpperArmGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftUpperArmBody, leftUpperArmXRadius, leftUpperArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftUpperArmBody, Colors.White, leftUpperArmXRadius, leftUpperArmYRadius);

            //Right upper arm
            const int rightUpperArmYRadius = 10;
            const int rightUpperArmXRadius = 6;

            _rightUpperArmBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightUpperArmXRadius, rightUpperArmYRadius, 1);
            _rightUpperArmBody.Position = _bodyBody.Position + new Vector2(bodyXRadius + rightUpperArmXRadius + offset, -bodyYRadius / 2f);
            _rightUpperArmGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightUpperArmBody, rightUpperArmXRadius, rightUpperArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightUpperArmBody, Colors.White, rightUpperArmXRadius, rightUpperArmYRadius);

            //Left arm
            const int leftArmYRadius = 12;
            const int leftArmXRadius = 6;

            _leftArmBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftArmXRadius, leftArmYRadius, 1);
            _leftArmBody.Position = _leftUpperArmBody.Position + new Vector2(0, leftArmYRadius + leftArmYRadius);
            _leftArmGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftArmBody, leftArmXRadius, leftArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftArmBody, Colors.White, leftArmXRadius, leftArmYRadius);

            //Right arm
            const int rightArmYRadius = 12;
            const int rightArmXRadius = 6;

            _rightArmBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightArmXRadius, rightArmYRadius, 1);
            _rightArmBody.Position = _rightUpperArmBody.Position + new Vector2(0, rightArmYRadius + rightArmYRadius);
            _rightArmGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightArmBody, rightArmXRadius, rightArmYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightArmBody, Colors.White, rightArmXRadius, rightArmYRadius);

            //Left thigh
            const int leftThighYRadius = 12;
            const int leftThighXRadius = 6;

            _leftThighBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftThighXRadius, leftThighYRadius, 1);
            _leftThighBody.Position = _bodyBody.Position + new Vector2(bodyXRadius, bodyYRadius + leftThighYRadius);
            _leftThighGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftThighBody, leftThighXRadius, leftThighYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftThighBody, Colors.White, leftThighXRadius, leftThighYRadius);

            //right thigh
            const int rightThighYRadius = 12;
            const int rightThighXRadius = 6;

            _rightThighBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightThighXRadius, rightThighYRadius, 1);
            _rightThighBody.Position = _bodyBody.Position + new Vector2(-bodyXRadius, bodyYRadius + rightThighYRadius);
            _rightThighGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightThighBody, rightThighXRadius, rightThighYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightThighBody, Colors.White, rightThighXRadius, rightThighYRadius);

            //Left calf
            const int leftCalfYRadius = 12;
            const int leftCalfXRadius = 6;

            _leftCalfBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftCalfXRadius, leftCalfYRadius, 1);
            _leftCalfBody.Position = _leftThighBody.Position + new Vector2(0, leftThighYRadius + leftCalfYRadius);
            _leftCalfGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftCalfBody, leftCalfXRadius, leftCalfYRadius, 8, 0);
            demo.AddEllipseToCanvas(_leftCalfBody, Colors.White, leftCalfXRadius, leftCalfYRadius);

            //Right calf
            const int rightCalfYRadius = 12;
            const int rightCalfXRadius = 6;

            _rightCalfBody          = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightCalfXRadius, rightCalfYRadius, 1);
            _rightCalfBody.Position = _rightThighBody.Position + new Vector2(0, rightThighYRadius + rightCalfYRadius);
            _rightCalfGeom          = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightCalfBody, rightCalfXRadius, rightCalfYRadius, 8, 0);
            demo.AddEllipseToCanvas(_rightCalfBody, Colors.White, rightCalfXRadius, rightCalfYRadius);

            //Create joints
            //Head -> body
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _headBody, new Vector2(0, headYRadius), _bodyBody, new Vector2(0, -bodyYRadius));

            //Left upper arm -> body
            PinJoint p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftUpperArmBody, new Vector2(0, -leftUpperArmYRadius), _bodyBody, new Vector2(-bodyXRadius / 2f, -bodyYRadius + bodyXRadius / 2));

            p.TargetDistance = 3;

            //Right upper arm -> body
            p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightUpperArmBody, new Vector2(0, -rightUpperArmYRadius), _bodyBody, new Vector2(bodyXRadius / 2f, -bodyYRadius + bodyXRadius / 2));
            p.TargetDistance = 3;

            //Left arm -> left upper arm
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftArmBody, new Vector2(0, -leftArmYRadius), _leftUpperArmBody, new Vector2(0, leftUpperArmYRadius));

            //Right arm -> right upper arm
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightArmBody, new Vector2(0, -rightArmYRadius), _rightUpperArmBody, new Vector2(0, rightUpperArmYRadius));

            //Left thigh -> body
            p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftThighBody, new Vector2(0, -leftThighYRadius), _bodyBody, new Vector2(bodyXRadius / 2f, bodyYRadius - bodyXRadius / 2));
            p.TargetDistance = 3;

            //Right thigh -> body
            p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightThighBody, new Vector2(0, -rightThighYRadius), _bodyBody, new Vector2(-bodyXRadius / 2f, bodyYRadius - bodyXRadius / 2));
            p.TargetDistance = 3;

            //Left calf -> left thigh
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftCalfBody, new Vector2(0, -leftCalfYRadius), _leftThighBody, new Vector2(0, leftThighYRadius));

            //Right calf -> right thigh
            JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightCalfBody, new Vector2(0, -rightCalfYRadius), _rightThighBody, new Vector2(0, rightThighYRadius));
        }