257 lines
6.0 KiB
C
257 lines
6.0 KiB
C
![]() |
/*
|
||
|
* This file is part of the Colobot: Gold Edition source code
|
||
![]() |
* Copyright (C) 2001-2023, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||
![]() |
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||
![]() |
*
|
||
|
* This program is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation, either version 3 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
* See the GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program. If not, see http://gnu.org/licenses
|
||
|
*/
|
||
|
|
||
![]() |
#pragma once
|
||
|
|
||
|
#include "graphics/model/model_triangle.h"
|
||
|
|
||
![]() |
namespace Gfx
|
||
|
{
|
||
![]() |
|
||
|
/*******************************************************
|
||
|
Deprecated enums/magic values
|
||
|
*******************************************************/
|
||
|
|
||
|
/**
|
||
|
* \enum ModelLODLevel
|
||
|
* \brief Old level-of-detail enum
|
||
|
*
|
||
|
* @deprecated
|
||
|
*/
|
||
|
enum class ModelLODLevel
|
||
|
{
|
||
|
Constant = -1, //!< triangle is always visible, no matter at what distance
|
||
|
Low = 1, //!< triangle is visible at farthest distance (lowest quality)
|
||
|
Medium = 2, //!< triangle is visible at medium distance (medium quality)
|
||
|
High = 4 //!< triangle is visible at closest distance (highest quality)
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* \enum ModelRenderState
|
||
|
* \brief Old render state enum (values copied from EngineRenderState)
|
||
|
*
|
||
|
* @deprecated
|
||
|
*/
|
||
|
enum class ModelRenderState
|
||
|
{
|
||
|
Part1 = 256, //!< old ENG_RSTATE_PART1
|
||
|
Part2 = 512, //!< old ENG_RSTATE_PART2
|
||
|
Part3 = 1024, //!< old ENG_RSTATE_PART3
|
||
|
TwoFace = 4096, //!< old ENG_RSTATE_2FACE
|
||
|
Alpha = 8192 //!< old ENG_RSTATE_ALPHA
|
||
|
};
|
||
|
|
||
![]() |
//! Legacy material structure
|
||
|
struct LegacyMaterial
|
||
|
{
|
||
|
//! Diffuse color
|
||
|
Color diffuse;
|
||
|
//! Ambient color
|
||
|
Color ambient;
|
||
|
//! Specular color
|
||
|
Color specular;
|
||
|
|
||
|
bool operator==(const LegacyMaterial& mat) const
|
||
|
{
|
||
|
return diffuse == mat.diffuse && ambient == mat.ambient && specular == mat.specular;
|
||
|
}
|
||
|
|
||
|
bool operator!=(const LegacyMaterial& mat) const
|
||
|
{
|
||
|
return !operator==(mat);
|
||
|
}
|
||
|
};
|
||
|
|
||
![]() |
/*******************************************************
|
||
|
New model formats
|
||
|
*******************************************************/
|
||
|
|
||
|
/**
|
||
|
* \struct ModelHeaderV1AndV2
|
||
|
* \brief Header for new model file version 1 and 2
|
||
|
*/
|
||
|
struct ModelHeaderV1AndV2
|
||
|
{
|
||
|
//! File version (1, 2, ...)
|
||
|
int version = 0;
|
||
|
//! Total number of triangles
|
||
|
int totalTriangles = 0;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* \struct ModelTriangleV1AndV2
|
||
|
* \brief Triangle of new model file version 1 and 2
|
||
|
*/
|
||
|
struct ModelTriangleV1AndV2
|
||
|
{
|
||
|
//! 1st vertex
|
||
![]() |
Vertex3D p1;
|
||
![]() |
//! 2nd vertex
|
||
![]() |
Vertex3D p2;
|
||
![]() |
//! 3rd vertex
|
||
![]() |
Vertex3D p3;
|
||
![]() |
//! Name of 1st texture
|
||
|
std::string tex1Name;
|
||
|
//! Name of 2nd texture
|
||
|
std::string tex2Name;
|
||
|
//! If true, 2nd texture will be taken from current engine setting
|
||
|
bool variableTex2 = true;
|
||
|
//! LOD level (only version 1)
|
||
|
ModelLODLevel lodLevel = ModelLODLevel::Constant;
|
||
|
//! Rendering state to be set
|
||
|
int state = 0;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* \struct ModelHeaderV3
|
||
|
* \brief Header for new model file version 3
|
||
|
*/
|
||
|
struct ModelHeaderV3
|
||
|
{
|
||
|
//! File version (1, 2, ...)
|
||
|
int version = 0;
|
||
|
//! Total number of crash spheres
|
||
|
int totalCrashSpheres = 0;
|
||
|
//! Whether model has shadow spot
|
||
![]() |
bool hasShadowSpot = false;
|
||
|
//! Whether model has camera collision sphere
|
||
|
bool hasCameraCollisionSphere = false;
|
||
|
//! Total number of meshes
|
||
|
int totalMeshes = 0;
|
||
![]() |
};
|
||
|
|
||
|
/**
|
||
|
* \struct ModelMeshHeaderV3
|
||
|
* \brief Header for mesh saved in new model file version 3
|
||
|
*/
|
||
|
struct ModelMeshHeaderV3
|
||
|
{
|
||
|
//! Total number of triangles
|
||
|
int totalTriangles = 0;
|
||
|
//! Mesh name
|
||
|
std::string name;
|
||
|
//! Parent mesh name
|
||
|
std::string parentName;
|
||
|
//! Mesh position
|
||
![]() |
glm::vec3 position = { 0, 0, 0 };
|
||
![]() |
//! Mesh rotation
|
||
![]() |
glm::vec3 rotation = { 0, 0, 0 };
|
||
![]() |
//! Mesh scale
|
||
![]() |
glm::vec3 scale = { 1, 1, 1 };
|
||
![]() |
};
|
||
|
|
||
|
/**
|
||
|
* \struct ModelTriangleV3
|
||
|
* \brief Mesh triangle saved in new model file version 3
|
||
|
*
|
||
|
* NOTE: this is newest version, always same as ModelTriangle struct.
|
||
|
*/
|
||
|
struct ModelTriangleV3 : ModelTriangle {};
|
||
|
|
||
|
|
||
|
|
||
|
/*******************************************************
|
||
|
Deprecated formats
|
||
|
*******************************************************/
|
||
|
|
||
|
/**
|
||
|
* \struct OldModelHeader
|
||
|
* \brief Old Colobot binary model header info
|
||
|
*
|
||
|
* @deprecated
|
||
|
*/
|
||
|
struct OldModelHeader
|
||
|
{
|
||
|
//! Revision number
|
||
![]() |
int revision = 0;
|
||
![]() |
//! Version number
|
||
![]() |
int version = 0;
|
||
![]() |
//! Total number of triangles
|
||
![]() |
int totalTriangles = 0;
|
||
![]() |
//! Reserved area
|
||
![]() |
int reserved[10] = {};
|
||
![]() |
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* \struct OldModelTriangleV1
|
||
|
* \brief Old Colobot binary model file version 1
|
||
|
*
|
||
|
* @deprecated
|
||
|
*/
|
||
|
struct OldModelTriangleV1
|
||
|
{
|
||
![]() |
char used = 0;
|
||
|
char selected = 0;
|
||
![]() |
Vertex3D p1;
|
||
|
Vertex3D p2;
|
||
|
Vertex3D p3;
|
||
![]() |
char texName[21] = {'\0'};
|
||
![]() |
float min = 0;
|
||
|
float max = 0;
|
||
![]() |
};
|
||
|
|
||
|
/**
|
||
|
* \struct OldModelTriangleV2
|
||
|
* \brief Old Colobot binary model file version 2
|
||
|
*
|
||
|
* @deprecated
|
||
|
*/
|
||
|
struct OldModelTriangleV2
|
||
|
{
|
||
![]() |
char used = 0;
|
||
|
char selected = 0;
|
||
![]() |
Vertex3D p1;
|
||
|
Vertex3D p2;
|
||
|
Vertex3D p3;
|
||
![]() |
char texName[21] = {'\0'};
|
||
![]() |
float min = 0.0f;
|
||
|
float max = 0.0f;
|
||
|
long state = 0;
|
||
|
short reserved1 = 0;
|
||
|
short reserved2 = 0;
|
||
|
short reserved3 = 0;
|
||
|
short reserved4 = 0;
|
||
![]() |
};
|
||
|
|
||
|
/**
|
||
|
* \struct OldModelTriangleV3
|
||
|
* \brief Old Colobot binary model file version 3
|
||
|
*
|
||
|
* @deprecated
|
||
|
*/
|
||
|
struct OldModelTriangleV3
|
||
|
{
|
||
![]() |
char used = 0;
|
||
|
char selected = 0;
|
||
![]() |
Vertex3D p1;
|
||
|
Vertex3D p2;
|
||
|
Vertex3D p3;
|
||
![]() |
char texName[21] = {'\0'};
|
||
![]() |
float min = 0.0f;
|
||
|
float max = 0.0f;
|
||
|
long state = 0;
|
||
|
short texNum2 = 0;
|
||
|
short reserved2 = 0;
|
||
|
short reserved3 = 0;
|
||
|
short reserved4 = 0;
|
||
![]() |
};
|
||
|
|
||
|
} // namespace Gfx
|