TrustedUser
2,147
edits
(→TODOs: Add various TODOs for Lua, taken from scummvm-devel) |
m (Text replacement - "<source lang=" to "<syntaxhighlight lang=") |
||
(25 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox_TODO| | |||
taskname=Sword25 Engine TODO| | |||
techcontact=[[Sword25]] Engine Team| | |||
subsystem=Engine| | |||
}} | |||
== Regressions == | |||
== TODOs == | == TODOs == | ||
* Enhance package manager to allow running with extracted data just like original did | * Enhance package manager to allow running with extracted data just like original did | ||
* Translate comments from German | * Translate comments from German | ||
* Check if it's completable on BE machine (first few scenes work now) | |||
* Check | * Audio does not get saved with Persistence | ||
* | * PersistenceService::saveGame and PersistenceService::loadGame contain code to (de)compress the save data using zlib. But we already compress savegames using zlib, so now we end up compressing them twice. Unless we need to do the compression to be compatible with saves from the original, we should get rid of this in-engine compression. If we can't get rid of it, we should add code comments that explain the reasons. | ||
* | * There may still be locale-related bugs. There have been at least two relating to the decimal mark being a comma instead of a point in my locale. However, there are currently no known ones. | ||
* | |||
* | * The following commented out code used to be in kernel/scummvmwindow.cpp; I am keeping it here in case there is still something in there that needs to be handled (which I can't tell right now). | ||
* | |||
<syntaxhighlight lang="cpp"> | |||
// FIXME: Special keys detected here need to be moved into the Input Engine | |||
// Die WindowProc aller Fenster der Klasse | |||
LRESULT CALLBACK BS_ScummVMWindow::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) | |||
{ | |||
switch(uMsg) | |||
{ | |||
case WM_PAINT: | |||
ValidateRect(hwnd, NULL); | |||
break; | |||
case WM_DESTROY: | |||
// Das Fenster wird zerstört | |||
PostQuitMessage(0); | |||
break; | |||
case WM_CLOSE: | |||
{ | |||
BS_Window * WindowPtr = BS_Kernel::GetInstance()->GetWindow(); | |||
if (WindowPtr) { | |||
WindowPtr->SetCloseWanted(true); | |||
} | |||
break; | |||
} | |||
case WM_KEYDOWN: | |||
{ | |||
// Tastendrücke, die für das Inputmodul interessant sind, werden diesem gemeldet. | |||
BS_InputEngine * InputPtr = BS_Kernel::GetInstance()->GetInput(); | |||
if (InputPtr) | |||
{ | |||
switch (wParam) | |||
{ | |||
case VK_RETURN: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_ENTER); | |||
break; | |||
case VK_LEFT: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_LEFT); | |||
break; | |||
case VK_RIGHT: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_RIGHT); | |||
break; | |||
case VK_HOME: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_HOME); | |||
break; | |||
case VK_END: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_END); | |||
break; | |||
case VK_BACK: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_BACKSPACE); | |||
break; | |||
case VK_TAB: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_TAB); | |||
break; | |||
case VK_INSERT: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_INSERT); | |||
break; | |||
case VK_DELETE: | |||
InputPtr->ReportCommand(BS_InputEngine::KEY_COMMAND_DELETE); | |||
break; | |||
} | |||
} | |||
break; | |||
} | |||
case WM_KEYUP: | |||
case WM_SYSKEYUP: | |||
// Alle Tastendrücke werden ignoriert, damit Windows per DefWindowProc() nicht darauf | |||
// reagieren kann und damit unerwartete Seiteneffekte auslöst. | |||
// Zum Beispiel würden ALT und F10 Tastendrücke das "Menü" aktivieren und somit den Message-Loop zum Stillstand bringen. | |||
break; | |||
case WM_SYSCOMMAND: | |||
// Verhindern, dass der Bildschirmschoner aktiviert wird, während das Spiel läuft | |||
if (wParam != SC_SCREENSAVE) return DefWindowProc(hwnd,uMsg,wParam,lParam); | |||
break; | |||
case WM_CHAR: | |||
{ | |||
byte theChar = static_cast<byte>(wParam & 0xff); | |||
// Alle Zeichen, die keine Steuerzeichen sind, werden als Buchstaben dem Input-Service mitgeteilt. | |||
if (theChar >= 32) | |||
{ | |||
BS_InputEngine * InputPtr = BS_Kernel::GetInstance()->GetInput(); | |||
if (InputPtr) InputPtr->ReportCharacter(theChar); | |||
} | |||
} | |||
break; | |||
case WM_SETCURSOR: | |||
{ | |||
// Der Systemcursor wird in der Client-Area des Fensters nicht angezeigt, jedoch in der nicht Client-Area, damit der Benutzer das Fenster wie gewohnt | |||
// schließen und verschieben kann. | |||
// Koordinaten des Cursors in der Client-Area berechnen. | |||
POINT pt; | |||
GetCursorPos(&pt); | |||
ScreenToClient(hwnd, &pt); | |||
// Feststellen, ob sich der Cursor in der Client-Area befindet. | |||
// Get client rect | |||
RECT rc; | |||
GetClientRect(hwnd, &rc); | |||
// See if cursor is in client area | |||
if(PtInRect(&rc, pt)) | |||
// In der Client-Area keinen Cursor anzeigen. | |||
SetCursor(NULL); | |||
else | |||
// Ausserhalb der Client-Area den Cursor anzeigen. | |||
SetCursor(LoadCursor(NULL, IDC_ARROW)); | |||
return TRUE; | |||
} | |||
break; | |||
default: | |||
// Um alle anderen Vorkommnisse kümmert sich Windows | |||
return DefWindowProc(hwnd,uMsg,wParam,lParam); | |||
} | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
== Lua TODO == | == Lua TODO == |