summaryrefslogtreecommitdiffstats
path: root/src/graphics/common/model.h
blob: e8a5f19c4d0623c3633a6497a769d3350c0a6048 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// * 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