private void AddCollisionMenuItem_Click(object sender, EventArgs e) { string collisionTypeStr = (sender as ToolStripMenuItem).Tag as string; if (!string.IsNullOrEmpty(collisionTypeStr) && Enum.TryParse(collisionTypeStr, out LDD.Primitives.Collisions.CollisionType collisionType)) { if (!ProjectManager.ShowCollisions) { ProjectManager.ShowCollisions = true; } var newCollision = PartCollision.Create(collisionType, 0.4f); var focusedBoneNode = GetFocusedParentElement <PartBone>(); if (focusedBoneNode != null) { (focusedBoneNode.Element as PartBone).Collisions.Add(newCollision); } else { CurrentProject.Collisions.Add(newCollision); } ProjectManager.SelectElement(newCollision); SelectElementNodeDelayed(newCollision); } }
protected override void OnEndEditTransform(bool canceled) { if (!canceled) { PartCollision.SetSize(EditedScale.ToLDD() / 2f); UpdateScaleTransform(); } }
private void UpdateScaleTransform() { var scale = (Vector3)PartCollision.GetSize().ToGL() * 2f; ScaleTransform = Matrix4.CreateScale(scale); Scale = scale; BoundingBox = BBox.FromCenterSize(Vector3.Zero, scale); }
public CollisionModel(PartCollision collision) : base(collision) { PartCollision = collision; SetTransformFromElement(); UpdateScaleTransform(); }
public CollisionModel(PartCollision collision) : base(collision) { PartCollision = collision; ParentTransform = Matrix4.Identity; SetTransformFromElement(); UpdateScaleTransform(); }
public Part(IDictionary <string, object> jsonDict, Dictionary <string, RotationSet> rotationSets, Dictionary <string, Material> physicsMaterials) { if (jsonDict.ContainsKey("uuid")) { this.ItemUuid = Guid.Parse(jsonDict["uuid"].ToString()); if (jsonDict.ContainsKey("legacy_id")) { if (!int.TryParse(jsonDict["legacy_id"].ToString(), out this.LegacyId)) { this.LegacyId = -1; } } if (jsonDict.ContainsKey("mat")) { if (jsonDict["mat"] is string) { this.RenderMaterial.Add(jsonDict["mat"].ToString()); } else { foreach (object q in (List <object>)jsonDict["mat"]) { this.RenderMaterial.Add(q.ToString()); } } } if (jsonDict.ContainsKey("mesh")) { this.MeshFileName = jsonDict["mesh"].ToString(); } // Texture if (jsonDict.ContainsKey("asg")) { this.TextureAsg = jsonDict["asg"].ToString(); } if (jsonDict.ContainsKey("dif")) { this.TextureDif = jsonDict["dif"].ToString(); } if (jsonDict.ContainsKey("nor")) { this.TextureNor = jsonDict["nor"].ToString(); } if (jsonDict.ContainsKey("color")) { this.Color = RgbColor.FromHtmlNotation(jsonDict["color"].ToString()); } // Collision if (jsonDict.ContainsKey("cylinder")) { this.Colision = new CylinderCollision( (IDictionary <string, object>)jsonDict["cylinder"]); } if (jsonDict.ContainsKey("box")) { this.Colision = new BoxCollision( (IDictionary <string, object>)jsonDict["box"]); } if (jsonDict.ContainsKey("hull")) { this.Colision = new HullCollision( (IDictionary <string, object>)jsonDict["hull"]); } // Rotationset if (jsonDict.ContainsKey("rotationSet")) { string rotSetName = jsonDict["rotationSet"].ToString(); if (rotationSets.ContainsKey(rotSetName)) { this.RotationSet = rotationSets[rotSetName]; } else { throw new Exception("Part has invalid rotation set: " + rotSetName); } } if (jsonDict.ContainsKey("density")) { if (!float.TryParse(jsonDict["density"].ToString(), out this.Density)) { this.Density = -1; } } if (jsonDict.ContainsKey("type")) { this.CustomType = jsonDict["type"].ToString(); } // Feature if (jsonDict.ContainsKey("bearing")) { this.Feature = new Features.Bearing(); } if (jsonDict.ContainsKey("sensor")) { this.Feature = new Features.Sensor(); } if (jsonDict.ContainsKey("radio")) { this.Feature = new Features.Radio(); } if (jsonDict.ContainsKey("horn")) { this.Feature = new Features.Horn(); } if (jsonDict.ContainsKey("timedjoint")) { this.Feature = new Features.Controller(); } if (jsonDict.ContainsKey("logic")) { this.Feature = new Features.LogicGate(); } if (jsonDict.ContainsKey("timer")) { this.Feature = new Features.Timer(); } if (jsonDict.ContainsKey("tone")) { this.Feature = new Features.Tone((IDictionary <string, object>)jsonDict["tone"]); } if (jsonDict.ContainsKey("lever")) { this.Feature = new Features.Lever(); } if (jsonDict.ContainsKey("button")) { this.Feature = new Features.Button(); } if (jsonDict.ContainsKey("spring")) { this.Feature = new Features.Spring((IDictionary <string, object>)jsonDict["spring"]); } if (jsonDict.ContainsKey("steering")) { this.Feature = new Features.Steering((IDictionary <string, object>)jsonDict["steering"]); } if (jsonDict.ContainsKey("seat")) { this.Feature = new Features.Seat((IDictionary <string, object>)jsonDict["seat"]); } if (jsonDict.ContainsKey("engine")) { this.Feature = new Features.Engine((IDictionary <string, object>)jsonDict["engine"]); } if (jsonDict.ContainsKey("thruster")) { this.Feature = new Features.Thruster((IDictionary <string, object>)jsonDict["thruster"]); } if (jsonDict.ContainsKey("script")) { foreach (object q in (List <object>)jsonDict["script"]) { this.Script.Add(q.ToString()); } } if (jsonDict.ContainsKey("sticky")) { string sticky = jsonDict["sticky"].ToString(); for (int i = 0; i < sticky.Length; i += 2) { // - if (sticky[i] == '-') { if (sticky[i + 1] == 'X') { this.NegativeStickyAxes.Add(Axis.X); } else if (sticky[i + 1] == 'Y') { this.NegativeStickyAxes.Add(Axis.Y); } else { this.NegativeStickyAxes.Add(Axis.Z); } } // + else { if (sticky[i + 1] == 'X') { this.PositiveStickyAxes.Add(Axis.X); } else if (sticky[i + 1] == 'Y') { this.PositiveStickyAxes.Add(Axis.Y); } else { this.PositiveStickyAxes.Add(Axis.Z); } } } } if (jsonDict.ContainsKey("physicsMaterial")) { string phyMat = jsonDict["physicsMaterial"].ToString(); if (physicsMaterials.ContainsKey(phyMat)) { this.PhysicsMaterial = physicsMaterials[phyMat]; } } } else { throw new Exception("Part doesn't have UUID"); } }