Holding Geometry Data uploaded to the GPU.
Inheritance: IDisposable
Example #1
0
        public ModelMesh(GameMode gameMode, Assimp.Scene assimpScene, Assimp.Mesh assimpMesh, string modelDirectory)
        {
            var geometryData = GenerateGeometryDataFromAssimpMesh(assimpMesh);

            gameMode.EnsureExecutedInMainThread(() => Mesh = new Mesh(gameMode.GraphicsDevice, geometryData));
            Material = GenerateMaterialFromMesh(assimpMesh.MaterialIndex, gameMode, assimpScene, modelDirectory);
        }
Example #2
0
        public void Preload()
        {
            var data = FileLoader.GetFiles(new[]
            {
                PrimitivesFilePath,
                NaturesFilePath,
                TypesFilePath,
                PokedexesFilePath
            });

            _primitiveModels = DataModel <PrimitiveModel[]> .FromByteArray(data[0].Data);

            foreach (var primitiveModel in _primitiveModels)
            {
                var geometryData = new GeometryData
                {
                    Vertices = primitiveModel.Vertices.Select(v => new VertexPositionNormalTexture
                    {
                        Position          = v.Position.GetVector3(),
                        TextureCoordinate = v.TexCoord.GetVector2(),
                        Normal            = v.Normal.GetVector3()
                    }).ToArray(),
                    Indices = primitiveModel.Indices.Select(i => (ushort)i).ToArray()
                };

                Mesh mesh = null;
                GameContext.EnsureExecutedInMainThread(() => mesh = new Mesh(GraphicsDevice, geometryData));
                _meshPrimitivesByName.Add(primitiveModel.Id, mesh);
            }

            _natureModels = DataModel <NatureModel[]> .FromByteArray(data[1].Data);

            _typeModels = DataModel <TypeModel[]> .FromByteArray(data[2].Data);

            _pokedexModels = DataModel <PokedexModel[]> .FromByteArray(data[3].Data);

            var movesFilePaths = FileLoader.GetFilesOfFolder(MoveFilesPath);

            _moveModels = movesFilePaths.Select(d => DataModel <MoveModel> .FromByteArray(d.Data)).ToArray();

            var itemsFiles = FileLoader.GetFilesOfFolder(ItemFilesPath);

            _itemModels = itemsFiles.Select(d => DataModel <ItemModel> .FromByteArray(d.Data)).ToArray();

            var abilityFiles = FileLoader.GetFilesOfFolder(AbilityFilesPath);

            _abilityModels = abilityFiles.Select(d => DataModel <AbilityModel> .FromByteArray(d.Data)).ToArray();
        }
Example #3
0
        public CollisionManager()
        {
            _allColliders = new List<Collider>();
            _allTriggers = new List<Collider>();
            _allTriggersAndColliders = new List<Collider>();

            var geometryBox = new GeometryData
            {
                Vertices = new[]
                {
                    new VertexPositionNormalTexture(new Vector3(-0.5f, -0.5f, -0.5f), Vector3.Zero, Vector2.Zero),
                    new VertexPositionNormalTexture(new Vector3( 0.5f, -0.5f, -0.5f), Vector3.Zero, Vector2.Zero),
                    new VertexPositionNormalTexture(new Vector3(0.5f, -0.5f,  0.5f), Vector3.Zero, Vector2.Zero),
                    new VertexPositionNormalTexture(new Vector3(-0.5f, -0.5f, 0.5f), Vector3.Zero, Vector2.Zero),

                    new VertexPositionNormalTexture(new Vector3(-0.5f, 0.5f, -0.5f), Vector3.Zero, Vector2.Zero),
                    new VertexPositionNormalTexture(new Vector3( 0.5f, 0.5f, -0.5f), Vector3.Zero, Vector2.Zero),
                    new VertexPositionNormalTexture(new Vector3(0.5f, 0.5f,  0.5f), Vector3.Zero, Vector2.Zero),
                    new VertexPositionNormalTexture(new Vector3(-0.5f, 0.5f, 0.5f), Vector3.Zero, Vector2.Zero),
                },
                Indices = new ushort[]
                {
                    0,1,1,2,2,3,3,0,
                    4,5,5,6,6,7,7,4,
                    0,4,1,5,2,6,3,7
                }
            };

            _boundingBoxMesh = new Mesh(GameInstance.GraphicsDevice, geometryBox, PrimitiveType.LineList, false)
            {
                PreventDrawCallCount = true
            };

            _lineDrawEffect = GameInstance.Content.Load<Effect>(ResourceNames.Effects.DebugShadowMap);
            _worldViewProjection = _lineDrawEffect.Parameters["WorldViewProjection"];
            _modulateColor = _lineDrawEffect.Parameters["Color"];
            _lineTechnique = _lineDrawEffect.Techniques["LineDraw"];
        }
