Esempio n. 1
0
        /***************************************************/

        private static Element ToRevitElement(this ModelInstance modelInstance, FamilySymbol familySymbol, RevitSettings settings)
        {
            Document doc = familySymbol.Document;

            if (AdaptiveComponentInstanceUtils.IsAdaptiveFamilySymbol(familySymbol))
            {
                List <IGeometry> pts = (modelInstance.Location as CompositeGeometry)?.Elements;
                if (pts == null || !pts.All(x => x is BH.oM.Geometry.Point))
                {
                    BH.Engine.Reflection.Compute.RecordError($"A family could not be created based on the given ModelInstance because its family type is adaptive, but location was not a collection of points. BHoM_Guid: {modelInstance.BHoM_Guid}");
                    return(null);
                }

                return(Create.AdaptiveComponent(doc, familySymbol, pts.Select(x => ((BH.oM.Geometry.Point)x).ToRevit()).ToList(), settings));
            }

            if (modelInstance.Location is BH.oM.Geometry.Point)
            {
                return(Create.FamilyInstance(doc, familySymbol, ((BH.oM.Geometry.Point)modelInstance.Location).ToRevit(), modelInstance.Orientation.ToRevit(), doc.GetElement(new ElementId(modelInstance.HostId)), settings));
            }
            else if (modelInstance.Location is ICurve)
            {
                return(Create.FamilyInstance(doc, familySymbol, ((ICurve)modelInstance.Location).IToRevit(), doc.GetElement(new ElementId(modelInstance.HostId)), settings));
            }
            else
            {
                BH.Engine.Reflection.Compute.RecordError($"A family could not be created based on the given ModelInstance because its location was neither a point nor a curve. BHoM_Guid: {modelInstance.BHoM_Guid}");
                return(null);
            }
        }
Esempio n. 2
0
        private static AxisAlignedBoundingBox GetEnclosingBoundingBox(ModelInstance modelInstance)
        {
            var boundingBox = default(AxisAlignedBoundingBox);

            var first = true;

            foreach (var subObject in modelInstance.Model.SubObjects)
            {
                var transformedBoundingBox = AxisAlignedBoundingBox.Transform(subObject.RenderObject.BoundingBox,
                                                                              modelInstance.ModelBoneInstances[subObject.Bone.Index].Matrix);

                if (first)
                {
                    boundingBox = transformedBoundingBox;
                    first       = false;
                }
                else
                {
                    boundingBox = AxisAlignedBoundingBox.CreateMerged(
                        boundingBox,
                        transformedBoundingBox);
                }
            }

            return(boundingBox);
        }
Esempio n. 3
0
        /// <summary>
        /// Enumerates over the set of instances represented by the current step.
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        public IEnumerable<ModelInstance> GetInstances(ModelInstance instance)
        {
            // Exit immediately if the property is not valid for the specified instance
            if (!DeclaringType.IsInstanceOfType(instance))
                throw new ArgumentException("The current property is not valid for the specified instance.");

            // Return each instance exposed by a list property
            if (IsList)
            {
                ModelInstanceList children = instance.GetList(this);
                if (children != null)
                {
                    foreach (ModelInstance child in children)
                        yield return child;
                }
            }

            // Return the instance exposed by a reference property
            else
            {
                ModelInstance child = instance.GetReference(this);
                if (child != null)
                    yield return child;
            }
        }
Esempio n. 4
0
        public void SetUp()
        {
            _materialCache = new MaterialCache();
            _parentMtl     = _materialCache.Add("testmtl1");
            _childMtl      = _materialCache.Add("testmtl2");

            _epicModel = new EpicModel();

            _parentCuboid            = Cuboid.CreateCuboid();
            _parentCuboid.Size       = new Vector3(2, 2, 2);
            _parentCuboid.Rotation   = new Vector3(0, 0, -(float)Math.PI / 4.0f);
            _parentCuboid.MaterialId = _parentMtl.Id;

            _connector          = _parentCuboid.AddAnchor("Connector");
            _connector.Position = new Vector3(1, 1, 0);

            _childCuboid            = Cuboid.CreateCuboid();
            _childCuboid.Position   = new Vector3(-1, -1, 0);
            _childCuboid.Rotation   = new Vector3(0, 0, -(float)Math.PI / 2.0f);
            _childCuboid.MaterialId = _childMtl.Id;


            _epicModel.ModelParts.Add(_parentCuboid);
            _childCuboid.Pivot.SetParent(_connector);

            _compiler      = new EpicModelCompiler(_epicModel);
            _compiledModel = _compiler.Compile();

            _modelInstance = new ModelInstance(_compiledModel, _materialCache);

            _modelInstance.Update(1 / 24.0f);
        }
Esempio n. 5
0
 internal ConditionTarget(Condition condition, ModelInstance target, params string[] properties)
 {
     this.Condition = condition;
     this.target = new WeakReference(target);
     this.properties = properties;
     target.GetExtension<RuleManager>().SetCondition(this);
 }
