Merge remote-tracking branch 'kahrl/dissector'
[oweals/minetest.git] / src / main.cpp
index 3cc7489541c1f56bc7a5681eafb4c0cc823df505..b9a957322865c28dc4d497b3fa02477e32c51dc2 100644 (file)
@@ -367,6 +367,9 @@ TODO: Merge bahamada's audio stuff (clean patch available)
 
 TODO: Move content_features to mapnode_content_features.{h,cpp} or so
 
+TODO: Fix item use() stuff; dropping a stack of cooked rats and eating
+      it gives 3 hearts and consumes all the rats.
+
 Making it more portable:
 ------------------------
  
@@ -560,10 +563,12 @@ public:
                // Remember whether each key is down or up
                if(event.EventType == irr::EET_KEY_INPUT_EVENT)
                {
-                       keyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;
-
-                       if(event.KeyInput.PressedDown)
-                               keyWasDown[event.KeyInput.Key] = true;
+                       if(event.KeyInput.PressedDown) {
+                               keyIsDown.set(event.KeyInput);
+                               keyWasDown.set(event.KeyInput);
+                       } else {
+                               keyIsDown.unset(event.KeyInput);
+                       }
                }
 
                if(event.EventType == irr::EET_MOUSE_INPUT_EVENT)
@@ -607,16 +612,17 @@ public:
                return false;
        }
 
-       bool IsKeyDown(EKEY_CODE keyCode) const
+       bool IsKeyDown(const KeyPress &keyCode) const
        {
                return keyIsDown[keyCode];
        }
        
        // Checks whether a key was down and resets the state
-       bool WasKeyDown(EKEY_CODE keyCode)
+       bool WasKeyDown(const KeyPress &keyCode)
        {
                bool b = keyWasDown[keyCode];
-               keyWasDown[keyCode] = false;
+               if (b)
+                       keyWasDown.unset(keyCode);
                return b;
        }
 
@@ -629,12 +635,9 @@ public:
 
        void clearInput()
        {
-               for(u32 i=0; i<KEY_KEY_CODES_COUNT; i++)
-               {
-                       keyIsDown[i] = false;
-                       keyWasDown[i] = false;
-               }
-               
+               keyIsDown.clear();
+               keyWasDown.clear();
+
                leftclicked = false;
                rightclicked = false;
                leftreleased = false;
@@ -667,9 +670,9 @@ private:
        IrrlichtDevice *m_device;
        
        // The current state of keys
-       bool keyIsDown[KEY_KEY_CODES_COUNT];
+       KeyList keyIsDown;
        // Whether a key has been pressed or not
-       bool keyWasDown[KEY_KEY_CODES_COUNT];
+       KeyList keyWasDown;
 };
 
 /*
@@ -684,11 +687,11 @@ public:
                m_receiver(receiver)
        {
        }
-       virtual bool isKeyDown(EKEY_CODE keyCode)
+       virtual bool isKeyDown(const KeyPress &keyCode)
        {
                return m_receiver->IsKeyDown(keyCode);
        }
-       virtual bool wasKeyDown(EKEY_CODE keyCode)
+       virtual bool wasKeyDown(const KeyPress &keyCode)
        {
                return m_receiver->WasKeyDown(keyCode);
        }
@@ -769,14 +772,13 @@ public:
                rightclicked = false;
                leftreleased = false;
                rightreleased = false;
-               for(u32 i=0; i<KEY_KEY_CODES_COUNT; ++i)
-                       keydown[i] = false;
+               keydown.clear();
        }
-       virtual bool isKeyDown(EKEY_CODE keyCode)
+       virtual bool isKeyDown(const KeyPress &keyCode)
        {
                return keydown[keyCode];
        }
-       virtual bool wasKeyDown(EKEY_CODE keyCode)
+       virtual bool wasKeyDown(const KeyPress &keyCode)
        {
                return false;
        }
@@ -845,8 +847,7 @@ public:
                        if(counter1 < 0.0)
                        {
                                counter1 = 0.1*Rand(1, 40);
-                               keydown[getKeySetting("keymap_jump")] =
-                                               !keydown[getKeySetting("keymap_jump")];
+                               keydown.toggle(getKeySetting("keymap_jump"));
                        }
                }
                {
@@ -855,8 +856,7 @@ public:
                        if(counter1 < 0.0)
                        {
                                counter1 = 0.1*Rand(1, 40);
-                               keydown[getKeySetting("keymap_special1")] =
-                                               !keydown[getKeySetting("keymap_special1")];
+                               keydown.toggle(getKeySetting("keymap_special1"));
                        }
                }
                {
@@ -865,8 +865,7 @@ public:
                        if(counter1 < 0.0)
                        {
                                counter1 = 0.1*Rand(1, 40);
-                               keydown[getKeySetting("keymap_forward")] =
-                                               !keydown[getKeySetting("keymap_forward")];
+                               keydown.toggle(getKeySetting("keymap_forward"));
                        }
                }
                {
@@ -875,8 +874,7 @@ public:
                        if(counter1 < 0.0)
                        {
                                counter1 = 0.1*Rand(1, 40);
-                               keydown[getKeySetting("keymap_left")] =
-                                               !keydown[getKeySetting("keymap_left")];
+                               keydown.toggle(getKeySetting("keymap_left"));
                        }
                }
                {
@@ -922,7 +920,7 @@ public:
                return (myrand()%(max-min+1))+min;
        }
 private:
-       bool keydown[KEY_KEY_CODES_COUNT];
+       KeyList keydown;
        v2s32 mousepos;
        v2s32 mousespeed;
        bool leftdown;
@@ -1161,11 +1159,7 @@ int main(int argc, char *argv[])
        // Create user data directory
        fs::CreateDir(porting::path_userdata);
 
-#ifdef USE_GETTEXT
-       setlocale(LC_MESSAGES, "");
-       bindtextdomain("minetest", (porting::path_userdata+"/locale").c_str());
-       textdomain("minetest");
-#endif
+       init_gettext((porting::path_data+"/../locale").c_str());
        
        // Initialize debug streams
 #ifdef RUN_IN_PLACE
@@ -1186,7 +1180,7 @@ int main(int argc, char *argv[])
        BEGIN_DEBUG_EXCEPTION_HANDLER
 
        // Print startup message
-       dstream<<DTIME<<"minetest-c55"
+       dstream<<DTIME<<PROJECT_NAME
                        " with SER_FMT_VER_HIGHEST="<<(int)SER_FMT_VER_HIGHEST
                        <<", "<<BUILD_INFO
                        <<std::endl;
@@ -1379,9 +1373,6 @@ int main(int argc, char *argv[])
        if (device == 0)
                return 1; // could not create selected driver.
        
-       // Set device in game parameters
-       device = device;
-
        // Set the window caption
        device->setWindowCaption(L"Minetest [Main Menu]");
        
@@ -1583,6 +1574,8 @@ int main(int argc, char *argv[])
 
                                password = translatePassword(playername, menudata.password);
 
+                               //dstream<<"Main: password hash: '"<<password<<"'"<<std::endl;
+
                                address = wide_to_narrow(menudata.address);
                                int newport = stoi(wide_to_narrow(menudata.port));
                                if(newport != 0)