4 using System.Collections.Generic;
5 using System.Collections.Specialized;
7 using System.Threading.Tasks;
8 using SiliconStudio.Core.Mathematics;
9 using SiliconStudio.Paradox.Effects;
10 using SiliconStudio.Paradox.Effects.Data;
11 using SiliconStudio.Paradox.EntityModel;
12 using SiliconStudio.Paradox.Games;
13 using SiliconStudio.Core.Extensions;
14 using SiliconStudio.Core;
15 using SiliconStudio.Core.Collections;
16 using SiliconStudio.Core.Serialization.Assets;
17 using SiliconStudio.Core.Serialization.Contents;
19 namespace SiliconStudio.
Paradox.Engine
29 private FastCollection<TransformationComponent> linkTransformationToUpdate =
new FastCollection<TransformationComponent>();
32 : base(new
PropertyKey[] { ModelComponent.Key, TransformationComponent.Key })
36 protected internal override void OnSystemAdd()
38 renderSystem = Services.GetSafeServiceAs<
RenderSystem>();
48 associatedData.RenderModels =
new List<KeyValuePair<ModelRendererState, RenderModel>>();
52 var modelInstance = associatedData.ModelComponent;
54 foreach (var pipeline
in renderSystem.Pipelines)
56 var modelRenderState = pipeline.GetOrCreateModelRendererState();
59 if (!modelRenderState.IsValid || !modelRenderState.AcceptModel(modelInstance))
64 var renderModel =
new RenderModel(pipeline, modelInstance);
65 if (renderModel.RenderMeshes == null)
71 associatedData.RenderModels.Add(
new KeyValuePair<ModelRendererState, RenderModel>(modelRenderState, renderModel));
77 base.OnEntityRemoved(entity, data);
82 var modelEntityData = matchingEntities[modelComponent.Entity];
83 var nodeIndex = modelEntityData.ModelComponent.ModelViewHierarchy.Nodes.IndexOf(x => x.Name == boneName);
89 linkedEntity.Transformation.isSpecialRoot =
true;
90 linkedEntity.Transformation.UseTRS =
false;
92 if (modelEntityData.Links == null)
93 modelEntityData.Links =
new List<EntityLink>();
95 modelEntityData.Links.Add(entityLink);
109 return modelEntityData.Links.Remove(entityLink);
115 foreach (var pipeline
in renderSystem.Pipelines)
117 var renderMeshState = pipeline.GetOrCreateModelRendererState();
118 renderMeshState.RenderModels.Clear();
122 foreach (var matchingEntity
in enabledEntities)
125 if (!matchingEntity.Value.ModelComponent.Enabled)
130 var modelViewHierarchy = matchingEntity.Value.ModelComponent.ModelViewHierarchy;
132 var transformationComponent = matchingEntity.Value.TransformationComponent;
134 var links = matchingEntity.Value.Links;
137 modelViewHierarchy.NodeTransformations[0].LocalMatrix = transformationComponent.WorldMatrix;
138 modelViewHierarchy.UpdateMatrices();
145 foreach (var link
in matchingEntity.Value.Links)
147 var linkTransformation = link.Entity.Transformation;
148 linkTransformation.LocalMatrix = modelViewHierarchy.NodeTransformations[link.NodeIndex].WorldMatrix;
150 linkTransformationToUpdate.Clear();
151 linkTransformationToUpdate.Add(linkTransformation);
152 TransformationProcessor.UpdateTransformations(linkTransformationToUpdate,
false);
156 foreach (var renderModelEntry
in matchingEntity.Value.RenderModels)
158 var renderModelState = renderModelEntry.Key;
159 var renderModel = renderModelEntry.Value;
161 if (!renderModelState.AcceptRenderModel(renderModel))
167 renderModelState.RenderModels.Add(renderModel);
170 modelViewHierarchy.UpdateToRenderModel(renderModel);
173 MeshSkinningUpdater.Update(modelViewHierarchy, renderModel);
184 internal List<KeyValuePair<ModelRendererState, RenderModel>> RenderModels;
ModelComponent ModelComponent
override AssociatedData GenerateAssociatedData(Entity entity)
override void OnEntityRemoved(Entity entity, AssociatedData data)
Game entity. It usually aggregates multiple EntityComponent
ModelComponent ModelComponent
TransformationComponent TransformationComponent
TransformationComponent Transformation
Gets or sets the Transformation associated to this entity. Added for convenience over usual Get/Set m...
Entity Entity
Gets or sets the owner entity.
Entity processor, triggered on various EntitySystem events such as Entity and Component additions and...
bool UnlinkEntity(EntityLink entityLink)
override void OnEntityAdding(Entity entity, AssociatedData associatedData)
EntityLink LinkEntity(Entity linkedEntity, ModelComponent modelComponent, string boneName)
Current timing used for variable-step (real time) or fixed-step (game time) games.
Renders its RenderSystem.Pipeline, which will usually result in drawing all meshes, UI, etc...
Add a Model to an Entity, that will be used during rendering.
Instantiation of a Model through a RenderPipeline.
A class that represents a tag propety.
override void Draw(GameTime time)