/src/ui/group.cpp

https://bitbucket.org/zielmicha/colobot · C++ · 643 lines · 580 code · 41 blank · 22 comment · 99 complexity · c1335fcc1cd862ffb22a746095195aa6 MD5 · raw file

  1. // * This file is part of the COLOBOT source code
  2. // * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
  3. // *
  4. // * This program is free software: you can redistribute it and/or modify
  5. // * it under the terms of the GNU General Public License as published by
  6. // * the Free Software Foundation, either version 3 of the License, or
  7. // * (at your option) any later version.
  8. // *
  9. // * This program is distributed in the hope that it will be useful,
  10. // * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // * GNU General Public License for more details.
  13. // *
  14. // * You should have received a copy of the GNU General Public License
  15. // * along with this program. If not, see http://www.gnu.org/licenses/.
  16. // group.cpp
  17. #include "ui/group.h"
  18. #include "common/event.h"
  19. #include "common/misc.h"
  20. #include "common/iman.h"
  21. #include "common/restext.h"
  22. #include "graphics/engine/engine.h"
  23. #include <stdio.h>
  24. #include <string.h>
  25. namespace Ui {
  26. // Object's constructor.
  27. //CGroup::CGroup(CInstanceManager* iMan) : CControl(iMan)
  28. CGroup::CGroup() : CControl()
  29. {
  30. }
  31. // Object's destructor.
  32. CGroup::~CGroup()
  33. {
  34. }
  35. // Creates a new button.
  36. bool CGroup::Create(Math::Point pos, Math::Point dim, int icon, EventType eventType)
  37. {
  38. if ( eventType == EVENT_NULL ) eventType = GetUniqueEventType();
  39. CControl::Create(pos, dim, icon, eventType);
  40. if ( icon == -1 )
  41. {
  42. char name[100];
  43. char* p;
  44. GetResource(RES_EVENT, eventType, name);
  45. p = strchr(name, '\\');
  46. if ( p != 0 ) *p = 0;
  47. SetName(name);
  48. }
  49. return true;
  50. }
  51. // Management of an event.
  52. bool CGroup::EventProcess(const Event &event)
  53. {
  54. return true;
  55. }
  56. // Draw button.
  57. void CGroup::Draw()
  58. {
  59. Math::Point uv1,uv2, corner, pos, dim;
  60. float dp;
  61. int icon;
  62. if ( (m_state & STATE_VISIBLE) == 0 ) return;
  63. if ( m_state & STATE_SHADOW )
  64. {
  65. DrawShadow(m_pos, m_dim);
  66. }
  67. dp = 0.5f / 256.0f;
  68. if ( m_icon == 0 ) // hollow frame?
  69. {
  70. m_engine->SetTexture("button2.png");
  71. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  72. uv1.x = 160.0f / 256.0f;
  73. uv1.y = 192.0f / 256.0f; // u-v texture
  74. uv2.x = 192.0f / 256.0f;
  75. uv2.y = 224.0f / 256.0f;
  76. uv1.x += dp;
  77. uv1.y += dp;
  78. uv2.x -= dp;
  79. uv2.y -= dp;
  80. corner.x = 10.0f/640.0f;
  81. corner.y = 10.0f/480.0f;
  82. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 8.0f/256.0f);
  83. }
  84. if ( m_icon == 1 ) // orange solid opaque?
  85. {
  86. m_engine->SetTexture("button2.png");
  87. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  88. uv1.x = 104.0f / 256.0f;
  89. uv1.y = 48.0f / 256.0f;
  90. uv2.x = 112.0f / 256.0f;
  91. uv2.y = 64.0f / 256.0f;
  92. uv1.x += dp;
  93. uv1.y += dp;
  94. uv2.x -= dp;
  95. uv2.y -= dp;
  96. DrawIcon(m_pos, m_dim, uv1, uv2);
  97. }
  98. if ( m_icon == 2 ) // orange degrade -> transparent?
  99. {
  100. m_engine->SetTexture("button2.png");
  101. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  102. uv1.x = 112.0f / 256.0f;
  103. uv1.y = 48.0f / 256.0f;
  104. uv2.x = 120.0f / 256.0f;
  105. uv2.y = 64.0f / 256.0f;
  106. uv1.x += dp;
  107. uv1.y += dp;
  108. uv2.x -= dp;
  109. uv2.y -= dp;
  110. DrawIcon(m_pos, m_dim, uv1, uv2);
  111. }
  112. if ( m_icon == 3 ) // transparent gradient -> gray?
  113. {
  114. m_engine->SetTexture("button2.png");
  115. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  116. uv1.x = 120.0f / 256.0f;
  117. uv1.y = 48.0f / 256.0f;
  118. uv2.x = 128.0f / 256.0f;
  119. uv2.y = 64.0f / 256.0f;
  120. uv1.x += dp;
  121. uv1.y += dp;
  122. uv2.x -= dp;
  123. uv2.y -= dp;
  124. DrawIcon(m_pos, m_dim, uv1, uv2);
  125. }
  126. if ( m_icon == 4 ) // degrade blue corner?
  127. {
  128. m_engine->SetTexture("button2.png");
  129. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  130. uv1.x = 192.0f / 256.0f;
  131. uv1.y = 128.0f / 256.0f;
  132. uv2.x = 224.0f / 256.0f;
  133. uv2.y = 160.0f / 256.0f;
  134. uv1.x += dp;
  135. uv1.y += dp;
  136. uv2.x -= dp;
  137. uv2.y -= dp;
  138. DrawIcon(m_pos, m_dim, uv1, uv2);
  139. }
  140. if ( m_icon == 5 ) // degrade orange corner?
  141. {
  142. m_engine->SetTexture("button2.png");
  143. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  144. uv1.x = 224.0f / 256.0f;
  145. uv1.y = 128.0f / 256.0f;
  146. uv2.x = 256.0f / 256.0f;
  147. uv2.y = 160.0f / 256.0f;
  148. uv1.x += dp;
  149. uv1.y += dp;
  150. uv2.x -= dp;
  151. uv2.y -= dp;
  152. DrawIcon(m_pos, m_dim, uv1, uv2);
  153. }
  154. if ( m_icon == 6 )
  155. {
  156. m_engine->SetTexture("button2.png");
  157. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  158. uv1.x = 0.0f / 256.0f; // brown transparent
  159. uv1.y = 75.0f / 256.0f;
  160. uv2.x = 64.0f / 256.0f;
  161. uv2.y = 128.0f / 256.0f;
  162. uv1.x += dp;
  163. uv1.y += dp;
  164. uv2.x -= dp;
  165. uv2.y -= dp;
  166. corner.x = 4.0f / 640.0f;
  167. corner.y = 4.0f / 480.0f;
  168. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 8.0f/256.0f);
  169. }
  170. if ( m_icon == 7 )
  171. {
  172. m_engine->SetTexture("button1.png");
  173. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  174. uv1.x = 64.0f / 256.0f;
  175. uv1.y = 0.0f / 256.0f;
  176. uv2.x = 96.0f / 256.0f;
  177. uv2.y = 32.0f / 256.0f;
  178. uv1.x += dp;
  179. uv1.y += dp;
  180. uv2.x -= dp;
  181. uv2.y -= dp;
  182. DrawIcon(m_pos, m_dim, uv1, uv2, 8.0f/256.0f);
  183. }
  184. if ( m_icon == 8 )
  185. {
  186. m_engine->SetTexture("button2.png");
  187. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  188. uv1.x = 64.0f / 256.0f; // green transparent
  189. uv1.y = 160.0f / 256.0f;
  190. uv2.x = 160.0f / 256.0f;
  191. uv2.y = 176.0f / 256.0f;
  192. uv1.x += dp;
  193. uv1.y += dp;
  194. uv2.x -= dp;
  195. uv2.y -= dp;
  196. DrawIcon(m_pos, m_dim, uv1, uv2, 8.0f/256.0f);
  197. }
  198. if ( m_icon == 9 )
  199. {
  200. m_engine->SetTexture("button2.png");
  201. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  202. uv1.x = 64.0f / 256.0f; // red transparent
  203. uv1.y = 176.0f/256.0f;
  204. uv2.x = 160.0f/256.0f;
  205. uv2.y = 192.0f/256.0f;
  206. uv1.x += dp;
  207. uv1.y += dp;
  208. uv2.x -= dp;
  209. uv2.y -= dp;
  210. DrawIcon(m_pos, m_dim, uv1, uv2, 8.0f/256.0f);
  211. }
  212. if ( m_icon == 10 )
  213. {
  214. m_engine->SetTexture("button2.png");
  215. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  216. uv1.x = 64.0f / 256.0f; // blue transparent
  217. uv1.y = 192.0f / 256.0f;
  218. uv2.x = 160.0f / 256.0f;
  219. uv2.y = 208.0f / 256.0f;
  220. uv1.x += dp;
  221. uv1.y += dp;
  222. uv2.x -= dp;
  223. uv2.y -= dp;
  224. DrawIcon(m_pos, m_dim, uv1, uv2, 8.0f/256.0f);
  225. }
  226. if ( m_icon == 11 )
  227. {
  228. m_engine->SetTexture("button2.png");
  229. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  230. uv1.x = 64.0f / 256.0f; // yellow transparent
  231. uv1.y = 224.0f / 256.0f;
  232. uv2.x = 160.0f / 256.0f;
  233. uv2.y = 240.0f / 256.0f;
  234. uv1.x += dp;
  235. uv1.y += dp;
  236. uv2.x -= dp;
  237. uv2.y -= dp;
  238. DrawIcon(m_pos, m_dim, uv1, uv2, 8.0f/256.0f);
  239. }
  240. if ( m_icon == 12 ) // viewfinder cross?
  241. {
  242. dim.x = m_dim.x / 2.0f;
  243. dim.y = m_dim.y / 2.0f;
  244. m_engine->SetTexture("mouse.png");
  245. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  246. pos.x = m_pos.x-m_dim.x/300.0f;
  247. pos.y = m_pos.y+m_dim.y/300.0f+dim.y;
  248. uv1.x = 0.5f / 256.0f;
  249. uv1.y = 192.5f / 256.0f;
  250. uv2.x = 63.5f / 256.0f;
  251. uv2.y = 255.5f / 256.0f;
  252. DrawIcon(pos, dim, uv1, uv2); // ul
  253. pos.x += dim.x;
  254. Math::Swap(uv1.x, uv2.x);
  255. DrawIcon(pos, dim, uv1, uv2); // ur
  256. pos.y -= dim.y;
  257. Math::Swap(uv1.y, uv2.y);
  258. DrawIcon(pos, dim, uv1, uv2); // dr
  259. pos.x -= dim.x;
  260. Math::Swap(uv1.x, uv2.x);
  261. DrawIcon(pos, dim, uv1, uv2); // dl
  262. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  263. pos.x = m_pos.x+m_dim.x/300.0f;
  264. pos.y = m_pos.y-m_dim.y/300.0f+dim.y;
  265. uv1.x = 64.5f / 256.0f;
  266. uv1.y = 192.5f / 256.0f;
  267. uv2.x = 127.5f / 256.0f;
  268. uv2.y = 255.5f / 256.0f;
  269. DrawIcon(pos, dim, uv1, uv2); // ul
  270. pos.x += dim.x;
  271. Math::Swap(uv1.x, uv2.x);
  272. DrawIcon(pos, dim, uv1, uv2); // ur
  273. pos.y -= dim.y;
  274. Math::Swap(uv1.y, uv2.y);
  275. DrawIcon(pos, dim, uv1, uv2); // dr
  276. pos.x -= dim.x;
  277. Math::Swap(uv1.x, uv2.x);
  278. DrawIcon(pos, dim, uv1, uv2); // dl
  279. }
  280. if ( m_icon == 13 ) // corner upper / left?
  281. {
  282. m_engine->SetTexture("mouse.png");
  283. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  284. pos.x = m_pos.x-m_dim.x/150.0f;
  285. pos.y = m_pos.y+m_dim.y/150.0f;
  286. uv1.x = 128.5f / 256.0f;
  287. uv1.y = 192.5f / 256.0f;
  288. uv2.x = 191.5f / 256.0f;
  289. uv2.y = 255.5f / 256.0f;
  290. DrawIcon(pos, m_dim, uv1, uv2);
  291. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  292. pos.x = m_pos.x+m_dim.x/150.0f;
  293. pos.y = m_pos.y-m_dim.y/150.0f;
  294. uv1.x = 192.5f / 256.0f;
  295. uv1.y = 192.5f / 256.0f;
  296. uv2.x = 255.5f / 256.0f;
  297. uv2.y = 255.5f / 256.0f;
  298. DrawIcon(pos, m_dim, uv1, uv2);
  299. }
  300. if ( m_icon == 14 ) // corner upper / right?
  301. {
  302. m_engine->SetTexture("mouse.png");
  303. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  304. pos.x = m_pos.x-m_dim.x/150.0f;
  305. pos.y = m_pos.y+m_dim.y/150.0f;
  306. uv2.x = 128.5f / 256.0f;
  307. uv1.y = 192.5f / 256.0f;
  308. uv1.x = 191.5f / 256.0f;
  309. uv2.y = 255.5f / 256.0f;
  310. DrawIcon(pos, m_dim, uv1, uv2);
  311. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  312. pos.x = m_pos.x+m_dim.x/150.0f;
  313. pos.y = m_pos.y-m_dim.y/150.0f;
  314. uv2.x = 192.5f / 256.0f;
  315. uv1.y = 192.5f / 256.0f;
  316. uv1.x = 255.5f / 256.0f;
  317. uv2.y = 255.5f / 256.0f;
  318. DrawIcon(pos, m_dim, uv1, uv2);
  319. }
  320. if ( m_icon == 15 ) // corner lower / left?
  321. {
  322. m_engine->SetTexture("mouse.png");
  323. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  324. pos.x = m_pos.x-m_dim.x/150.0f;
  325. pos.y = m_pos.y+m_dim.y/150.0f;
  326. uv1.x = 128.5f / 256.0f;
  327. uv2.y = 192.5f / 256.0f;
  328. uv2.x = 191.5f / 256.0f;
  329. uv1.y = 255.5f / 256.0f;
  330. DrawIcon(pos, m_dim, uv1, uv2);
  331. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  332. pos.x = m_pos.x+m_dim.x/150.0f;
  333. pos.y = m_pos.y-m_dim.y/150.0f;
  334. uv1.x = 192.5f / 256.0f;
  335. uv2.y = 192.5f / 256.0f;
  336. uv2.x = 255.5f / 256.0f;
  337. uv1.y = 255.5f / 256.0f;
  338. DrawIcon(pos, m_dim, uv1, uv2);
  339. }
  340. if ( m_icon == 16 ) // corner lower / left?
  341. {
  342. m_engine->SetTexture("mouse.png");
  343. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  344. pos.x = m_pos.x-m_dim.x/150.0f;
  345. pos.y = m_pos.y+m_dim.y/150.0f;
  346. uv2.x = 128.5f / 256.0f;
  347. uv2.y = 192.5f / 256.0f;
  348. uv1.x = 191.5f / 256.0f;
  349. uv1.y = 255.5f / 256.0f;
  350. DrawIcon(pos, m_dim, uv1, uv2);
  351. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  352. pos.x = m_pos.x+m_dim.x/150.0f;
  353. pos.y = m_pos.y-m_dim.y/150.0f;
  354. uv2.x = 192.5f / 256.0f;
  355. uv2.y = 192.5f / 256.0f;
  356. uv1.x = 255.5f / 256.0f;
  357. uv1.y = 255.5f / 256.0f;
  358. DrawIcon(pos, m_dim, uv1, uv2);
  359. }
  360. if ( m_icon == 17 )
  361. {
  362. m_engine->SetTexture("button2.png");
  363. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  364. uv1.x = 0.0f / 256.0f; // blue frame
  365. uv1.y = 75.0f / 256.0f;
  366. uv2.x = 64.0f / 256.0f;
  367. uv2.y = 128.0f / 256.0f;
  368. uv1.x += dp;
  369. uv1.y += dp;
  370. uv2.x -= dp;
  371. uv2.y -= dp;
  372. corner.x = 6.0f / 640.0f;
  373. corner.y = 6.0f / 480.0f;
  374. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 2.0f/256.0f);
  375. }
  376. if ( m_icon == 18 ) // arrow> for SatCom?
  377. {
  378. m_engine->SetTexture("button1.png");
  379. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  380. uv1.x = 0.0f / 256.0f; // >
  381. uv1.y = 192.0f / 256.0f;
  382. uv2.x = 32.0f / 256.0f;
  383. uv2.y = 224.0f / 256.0f;
  384. uv1.x += dp;
  385. uv1.y += dp;
  386. uv2.x -= dp;
  387. uv2.y -= dp;
  388. DrawIcon(m_pos, m_dim, uv1, uv2);
  389. }
  390. if ( m_icon == 19 ) // SatCom symbol?
  391. {
  392. m_engine->SetTexture("button1.png");
  393. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  394. uv1.x = 224.0f / 256.0f; // SatCom symbol
  395. uv1.y = 224.0f / 256.0f;
  396. uv2.x = 256.0f / 256.0f;
  397. uv2.y = 256.0f / 256.0f;
  398. uv1.x += dp;
  399. uv1.y += dp;
  400. uv2.x -= dp;
  401. uv2.y -= dp;
  402. DrawIcon(m_pos, m_dim, uv1, uv2);
  403. }
  404. if ( m_icon == 20 ) // solid blue background?
  405. {
  406. m_engine->SetTexture("button1.png");
  407. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  408. uv1.x = 224.0f / 256.0f;
  409. uv1.y = 32.0f / 256.0f;
  410. uv2.x = 256.0f / 256.0f;
  411. uv2.y = 64.0f / 256.0f;
  412. uv1.x += dp;
  413. uv1.y += dp;
  414. uv2.x -= dp;
  415. uv2.y -= dp;
  416. DrawIcon(m_pos, m_dim, uv1, uv2);
  417. }
  418. if ( m_icon == 21 ) // stand-by symbol?
  419. {
  420. m_engine->SetTexture("button2.png");
  421. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
  422. uv1.x = 160.0f / 256.0f;
  423. uv1.y = 32.0f / 256.0f;
  424. uv2.x = 192.0f / 256.0f;
  425. uv2.y = 64.0f / 256.0f;
  426. uv1.x += dp;
  427. uv1.y += dp;
  428. uv2.x -= dp;
  429. uv2.y -= dp;
  430. DrawIcon(m_pos, m_dim, uv1, uv2);
  431. }
  432. if ( m_icon == 22 )
  433. {
  434. m_engine->SetTexture("button2.png");
  435. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  436. uv1.x = 64.0f / 256.0f; // opaque yellow
  437. uv1.y = 224.0f / 256.0f;
  438. uv2.x = 160.0f / 256.0f;
  439. uv2.y = 240.0f / 256.0f;
  440. uv1.x += dp;
  441. uv1.y += dp;
  442. uv2.x -= dp;
  443. uv2.y -= dp;
  444. corner.x = 5.0f / 640.0f;
  445. corner.y = 5.0f / 480.0f;
  446. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 3.0f/256.0f);
  447. }
  448. if ( m_icon == 23 )
  449. {
  450. m_engine->SetTexture("button3.png");
  451. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  452. uv1.x = 64.0f / 256.0f; // yellow
  453. uv1.y = 192.0f / 256.0f;
  454. uv2.x = 80.0f / 256.0f;
  455. uv2.y = 208.0f / 256.0f;
  456. uv1.x += dp;
  457. uv1.y += dp;
  458. uv2.x -= dp;
  459. uv2.y -= dp;
  460. corner.x = 4.0f / 640.0f;
  461. corner.y = 4.0f / 480.0f;
  462. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 2.0f/256.0f);
  463. }
  464. if ( m_icon == 24 )
  465. {
  466. m_engine->SetTexture("button3.png");
  467. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  468. uv1.x = 80.0f / 256.0f; // orange
  469. uv1.y = 192.0f / 256.0f;
  470. uv2.x = 96.0f / 256.0f;
  471. uv2.y = 208.0f / 256.0f;
  472. uv1.x += dp;
  473. uv1.y += dp;
  474. uv2.x -= dp;
  475. uv2.y -= dp;
  476. corner.x = 4.0f / 640.0f;
  477. corner.y = 4.0f / 480.0f;
  478. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 2.0f/256.0f);
  479. }
  480. if ( m_icon == 25 )
  481. {
  482. m_engine->SetTexture("button3.png");
  483. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  484. uv1.x = 64.0f / 256.0f; // orange
  485. uv1.y = 208.0f / 256.0f;
  486. uv2.x = 80.0f / 256.0f;
  487. uv2.y = 224.0f / 256.0f;
  488. uv1.x += dp;
  489. uv1.y += dp;
  490. uv2.x -= dp;
  491. uv2.y -= dp;
  492. corner.x = 4.0f / 640.0f;
  493. corner.y = 4.0f / 480.0f;
  494. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 2.0f/256.0f);
  495. }
  496. if ( m_icon == 26 )
  497. {
  498. m_engine->SetTexture("button3.png");
  499. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  500. uv1.x = 80.0f / 256.0f; // red
  501. uv1.y = 208.0f / 256.0f;
  502. uv2.x = 96.0f / 256.0f;
  503. uv2.y = 224.0f / 256.0f;
  504. uv1.x += dp;
  505. uv1.y += dp;
  506. uv2.x -= dp;
  507. uv2.y -= dp;
  508. corner.x = 4.0f / 640.0f;
  509. corner.y = 4.0f / 480.0f;
  510. DrawIcon(m_pos, m_dim, uv1, uv2, corner, 2.0f/256.0f);
  511. }
  512. if ( m_icon == 27 )
  513. {
  514. m_engine->SetTexture("button3.png");
  515. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  516. uv1.x = 32.0f / 256.0f;
  517. uv1.y = 0.0f / 256.0f;
  518. uv2.x = 64.0f / 256.0f;
  519. uv2.y = 32.0f / 256.0f;
  520. uv1.x += dp;
  521. uv1.y += dp;
  522. uv2.x -= dp;
  523. uv2.y -= dp;
  524. DrawIcon(m_pos, m_dim, uv1, uv2);
  525. }
  526. if ( m_icon >= 100 && m_icon <= 120 ) // building?
  527. {
  528. pos = m_pos;
  529. dim = m_dim;
  530. m_engine->SetTexture("button2.png");
  531. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  532. uv1.x = 32.0f / 256.0f;
  533. uv1.y = 32.0f / 256.0f;
  534. uv2.x = uv1.x+32.0f/256.0f;
  535. uv2.y = uv1.y+32.0f/256.0f;
  536. uv1.x += dp;
  537. uv1.y += dp;
  538. uv2.x -= dp;
  539. uv2.y -= dp;
  540. DrawIcon(pos, dim, uv1, uv2);
  541. m_engine->SetTexture("button3.png");
  542. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  543. pos.x += 8.0f / 640.0f;
  544. pos.y += 8.0f / 480.0f;
  545. dim.x -= 16.0f / 640.0f;
  546. dim.y -= 16.0f / 480.0f;
  547. uv1.x = 32.0f / 256.0f;
  548. uv1.y = 0.0f / 256.0f;
  549. uv2.x = uv1.x+32.0f/256.0f;
  550. uv2.y = uv1.y+32.0f/256.0f;
  551. uv1.x += dp;
  552. uv1.y += dp;
  553. uv2.x -= dp;
  554. uv2.y -= dp;
  555. DrawIcon(pos, dim, uv1, uv2);
  556. m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
  557. pos.x += 2.0f / 640.0f;
  558. pos.y += 2.0f / 480.0f;
  559. dim.x -= 4.0f / 640.0f;
  560. dim.y -= 4.0f / 480.0f;
  561. uv1.x = 0.0f / 256.0f;
  562. uv1.y = 0.0f / 256.0f;
  563. uv2.x = uv1.x+32.0f/256.0f;
  564. uv2.y = uv1.y+32.0f/256.0f;
  565. uv1.x += dp;
  566. uv1.y += dp;
  567. uv2.x -= dp;
  568. uv2.y -= dp;
  569. DrawIcon(pos, dim, uv1, uv2);
  570. m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
  571. pos.x += 8.0f / 640.0f;
  572. pos.y += 8.0f / 480.0f;
  573. dim.x -= 16.0f / 640.0f;
  574. dim.y -= 16.0f / 480.0f;
  575. if ( m_icon == 100 ) icon = 43; // base ?
  576. if ( m_icon == 101 ) icon = 32; // factory ?
  577. if ( m_icon == 102 ) icon = 35; // research ?
  578. if ( m_icon == 103 ) icon = 34; // convert ?
  579. if ( m_icon == 104 ) icon = 36; // station ?
  580. if ( m_icon == 105 ) icon = 40; // radar ?
  581. if ( m_icon == 106 ) icon = 41; // repair ?
  582. if ( m_icon == 107 ) icon = 37; // tower ?
  583. if ( m_icon == 108 ) icon = 39; // energy ?
  584. if ( m_icon == 109 ) icon = 33; // derrick ?
  585. if ( m_icon == 110 ) icon = 42; // nuclear ?
  586. if ( m_icon == 111 ) icon = 38; // labo ?
  587. if ( m_icon == 112 ) icon = 44; // info ?
  588. if ( m_icon == 113 ) icon = 46; // lightning protection ?
  589. if ( m_icon == 114 ) icon = 47; // vault ?
  590. if ( m_icon == 115 ) icon = 48; // control center?
  591. uv1.x = (32.0f/256.0f)*(icon%8);
  592. uv1.y = (32.0f/256.0f)*(icon/8); // uv texture
  593. uv2.x = uv1.x+32.0f/256.0f;
  594. uv2.y = uv1.y+32.0f/256.0f;
  595. uv1.x += dp;
  596. uv1.y += dp;
  597. uv2.x -= dp;
  598. uv2.y -= dp;
  599. DrawIcon(pos, dim, uv1, uv2);
  600. }
  601. }
  602. }