// * This file is part of the COLOBOT source code // * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch // * // * 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 "common/event.h" #include "old/modfile.h" #include "math/point.h" class CInstanceManager; class CD3DEngine; class CModFile; class CInterface; 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, D3DVERTEX2 &vertex); bool SetVertex(int rank, D3DVERTEX2 &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(D3DMaping 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; CD3DEngine* 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; };