示例#1
0
 void bAddRope_Click(object sender, EventArgs e)
 {
     try
     {
         StaticData.ManipulationGameMode = ManipulationGameMode.AddRopesMode;
         int        nrOfMasses          = (int)UIControlsParser.GetFloat(tbNrOfMasses);
         float      springConstant      = UIControlsParser.GetFloat(tbSpringConstant);
         float      normalLength        = UIControlsParser.GetFloat(tbNormalLength);
         float      springInnerFriction = UIControlsParser.GetFloat(tbSpringInnerFriction);
         Vector3    initialPosition     = UIControlsParser.GetVector3(tbPositionRope);
         RigidType  rigidType           = (RigidType)UIControlsParser.GetIndexOfSelection(ddTypeRigidRope);
         Vector3    rigidSize           = UIControlsParser.GetVector3(tbRigidSizeRope);
         bool       isCollidable        = cbIsCollidableRope.Checked;
         SpringType type = (SpringType)UIControlsParser.GetIndexOfSelection(cbSpringType);
         if (rigidSize != Vector3.Zero)
         {
             StaticData.EngineManager.SpringsManagerEngine.AddNewService(
                 DefaultAdder.GetDefaultSpringRope(initialPosition,
                                                   StaticData.EngineManager.CookieRB.PositionXNA,
                                                   nrOfMasses,
                                                   springConstant,
                                                   normalLength,
                                                   springInnerFriction,
                                                   rigidType,
                                                   rigidSize,
                                                   isCollidable,
                                                   type));
         }
     }
     catch (Exception)
     {
     }
 }
        public CatchableRopeService(int nrOfMasses,
                                    Vector3 initialPos,
                                    float springConstant,
                                    float springLength,
                                    float springFrictionConstant,
                                    bool isCollide,
                                    Vector3 rigidSize,
                                    SpringType springType,
                                    RigidType rigidType)
            : base(springConstant, springLength, springFrictionConstant, null, springType)
        {
            this._nrOfMasses   = nrOfMasses;
            this._initialPos   = initialPos;
            this._isCollide    = isCollide;
            this._normalLength = springLength;
            this._rigidSize    = rigidSize;
            this._rigidType    = rigidType;

            this.IsVisible = false;
            this.Masses    = DefaultAdder.GetMassesRope(2, _initialPos,
                                                        null, _rigidSize,
                                                        this._normalLength, this._rigidType, this._isCollide);
            this.Masses[0].TextureType  = TextureType.Pin;
            this.Masses[0].IsDrawable   = true;
            this.Masses[0].IsFixedRigid = true;
            BuildSprings(springConstant, springLength, springFrictionConstant);
            //this.Radius = radius;
            SetPinRingFirstTime();
        }
 public TileSpringService(float springConstant, float springLength, float springFrictionConstant,
                          int numRows, int numCols, RigidType rigidType)
 //: base(springConstant, springLength, springFrictionConstant, masses, type)
 {
     this.SpringConstant         = springConstant;
     this.SpringLength           = springLength;
     this.SpringFrictionConstant = springFrictionConstant;
     this.NumRows = numRows;
     this.NumCols = numCols;
     BuildMasses(numRows, numCols, rigidType);
     BuildSprings(this.SpringConstant, this.SpringLength, this.SpringFrictionConstant);
 }
