1 /* 2 * This file is part of the Colobot: Gold Edition source code 3 * Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam 4 * http://epsitec.ch; http://colobot.info; http://github.com/colobot 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 * See the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see http://gnu.org/licenses 18 */ 19 20 #pragma once 21 22 #include "ui/controls/control.h" 23 24 #include "common/event.h" 25 26 #include "object/object_type.h" 27 28 class CObject; 29 30 namespace Gfx 31 { 32 class CWater; 33 class CTerrain; 34 } 35 36 37 namespace Ui 38 { 39 40 const int MAPMAXOBJECT = 100; 41 42 enum MapColor 43 { 44 MAPCOLOR_NULL, 45 MAPCOLOR_BASE, 46 MAPCOLOR_FIX, 47 MAPCOLOR_MOVE, 48 MAPCOLOR_ALIEN, 49 MAPCOLOR_WAYPOINTb, 50 MAPCOLOR_WAYPOINTr, 51 MAPCOLOR_WAYPOINTg, 52 MAPCOLOR_WAYPOINTy, 53 MAPCOLOR_WAYPOINTv, 54 MAPCOLOR_BBOX, 55 }; 56 57 struct MapObject 58 { 59 bool bUsed = false; 60 CObject* object = nullptr; 61 MapColor color = MAPCOLOR_NULL; 62 ObjectType type = OBJECT_NULL; 63 Math::Point pos; 64 float dir = 0.0f; 65 }; 66 67 68 69 class CMap : public CControl 70 { 71 public: 72 CMap(); 73 ~CMap(); 74 75 bool Create(Math::Point pos, Math::Point dim, int icon, EventType eventMsg) override; 76 bool EventProcess(const Event &event) override; 77 void Draw() override; 78 79 void UpdateTerrain(); 80 void UpdateTerrain(int bx, int by, int ex, int ey); 81 82 void SetFixImage(const std::string& filename); 83 bool GetFixImage(); 84 85 void SetOffset(float ox, float oy); 86 void SetAngle(float angle); 87 void SetMode(int mode); 88 void SetToy(bool bToy); 89 void SetDebug(bool bDebug); 90 91 void SetZoom(float value); 92 float GetZoom(); 93 94 void SetEnable(bool bEnable); 95 bool GetEnable(); 96 97 void SetFloorColor(Gfx::Color color); 98 void SetWaterColor(Gfx::Color color); 99 100 void FlushObject(); 101 void UpdateObject(CObject* pObj); 102 103 CObject* DetectObject(Math::Point pos, bool &bInMap); 104 void SetHighlight(CObject* pObj); 105 106 protected: 107 Math::Point AdjustOffset(Math::Point offset); 108 void SelectObject(Math::Point pos); 109 Math::Point MapInter(Math::Point pos, float dir); 110 void DrawFocus(Math::Point pos, float dir, ObjectType type, MapColor color); 111 void DrawObject(Math::Point pos, float dir, ObjectType type, MapColor color, bool bSelect, bool bHilite); 112 void DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, ObjectType type, bool bHilite); 113 void DrawHighlight(Math::Point pos); 114 void DrawTriangle(Math::Point p1, Math::Point p2, Math::Point p3, Math::Point uv1, Math::Point uv2); 115 void DrawPenta(Math::Point p1, Math::Point p2, Math::Point p3, Math::Point p4, Math::Point p5, Math::Point uv1, Math::Point uv2); 116 void DrawVertex(Math::Point uv1, Math::Point uv2, float zoom); 117 118 protected: 119 Gfx::CTerrain* m_terrain; 120 Gfx::CWater* m_water; 121 CRobotMain* m_main; 122 123 bool m_bEnable; 124 float m_time; 125 float m_half; 126 float m_zoom; 127 Math::Point m_offset; 128 float m_angle; 129 Gfx::Color m_floorColor; 130 Gfx::Color m_waterColor; 131 MapObject m_map[MAPMAXOBJECT]; 132 int m_totalFix; 133 int m_totalMove; 134 int m_highlightRank; 135 Math::Point m_mapPos; 136 Math::Point m_mapDim; 137 bool m_bRadar; 138 std::string m_fixImage; 139 int m_mode; 140 bool m_bToy; 141 bool m_bDebug; 142 }; 143 144 145 } 146