private void AddInterconnection(BaseGeneViewModel gene) { var interConnGene = (InterconnectionViewModel)gene; var model = interConnGene.GetModelDuplicate(); var body = WillHelper.TryAddInterconnectionBody(model, 5); }
private void AddChainCommandExecute(object parameter) { Will.Instance.Purge(); Will.Instance.RunPauseWilling(false); var startPoint = new Vector2D(300, 800); double angle = MathHelper.ToRadians(15.0f); double boxlength = 50; double spacing = 2; double anchorLength = 30; double anchorGap = (boxlength / 2) + spacing + (anchorLength / 2); var chainId = Guid.NewGuid(); var chain = WillHelper.BuildChain(startPoint, boxlength, 3, 1200, spacing, 600, chainId); var point2 = new Vector2D(chain[chain.Count - 1].State.Position.Linear.X + anchorGap, startPoint.Y); var end2 = WillHelper.AddCircle(anchorLength / 2, 6, double.PositiveInfinity, new ALVector2D(0, point2), chainId); end2.IgnoresGravity = true; var joint2 = new HingeJoint(chain[chain.Count - 1], end2, point2, new Lifespan()) { DistanceTolerance = 20 }; var joint21 = new AngleJoint(chain[chain.Count - 1], end2, new Lifespan()) { Angle = angle }; var point1 = new Vector2D(chain[0].State.Position.Linear.X - anchorGap, startPoint.Y); var end1 = WillHelper.AddCircle(anchorLength / 2, 6, double.PositiveInfinity, new ALVector2D(0, point1), chainId); chain.Add(end1); chain.Add(end2); end1.IgnoresGravity = true; var joint1 = new HingeJoint(chain[0], end1, point1, new Lifespan()) { DistanceTolerance = 20 }; var joint11 = new AngleJoint(end1, chain[0], new Lifespan()) { Angle = angle }; Will.Instance.AddJoint(joint1); Will.Instance.AddJoint(joint11); Will.Instance.AddJoint(joint2); Will.Instance.AddJoint(joint21); Representation.Instance.RegisterModel(chainId, chain); Will.Instance.RunPauseWilling(true); }
private void AddBone(BaseGeneViewModel gene) { Will.Instance.RunPauseWilling(false); var boneGene = (BoneGeneViewModel)gene; var boneModel = boneGene.GetModelDuplicate(); var boneBody = WillHelper.AddBoneBody(boneModel); Will.Instance.RunPauseWilling(true); }
private void AddCoreCommandExecute(object parameter) { Will.Instance.Purge(); Will.Instance.RunPauseWilling(false); var startPoint = new Vector2D(101, 300); double angle = MathHelper.ToRadians(15.0f); var modelId = Guid.NewGuid(); var floor = WillHelper.CreateRectangle(50, 1024, double.PositiveInfinity, new ALVector2D(0, startPoint.X + 512, startPoint.Y)).AsModelBody(modelId); floor.IgnoresGravity = true; Will.Instance.AddBody(floor); Representation.Instance.RegisterModel(modelId, new List <BaseModelBody> { floor }); Will.Instance.RunPauseWilling(true); }
private void AddCore(Guid geneApplicationId, BaseGeneViewModel gene) { var core = (CoreGeneViewModel)gene; var model = core.GetModelDuplicate(); model.Id = geneApplicationId; var coreBody = WillHelper.CreateCoreBody(model, geneApplicationId); var nodes = WillHelper.BuildNodeSlots(coreBody, geneApplicationId); coreBody.Children = nodes; var corePos = coreBody.State.Position; var joints = new List <Joint>(); foreach (var node in nodes) { var hinge = new HingeJoint(coreBody, node, (2 * node.State.Position.Linear + 8 * corePos.Linear) * 0.1f, new Lifespan()) { DistanceTolerance = 10, Softness = 100.0 }; var angle = new AngleJoint(coreBody, node, new Lifespan()) { Softness = 0.0001, BiasFactor = 0.2f }; joints.Add(hinge); joints.Add(angle); } Will.Instance.AddModelBodies(new List <BaseModelBody> { coreBody }.Concat(nodes).ToList()); Will.Instance.AddJoints(joints); }
private void AddSlot(BaseGeneViewModel gene) { Will.Instance.RunPauseWilling(false); var slotGene = (NodeGeneViewModel)gene; var boneBody = Will.Instance.Bodies.RandomOrDefault <BoneBody>(b => b.Model.ChildSlots.Any(s => s.IsOccupied == false)); if (boneBody == null) { Will.Instance.RunPauseWilling(true); return; } var parPos = boneBody.State.Position; var randSlot = boneBody.Model.ChildSlots.Where(s => s.IsOccupied == false).RandomOrDefault(); var slot = slotGene.GetModelDuplicate(); slot.Direction = randSlot.Direction; slot.DistanceFromCenter = randSlot.DistanceFromCenter; slot.Orientation = randSlot.Orientation; randSlot.IsOccupied = true; var slotBody = WillHelper.CreateConnectionSlotBody(slot, boneBody.ModelId); var slotXAngle = slot.Direction + parPos.Angular; var slotCenter = Vector2D.Rotate(slotXAngle, new Vector2D(slot.DistanceFromCenter, 0.0f)); var slotPos = new ALVector2D(slot.Orientation + slotXAngle, slotCenter + parPos.Linear); slotBody.State.Position = slotPos; slotBody.ApplyPosition(); slotBody.Parent = boneBody; boneBody.Children.Add(slotBody); var joints = new List <Joint>(); var nodePos = slotBody.State.Position; var hinge = new HingeJoint(boneBody, slotBody, (slot.Size * nodePos.Linear + boneBody.Model.Length * parPos.Linear) * (1 / (slot.Size + boneBody.Model.Length)), new Lifespan()) { DistanceTolerance = 50, Softness = 10.1 }; var angle = new AngleJoint(boneBody, slotBody, new Lifespan()) { Softness = 0.00001 }; joints.Add(hinge); joints.Add(angle); Will.Instance.AddBody(slotBody); Will.Instance.AddJoints(joints); Will.Instance.RunPauseWilling(true); }