Esempio n. 6
0
        /// <summary>
        /// Enumerates over the set of instances represented by the current step.
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        public IEnumerable<ModelInstance> GetInstances(ModelInstance instance)
        {
            // Stop loading if the step is null or represents a value
            if (Property is ModelValueProperty || !((ModelReferenceProperty)Property).DeclaringType.IsInstanceOfType(instance))
                yield break;

            // Cast the property to the correct type
            var reference = (ModelReferenceProperty)Property;

            // Return each instance exposed by a list property
            if (reference.IsList)
            {
                ModelInstanceList children = instance.GetList(reference);
                if (children != null)
                {
                    foreach (ModelInstance child in instance.GetList(reference))
                    {
                        if (Filter == null || Filter.IsInstanceOfType(child))
                            yield return child;
                    }
                }
            }

            // Return the instance exposed by a reference property
            else
            {
                ModelInstance child = instance.GetReference(reference);
                if (child != null && (Filter == null || Filter.IsInstanceOfType(child)))
                    yield return child;
            }
        }
Esempio n. 7
0
 internal JsonInstance(ModelType type, string id)
 {
     this.Type = type;
     this.Id = id;
     this.instance = new ModelInstance(this);
     instanceProperties = new object[Type.Properties.Count];
 }
Esempio n. 8
0
        /// <summary>
        /// Gets the model for the specified root object including all objects on the path.
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        public HashSet <ModelInstance> GetInstances(ModelInstance root)
        {
            var model = new HashSet <ModelInstance>();

            GetInstances(root, FirstSteps, model);
            return(model);
        }
Esempio n. 9
0
 protected override void SaveInstance(ModelInstance modelInstance)
 {
     if (_entityContext.Save((IJsonEntity)modelInstance.Instance))
     {
         OnSave(modelInstance);
     }
 }
Esempio n. 10
0
 internal static void OnBeforeCreateAdapter(Binding binding, ModelInstance source, ModelProperty property)
 {
     if (BeforeCreateAdapter != null)
     {
         BeforeCreateAdapter(binding, new CreateAdapterEventArgs(binding, source, property));
     }
 }
Esempio n. 11
0
 /// <summary>
 /// Notify path subscribers that the path has changed.
 /// </summary>
 /// <param name="instance"></param>
 internal void Notify(ModelInstance instance)
 {
     if (change != null)
     {
         change(this, new ModelPathChangeEvent(instance, this));
     }
 }
Esempio n. 12
0
 internal ModelMethodEvent(ModelInstance instance, ModelMethod method, object[] args, string[] include)
 {
     this.Instance = instance;
     this.method   = method;
     this.Include  = include;
     this.args     = args;
 }
Esempio n. 13
0
            internal void LoadRoots(ModelTransaction transaction)
            {
                // Exit immediately if roots have already been loaded
                if (Roots != null)
                {
                    return;
                }

                // Create an array of roots to be loaded
                Roots = new ModelInstance[Ids == null ? 0 : Ids.Length];

                // Get the root instances
                for (int i = 0; i < Roots.Length; i++)
                {
                    // Create the root instance
                    Roots[i] = transaction == null?From.Create(Ids[i]) : transaction.GetInstance(From, Ids[i]);
                }

                // Access a property to force the instance to initialize.  Do a seperate pass so batched loading will work.
                for (int i = 0; i < Roots.Length; i++)
                {
                    var initProp = Roots[i].Type.Properties.FirstOrDefault(p => p is ModelValueProperty) ?? Roots[i].Type.Properties.FirstOrDefault(p => p is ModelReferenceProperty);
                    if (initProp == null)
                    {
                        throw new Exception(string.Format("Type \"{0}\" cannot be forced to initialize because it has no properties.", Roots[i].Type.Name));
                    }
                    Roots[i].OnPropertyGet(initProp);
                }
            }
Esempio n. 14
0
        public override void Bind(Entity entity, Main main, bool creating = false)
        {
            entity.CannotSuspend = true;

            Transform     transform = entity.GetOrCreate <Transform>("Transform");
            PhysicsBlock  physics   = entity.GetOrCreate <PhysicsBlock>("Physics");
            ModelInstance model     = entity.GetOrCreate <ModelInstance>("Model");

            physics.Add(new TwoWayBinding <Matrix>(transform.Matrix, physics.Transform));

            Property <Vector3> scale = new Property <Vector3> {
                Value = new Vector3(0.5f)
            };

            model.Add(new Binding <Matrix>(model.Transform, () => Matrix.CreateScale(scale) * transform.Matrix, scale, transform.Matrix));

            entity.Add("Fade", new Animation
                       (
                           new Animation.Delay(5.0f),
                           new Animation.Vector3MoveTo(scale, Vector3.Zero, 1.0f),
                           new Animation.Execute(entity.Delete)
                       ));

            this.SetMain(entity, main);
            PhysicsBlock.CancelPlayerCollisions(physics);
        }
