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); }
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; } }
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(); }
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); }