Example #4
0
        public Player(World world)
        {
            var playerEntity = world.EntitySystem.CreateEntity(true);
            var collisionSize = new Vector3(0.35f, 0.6f, 0.35f);
            var collisionOffset = new Vector3(0.0f, 0.3f, 0.0f);
            var mesh = new Mesh(GameInstance.GraphicsDevice, Primitives.GenerateQuadForYBillboard());
            var diffuseTexture = GameInstance.Content.Load<Texture2D>(ResourceNames.Textures.DefaultGuy);
            var material = new Material
            {
                DiffuseTexture = diffuseTexture,
                UseTransparency = true,
                TexcoordScale = diffuseTexture.GetTexcoordsFromPixelCoords(32, 32),
                IsUnlit = true
            };
            
            playerEntity.AddComponent(new ModelEntityComponent(playerEntity, mesh, material, true));
            playerEntity.AddComponent(new FigureMovementAnimationComponent(playerEntity, diffuseTexture));
            playerEntity.AddComponent(new CollisionEntityComponent(playerEntity, collisionSize, collisionOffset, "Player", true));
            playerEntity.Position = new Vector3(5, 0, 8);

            var cameraEntity = world.EntitySystem.CreateEntity(true);
            cameraEntity.SetParent(playerEntity);
            _controllerComponent = cameraEntity.AddComponent(new PlayerControllerComponent(cameraEntity));
            var cameraComponent = cameraEntity.AddComponent(new CameraEntityComponent(cameraEntity, new Skybox(GameInstance)
            {
                Scale = 50,
                Texture = GameInstance.Content.Load<Texture2D>(ResourceNames.Textures.skybox_texture)
            }));
            cameraComponent.FarClipDistance = 50.0f;
            Camera = cameraComponent.Camera;

            var overlayCamera = cameraEntity.AddComponent(new CameraEntityComponent(cameraEntity, null, CameraMasks.UiOverlays));
            overlayCamera.Camera.FarClipDistance = 100.0f;
            overlayCamera.Camera.ClearColor = null;
            overlayCamera.Camera.DepthClear = 1.0f;
            overlayCamera.Camera.DepthStencilState = DepthStencilState.Default;
        }