Esempio n. 15
0
        public virtual void SaveTest()
        {
            ModelInstance  userInstance = null;
            ModelSaveEvent saveEvent    = null;

            // Start a transaction to track identity changes that occur
            new ModelTransaction().Record(() =>
            {
                // Create a new user
                var user = CreateNewUser();

                // Get the model instance for the new user
                userInstance = ModelContext.Current.GetModelType(user).GetModelInstance(user);

                // Set the username for the new user
                user.UserName = "******";

                // Ensure that the model instance is new
                Assert.IsTrue(userInstance.IsNew, "Newly created instance was not marked as new.");

                // Save the new user instance
                saveEvent = Perform <ModelSaveEvent>(() => userInstance.Save()).FirstOrDefault();
            });

            // Ensure that the model instance has been saved correctly
            Assert.IsFalse(userInstance.IsNew, "New instance was not saved.");
            Assert.IsTrue(saveEvent != null && saveEvent.Instance == userInstance && saveEvent.Added.Count() == 1,
                          "The save event was not correctly raised during a save operation.");
        }
Esempio n. 16
0
        public bool SetValue(ModelInstance root, object value, Func <ModelInstance, ModelReferenceProperty, int, bool> whenNull, Action <ModelInstance, ModelReferenceProperty, int, ModelInstance> whenNotNull)
        {
            IModelPropertySource sourceInstance = GetSource(root, whenNull, whenNotNull);

            sourceInstance[SourceProperty] = value;
            return(true);
        }
Esempio n. 17
0
        /// <summary>
        /// Determines whether the value of the property along the source path has a value or not.
        /// </summary>
        /// <param name="root"></param>
        /// <returns>True if the source path has an assigned value, otherwise false.</returns>
        /// <remarks>
        /// If any value along the source path is null, false will be returned.
        /// If the source property is a list, false will be returned if the list is empty.
        /// </remarks>
        public bool HasValue(ModelInstance root)
        {
            // Get the source
            IModelPropertySource source = GetSource(root);

            // Return false if the source is null
            if (source == null)
            {
                return(false);
            }

            // Get the property off of the source to evaluate
            ModelProperty property = source.Properties[SourceProperty];

            // If the property is a list, determine if the list has items
            if (property is ModelReferenceProperty && property.IsList)
            {
                return(source.GetList((ModelReferenceProperty)property).Count > 0);
            }

            // Otherwise, just determine if the property has an assigned value
            else
            {
                return(source[property] != null);
            }
        }
Esempio n. 18
0
 internal W3dFloorDraw(W3dFloorDrawModuleData moduleData, GameContext context, GameObject gameObject)
 {
     _gameObject    = gameObject;
     _gameContext   = context;
     _moduleData    = moduleData;
     _modelInstance = AddDisposable(_moduleData.Model.Value.CreateInstance(_gameContext.AssetLoadContext));
 }
