Exemple #1
0
        /// <summary>
        /// Resets heights of the Unity terrain and recreate native instance.
        /// </summary>
        public void ResetHeights()
        {
            if (Native != null && Simulation.HasInstance)
            {
                GetSimulation().remove(Native);
                Native = null;
            }

            ResetTerrainDataHeightsAndTransform();

            InitializeNative();

            PropertySynchronizer.Synchronize(this);
        }
Exemple #2
0
        private void File_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            EditID3File file = (EditID3File)sender;

            if (e.PropertyName == GetPropertyName())
            {
                PropertySynchronizer synchronizer = synchronizers[file];

                synchronizer.PropertyChanged -= OnPropertySynchronizer_PropertyChanged;
                synchronizers[file]           = synchronizer = GetPropertySynchornizer(file);
                synchronizer.PropertyChanged += OnPropertySynchronizer_PropertyChanged;

                Update();
            }
        }
Exemple #3
0
        protected override void Subscribe(EditID3File file)
        {
            file.PropertyChanged += File_PropertyChanged;

            PropertySynchronizer synchronizer = GetPropertySynchornizer(file);

            if (synchronizers.ContainsKey(file))
            {
                synchronizers[file] = synchronizer;
            }
            else
            {
                synchronizers.Add(file, synchronizer);
            }

            synchronizer.PropertyChanged += OnPropertySynchronizer_PropertyChanged;
        }
Exemple #4
0
        private void OnPreStepForwardUpdate()
        {
            if (Native == null || !Native.getValid())
            {
                return;
            }

            SynchronizeNativeFramesWithAttachmentPair();

            if (m_isAnimated)
            {
                var controllers = GetElementaryConstraintControllers();
                for (int i = 0; i < controllers.Length; ++i)
                {
                    PropertySynchronizer.Synchronize(controllers[i]);
                }
            }
        }
Exemple #5
0
        public static agx.RigidBody InstantiateTemplate(RigidBody template, Shape[] shapes)
        {
            if (template == null)
            {
                return(null);
            }

            var native = new agx.RigidBody(template.name);

            foreach (var shape in shapes)
            {
                var geometry = shape.CreateTemporaryNative();

                geometry.setEnable(shape.IsEnabled);
                if (shape.Material != null)
                {
                    geometry.setMaterial(shape.Material.GetInitialized <ShapeMaterial>().Native);
                }
                native.add(geometry, shape.GetNativeRigidBodyOffset(template));
            }

            template.SyncNativeTransform(native);

            // MassProperties (synchronization below) wont write any data if UseDefault = true.
            native.getMassProperties().setAutoGenerateMask((uint)agx.MassProperties.AutoGenerateFlags.AUTO_GENERATE_ALL);
            native.updateMassProperties();
            template.MassProperties.SetDefaultCalculated(native);
            native.getMassProperties().setAutoGenerateMask(0u);

            var prevNative = template.m_rb;

            try {
                template.m_rb = native;
                PropertySynchronizer.Synchronize(template);
                PropertySynchronizer.Synchronize(template.MassProperties);
            }
            finally {
                template.m_rb = prevNative;
            }

            return(native);
        }
        private void OnPreStepForwardUpdate()
        {
            if (Native == null || !Native.getValid())
            {
                return;
            }

            SynchronizeNativeFramesWithAttachmentPair();

            // It's not possible to check which properties an animator
            // is controlling, for now we update all properties in the
            // controllers if we have an animator. This could probably
            // be a flag (IsAnimated).
            var isAnimated = GetComponent <Animator>() != null;

            if (isAnimated)
            {
                var controllers = GetElementaryConstraintControllers();
                for (int i = 0; i < controllers.Length; ++i)
                {
                    PropertySynchronizer.Synchronize(controllers[i]);
                }
            }
        }
Exemple #7
0
        /// <summary>
        /// Callback when undo or redo has been performed. There's a significant
        /// delay to e.g., Inspector update when this happens so we're explicitly
        /// telling Unity to update selected object (if ScriptComponent).
        /// </summary>
        private static void UndoRedoPerformedCallback()
        {
            // Trigger repaint of inspector GUI for our targets.
            var targets = ToolManager.ActiveTools.SelectMany(tool => tool.Targets);

            foreach (var target in targets)
            {
                EditorUtility.SetDirty(target);
            }

            // Collecting scripts that may require synchronize of
            // data post undo/redo where the private serialized
            // field has been changed but the public property with
            // native synchronizations isn't touched.
            if (EditorApplication.isPlaying)
            {
                var             objectsToSynchronize = new List <Object>();
                Action <Object> addUnique            = obj =>
                {
                    if (!objectsToSynchronize.Contains(obj))
                    {
                        objectsToSynchronize.Add(obj);
                    }
                };
                foreach (var obj in Selection.objects)
                {
                    if (obj is AGXUnity.ScriptAsset)
                    {
                        addUnique(obj);
                    }
                    else if (obj is GameObject)
                    {
                        var scripts = (obj as GameObject).GetComponents <AGXUnity.ScriptComponent>();
                        foreach (var script in scripts)
                        {
                            addUnique(script);
                        }
                    }
                }

                foreach (var obj in objectsToSynchronize)
                {
                    PropertySynchronizer.Synchronize(obj);
                }
            }

            // Synchronizing all shape sizes with visuals - it's not possible
            // to determine affected shapes from tools targets or selection
            // since it may have changed when undo is performed.
            var shapes = Object.FindObjectsOfType <AGXUnity.Collide.Shape>();

            foreach (var shape in shapes)
            {
                var visual = AGXUnity.Rendering.ShapeVisual.Find(shape);
                if (visual)
                {
                    visual.OnSizeUpdated();
                }
            }

            if (targets.Count() > 0)
            {
                SceneView.RepaintAll();
            }
        }