public SceneNode GetSceneNode(IDictionary <string, object> parameters, GameEntity entity)
        {
            var            materialFunc = GetMaterialFunc();
            SceneNode      scn          = new SceneNode();
            MeshAttachable mesh         = new MeshAttachable(Name, Platform.Instance.Content.Load <Model>(Mesh), materialFunc(parameters));

            GameWorldManager.Instance.RegisterMesh(mesh, entity);
            scn.AddAttachable(mesh);

            return(scn);
        }
        private void GameEntityCreateSceneNodes(GameEntity entity, Vector3 scale, IDictionary <string, object> parameters)
        {
            /* create main node */
            SceneNode mainNode = new SceneNode();

            /* rest of nodes */
            foreach (MeshSceneNodePrefab scnp in _sceneNodesPrefab.Values)
            {
                SceneNode scn = scnp.GetSceneNode(parameters, entity);
                entity.SceneNodes.Add(scnp.Name, scn);
                mainNode.AddChild(scn);
                scn.SetScale(scn.GetScale() * scale);
            }

            foreach (ArrayMeshSceneNodePrefab ascnp in _arrayMeshSceneNodesPrefab.Values)
            {
                for (int i = ascnp.StartIndex; i <= ascnp.EndIndex; i++)
                {
                    SceneNode scn = ascnp.GetSceneNode(parameters, entity);
                    mainNode.AddChild(scn);
                    scn.SetScale(scale);

                    if (ascnp.Path != null && entity.PhysicsEntity.GetBodyFromPath(ascnp.Path, i) != null)
                    {
                        BodyController controller = new BodyController(scn, entity.PhysicsEntity.GetBodyFromPath(ascnp.Path, i), entity);
                        entity.BodyControllers.Add(controller);

                        FrameUpdateManager.Instance.Register(controller);
                    }
                }
            }

            foreach (var cameraSceneNodePrefab in _cameraSceneNodesPrefab)
            {
                mainNode.AddAttachable(
                    new CameraAttachable(cameraSceneNodePrefab.Value.LookingDirection,
                                         cameraSceneNodePrefab.Value.UpVector,
                                         cameraSceneNodePrefab.Value.Near,
                                         cameraSceneNodePrefab.Value.Far,
                                         cameraSceneNodePrefab.Value.Fov,
                                         cameraSceneNodePrefab.Value.AspectRatio)
                    );
            }

            /* finish main node */
            SceneManager.Instance.RegisterSceneTree(mainNode);
            entity.MainNode = mainNode;
        }
Beispiel #3
0
        public SceneNode GetSceneNode(IDictionary <string, object> parameters, GameEntity entity)
        {
            var            materialFunc = GetMaterialFunc();
            SceneNode      scn          = new SceneNode();
            MeshAttachable mesh         = new MeshAttachable(Name, Platform.Instance.Content.Load <Model>(Mesh), materialFunc(parameters));

            GameWorldManager.Instance.RegisterMesh(mesh, entity);
            scn.AddAttachable(mesh);

            scn.SetPosition(LocalPosition);
            scn.SetRotation(LocalRotation);
            scn.SetScale(LocalScale);
            scn.Invisible  = Invisible;
            scn.DrawsDepth = DrawsDepth;

            return(scn);
        }