示例#1
0
        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);
            }
        }
示例#2
0
 protected override void OnEndEditTransform(bool canceled)
 {
     if (!canceled)
     {
         PartCollision.SetSize(EditedScale.ToLDD() / 2f);
         UpdateScaleTransform();
     }
 }
示例#3
0
        private void UpdateScaleTransform()
        {
            var scale = (Vector3)PartCollision.GetSize().ToGL() * 2f;

            ScaleTransform = Matrix4.CreateScale(scale);
            Scale          = scale;
            BoundingBox    = BBox.FromCenterSize(Vector3.Zero, scale);
        }
示例#4
0
        public CollisionModel(PartCollision collision) : base(collision)
        {
            PartCollision = collision;

            SetTransformFromElement();

            UpdateScaleTransform();
        }
示例#5
0
        public CollisionModel(PartCollision collision) : base(collision)
        {
            PartCollision   = collision;
            ParentTransform = Matrix4.Identity;

            SetTransformFromElement();

            UpdateScaleTransform();
        }
示例#6
0
        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");
            }
        }