Exemplo n.º 1
0
 public CollapsibleSection(MVRScript plugin)
 {
     _plugin = plugin;
 }
Exemplo n.º 2
0
 public SphereColliderModel(MVRScript parent, SphereCollider collider, ColliderPreviewConfig config)
     : base(parent, collider, config)
 {
     _initialRadius = collider.radius;
     _initialCenter = collider.center;
 }
Exemplo n.º 3
0
 protected ColliderModel(MVRScript parent, T collider, ColliderPreviewConfig config)
     : base(parent, collider, config)
 {
     Collider = collider;
 }
    private IEnumerator InjectUISpy(MVRScript script)
    {
        yield return(new WaitForEndOfFrame());

        InjectUISpyNow(script);
    }
Exemplo n.º 5
0
 public SimpleSignUI(Atom atom, MVRScript owner)
 {
     _atom  = atom;
     _owner = owner;
 }
Exemplo n.º 6
0
        private UIManager(MVRScript plugin)
        {
            this.plugin = plugin;

            jsonStorableFloatToSlider = new Dictionary <JSONStorableFloat, UIDynamicSlider>();
        }
Exemplo n.º 7
0
    public static EditablesList Build(MVRScript script, ColliderPreviewConfig config)
    {
        var containingAtom = script.containingAtom;

        var groups = containingAtom.type == "Person"
                 ? new List <Group>
        {
            new Group("Head / Ears", @"^((AutoCollider(Female)?)?AutoColliders)?(s?[Hh]ead|lowerJaw|[Tt]ongue|neck|s?Face|_?Collider(Lip|Ear|Nose))"),
            new Group("Left arm", @"^l(Shldr|ForeArm)"),
            new Group("Left hand", @"^l(Index|Mid|Ring|Pinky|Thumb|Carpal|Hand)[0-9]?$"),
            new Group("Right arm", @"^r(Shldr|ForeArm)"),
            new Group("Right hand", @"^r(Index|Mid|Ring|Pinky|Thumb|Carpal|Hand)[0-9]?$"),
            new Group("Chest", @"^(chest|(AutoCollider)?FemaleAutoColliderschest|MaleAutoColliderschest)"),
            new Group("Left breast", @"l((Pectoral)|Nipple)"),
            new Group("Right breast", @"r((Pectoral)|Nipple)"),
            new Group("Abdomen / Belly / Back", @"^((AutoCollider)?FemaleAutoColliders)?abdomen"),
            new Group("Hip / Pelvis", @"^((Female)?AutoColliders?|MaleAutoColliders)?(hip|pelvis)"),
            new Group("Glute", @"^((AutoCollider)?FemaleAutoColliders)?[LR]Glute"),
            new Group("Anus", @"^_JointA[rl]"),
            new Group("V****a", @"^_Joint(Gr|Gl|B)"),
            new Group("Penis", @"^((AutoCollider)?Gen[1-3])|Testes"),
            new Group("Left leg", @"^((AutoCollider)?(FemaleAutoColliders)?)?l(Thigh|Shin)"),
            new Group("Left foot", @"^l(Foot|Toe|BigToe|SmallToe)"),
            new Group("Right leg", @"^((AutoCollider)?(FemaleAutoColliders)?)?r(Thigh|Shin)"),
            new Group("Right foot", @"^r(Foot|Toe|BigToe|SmallToe)"),
            new Group("Other", @"^.+$")
        }
                 : new List <Group>
        {
            new Group("All", @"^.+$"),
        };

        // AutoColliders

        var autoColliderDuplicates = new HashSet <string>();
        var autoColliders          = containingAtom.GetComponentsInChildren <AutoCollider>()
                                     .Select(autoCollider => new AutoColliderModel(script, autoCollider, config))
                                     .Where(model => { if (!autoColliderDuplicates.Add(model.Id))
                                                       {
                                                           model.IsDuplicate = true; return(false);
                                                       }
                                                       else
                                                       {
                                                           return(true);
                                                       } })
                                     .ForEach(model => model.Group = groups.FirstOrDefault(g => g.Test(model.AutoCollider.name)))
                                     .ToList();

        var autoCollidersRigidBodies = new HashSet <Rigidbody>(autoColliders.SelectMany(x => x.GetRigidbodies()));
        var autoCollidersColliders   = new HashSet <Collider>(autoColliders.SelectMany(x => x.GetColliders()).Select(x => x.Collider));
        var autoCollidersMap         = autoColliders.ToDictionary(x => x.AutoCollider);

        MatchMirror <AutoColliderModel, AutoCollider>(autoColliders);

        // AutoColliderGroups

        var autoColliderGroupDuplicates = new HashSet <string>();
        var autoColliderGroups          = containingAtom.GetComponentsInChildren <AutoColliderGroup>()
                                          .Select(autoColliderGroup =>
        {
            var childAutoColliders = autoColliderGroup.GetAutoColliders().Where(acg => autoCollidersMap.ContainsKey(acg)).Select(acg => autoCollidersMap[acg]).ToList();
            var model = new AutoColliderGroupModel(script, autoColliderGroup, childAutoColliders);
            childAutoColliders.ForEach(ac => ac.AutoColliderGroup = model);
            return(model);
        })
                                          .Where(model => { if (!autoColliderGroupDuplicates.Add(model.Id))
                                                            {
                                                                model.IsDuplicate = true; return(false);
                                                            }
                                                            else
                                                            {
                                                                return(true);
                                                            } })
                                          .ForEach(model => model.Group = groups.FirstOrDefault(g => g.Test(model.AutoColliderGroup.name)))
                                          .ToList();

        MatchMirror <AutoColliderGroupModel, AutoColliderGroup>(autoColliderGroups);

        // Rigidbodies

        var rigidbodyDuplicates   = new HashSet <string>();
        var controllerRigidbodies = new HashSet <Rigidbody>(containingAtom.freeControllers.SelectMany(fc => fc.GetComponents <Rigidbody>()));
        var rigidbodies           = containingAtom.GetComponentsInChildren <Rigidbody>(true)
                                    .Where(rigidbody => !autoCollidersRigidBodies.Contains(rigidbody))
                                    .Where(rigidbody => !controllerRigidbodies.Contains(rigidbody))
                                    .Where(rigidbody => IsRigidbodyIncluded(rigidbody))
                                    .Select(rigidbody => new RigidbodyModel(script, rigidbody))
                                    .Where(model => { if (!rigidbodyDuplicates.Add(model.Id))
                                                      {
                                                          model.IsDuplicate = true; return(false);
                                                      }
                                                      else
                                                      {
                                                          return(true);
                                                      } })
                                    .ForEach(model => model.Group = groups.FirstOrDefault(g => g.Test(model.Rigidbody.name)))
                                    .ToList();
        var rigidbodiesDict = rigidbodies.ToDictionary(x => x.Id);

        MatchMirror <RigidbodyModel, Rigidbody>(rigidbodies);

        // Colliders

        var colliderDuplicates = new HashSet <string>();
        var colliders          = containingAtom.GetComponentsInChildren <Collider>(true)
                                 .Where(collider => collider.gameObject.activeInHierarchy)
                                 .Where(collider => !autoCollidersColliders.Contains(collider))
                                 .Where(collider => collider.attachedRigidbody == null || IsRigidbodyIncluded(collider.attachedRigidbody))
                                 .Where(collider => IsColliderIncluded(collider))
                                 .Select(collider => ColliderModel.CreateTyped(script, collider, config))
                                 .Where(model => { if (!colliderDuplicates.Add(model.Id))
                                                   {
                                                       model.IsDuplicate = true; return(false);
                                                   }
                                                   else
                                                   {
                                                       return(true);
                                                   } })
                                 .ToList();

        MatchMirror <ColliderModel, Collider>(colliders);

        // Attach colliders to rigidbodies

        foreach (var colliderModel in colliders)
        {
            if (colliderModel.Collider.attachedRigidbody != null)
            {
                RigidbodyModel rigidbodyModel;
                if (rigidbodiesDict.TryGetValue(colliderModel.Collider.attachedRigidbody.Uuid(), out rigidbodyModel))
                {
                    colliderModel.RigidbodyModel = rigidbodyModel;
                    rigidbodyModel.Colliders.Add(colliderModel);
                    colliderModel.Group = rigidbodyModel.Group;
                }
                else
                {
                    SuperController.LogError($"Could not find a matching rigidbody for collider '{colliderModel.Id}', rigidbody '{colliderModel.Collider.attachedRigidbody.Uuid()}'.");
                    colliderModel.Group = groups.FirstOrDefault(g => g.Test(colliderModel.Collider.name));
                }
            }
            else
            {
                colliderModel.Group = groups.FirstOrDefault(g => g.Test(colliderModel.Collider.name));
            }
        }

        rigidbodies.RemoveAll(model => model.Colliders.Count == 0);

        // All Editables

        var all = colliders.Cast <IModel>()
                  .Concat(autoColliderGroups.Cast <IModel>())
                  .Concat(autoColliders.Cast <IModel>())
                  .Concat(rigidbodies.Cast <IModel>())
                  .ToList();

        return(new EditablesList(groups, all));
    }