Example #1
0
        public static bool GetTypeKind(IEnumerable <IFSharpAttribute> attributes, out PartKind fSharpPartKind)
        {
            foreach (var attr in attributes)
            {
                var attrIds = attr.LongIdentifier.Identifiers;
                if (attrIds.IsEmpty)
                {
                    continue;
                }

                switch (attrIds.LastOrDefault()?.GetText().DropAttributeSuffix())
                {
                case Interface:
                {
                    fSharpPartKind = PartKind.Interface;
                    return(true);
                }

                case AbstractClass:
                case Sealed:
                case Class:
                {
                    fSharpPartKind = PartKind.Class;
                    return(true);
                }

                case Struct:
                {
                    fSharpPartKind = PartKind.Struct;
                    return(true);
                }
                }
            }

            fSharpPartKind = default;
            return(false);
        }
Example #2
0
    public void Setup(Unit unit)
    {
        for (int i = 0; i < EnumHelper <PartKind> .count; i++)
        {
            PartKind kind = EnumHelper <PartKind> .values[i];

            PartDef  def  = partDefs[kind];
            PartData data = parts[kind];

            data.kind      = kind;
            data.hitPoints = def.hitPoints;

            SkinnedMeshRenderer rend = def.rend.SetupWithSelf(transform);

            var rigidRend = unit.parts.rigidRoot.FindDeep(rend.name).GetComponent <SkinnedMeshRenderer>();

            SetupNode(rend, data.attached);
            SetupNode(rigidRend, data.detached);

            // Add a rigid to not count as static collider
            // Don't assign since it should never not be kinematic
            Rigidbody attachedRigid = data.attached.rootBone.gameObject.AddComponent <Rigidbody>();
            attachedRigid.isKinematic = true;
            attachedRigid.useGravity  = false;

            data.detached.rigid = data.detached.rootBone.gameObject.AddComponent <Rigidbody>();

            // Detached parts needs to be in root, since parts are childed under eachother
            data.detachedParent           = rigidRend.transform.parent;
            data.detached.rootBone.parent = data.detachedParent;

            attachedCollToPart[data.attached.coll] = data;
        }

        ReattachAll();
    }
Example #3
0
 public LinePart(string value, PartKind kind)
 {
     Value = value;
     Kind  = kind;
 }
Example #4
0
 public PartDef GetPartDefForKind(PartKind kind)
 {
     return(partDefs[kind]);
 }