annotate IO/Mouse.cpp @ 2541:a902abdfc7f2

1. Renamed class Game to class Engine. 2. Separated game logic as state of FSM from game logic as engine. 3. Found out that many UI screen initializers were optimized away, intially they all returned newly created window as separate object like it is done in CharacterUI_Initialize.
author a.parshin
date Sun, 10 May 2015 01:29:11 +0200
parents 1bcadc6dd203
children c674d547cc7c
rev   line source
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
1 #define _CRTDBG_MAP_ALLOC
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
2 #include <stdlib.h>
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
3 #include <crtdbg.h>
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
4
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
5 #define _CRT_SECURE_NO_WARNINGS
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
6
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
7 #include "Engine/Engine.h"
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
8
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
9 #include "Mouse.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
10 #include "Engine/Party.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
11 #include "Engine/LOD.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
12
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
13 #include "Engine/TurnEngine/TurnEngine.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
14 #include "Engine/Graphics/Viewport.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
15 #include "GUI/GUIWindow.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
16 #include "Engine/Graphics/Vis.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
17 #include "Engine/Objects/Actor.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
18 #include "Media/Audio/AudioPlayer.h"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
19
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
20
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
21 Mouse *pMouse;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
22
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
23
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
24
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
25
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
26
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
27 //----- (00469860) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
28 void Mouse::GetClickPos(unsigned int *pX, unsigned int *pY)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
29 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
30 *pX = uMouseClickX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
31 *pY = uMouseClickY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
32 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
33
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
34 //----- (004698A6) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
35 void Mouse::RemoveHoldingItem()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
36 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
37 pParty->pPickedItem.Reset();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
38 if (_stricmp(pCurrentCursorName, "MICON2"))
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
39 SetCursorBitmap("MICON1");
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
40 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
41
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
42 //----- (004698D8) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
43 void Mouse::SetCursorBitmapFromItemID(unsigned int uItemID)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
44 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
45 pMouse->SetCursorBitmap(pItemsTable->pItems[uItemID].pIconName);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
46 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
47
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
48 //----- (004698F6) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
49 void Mouse::SetCurrentCursorBitmap()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
50 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
51 SetCursorBitmap(pCurrentCursorName);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
52 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
53
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
54 //----- (00469903) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
55 void Mouse::SetCursorBitmap(const char *pName)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
56 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
57 // DDSURFACEDESC2 Dst;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
58
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
59 if ( !this->bInitialized || !pName )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
60 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
61 if ( _stricmp("MICON2", pName) )//если кусор не мишень
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
62 pEngine->uFlags2 &= 0xFFFFFFEF;
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
63 else
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
64 pEngine->uFlags2 |= 0x10;
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
65 if ( _stricmp(this->pCurrentCursorName, pName) )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
66 strcpy(this->pCurrentCursorName, pName);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
67 ClearCursor();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
68 if ( _strnicmp(pName, "MICON1", 5) )//for click to item / если курсор с вещью
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
69 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
70 this->uCursorTextureID = pIcons_LOD->LoadTexture(pName, TEXTURE_16BIT_PALETTE);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
71 this->uCursorTextureID_2 = pIcons_LOD->LoadTexture(pName, TEXTURE_16BIT_PALETTE);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
72 this->AllocCursorSystemMem();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
73 this->field_C = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
74 this->bRedraw = true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
75 this->bActive = true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
76 if ( !areWeLoadingTexture )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
77 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
78 if (uCursorTextureID != -1)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
79 pIcons_LOD->pTextures[uCursorTextureID].Release();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
80 pIcons_LOD->SyncLoadedFilesCount();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
81 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
82 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
83 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
84 this->bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
85 this->field_C = 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
86 window->SetCursor(pName);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
87 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
88 // 506128: using guessed type int areWeLoadingTexture;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
89
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
90 //----- (00469AE4) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
91 LONG Mouse::_469AE4()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
92 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
93 LONG v2; // ecx@2
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
94 LONG result; // eax@2
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
95 struct tagPOINT Point; // [sp+Ch] [bp-8h]@2
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
96
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
97 this->field_8 = 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
98 /*if (pAsyncMouse)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
99 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
100 v2 = *((int *)pAsyncMouse + 6);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
101 Point.x = *((int *)pAsyncMouse + 6);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
102 result = *((int *)pAsyncMouse + 7);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
103 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
104 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
105 {*/
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
106 GetCursorPos(&Point);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
107 //if ( pRenderer->bWindowMode )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
108 ScreenToClient(window->GetApiHandle(), &Point);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
109 result = Point.y;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
110 v2 = Point.x;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
111 //}
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
112 this->uMouseClickX = v2;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
113 this->uMouseClickY = result;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
114
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
115 /*
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
116 //This block has been commented out, because of the changed condition above "if(true)"
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
117 //Also the next condition and the first line has been commented out as well
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
118
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
119 // if (pRenderer->bWindowMode)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
120 if ( true )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
121 goto LABEL_16;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
122 //if (pAsyncMouse)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
123 // goto LABEL_24;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
124
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
125
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
126 if ( v2 < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
127 v2 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
128 if ( result < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
129 result = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
130 if ( v2 > window->GetWidth() - 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
131 v2 = window->GetWidth() - 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
132 */
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
133
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
134 // if ( result > window->GetHeight() - 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
135 // {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
136 // result = window->GetHeight() - 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
137 //LABEL_16:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
138 //if (pAsyncMouse)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
139 // goto LABEL_24;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
140 if (true/*pRenderer->bWindowMode*/ && (v2 < 0 || result < 0 || v2 > window->GetWidth() - 1 || result > window->GetHeight() - 1))
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
141 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
142 this->bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
143 //LABEL_24:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
144 this->field_8 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
145 return result;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
146 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
147 //}
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
148
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
149 if ( this->field_C )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
150 //LABEL_23:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
151 this->bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
152 //LABEL_24:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
153 this->field_8 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
154 return result;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
155 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
156
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
157 //----- (00469BA3) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
158 void Mouse::ClearCursor()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
159 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
160 this->bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
161 free(this->pCursorBitmap_sysmem);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
162 this->pCursorBitmap_sysmem = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
163 free(this->pCursorBitmap2_sysmem);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
164 this->pCursorBitmap2_sysmem = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
165 free(this->ptr_90);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
166 this->ptr_90 = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
167 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
168
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
169 //----- (00469BE6) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
170 void Mouse::AllocCursorSystemMem()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
171 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
172 bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
173 if (!pCursorBitmap_sysmem)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
174 pCursorBitmap_sysmem = (unsigned __int16 *)DoAllocCursorMem();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
175 if (!pCursorBitmap2_sysmem)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
176 pCursorBitmap2_sysmem = (unsigned __int8 *)DoAllocCursorMem();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
177 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
178
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
179 //----- (00469C0D) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
180 void *Mouse::DoAllocCursorMem()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
181 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
182 Texture* tex = pIcons_LOD->GetTexture(uCursorTextureID);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
183 return malloc(4 * tex->uTextureWidth * tex->uTextureHeight);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
184 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
185
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
186 //----- (00469C39) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
187 POINT *Mouse::GetCursorPos(POINT *a2)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
188 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
189 a2->x = this->uMouseClickX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
190 a2->y = this->uMouseClickY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
191 return a2;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
192 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
193
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
194 //----- (00469C65) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
195 void Mouse::Initialize(OSWindow *window)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
196 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
197 this->window = window;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
198 this->bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
199 this->bInitialized = true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
200
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
201 //this->field_8 = 0;//Ritor1: result incorrect uMouseClickX, this->uMouseClickY in _469AE4()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
202 this->uCursorBitmapPitch = 0;//Ritor1: it's include
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
203 for ( uint i = 0; i < 13; i++ )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
204 this->field_5C[i] = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
205
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
206 this->pCursorBitmapPos.x = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
207 this->pCursorBitmapPos.y = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
208 this->uMouseClickX = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
209 this->uMouseClickY = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
210 this->pCursorBitmap_sysmem = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
211 this->field_34 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
212 this->pCursorBitmap2_sysmem = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
213
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
214 SetCursorBitmap("MICON3");
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
215 SetCursorBitmap("MICON2");
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
216 SetCursorBitmap("MICON1");
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
217 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
218
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
219 // inlined
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
220 //----- (0045FE00) mm6 chinese --------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
221 void Mouse::SetActive(bool active)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
222 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
223 bActive = active;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
224 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
225
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
226 //----- (00469CC2) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
227 void Mouse::Deactivate()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
228 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
229 if (bInitialized)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
230 SetActive(false);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
231 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
232
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
233 //----- (00469CCD) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
234 void Mouse::DrawCursor()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
235 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
236 unsigned int v9; // eax@31
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
237
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
238 if ( this->bInitialized )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
239 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
240 if ( !this->field_8 && this->bActive && !this->field_C ) //Uninitialized memory access(this->field_8)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
241 pMouse->_469AE4();//Ritor1: странная, непонятная функция
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
242 this->field_F4 = 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
243 if ( this->field_C )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
244 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
245 this->field_F4 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
246 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
247 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
248
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
249 //if ( pRenderer->bWindowMode )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
250 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
251 if ( this->uMouseClickX < 0 || this->uMouseClickY < 0 || this->uMouseClickX > window->GetWidth() - 1 || this->uMouseClickY > window->GetHeight() - 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
252 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
253 this->field_F4 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
254 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
255 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
256 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
257 /*else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
258 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
259 if ( this->uMouseClickX < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
260 this->uMouseClickX = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
261 if ( this->uMouseClickY < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
262 this->uMouseClickY = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
263 if ( this->uMouseClickX > 639 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
264 this->uMouseClickX = 639;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
265 if ( this->uMouseClickY > 479 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
266 this->uMouseClickY = 479;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
267 }*/
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
268 this->pCursorBitmapRect.x = this->uMouseClickX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
269 this->pCursorBitmapRect.w = this->uMouseClickY + this->field_5C[0]; //Ritor1: Maybe this->field_5C[0] - cursor width
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
270 this->pCursorBitmapRect.y = this->uMouseClickY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
271 this->pCursorBitmapRect.z = this->uMouseClickX + this->uCursorBitmapPitch; //Ritor1: Maybe this->uCursorBitmapPitch - cursor height
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
272 if ( this->uMouseClickX < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
273 this->pCursorBitmapRect.x = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
274 if ( this->uMouseClickY < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
275 this->pCursorBitmapRect.y = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
276 if ( this->pCursorBitmapRect.z > window->GetWidth() )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
277 this->pCursorBitmapRect.z = window->GetWidth();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
278 if ( this->pCursorBitmapRect.w > window->GetHeight() )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
279 this->pCursorBitmapRect.w = window->GetHeight();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
280 this->bActive = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
281 this->uCursorBitmapWidth = this->pCursorBitmapRect.z - this->pCursorBitmapRect.x;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
282 this->uCursorBitmapHeight = this->pCursorBitmapRect.w - this->pCursorBitmapRect.y;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
283 if ( this->bRedraw )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
284 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
285 if ( pMouse->ptr_90 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
286 v9 = 2 * pMouse->uCursorBitmapPitch;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
287 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
288 v9 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
289 pRenderer->_4A6DF5( this->pCursorBitmap_sysmem, v9, &this->pCursorBitmapPos, pRenderer->pTargetSurface, pRenderer->uTargetSurfacePitch,
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
290 &this->pCursorBitmapRect);//срабатывает когда берём курсором вещь в инвенторе
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
291 this->bRedraw = false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
292 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
293 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
294 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
295
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
296 //----- (00469E1C) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
297 void Mouse::Activate()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
298 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
299 bActive = true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
300 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
301
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
302 //----- (00469E24) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
303 void Mouse::_469E24()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
304 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
305 free(pCursorBitmap3_sysmembits_16bit);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
306 pCursorBitmap3_sysmembits_16bit = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
307 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
308
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
309 //----- (00469E3B) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
310 void Mouse::DrawCursorToTarget()//??? DrawCursorWithItem
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
311 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
312 if (!pCursorBitmap3_sysmembits_16bit)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
313 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
314 //пишем на экран курсор с вещью
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
315 ushort* pSrc = pCursorBitmap3_sysmembits_16bit;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
316 for (int y = uCursorWithItemY; y < uCursorWithItemZ; ++y)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
317 for (int x = uCursorWithItemX; x < uCursorWithItemW; ++x)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
318 //pRenderer->pTargetSurface[y * pRenderer->uTargetSurfacePitch + x] = *pSrc++;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
319 pRenderer->WritePixel16(x, y, *pSrc++);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
320 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
321
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
322 //----- (00469EA4) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
323 void Mouse::ReadCursorWithItem()
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
324 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
325 unsigned int pTextureID; // eax@2
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
326 Texture *pTexture; // edi@2
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
327 // int v8; // ecx@25
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
328 // int v9; // ebx@26
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
329 // unsigned int v10; // eax@26
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
330 // int v11; // edx@27
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
331 int pTextureHeight; // [sp+20h] [bp-8h]@15
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
332 // unsigned __int16 *v20; // [sp+20h] [bp-8h]@28
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
333 int pTextureWidth; // [sp+24h] [bp-4h]@12
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
334 unsigned __int16 *v22; // [sp+24h] [bp-4h]@25
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
335
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
336 if ( pParty->pPickedItem.uItemID )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
337 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
338 pTextureID = pIcons_LOD->LoadTexture(pParty->pPickedItem.GetIconName(), TEXTURE_16BIT_PALETTE);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
339 pTexture = (Texture *)(pTextureID != -1 ? (int)&pIcons_LOD->pTextures[pTextureID] : 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
340
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
341 if ( (signed int)pMouse->uMouseClickX <= window->GetWidth() - 1 && (signed int)pMouse->uMouseClickY <= window->GetHeight() - 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
342 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
343 /*if ( (v4 & 0x80000000u) != 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
344 a2 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
345 if ( (v5 & 0x80000000u) != 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
346 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
347 //v6 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
348 v15 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
349 } */
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
350 if ( (signed int)(pTexture->uTextureWidth + pMouse->uMouseClickX) <= window->GetWidth() )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
351 pTextureWidth = pTexture->uTextureWidth;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
352 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
353 pTextureWidth = window->GetWidth() - pMouse->uMouseClickX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
354 if ( (signed int)(pTexture->uTextureHeight + pMouse->uMouseClickY) <= window->GetHeight() )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
355 pTextureHeight = pTexture->uTextureHeight;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
356 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
357 pTextureHeight = window->GetHeight() - pMouse->uMouseClickY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
358 if ( !this->pCursorBitmap3_sysmembits_16bit
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
359 || pMouse->uMouseClickX != this->uCursorWithItemX
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
360 || pMouse->uMouseClickY != this->uCursorWithItemY
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
361 || pMouse->uMouseClickX + pTextureWidth != this->uCursorWithItemW
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
362 || pMouse->uMouseClickY + pTextureHeight != this->uCursorWithItemZ )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
363 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
364 free(this->pCursorBitmap3_sysmembits_16bit);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
365 this->pCursorBitmap3_sysmembits_16bit = (unsigned __int16 *)malloc(2 * pTexture->uTextureHeight * pTexture->uTextureWidth);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
366 this->uCursorWithItemX = pMouse->uMouseClickX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
367 this->uCursorWithItemW = pMouse->uMouseClickX + pTextureWidth;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
368 this->uCursorWithItemY = pMouse->uMouseClickY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
369 this->uCursorWithItemZ = pMouse->uMouseClickY + pTextureHeight;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
370 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
371 v22 = this->pCursorBitmap3_sysmembits_16bit;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
372
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
373 for (int y = this->uCursorWithItemY; y < this->uCursorWithItemZ; ++y)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
374 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
375 for (int x = this->uCursorWithItemX; x < this->uCursorWithItemW; ++x)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
376 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
377 *v22++ = pRenderer->ReadPixel16(x, y);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
378 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
379 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
380 /*if ( v8 < this->field_4C )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
381 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
382 v9 = this->field_48;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
383 v10 = pRenderer->uTargetSurfacePitch * v8;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
384 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
385 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
386 v11 = this->field_40;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
387 v18 = this->field_40;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
388 if ( v11 < v9 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
389 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
390 v20 = &v17[v10 + v11];
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
391 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
392 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
393 //v12 = v20;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
394 ++v18;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
395 //++v20;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
396 *v22++ = *v20++;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
397 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
398 while ( v18 < v9 );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
399 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
400 v10 += v16;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
401 ++v8;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
402 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
403 while ( v8 < this->field_4C );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
404 v6 = v15;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
405 }*/
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
406
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
407 if (pParty->pPickedItem.IsBroken())
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
408 pRenderer->DrawTransparentRedShade(pMouse->uMouseClickX, pMouse->uMouseClickY, pTexture);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
409 else if (!pParty->pPickedItem.IsIdentified())
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
410 pRenderer->DrawTransparentGreenShade(pMouse->uMouseClickX, pMouse->uMouseClickY, pTexture);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
411 else
2524
c7264ab7132f Main menu rendered using d3d11
a.parshin
parents: 2502
diff changeset
412 pRenderer->DrawTextureIndexedAlpha(pMouse->uMouseClickX, pMouse->uMouseClickY, pTexture);
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
413 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
414 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
415 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
416 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
417 free(this->pCursorBitmap3_sysmembits_16bit);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
418 this->pCursorBitmap3_sysmembits_16bit = nullptr;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
419 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
420 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
421
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
422 //----- (0046A080) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
423 void Mouse::ChangeActivation(int a1)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
424 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
425 this->bActive = a1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
426 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
427
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
428 //----- (0046A08A) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
429 void Mouse::SetMouseClick(int x, int y)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
430 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
431 uMouseClickX = x;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
432 uMouseClickY = y;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
433 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
434 //----- (004175C0) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
435 void Mouse::UI_OnMouseLeftClick(int *pXY)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
436 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
437 signed int y; // eax@7
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
438 signed int x; // ecx@7
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
439 signed int v5; // eax@17
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
440 GUIButton *control; // esi@37
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
441 signed int v10; // eax@50
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
442 // int v11; // ecx@52
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
443 unsigned int pX; // [sp+14h] [bp-8h]@7
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
444 unsigned int pY; // [sp+18h] [bp-4h]@7
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
445
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
446 if ( current_screen_type == SCREEN_VIDEO || sub_4637E0_is_there_popup_onscreen() )
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
447 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
448 if ( pGUIWindow2 && pGUIWindow2->ptr_1C == (void *)33 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
449 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
450 sub_4452BB();
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
451 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
452 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
453 if ( pXY )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
454 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
455 x = *pXY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
456 y = pXY[1];
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
457 pX = *pXY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
458 pY = y;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
459 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
460 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
461 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
462 pMouse->GetClickPos(&pX, &pY);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
463 y = pY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
464 x = pX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
465 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
466
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
467 extern bool _507B98_ctrl_pressed;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
468 x = pX;
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
469 if ( GetCurrentMenuID() != -1 || current_screen_type != SCREEN_GAME || !_507B98_ctrl_pressed // stealing cursor
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
470 || (signed int)pX < (signed int)pViewport->uViewportTL_X || (signed int)pX > (signed int)pViewport->uViewportBR_X
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
471 || (signed int)pY < (signed int)pViewport->uViewportTL_Y || (signed int)pY > (signed int)pViewport->uViewportBR_Y)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
472 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
473 y = pY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
474 for ( int i = uNumVisibleWindows; i >= 0; --i )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
475 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
476 if ( x >= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameX && x <= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameZ
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
477 && y >= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameY && y <= (signed int)pWindowList[pVisibleWindowsIdxs[i] - 1].uFrameW )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
478 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
479 for ( control = pWindowList[pVisibleWindowsIdxs[i] - 1].pControlsHead; control; control = control->pNext )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
480 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
481 if ( control->uButtonType == 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
482 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
483 if ( x >= (signed int)control->uX && x <= (signed int)control->uZ && y >= (signed int)control->uY && y <= (signed int)control->uW )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
484 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
485 control->field_2C_is_pushed = 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
486 v10 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
487 if ( pMessageQueue_50CBD0->uNumMessages )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
488 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
489 v10 = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
490 pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
491 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
492 pMessageQueue_50CBD0->AddGUIMessage(control->msg, control->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
493 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
494 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
495 continue;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
496 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
497 if ( control->uButtonType == 2 )//когда нажимаешь на партреты персов
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
498 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
499 if ( (signed int)(signed __int64)sqrt((double)((x - control->uX) * (x - control->uX) + (y - control->uY) * (y - control->uY))) < (signed int)control->uWidth )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
500 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
501 control->field_2C_is_pushed = 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
502 v10 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
503 if ( pMessageQueue_50CBD0->uNumMessages )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
504 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
505 v10 = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
506 pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
507 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
508 pMessageQueue_50CBD0->AddGUIMessage(control->msg, control->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
509 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
510 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
511 continue;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
512 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
513 if ( control->uButtonType == 3 )//когда нажимаешь на скиллы
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
514 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
515 if ( x >= (signed int)control->uX && x <= (signed int)control->uZ && y >= (signed int)control->uY && y <= (signed int)control->uW )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
516 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
517 control->field_2C_is_pushed = 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
518 v10 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
519 if ( pMessageQueue_50CBD0->uNumMessages )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
520 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
521 v10 = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
522 pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
523 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
524 pMessageQueue_50CBD0->AddGUIMessage(control->msg, control->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
525 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
526 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
527 continue;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
528 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
529 y = pY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
530 x = pX;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
531 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
532 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
533 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
534 return;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
535 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
536 y = pY;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
537 //if ( pRenderer->pRenderD3D )
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
538 v5 = pEngine->pVisInstance->get_picked_object_zbuf_val();
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
539 /*else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
540 v5 = pRenderer->pActiveZBuffer[pX + pSRZBufferLineOffsets[pY]];*/
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
541
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
542 uint type = PID_TYPE((unsigned __int16)v5);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
543 if (type == OBJECT_Actor && uActiveCharacter && v5 < 0x2000000
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
544 && pPlayers[uActiveCharacter]->CanAct() && pPlayers[uActiveCharacter]->CanSteal() )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
545 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
546 /*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
547 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
548 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = UIMSG_1B;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
549 pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = v6 >> 3;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
550 *(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
551 ++pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
552 }*/
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
553 pMessageQueue_50CBD0->AddGUIMessage(UIMSG_STEALFROMACTOR, PID_ID((unsigned __int16)v5), 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
554
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
555 if ( pParty->bTurnBasedModeOn == 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
556 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
557 if ( pTurnEngine->turn_stage == TE_MOVEMENT )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
558 pTurnEngine->field_18 |= TE_FLAG_8;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
559 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
560 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
561 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
562
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
563
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
564 //----- (0041CD4F) --------------------------------------------------------
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
565 bool Mouse::UI_OnKeyDown(unsigned int vkKey)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
566 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
567 //unsigned int v1; // edi@1
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
568 //unsigned int v2; // eax@2
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
569 int v3; // esi@3
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
570 int v4; // ecx@10
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
571 GUIButton *pButton; // eax@11
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
572 int v6; // edx@12
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
573 int v7; // ecx@20
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
574 char v8; // zf@21
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
575 //GUIButton *v9; // ecx@24
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
576 int v10; // esi@24
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
577 //int v11; // edx@26
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
578 int v12; // edx@28
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
579 int v13; // esi@32
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
580 //GUIButton *v14; // eax@37
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
581 int v15; // edx@38
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
582 int v17; // ecx@50
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
583 int v18; // edx@50
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
584 //GUIButton *v19; // ecx@54
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
585 int v20; // esi@54
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
586 //int v21; // edx@56
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
587 int v22; // ecx@59
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
588 int v23; // edx@59
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
589 int v24; // ecx@60
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
590 int v25; // esi@63
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
591 //unsigned int v26; // [sp+Ch] [bp-14h]@1
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
592 //int v27; // [sp+10h] [bp-10h]@1
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
593 int v28; // [sp+14h] [bp-Ch]@10
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
594 int v29; // [sp+14h] [bp-Ch]@36
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
595 unsigned int uClickX; // [sp+18h] [bp-8h]@10
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
596 unsigned int uClickY; // [sp+1Ch] [bp-4h]@10
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
597
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
598 //v1 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
599 //v27 = uNumVisibleWindows;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
600 if ( uNumVisibleWindows < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
601 return false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
602 //v2 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
603 for (int i = uNumVisibleWindows; i >= 0; --i)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
604 //while ( 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
605 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
606 v3 = pVisibleWindowsIdxs[i] - 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
607 if (!pWindowList[v3].receives_keyboard_input)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
608 continue;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
609
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
610 switch (vkKey)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
611 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
612 case VK_LEFT:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
613 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
614 v12 = pWindowList[v3].field_34;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
615 if ( pWindowList[v3].pCurrentPosActiveItem - pWindowList[v3].pStartingPosActiveItem - v12 >= 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
616 {
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
617 v8 = current_screen_type == SCREEN_PARTY_CREATION;
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
618 pWindowList[v3].pCurrentPosActiveItem -= v12;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
619 if ( v8 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
620 {
2534
1bcadc6dd203 enum SOUND_
Ritor1
parents: 2524
diff changeset
621 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
622 //v2 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
623 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
624 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
625 if ( pWindowList[v3].field_30 != 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
626 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
627 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
628 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
629 pButton = pWindowList[v3].pControlsHead;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
630 v13 = pWindowList[v3].pCurrentPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
631 if ( v13 > 0)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
632 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
633 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
634 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
635 pButton = pButton->pNext;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
636 --v13;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
637 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
638 while ( v13 );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
639 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
640 pMessageQueue_50CBD0->AddGUIMessage(pButton->msg, pButton->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
641 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
642 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
643 case VK_RIGHT:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
644 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
645 v7 = pWindowList[v3].pCurrentPosActiveItem + pWindowList[v3].field_34;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
646 if ( v7 < pWindowList[v3].pNumPresenceButton + pWindowList[v3].pStartingPosActiveItem )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
647 {
2541
a902abdfc7f2 1. Renamed class Game to class Engine.
a.parshin
parents: 2534
diff changeset
648 v8 = current_screen_type == SCREEN_PARTY_CREATION;
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
649 pWindowList[v3].pCurrentPosActiveItem = v7;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
650 if ( v8 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
651 {
2534
1bcadc6dd203 enum SOUND_
Ritor1
parents: 2524
diff changeset
652 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0);
2502
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
653 //v2 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
654 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
655 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
656 if ( pWindowList[v3].field_30 != 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
657 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
658 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
659 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
660 pButton = pWindowList[v3].pControlsHead;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
661 v10 = pWindowList[v3].pCurrentPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
662 if ( v10 > 0)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
663 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
664 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
665 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
666 pButton = pButton->pNext;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
667 --v10;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
668 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
669 while ( v10 );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
670 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
671 pMessageQueue_50CBD0->AddGUIMessage(pButton->msg, pButton->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
672 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
673 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
674 case VK_DOWN:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
675 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
676 v17 = pWindowList[v3].pStartingPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
677 v18 = pWindowList[v3].pCurrentPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
678 if ( v18 >= pWindowList[v3].pNumPresenceButton + v17 - 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
679 pWindowList[v3].pCurrentPosActiveItem = v17;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
680 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
681 pWindowList[v3].pCurrentPosActiveItem = v18 + 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
682 if ( pWindowList[v3].field_30 != 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
683 return true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
684 pButton = pWindowList[v3].pControlsHead;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
685 v20 = pWindowList[v3].pCurrentPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
686 if ( v20 > 0)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
687 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
688 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
689 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
690 pButton = pButton->pNext;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
691 --v20;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
692 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
693 while ( v20 );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
694 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
695 pMessageQueue_50CBD0->AddGUIMessage(pButton->msg, pButton->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
696 return true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
697 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
698 case VK_SELECT:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
699 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
700 pMouse->GetClickPos(&uClickX, &uClickY);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
701 v4 = pWindowList[v3].pStartingPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
702 v28 = v4 + pWindowList[v3].pNumPresenceButton;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
703 if ( v4 < v4 + pWindowList[v3].pNumPresenceButton )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
704 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
705 while ( 1 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
706 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
707 pButton = pWindowList[v3].pControlsHead;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
708 if ( v4 > 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
709 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
710 v6 = v4;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
711 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
712 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
713 pButton = pButton->pNext;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
714 --v6;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
715 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
716 while ( v6 );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
717 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
718 if ( (signed int)uClickX >= (signed int)pButton->uX//test for StatsTab in PlayerCreation Window
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
719 && (signed int)uClickX <= (signed int)pButton->uZ
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
720 && (signed int)uClickY >= (signed int)pButton->uY
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
721 && (signed int)uClickY <= (signed int)pButton->uW )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
722 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
723 ++v4;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
724 if ( v4 >= v28 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
725 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
726 //v1 = 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
727 //v2 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
728 //--i;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
729 //if ( i < 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
730 return false;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
731 //continue;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
732 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
733 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
734 pWindowList[v3].pCurrentPosActiveItem = v4;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
735 return true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
736 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
737 //v2 = pMessageQueue_50CBD0->uNumMessages;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
738 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
739 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
740 case VK_UP:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
741 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
742 v22 = pWindowList[v3].pCurrentPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
743 v23 = pWindowList[v3].pStartingPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
744 if ( v22 <= v23 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
745 v24 = pWindowList[v3].pNumPresenceButton + v23 - 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
746 else
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
747 v24 = v22 - 1;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
748 v8 = pWindowList[v3].field_30 == 0;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
749 pWindowList[v3].pCurrentPosActiveItem = v24;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
750 if ( !v8 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
751 return true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
752 pButton = pWindowList[v3].pControlsHead;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
753 v25 = pWindowList[v3].pCurrentPosActiveItem;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
754 if ( v25 > 0)
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
755 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
756 do
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
757 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
758 pButton = pButton->pNext;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
759 --v25;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
760 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
761 while ( v25 );
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
762 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
763 pMessageQueue_50CBD0->AddGUIMessage(pButton->msg, pButton->msg_param, 0);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
764 return true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
765 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
766 case VK_NEXT:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
767 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
768 if ( pWindowList[v3].field_30 != 0 ) //crashed at skill draw
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
769 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
770 pMouse->GetClickPos(&uClickX, &uClickY);
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
771 v29 = pWindowList[v3].pStartingPosActiveItem + pWindowList[v3].pNumPresenceButton; //num buttons more than buttons
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
772 for ( v4 = pWindowList[v3].pStartingPosActiveItem; v4 < v29; ++v4 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
773 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
774 pButton = pWindowList[v3].pControlsHead;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
775 if ( v4 > 0 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
776 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
777 for ( v15 = v4; v15; --v15 )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
778 pButton = pButton->pNext;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
779 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
780 if ( (signed int)uClickX >= (signed int)pButton->uX && (signed int)uClickX <= (signed int)pButton->uZ
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
781 && (signed int)uClickY >= (signed int)pButton->uY && (signed int)uClickY <= (signed int)pButton->uW )
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
782 {
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
783 pWindowList[v3].pCurrentPosActiveItem = v4;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
784 return true;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
785 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
786 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
787 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
788 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
789 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
790 default:
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
791 break;
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
792 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
793 }
a77c34acdbc9 Media folder
Ritor1
parents:
diff changeset
794 }