public bool Contains <TArmorModel>(TArmorModel model) where TArmorModel : ArmorModel, new()
 {
     if (model == null)
     {
         return(false);
     }
     if (!this.awake)
     {
         ArmorModelGroup defaultArmorModelGroup = this.defaultArmorModelGroup;
         return((defaultArmorModelGroup != null) && (defaultArmorModelGroup.GetArmorModel <TArmorModel>() == model));
     }
     return(this.models.GetArmorModel <TArmorModel>() == model);
 }
 public bool Contains(ArmorModel model)
 {
     if (model == null)
     {
         return(false);
     }
     if (!this.awake)
     {
         ArmorModelGroup defaultArmorModelGroup = this.defaultArmorModelGroup;
         return((defaultArmorModelGroup != null) && (defaultArmorModelGroup[model.slot] == model));
     }
     return(this.models[model.slot] == model);
 }
    public ArmorModelMemberMap GetArmorModelMemberMapCopy()
    {
        if (this.awake)
        {
            return(this.models);
        }
        ArmorModelGroup armorModelGroups = this.defaultArmorModelGroup;

        if (armorModelGroups)
        {
            return(armorModelGroups.armorModelMemberMap);
        }
        return(new ArmorModelMemberMap());
    }
    public bool Contains(ArmorModel model)
    {
        if (!model)
        {
            return(false);
        }
        if (this.awake)
        {
            return(this.models[model.slot] == model);
        }
        ArmorModelGroup armorModelGroups = this.defaultArmorModelGroup;

        return(!armorModelGroups ? false : armorModelGroups[model.slot] == model);
    }
    public ArmorModelMemberMap GetArmorModelMemberMapCopy()
    {
        if (this.awake)
        {
            return(this.models);
        }
        ArmorModelGroup defaultArmorModelGroup = this.defaultArmorModelGroup;

        if (defaultArmorModelGroup == null)
        {
            return(new ArmorModelMemberMap());
        }
        return(defaultArmorModelGroup.armorModelMemberMap);
    }
    public T GetArmorModel <T>() where T : ArmorModel, new()
    {
        if (this.awake)
        {
            return(this.models.GetArmorModel <T>());
        }
        ArmorModelGroup defaultArmorModelGroup = this.defaultArmorModelGroup;

        if (defaultArmorModelGroup != null)
        {
            return(defaultArmorModelGroup.GetArmorModel <T>());
        }
        return(null);
    }
    public T GetArmorModel <T>()
        where T : ArmorModel, new()
    {
        if (this.awake)
        {
            return(this.models.GetArmorModel <T>());
        }
        ArmorModelGroup armorModelGroups = this.defaultArmorModelGroup;

        if (armorModelGroups)
        {
            return(armorModelGroups.GetArmorModel <T>());
        }
        return((T)null);
    }
    public bool Contains <TArmorModel>(TArmorModel model)
        where TArmorModel : ArmorModel, new()
    {
        if (!model)
        {
            return(false);
        }
        if (this.awake)
        {
            return(this.models.GetArmorModel <TArmorModel>() == model);
        }
        ArmorModelGroup armorModelGroups = this.defaultArmorModelGroup;

        return(!armorModelGroups ? false : armorModelGroups.GetArmorModel <TArmorModel>() == model);
    }
 public ArmorModel this[ArmorModelSlot slot]
 {
     get
     {
         if (this.awake)
         {
             return(this.models[slot]);
         }
         ArmorModelGroup armorModelGroups = this.defaultArmorModelGroup;
         if (!armorModelGroups)
         {
             return(null);
         }
         return(armorModelGroups[slot]);
     }
 }
 public ArmorModel this[ArmorModelSlot slot]
 {
     get
     {
         if (this.awake)
         {
             return(this.models[slot]);
         }
         ArmorModelGroup defaultArmorModelGroup = this.defaultArmorModelGroup;
         if (defaultArmorModelGroup != null)
         {
             return(defaultArmorModelGroup[slot]);
         }
         return(null);
     }
 }
    public ArmorModelSlotMask BindArmorGroup(ArmorModelGroup group)
    {
        ArmorModelSlotMask mask = (ArmorModelSlotMask)0;

        if (group)
        {
            for (ArmorModelSlot i = ArmorModelSlot.Feet; (int)i < 4; i = (ArmorModelSlot)((byte)i + (byte)ArmorModelSlot.Legs))
            {
                ArmorModel item = group[i];
                if (item && this.BindArmorModelCheckedNonNull(item))
                {
                    mask = mask | i.ToMask();
                }
            }
        }
        return(mask);
    }
    public ArmorModelSlotMask BindArmorGroup(ArmorModelGroup group)
    {
        ArmorModelSlotMask mask = 0;

        if (group != null)
        {
            for (ArmorModelSlot slot = ArmorModelSlot.Feet; slot < ((ArmorModelSlot)4); slot = (ArmorModelSlot)(((int)slot) + 1))
            {
                ArmorModel model = group[slot];
                if ((model != null) && this.BindArmorModelCheckedNonNull(model))
                {
                    mask |= slot.ToMask();
                }
            }
        }
        return(mask);
    }
    public ArmorModelSlotMask BindArmorGroup(ArmorModelGroup group, ArmorModelSlotMask slotMask)
    {
        if (!this.awake)
        {
            if (group == null)
            {
                return(0);
            }
            return(this.Initialize(group.armorModelMemberMap, slotMask));
        }
        ArmorModelSlotMask mask = 0;

        foreach (ArmorModelSlot slot in slotMask.EnumerateSlots())
        {
            ArmorModel model = group[slot];
            if ((model != null) && this.BindArmorModelCheckedNonNull(model))
            {
                mask |= slot.ToMask();
            }
        }
        return(mask);
    }
    public ArmorModelSlotMask BindArmorGroup(ArmorModelGroup group, ArmorModelSlotMask slotMask)
    {
        if (!this.awake)
        {
            if (!group)
            {
                return(0);
            }
            return(this.Initialize(group.armorModelMemberMap, slotMask));
        }
        ArmorModelSlotMask mask = (ArmorModelSlotMask)0;

        ArmorModelSlot[] armorModelSlotArray = slotMask.EnumerateSlots();
        for (int i = 0; i < (int)armorModelSlotArray.Length; i++)
        {
            ArmorModelSlot armorModelSlot = armorModelSlotArray[i];
            ArmorModel     item           = group[armorModelSlot];
            if (item && this.BindArmorModelCheckedNonNull(item))
            {
                mask = mask | armorModelSlot.ToMask();
            }
        }
        return(mask);
    }
    private ArmorModelSlotMask Initialize(ArmorModelMemberMap memberMap, ArmorModelSlotMask memberMask)
    {
        ActorMeshRenderer actorMeshRenderer;

        this.awake = true;
        string   rendererName = ArmorModelSlot.Head.GetRendererName();
        ActorRig item         = this.defaultArmorModelGroup[ArmorModelSlot.Head].actorRig;

        actorMeshRenderer = (!this.originalRenderer ? ActorMeshRenderer.CreateOn(base.transform, rendererName, item, this.boneStructure.rigOrderedTransformArray, base.gameObject.layer) : ActorMeshRenderer.Replace(this.originalRenderer, item, this.boneStructure.rigOrderedTransformArray, rendererName));
        this.renderers[ArmorModelSlot.Head] = actorMeshRenderer;
        for (ArmorModelSlot i = ArmorModelSlot.Feet; i < ArmorModelSlot.Head; i = (ArmorModelSlot)((byte)i + (byte)ArmorModelSlot.Legs))
        {
            this.renderers[i] = actorMeshRenderer.CloneBlank(i.GetRendererName());
        }
        for (ArmorModelSlot j = ArmorModelSlot.Feet; j < ArmorModelSlot.Head; j = (ArmorModelSlot)((byte)j + (byte)ArmorModelSlot.Legs))
        {
            ActorMeshRenderer item1 = this.renderers[j];
            if (item1)
            {
                item1.renderer.enabled = base.enabled;
            }
        }
        ArmorModelSlotMask mask             = (ArmorModelSlotMask)0;
        ArmorModelGroup    armorModelGroups = this.defaultArmorModelGroup;

        if (!armorModelGroups)
        {
            ArmorModelSlot[] armorModelSlotArray = memberMask.EnumerateSlots();
            for (int k = 0; k < (int)armorModelSlotArray.Length; k++)
            {
                ArmorModelSlot armorModelSlot = armorModelSlotArray[k];
                ArmorModel     armorModel     = memberMap.GetArmorModel(armorModelSlot);
                if (armorModel && this.BindArmorModelCheckedNonNull(armorModel))
                {
                    mask = mask | armorModelSlot.ToMask();
                }
            }
        }
        else
        {
            for (ArmorModelSlot l = ArmorModelSlot.Feet; (int)l < 4; l = (ArmorModelSlot)((byte)l + (byte)ArmorModelSlot.Legs))
            {
                if (memberMask.Contains(l))
                {
                    ArmorModel armorModel1 = memberMap.GetArmorModel(l);
                    if (!armorModel1 || !this.BindArmorModelCheckedNonNull(armorModel1))
                    {
                        goto Label1;
                    }
                    mask = mask | l.ToMask();
                    goto Label0;
                }
Label1:
                ArmorModel item2 = armorModelGroups[l];
                if (item2)
                {
                    this.BindArmorModelCheckedNonNull(item2);
                }
Label0:
            }
        }
        return(mask);
    }
    private ArmorModelSlotMask Initialize(ArmorModelMemberMap memberMap, ArmorModelSlotMask memberMask)
    {
        ActorMeshRenderer renderer;

        this.awake = true;
        string   rendererName = ArmorModelSlot.Head.GetRendererName();
        ActorRig actorRig     = this.defaultArmorModelGroup[ArmorModelSlot.Head].actorRig;

        if (this.originalRenderer != null)
        {
            renderer = ActorMeshRenderer.Replace(this.originalRenderer, actorRig, this.boneStructure.rigOrderedTransformArray, rendererName);
        }
        else
        {
            renderer = ActorMeshRenderer.CreateOn(base.transform, rendererName, actorRig, this.boneStructure.rigOrderedTransformArray, base.gameObject.layer);
        }
        this.renderers[ArmorModelSlot.Head] = renderer;
        for (ArmorModelSlot slot = ArmorModelSlot.Feet; slot < ArmorModelSlot.Head; slot = (ArmorModelSlot)(((int)slot) + 1))
        {
            this.renderers[slot] = renderer.CloneBlank(slot.GetRendererName());
        }
        for (ArmorModelSlot slot2 = ArmorModelSlot.Feet; slot2 < ArmorModelSlot.Head; slot2 = (ArmorModelSlot)(((int)slot2) + 1))
        {
            ActorMeshRenderer renderer2 = this.renderers[slot2];
            if (renderer2 != null)
            {
                renderer2.renderer.enabled = base.enabled;
            }
        }
        ArmorModelSlotMask mask = 0;
        ArmorModelGroup    defaultArmorModelGroup = this.defaultArmorModelGroup;

        if (defaultArmorModelGroup != null)
        {
            for (ArmorModelSlot slot3 = ArmorModelSlot.Feet; slot3 < ((ArmorModelSlot)4); slot3 = (ArmorModelSlot)(((int)slot3) + 1))
            {
                if (memberMask.Contains(slot3))
                {
                    ArmorModel armorModel = memberMap.GetArmorModel(slot3);
                    if ((armorModel != null) && this.BindArmorModelCheckedNonNull(armorModel))
                    {
                        mask |= slot3.ToMask();
                        continue;
                    }
                }
                ArmorModel model2 = defaultArmorModelGroup[slot3];
                if (model2 != null)
                {
                    this.BindArmorModelCheckedNonNull(model2);
                }
            }
            return(mask);
        }
        foreach (ArmorModelSlot slot4 in memberMask.EnumerateSlots())
        {
            ArmorModel model = memberMap.GetArmorModel(slot4);
            if ((model != null) && this.BindArmorModelCheckedNonNull(model))
            {
                mask |= slot4.ToMask();
            }
        }
        return(mask);
    }