Esempio n. 19
0
        public override void Bind(Entity entity, Main main, bool creating = false)
        {
            entity.CannotSuspend = true;
            ModelInstance model        = entity.GetOrCreate <ModelInstance>("Model");
            ImplodeBlock  implodeBlock = entity.GetOrCreate <ImplodeBlock>("ImplodeBlock");

            model.Add(new Binding <Matrix>(model.Transform, implodeBlock.Transform));

            implodeBlock.Add(new CommandBinding(implodeBlock.Delete, entity.Delete));

            this.SetMain(entity, main);

            IBinding offsetBinding = null;

            model.Add(new NotifyBinding(delegate()
            {
                if (offsetBinding != null)
                {
                    model.Remove(offsetBinding);
                }
                offsetBinding = new Binding <Vector3>(model.GetVector3Parameter("Offset"), implodeBlock.Offset);
                model.Add(offsetBinding);
            }, model.FullInstanceKey));
            if (implodeBlock.StateId != Voxel.t.Empty)
            {
                Voxel.States.All[implodeBlock.StateId].ApplyToEffectBlock(model);
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Passed as a delegate to List.Sort, to sort transparent instances by view-space depth
        /// </summary>
        private int CompareByDepth(ModelInstance a, ModelInstance b)
        {
            float aDepth = -Vector3.Transform(a.Position, camera.ViewMatrix).Z;
            float bDepth = -Vector3.Transform(b.Position, camera.ViewMatrix).Z;

            return((int)Math.Sign(aDepth - bDepth));
        }
Esempio n. 21
0
        public void SetModelName(string modelName)
        {
            var model = _gameContext.AssetLoadContext.AssetStore.Models.GetByName(modelName);

            _modelInstance = AddDisposable(model.CreateInstance(_gameContext.AssetLoadContext));
            _modelInstance.Update(TimeInterval.Zero);
        }
Esempio n. 22
0
        public ModelView(DiagnosticViewContext context, Model model)
            : base(context)
        {
            _modelInstance = AddDisposable(model.CreateInstance(context.Game.AssetStore.LoadContext));
            _modelInstance.Update(TimeInterval.Zero);

            var enclosingBoundingBox = GetEnclosingBoundingBox(_modelInstance);

            _renderedView = AddDisposable(new RenderedView(
                                              context,
                                              enclosingBoundingBox.GetCenter(),
                                              Vector3.Distance(enclosingBoundingBox.Min, enclosingBoundingBox.Max)));

            void OnBuildingRenderList(object sender, BuildingRenderListEventArgs e)
            {
                _modelInstance.SetWorldMatrix(Matrix4x4.Identity);
                _modelInstance.BuildRenderList(
                    e.RenderList,
                    e.Camera,
                    true,
                    new MeshShaderResources.RenderItemConstantsPS
                {
                    HouseColor = Vector3.One,
                    Opacity    = 1.0f
                });
            }

            _renderedView.RenderPipeline.BuildingRenderList += OnBuildingRenderList;
            AddDisposeAction(() => _renderedView.RenderPipeline.BuildingRenderList -= OnBuildingRenderList);
        }
Esempio n. 23
0
        private static BoundingBox GetEnclosingBoundingBox(ModelInstance modelInstance)
        {
            var boundingBox = default(BoundingBox);

            var first = true;

            foreach (var mesh in modelInstance.Model.Meshes)
            {
                var transformedBoundingBox = mesh.BoundingBox.Transform(
                    modelInstance.ModelBoneInstances[mesh.ParentBone.Index].Matrix);

                if (first)
                {
                    boundingBox = transformedBoundingBox;
                    first       = false;
                }
                else
                {
                    boundingBox = BoundingBox.CreateMerged(
                        boundingBox,
                        transformedBoundingBox);
                }
            }

            return(boundingBox);
        }
Esempio n. 24
0
            /// <summary>
            /// Initializes null list properties when updated via a call to <see cref="ModelInstanceList.Add"/> or <see cref="ModelInstanceList.Update"/>.
            /// </summary>
            /// <param name="instance"></param>
            /// <param name="property"></param>
            /// <returns></returns>
            protected override void InitializeList(ModelInstance instance, ModelReferenceProperty property)
            {
                if (property is ReflectionReferenceProperty)
                {
                    // Ensure the property is a writable BusinessObjectList property
                    var propertyInfo = ((ReflectionReferenceProperty)property).PropertyInfo;
                    var listType     = propertyInfo.PropertyType;

                    if (!listType.IsGenericType || listType.GetGenericTypeDefinition() != typeof(ICollection <>))
                    {
                        throw new NotSupportedException("List initialization is only supported for lists of type ICollection<T>.");
                    }

                    if (!propertyInfo.CanWrite)
                    {
                        throw new NotSupportedException("List initialization is only supported for writeable properties.");
                    }

                    var itemType = ((ReflectionModelType)property.PropertyType).UnderlyingType;

                    // Create the list
                    var list = typeof(ObservableCollection <>).MakeGenericType(itemType).GetConstructor(Type.EmptyTypes).Invoke(null);

                    // Assign the list to the property
                    propertyInfo.SetValue(instance.Instance, list, null);
                }
                else
                {
                    throw new NotSupportedException("List initialization is only supported for reflection-based properties.");
                }
            }
Esempio n. 25
0
File: Meta.cs Progetto: vc3/ExoWeb
 internal Meta(ScriptEngine engine, ModelInstance instance)
     : base(engine, engine.Object.InstancePrototype)
 {
     this.PopulateFunctions();
     this.instance = instance;
     this.typeWrapper = new TypeWrapper(engine, instance.Type);
 }
Esempio n. 26
0
 internal JsonInstance(ModelType type, string id)
 {
     this.Type          = type;
     this.Id            = id;
     this.instance      = new ModelInstance(this);
     instanceProperties = new object[Type.Properties.Count];
 }
Esempio n. 27
0
        /// <summary>
        /// Returns true if the step has references all the way to the root.
        /// </summary>
        /// <param name="instance">Instance to check</param>
        /// <param name="checkIfPropertyAccessed">Check if property has been accessed on the instance.</param>
        /// <returns></returns>
        internal bool IsReferencedToRoot(ModelInstance instance, bool checkIfPropertyAccessed)
        {
            // Exit immediately if the instance is not valid for the current step filter
            if (Filter != null && !Filter.IsInstanceOfType(instance))
            {
                return(false);
            }

            // Check if the current property has been accessed on the instance
            if (checkIfPropertyAccessed && !instance.HasBeenAccessed(Property))
            {
                return(false);
            }

            //if there's no previous steps then the step directly applies to the instance
            if (PreviousStep == null)
            {
                return(true);
            }

            //unless the previous step has references the step is not relevant to the instance.
            foreach (ModelReference parentReference in instance.GetInReferences((ModelReferenceProperty)PreviousStep.Property))
            {
                if (PreviousStep.IsReferencedToRoot(parentReference.In, false))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 28
0
        protected override void OnInit()
        {
            var direction = Tile.GetDirection(Level, Location);
            var behaviour = (TelepadTileBehaviour)Tile.Behaviour;
            var model     = behaviour.GetModel(Level, Location);
            var transform = Tile.BuildTransform(Location, direction);

            if (model != null)
            {
                m_model = new ModelInstance(model, transform);
            }
            Level.Telepads.AddTelepad(behaviour.Colour, Location);
            if (behaviour.Animation != null)
            {
                if (m_model != null)
                {
                    m_model.Animation = LuaAnimation.Get(behaviour.Animation);
                    m_model.AnimTime  = Level.TimeMachine.RealTime;
                }
            }
            if (behaviour.PFX != null)
            {
                if (m_model != null)
                {
                    m_emitter           = Level.Particles.Create(ParticleStyle.Get(behaviour.PFX), false, true);
                    m_emitter.Transform = transform;
                }
            }
        }
Esempio n. 29
0
        public AnimationInstance(ModelInstance modelInstance, W3DAnimation animation,
                                 AnimationMode mode, AnimationFlags flags)
        {
            _animation     = animation;
            _mode          = mode;
            _flags         = flags;
            _boneInstances = modelInstance.ModelBoneInstances;

            _keyframeIndices = new int[animation.Clips.Length];

            if (_flags.HasFlag(AnimationFlags.StartFrameFirst) ||
                _flags == AnimationFlags.None)
            {
                _currentTimeValue = TimeSpan.Zero;
            }
            else if (_flags.HasFlag(AnimationFlags.StartFrameLast))
            {
                _currentTimeValue = _animation.Duration;
            }
            else
            {
                //TODO: implement other flags
                //throw new NotImplementedException();
            }
        }
Esempio n. 30
0
        public void TestContextCreationGetInstance()
        {
            ModelType      outType;
            IList <string> propertyNames = new List <string>();

            propertyNames.Add("Employee Id");
            propertyNames.Add("Location");
            propertyNames.Add("FirstName");
            propertyNames.Add("LastName");
            provider.CreateType(propertyNames, out outType, "TypeName");

            //load a new instance
            string         employeeId     = "1";
            IList <string> instanceValues = new List <string>();

            instanceValues.Add(employeeId);
            instanceValues.Add("23");
            instanceValues.Add("John");
            instanceValues.Add("Doe");
            provider.CreateInstance(outType, instanceValues);
            RowInstance instance = provider.GetInstance(outType, employeeId);

            //now that the type has been created, try to retrieve the type from the context
            ModelInstance contextInstance = ModelContext.Current.GetModelInstance(instance);

            Assert.AreEqual(instance["_Employee_Id"], contextInstance["_Employee_Id"]);
        }
Esempio n. 31
0
 internal ConditionTarget(Condition condition, ModelInstance target, params string[] properties)
 {
     this.Condition  = condition;
     this.target     = new WeakReference(target);
     this.properties = properties;
     target.GetExtension <RuleManager>().SetCondition(this);
 }
Esempio n. 32
0
        public void Render(ModelInstance modelInstance, IEffect effect)
        {
            foreach (var meshInstance in modelInstance.MeshInstances)
            {
                var renderer = GetRendererFor(meshInstance);

                var dataStream = renderer.LockVertexBuffer();
                dataStream.WriteRange(meshInstance.VertexBuffer);
                renderer.UnlockVertexBuffer();

                if (meshInstance.TextureArea == null)
                {
                    meshInstance.TextureArea = _graphicsContext.GetTexture(meshInstance.TextureName);
                }

                if (meshInstance.TextureName != _lastTextureName)
                {
                    _lastTextureName = meshInstance.TextureName;

                    effect.SetTexture("tex0", meshInstance.TextureArea);
                    effect.CommitChanges();
                }

                renderer.RenderForShader(PrimitiveType.TriangleList, 0, meshInstance.TriangleCount);
            }
        }
Esempio n. 33
0
 internal W3dTreeDraw(W3dTreeDrawModuleData moduleData, GameContext context)
 {
     _gameContext   = context;
     _moduleData    = moduleData;
     _modelInstance = AddDisposable(_moduleData.Model.Value.CreateInstance(_gameContext.AssetLoadContext));
     //TODO: overwrite texture somehow & take care of other fields
 }
Esempio n. 34
0
        /***************************************************/

        private static Element ToRevitElement(this ModelInstance modelInstance, WallType wallType, RevitSettings settings)
        {
            if (wallType == null || modelInstance == null)
            {
                return(null);
            }

            if (!(modelInstance.Location is ICurve))
            {
                Compute.InvalidFamilyPlacementTypeError(modelInstance, wallType);
                return(null);
            }

            Document document = wallType.Document;

            ICurve curve = (ICurve)modelInstance.Location;

            Level level = document.LevelBelow(curve, settings);

            if (level == null)
            {
                return(null);
            }

            Curve revitCurve = curve.IToRevit();

            return(Wall.Create(document, revitCurve, level.Id, false));
        }
		private bool worldMatrixDirty = true; // set to true if worldMatrix is no longer valid, see 'UpdateWorldMatrix()'

		//create the actor
		public Actor(ContentRegister content, UpdateManager updateManager, MaterialLightCollection lights, float groundRadius)
		{
			this.groundRadius = groundRadius;

			model = new ModelInstance();
			model.LightCollection = lights;

			//force the model to render using spherical harmonic lighting
			//this will significantly improve performance on some hardware when GPU limited
			model.ShaderProvider = new Xen.Ex.Graphics.Provider.LightingDisplayShaderProvider(LightingDisplayModel.ForceSphericalHarmonic, model.ShaderProvider);

			//random starting position
			position = GetRandomPosition();

			//initially target the current position
			//the 'move to next target' timer will wind down and then the actor will move
			target = position;

			//randomize a bit
			lookAngle = (float)random.NextDouble() * MathHelper.TwoPi;
			moveSpeed = (float)random.NextDouble() * 0.9f + 0.1f;

			content.Add(this);
			updateManager.Add(this);


			InitaliseAnimations(updateManager);
		}
Esempio n. 36
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fxPlayback"></param>
        public void UpdateRenderState(FXPlayback fxPlayback, ModelManager modelManager)
        {
            if (sfxDirty)
            {
                sfxDirty = false;

                FXInstance?.Kill();
                FXInstance = null;

                if (sfx > 0)
                {
                    var fxe = new FXEvent(sfx, ID, Position, LinearVelocity, Rotation);
                    FXInstance = fxPlayback.RunFX(fxe, true);
                }
            }

            if (modelDirty)
            {
                modelDirty = false;

                ModelInstance?.Kill();
                ModelInstance = null;

                if (model > 0)
                {
                    ModelInstance = modelManager.AddModel(model, this);
                }
            }
        }
Esempio n. 37
0
        /// <summary>
        /// Calls tool use and fires use event from current entity state
        /// </summary>
        public IToolImpact ToolUse(ITool tool)
        {
            var arg = EntityUseEventArgs.FromState(this);

            arg.Tool = tool;


            if (tool != null)
            {
                using (new PerfLimit("Tool use logic " + tool.Name))
                    arg.Impact = tool.Use(this);
            }
            else
            {
                arg.Impact = new ToolImpact {
                    Message = "Null tool"
                };
            }

            OnUse(arg);

            if (ModelInstance != null)
            {
                ModelInstance.TryPlay("Use");
            }

            return(arg.Impact);
        }
Esempio n. 38
0
        protected override bool ConditionApplies(ModelInstance root)
        {
            var value = root[Property] as string;
            if (String.IsNullOrEmpty(value))
                return false;

            return (Maximum > 0 && value.Length > Maximum) || (Minimum > 0 && value.Length < Minimum);
        }
Esempio n. 39
0
 public ModelListChangeEvent(ModelInstance instance, ModelReferenceProperty property, IEnumerable<ModelInstance> added, IEnumerable<ModelInstance> removed)
     : base(instance)
 {
     this.Property = property;
     this.Added = added.ToArray();
     this.AddedIds = this.Added.Select(i => i.Id).ToArray();
     this.Removed = removed.ToArray();
     this.RemovedIds = this.Removed.Select(i => i.Id).ToArray();
 }
Esempio n. 40
0
 public ModelReferenceChangeEvent(ModelInstance instance, ModelReferenceProperty property, ModelInstance oldValue, ModelInstance newValue)
     : base(instance)
 {
     this.Property = property;
     this.OldValue = oldValue;
     this.OldValueId = (oldValue != null) ? oldValue.Id : null;
     this.NewValue = newValue;
     this.NewValueId = (newValue != null) ? newValue.Id : null;
 }
Esempio n. 41
0
        public Skydome(ContentRegister content, Vector3 position, float scale)
        {
            model = new ModelInstance();

            Matrix.CreateTranslation(ref position, out worldMatrix);
            Matrix.CreateScale(scale, out scaleMatrix);

            content.Add(this);
        }
Esempio n. 42
0
 /// <summary>
 /// Gets the formatted value of the property for the specified instance.
 /// </summary>
 protected internal override string GetFormattedValue(ModelInstance instance, string format, IFormatProvider provider)
 {
     if (IsList)
         return instance.GetList(this).ToString(format ?? Format, provider);
     else
     {
         var reference = instance.GetReference(this);
         return reference != null ? reference.ToString(format ?? Format, provider) : "";
     }
 }
Esempio n. 43
0
        public void RenderNoTexture(ModelInstance modelInstance)
        {
            foreach (var meshInstance in modelInstance.MeshInstances)
            {
                var vertexRenderer = GetRendererFor(meshInstance);

                var dataStream = vertexRenderer.LockVertexBuffer();
                dataStream.WriteRange(meshInstance.VertexBuffer);
                vertexRenderer.UnlockVertexBuffer();

                vertexRenderer.RenderForShader(PrimitiveType.TriangleList, 0, meshInstance.TriangleCount);
            }
        }
Esempio n. 44
0
        /// <summary>
        /// create a new actor
        /// </summary>
        /// <param name="content"></param>
        /// <param name="modelfile">model file to be loaded</param>
        /// <param name="position">position</param>
        /// <param name="scale_factor">scale</param>
        public Actor(ContentRegister content,String modelfile, Vector3 position, float scale_factor)
        {
            this.scale = scale_factor;
            this.position = position;

            Matrix.CreateTranslation(ref position, out this.worldMatrix);
            Matrix.CreateScale(scale_factor,out this.scaleMatrix);

            this.filename = modelfile;

            this.model = new ModelInstance();

            content.Add(this);
        }
		public Actor(ContentRegister content)
		{
			//A ModelInstance can be created without any content...
			//However it cannot be used until the content is set

			model = new ModelInstance();

			content.Add(this);

			//play an animation
			model.GetAnimationController().PlayLoopingAnimation(3);

			//This method creates a Cube for each bone in the mesh
			BuildBoundingBoxGeometry();
		}
Esempio n. 46
0
        public ModelValueChangeEvent(ModelInstance instance, ModelValueProperty property, object oldValue, object newValue)
            : base(instance)
        {
            this.Property = property;

            if (property.AutoConvert)
            {
                this.OldValue = oldValue == null ? null : property.Converter.ConvertTo(oldValue, typeof(object));
                this.NewValue = newValue == null ? null : property.Converter.ConvertTo(newValue, typeof(object));
            }
            else
            {
                this.OldValue = oldValue;
                this.NewValue = newValue;
            }
        }
Esempio n. 47
0
        private void ModelChanged(ModelInstance model)
        {
            if (model != null && model.Model != null && model.Model.SkinningData != null)
            {
                _worldTransforms = new Matrix4x4[_model.Model.SkinningData.BindPose.Length];
                _skinTransforms = new Matrix4x4[_model.Model.SkinningData.BindPose.Length];

                var skinning = _model.Model.SkinningData;
                AnimationHelpers.CalculateWorldTransformsFromBoneTransforms(skinning.SkeletonHierarchy, skinning.BindPose, _worldTransforms);
            }
            else
            {
                _worldTransforms = null;
                _skinTransforms = null;
            }
        }
Esempio n. 48
0
        public SimpleTerrain(ContentRegister content, Vector3 position, string modelDataName)
        {
            this.modelDataName = modelDataName;

            //Matrix.CreateTranslation(ref position, out this.worldMatrix);
            this.worldMatrix = Matrix.CreateTranslation(position);// *Matrix.CreateScale(2.0f); // needed for physics

            //A ModelInstance can be created without any content...
            //However it cannot be used until the content is set
            this.model = new ModelInstance();

            this.terrainShader = new Shaders.SimpleTerrain();

            PickingDrawer = new LightSourceDrawer(Vector3.Zero, new Xen.Ex.Geometry.Sphere(new Vector3(3), 8, true, false, false), Color.Red);

            //add to the content register and load textures/etc
            content.Add(this);
        }
Esempio n. 49
0
        public override Entity Create(Main main)
        {
            Entity result = new Entity(main, "Block");

            Transform transform = new Transform();
            result.Add("Transform", transform);

            PhysicsBlock physics = new PhysicsBlock();
            result.Add("Physics", physics);

            Property<string> cue = new Property<string> { Value = "ConcreteRubble" };
            result.Add("CollisionSoundCue", cue);

            ModelInstance model = new ModelInstance();
            result.Add("Model", model);
            model.Scale.Value = new Vector3(0.5f);

            return result;
        }
Esempio n. 50
0
        internal void RunPendingPropertyGetRules(ModelInstance instance, Func<ModelProperty, bool> when)
        {
            // First run all rules for return values associated with properties that have not yet been accessed
            foreach (Rule rule in instance.GetRules()
                    .Where(rule => (rule.InvocationTypes & RuleInvocationType.PropertyGet) > 0 && rule.ReturnValues.Select(p => rule.RootType.Properties[p])
                    .Any(p => when(p) && !instance.HasBeenAccessed(p))))
                rule.Invoke(instance, null);

            // Then run any property get rules that are pending invocation due to changes in the model
            pendingInvocation.RemoveWhere(rule =>
                {
                    if ((rule.InvocationTypes & RuleInvocationType.PropertyGet) > 0 && rule.ReturnValues.Select(p => rule.RootType.Properties[p]).Any(when))
                    {
                        rule.Invoke(instance, null);
                        return true;
                    }
                    return false;
                });
        }
		public Actor(ContentRegister content, Vector3 position)
		{
			//set the world matrix
			Matrix.CreateTranslation(ref position, out this.worldMatrix);

			//A ModelInstance can be created without any content...
			//However it cannot be used until the content is set

			this.model = new ModelInstance();

			//Note:
			// When a model is drawn, by default it will bind and use a MaterialShader.
			// This shader uses the material properties stored in the original mesh.
			// If you don't want to use the MaterialShader, simply set the property
			// model.ShaderProvider to null.
			

			//add to the content register
			content.Add(this);
		}
		//NEW CODE
		public Actor(ContentRegister content, MaterialLightCollection lights)
		{
			//A ModelInstance can be created without any content...
			//However it cannot be used until the content is set

			model = new ModelInstance();
			model.LightCollection = lights;	//this class is reused by later tutorials, which require lights

			//get and create the animation controller for this model.
			animationController = model.GetAnimationController();

			//NOTE: Animations cannot be played until the model data has been loaded...

			content.Add(this);

			//At this point in this tutorial, the model is now loaded.

			//get the index of the walk animation
			//this model has 4 animations, Wave, Jog, Walk and Loiter
			//The animations are stored in model.ModelData.Animations
			int animationIndex = animationController.AnimationIndex("Walk");

			//begin playing the animation, looping
			animation = animationController.PlayLoopingAnimation(animationIndex);

			//as many animations as you want can be played at any one time
			//to blend between animations, adjust their weighting with:
			//animation.Weighting = ...;
			//Combined weightings usually should add up to 1.0
			//A weighting of 0 means the animation has no effect, 1 has normal effect.
			//Values outside the 0-1 range usually produces undesirable results.

			//Note:
			//Animations in xen are lossy compressed.
			//For the model used here, the animation data is reduced from nearly 2mb
			//down to around 200kb. (The model geometry is less than 300kb)
			//The amount of compression change can be configured in the content's properties
			//The 'Animation Compression Tolerance' value is a percentage
			//The default is .5%. This means the animation will always be within .5%
			//of the source. Setting this value to 0 will save a lossless animation.
		}
Esempio n. 53
0
        protected override bool ConditionApplies(ModelInstance root)
        {
            // First, get the string value to validate
            var value = root[Property] as string;
            if (String.IsNullOrEmpty(value))
                return false;

            // Then get the regular expression to use
            Regex exp = FormatExpression;
            if (exp == null)
                return false;

            // Indicate that the value is invalid if the regular expression does not match
            if (!exp.IsMatch(value))
                return true;

            // Reformat if necessary
            var reformat = ReformatExpression;
            if (reformat != null)
                root[Property] = exp.Replace(value, reformat);

            // Indicate that the value is valid
            return false;
        }
Esempio n. 54
0
        public override Entity Create(Main main)
        {
            Entity result = new Entity(main, "EffectBlock");

            Transform transform = new Transform();
            result.Add("Transform", transform);

            ModelInstance model = new ModelInstance();
            result.Add("Model", model);

            result.Add("Offset", new Property<Vector3> { Editable = false });
            result.Add("Lifetime", new Property<float> { Editable = false });
            result.Add("TotalLifetime", new Property<float> { Editable = true });
            result.Add("StartPosition", new Property<Vector3> { Editable = true });
            result.Add("StartOrientation", new Property<Matrix> { Editable = false });
            result.Add("TargetMap", new Property<Entity.Handle> { Editable = true });
            result.Add("TargetCoord", new Property<Map.Coordinate> { Editable = false });
            result.Add("TargetCellStateID", new Property<int> { Editable = true });
            result.Add("Scale", new Property<bool> { Editable = true, Value = true });

            return result;
        }
Esempio n. 55
0
 /// <summary>
 /// Gets the formatted value of the property for the specified instance.
 /// </summary>
 protected internal override string GetFormattedValue(ModelInstance instance, string format, IFormatProvider provider)
 {
     return FormatValue(GetValue(instance.Instance), format ?? Format, provider);
 }
Esempio n. 56
0
 /// <summary>
 /// Gets the formatted value of the property for the specified instance.
 /// </summary>
 protected internal override string GetFormattedValue(ModelInstance instance, string format)
 {
     return FormatValue(GetValue(instance.Instance), format, null);
 }
Esempio n. 57
0
        protected override bool ConditionApplies(ModelInstance root)
        {
            object value = root[Property];

            if (value == null || (value is double && double.IsNaN((double)value)))
                return false;

            // min <= value <= max
            // CompareTo = 0: equal, >0: instance > value
            if (Minimum != null && Maximum != null)
                return Minimum.CompareTo(value) > 0 && Maximum.CompareTo(value) < 0;
            else if (Minimum != null)
                return Minimum.CompareTo(value) > 0;
            else if (Maximum != null)
                return Maximum.CompareTo(value) < 0;
            else
                return false;
        }
Esempio n. 58
0
        protected override bool ConditionApplies(ModelInstance root)
        {
            var value = root[Property];

            // Exit immediately if the target property has a value
            if (RequiredValue == null && (value != null &&
                (!(Property is ModelReferenceProperty) || !Property.IsList || root.GetList((ModelReferenceProperty)Property).Count > 0)))
                return false;

            // If the required value is specified then the value must equal the required value
            var requiredValueCondition = RequiredValue == null || !RequiredValue.Equals(value);

            // Invoke the ModelExpression if it exists
            if (RequiredExpression != null)
            {
                try
                {
                    return (bool)RequiredExpression.Invoke(root) && requiredValueCondition;
                }
                catch
                {
                    return false;
                }
            }
            // If the value to compare is null, then evaluate whether the compare source has a value
            else if (CompareValue == null)
                return (CompareOperator == CompareOperator.Equal ? !compareSource.HasValue(root) : compareSource.HasValue(root)) && requiredValueCondition;

            // Otherwise, perform a comparison of the compare source relative to the compare value
            bool? result = CompareRule.Compare(compareSource.GetValue(root), CompareOperator, CompareValue);
            return result.HasValue && result.Value && requiredValueCondition;
        }
Esempio n. 59
0
File: Page.cs Progetto: vc3/ExoWeb
 private ModelStep FirstApplicableStep(ModelInstance instance, ModelStepList steps)
 {
     if (instance == null)
         return steps.FirstOrDefault();
     else
         return steps.Where(s => s.Property.DeclaringType.IsInstanceOfType(instance)).FirstOrDefault();
 }
Esempio n. 60
0
 protected override void SaveInstance(ModelInstance modelInstance)
 {
     throw new NotImplementedException();
 }