colobot/src/graphics/common/model.h

142 lines
5.1 KiB
C++

// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
// *
// * 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://www.gnu.org/licenses/.
// model.h
#pragma once
#include "engine.h"
#include "common/event.h"
#include "modfile.h"
#include "vertex.h"
#include "math/point.h"
class CInstanceManager;
class CModFile;
class CInterface;
namespace Gfx {
class CEngine;
class CModel {
public:
CModel(CInstanceManager* iMan);
~CModel();
void StartUserAction();
void StopUserAction();
bool EventProcess(const Event &event);
void InitView();
void InitViewFromSelect();
void UpdateView();
void ViewMove(const Event &event, float speed);
protected:
bool EventFrame(const Event &event);
bool GetVertex(int rank, Gfx::VertexTex2 &vertex);
bool SetVertex(int rank, Gfx::VertexTex2 &vertex);
Math::Vector RetSelectCDG();
Math::Vector RetSelectNormal();
void SmoothSelect();
void PlaneSelect();
void ColorSelect();
void StateSelect();
void MoveSelect(Math::Vector move);
void OperSelect(Math::Vector move, char oper);
void ReadScript(char *filename);
void BBoxCompute(Math::Vector &min, Math::Vector &max);
bool IsMappingSelectPlausible(Gfx::Mapping D3Dmode);
void MappingSelect(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
void MappingSelectSpherical(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
Math::Vector RetMappingCenter(Math::Vector pos, Math::Vector min);
void MappingSelectCylindrical(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
void MappingSelectFace(int mode, int rotate, bool bMirrorX, bool bMirrorY, Math::Point ti, Math::Point ts, char *texName);
void MappingSelect2(int texNum2, int subdiv, int offsetU, int offsetV, bool bMirrorX, bool bMirrorY);
void MappingSelectPlane2(int mode, bool bMirrorX, bool bMirrorY);
void MappingSelectSpherical2(bool bMirrorX, bool bMirrorY);
void MappingSelectMagic2(bool bMirrorX, bool bMirrorY);
int SearchNext(int rank, int step);
int SearchSamePlane(int first, int step);
void CurrentSearchNext(int step, bool bControl);
void CurrentInit();
void CurrentSelect(bool bSelect);
void DeselectAll();
void SelectAll();
void SelectZone(int first, int last);
void SelectTerm();
void DefaultSelect();
void SelectDelete();
void Compress();
void MinMaxSelect();
void MinMaxChange();
void UpdateInfoText();
int* RetTextureTable();
void TexturePartUpdate();
void TextureRankChange(int step);
void TexturePartChange(int step);
void PutTextureValues();
void GetTextureValues();
void GetModelName(char *buffer);
void GetDXFName(char *buffer);
void GetScriptName(char *buffer);
bool IsEditFocus();
protected:
CInstanceManager* m_iMan;
Gfx::CEngine* m_engine;
CModFile* m_modFile;
CInterface* m_interface;
float m_time;
ModelTriangle* m_triangleTable;
int m_triangleSel1;
int m_triangleSel2;
int m_mode;
int m_textureMode;
int m_textureRotate;
bool m_bTextureMirrorX;
bool m_bTextureMirrorY;
Math::Point m_textureInf;
Math::Point m_textureSup;
int m_texturePart;
int m_textureRank;
char m_textureName[20];
bool m_bDisplayTransparent;
bool m_bDisplayOnlySelection;
float m_viewHeight;
float m_viewDist;
float m_viewAngleH;
float m_viewAngleV;
int m_color;
int m_state;
int m_secondTexNum;
int m_secondSubdiv;
int m_secondOffsetU;
int m_secondOffsetV;
char m_oper;
float m_min;
float m_max;
};
}; // namespace Gfx