示例#4
0
        public static SpringService GetDefaultSpringRope(Vector3 initialPosition, Vector3?targetPos, int nrOfMasses,
                                                         float springConstant, float normalLength, float springInnerFriction,
                                                         RigidType type, Vector3 rigidSize, bool isCollidable, SpringType springType)
        {
            List <RigidBody> masses = GetMassesRope(nrOfMasses, initialPosition, targetPos, rigidSize, normalLength, type,
                                                    isCollidable);
            SpringService springService = new SpringService(springConstant,      // springConstant In The Rope
                                                            normalLength,        // Normal Length Of Springs In The Rope
                                                            springInnerFriction, // Spring Inner Friction Constant
                                                            masses,
                                                            springType);

            return(springService);
        }
        private RigidBody GetNewRopeRigid(RigidType rigidType, Vector3 pos)
        {
            switch (rigidType)
            {
            case RigidType.BoxRigid:
                return(DefaultAdder.GetDefaultBox(pos, Material.Wood, new Vector3(5, 5, 0), null, null,
                                                  null));

                break;

            case RigidType.SphereRigid:
                return(DefaultAdder.GetDefaultSphere(pos, Material.Wood, 5, new Vector3(0, -0f, 0), null, null));

                break;

            default:
                throw new ArgumentOutOfRangeException("rigidType");
            }
        }
        private void BuildMasses(int numRows, int numCols, RigidType rigidType)
        {
            Vector3 pos = new Vector3(50, 50, 0);

            Masses = new List <List <RigidBody> >();
            for (int i = 0; i < numRows; i++)
            {
                this.Masses.Add(new List <RigidBody>());
                this.Masses[i] = new List <RigidBody>();
                for (int j = 0; j < numCols; j++)
                {
                    pos.X += 30;
                    RigidBody newRigid = GetNewRopeRigid(rigidType, pos);
                    StaticData.EngineManager.RigidsManagerEngine.AddRigidBody(newRigid);
                    this.Masses[i].Add(newRigid);
                }
                pos.X  = 50;
                pos.Y += 30;
            }
        }
示例#7
0
        public void Read(BinaryReader reader, PmxHeaderData header)
        {
            RigidName  = reader.ReadText(header.Encoding);
            RigidNameE = reader.ReadText(header.Encoding);

            BoneId = reader.ReadPmxId(header.BoneIndexSize);

            Group     = reader.ReadByte();
            GroupFlag = reader.ReadUInt16();

            Shape = (RigidShape)reader.ReadByte();
            Size  = reader.ReadVector3();

            Pos = reader.ReadVector3();
            Rot = reader.ReadVector3();

            Mass = reader.ReadSingle();
            MovingAttenuation   = reader.ReadSingle();
            RotationAttenuation = reader.ReadSingle();
            Repulsive           = reader.ReadSingle();
            Frictional          = reader.ReadSingle();

            RigidType = (RigidType)reader.ReadByte();
        }
示例#8
0
        public static List <RigidBody> GetMassesRope(int nrOfMasses, Vector3 initialPosition, Vector3?targetPosition,
                                                     Vector3 rigidSize, float normalLength, RigidType type, bool isCollidable)
        {
            double diffX = 0, diffY = 0;

            if (targetPosition != null)
            {
                diffX = Math.Abs(targetPosition.Value.X - initialPosition.X) / nrOfMasses;
                diffY = Math.Abs(targetPosition.Value.Y - initialPosition.Y) / nrOfMasses;
            }

            Vector3 massPos = initialPosition;
            var     masses  = new List <RigidBody>();

            for (int i = 0; i < nrOfMasses; ++i)
            {
                if (type == RigidType.BoxRigid)
                {
                    masses.Add(DefaultAdder.GetDefaultBox(massPos,
                                                          Material.Rubber, rigidSize,
                                                          new Vector3(0, 0f, 0), null,
                                                          null, 0,
                                                          false));
                    masses[masses.Count - 1].IsCollidable = isCollidable;
                    masses[masses.Count - 1].TextureType  = TextureType.Transparent;
                }
                else
                {
                    masses.Add(DefaultAdder.GetDefaultSphere(massPos,
                                                             Material.Rubber, rigidSize.X,
                                                             new Vector3(0, -4f, 0),
                                                             null,
                                                             null, 0,
                                                             false));
                    masses[masses.Count - 1].IsCollidable = isCollidable;
                    masses[masses.Count - 1].TextureType  = TextureType.Transparent;
                }
                StaticData.EngineManager.RigidsManagerEngine.AddRigidBody(masses[i]);
                if (targetPosition == null)
                {
                    massPos += new Vector3(0, normalLength, 0);
                }
                else
                {
                    if (initialPosition.X < targetPosition.Value.X)
                    {
                        massPos.X = (float)(initialPosition.X + i * diffX);
                    }
                    else
                    {
                        massPos.X = (float)(initialPosition.X - i * diffX);
                    }

                    if (initialPosition.Y < targetPosition.Value.Y)
                    {
                        massPos.Y = (float)(initialPosition.Y + i * diffY);
                    }
                    else
                    {
                        massPos.Y = (float)(initialPosition.Y - i * diffY);
                    }
                }
            }
            return(masses);
        }