Example #1
0
        private void AddInterconnection(BaseGeneViewModel gene)
        {
            var interConnGene = (InterconnectionViewModel)gene;
            var model         = interConnGene.GetModelDuplicate();

            var body = WillHelper.TryAddInterconnectionBody(model, 5);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }