private static void createNewBuildSetup()
        {
            string path = "Assets";

            foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets))
            {
                path = AssetDatabase.GetAssetPath(obj);
                if (!string.IsNullOrEmpty(path) && File.Exists(path))
                {
                    path = Path.GetDirectoryName(path);
                    break;
                }
            }

            path = Path.Combine(path, DEFAULT_ASSET_NAME);
            path = AssetDatabase.GenerateUniqueAssetPath(path);

            InteractionMaterial material = CreateInstance <InteractionMaterial>();

            AssetDatabase.CreateAsset(material, path);

            material._holdingPoseController = createDefaultAsset <HoldingPoseControllerKabsch>(material);
            material._moveToController      = createDefaultAsset <MoveToControllerVelocity>(material);
            material._suspensionController  = createDefaultAsset <SuspensionControllerDefault>(material);
            material._throwingController    = createDefaultAsset <ThrowingControllerPalmVelocity>(material);

            AssetDatabase.SaveAssets();

            Selection.activeObject = material;
        }
        public PhysicMaterialReplacer(Transform anchor, InteractionMaterial material)
        {
            _colliders         = anchor.GetComponentsInChildren <Collider>(true);
            _originalMaterials = _colliders.Select(c => c.sharedMaterial).ToArray();

            switch (material.PhysicMaterialMode)
            {
            case InteractionMaterial.PhysicMaterialModeEnum.NoAction:
                _replacementMaterials = null;
                break;

            case InteractionMaterial.PhysicMaterialModeEnum.DuplicateExisting:
                _replacementMaterials = _originalMaterials.Select(m => {
                    PhysicMaterial newMat;
                    if (m == null)
                    {
                        newMat      = new PhysicMaterial();
                        newMat.name = "Grasping Material";
                    }
                    else
                    {
                        newMat      = Object.Instantiate(m);
                        newMat.name = m.name + " (Grasping Instance)";
                    }
                    newMat.bounciness = 0;
                    return(newMat);
                }).ToArray();
                break;

            case InteractionMaterial.PhysicMaterialModeEnum.Replace:
                _replacementMaterials = _originalMaterials.Select(m => material.ReplacementPhysicMaterial).ToArray();
                break;
            }
        }
        private static T createDefaultAsset <T>(InteractionMaterial material) where T : ScriptableObject
        {
            T t = CreateInstance <T>();

            t.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
            AssetDatabase.AddObjectToAsset(t, material);
            return(t);
        }
        public ControllerContainer(InteractionBehaviour obj, InteractionMaterial material)
        {
            _material = material;

            _holdingPoseController = new DefinableController <IHoldingPoseController>(_material.CreateHoldingPoseController(obj));
            _layerController       = new DefinableController <ILayerController>(_material.CreateLayerController(obj));
            _moveToController      = new DefinableController <IMoveToController>(_material.CreateMoveToController(obj));
            _suspensionController  = new DefinableController <ISuspensionController>(_material.CreateSuspensionController(obj));
            _throwingController    = new DefinableController <IThrowingController>(_material.CreateThrowingController(obj));
        }
 private void CheckMaterial()
 {
     if (_material == null)
     {
         if (_manager == null)
         {
             return;
         }
         else
         {
             Debug.LogWarning("No InteractionMaterial specified; will use the default InteractionMaterial as specified by the InteractionManager.");
             _material = _manager.DefaultInteractionMaterial;
         }
     }
 }