Example #5
0
        /// <summary>
        /// Merges a list of entities. These entities must be static and contain a visual component only.
        /// </summary>
        /// <param name="entitiesToMerge">Entites to merge.</param>
        /// <returns>Merged list of entities.</returns>
        public List<Entity> MergeStaticVisualEntities(IList<Entity> entitiesToMerge)
        {
            var entitiesToMergeList = entitiesToMerge.Where(IsVisualEntityToMerge).ToArray();
            var entitiesNotToMerge = entitiesToMerge.Except(entitiesToMergeList).ToArray();
            var entitiesByCategory = entitiesToMergeList.GroupBy(e => e.GetComponent<ModelEntityComponent>().Material.CompareId);

            var mergedEntities = new List<Entity>();

            foreach (var entityListToMerge in entitiesByCategory)
            {
                if (entityListToMerge.Count() == 1) continue;

                var entity = CreateEntity(true);

                var mergeData = entityListToMerge.Select(ConvertEntityToGeometryMerge);

                var mergedGeometry = GeometryData.Merge(mergeData);
                Mesh mergedMesh = null;

                GameInstance.EnsureExecutedInMainThread(() => mergedMesh = new Mesh(GameController.Instance.GraphicsDevice, mergedGeometry));
                var material = entityListToMerge.First().GetComponent<ModelEntityComponent>().Material;
                material.TexcoordOffset = Vector2.Zero;
                material.TexcoordScale = Vector2.One;

                entity.AddComponent(new ModelEntityComponent(entity, mergedMesh, material, false));

                foreach (var entityToRemove in entityListToMerge)
                {
                    RemoveEntity(entityToRemove);
                }

                mergedEntities.Add(entity);
            }

            return mergedEntities.Concat(entitiesNotToMerge).ToList();
        }
Example #6
0
        public ModelMesh(GameMode gameMode, Assimp.Scene assimpScene, Assimp.Mesh assimpMesh, string modelDirectory)
        {
            var geometryData = GenerateGeometryDataFromAssimpMesh(assimpMesh);

            gameMode.EnsureExecutedInMainThread(() => Mesh = new Mesh(gameMode.GraphicsDevice, geometryData));
            Material = GenerateMaterialFromMesh(assimpMesh.MaterialIndex, gameMode, assimpScene, modelDirectory);
        }
Example #7
0
        public void Preload()
        {
            var data = FileLoader.GetFiles(new[]
            {
                PrimitivesFilePath,
                NaturesFilePath,
                TypesFilePath,
                PokedexesFilePath
            });

            _primitiveModels = DataModel<PrimitiveModel[]>.FromByteArray(data[0].Data);
            foreach (var primitiveModel in _primitiveModels)
            {
                var geometryData = new GeometryData
                {
                    Vertices = primitiveModel.Vertices.Select(v => new VertexPositionNormalTexture
                    {
                        Position = v.Position.GetVector3(),
                        TextureCoordinate = v.TexCoord.GetVector2(),
                        Normal = v.Normal.GetVector3()
                    }).ToArray(),
                    Indices = primitiveModel.Indices.Select(i => (ushort)i).ToArray()
                };

                Mesh mesh = null;
                GameContext.EnsureExecutedInMainThread(() => mesh = new Mesh(GraphicsDevice, geometryData));
                _meshPrimitivesByName.Add(primitiveModel.Id, mesh);
            }

            _natureModels = DataModel<NatureModel[]>.FromByteArray(data[1].Data);
            _typeModels = DataModel<TypeModel[]>.FromByteArray(data[2].Data);
            _pokedexModels = DataModel<PokedexModel[]>.FromByteArray(data[3].Data);

            var movesFilePaths = FileLoader.GetFilesOfFolder(MoveFilesPath);
            _moveModels = movesFilePaths.Select(d => DataModel<MoveModel>.FromByteArray(d.Data)).ToArray();

            var itemsFiles = FileLoader.GetFilesOfFolder(ItemFilesPath);
            _itemModels = itemsFiles.Select(d => DataModel<ItemModel>.FromByteArray(d.Data)).ToArray();

            var abilityFiles = FileLoader.GetFilesOfFolder(AbilityFilesPath);
            _abilityModels = abilityFiles.Select(d => DataModel<AbilityModel>.FromByteArray(d.Data)).ToArray();
        }
 public ModelEntityComponent(Entity referringEntity, Mesh mesh, Material material, bool isBillboard) : base(referringEntity)
 {
     _drawableElement = GameInstance.GetService<SceneRenderer>().CreateDrawableElement(true);
     _drawableElement.Material = material;
     _drawableElement.Mesh = mesh;
     IsBillboard = isBillboard;
 }