4aiman 2015-04-27 22:04:50 +03:00
commit 051d103426
18 changed files with 136 additions and 85 deletions

View File

@ -197,8 +197,8 @@ set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An InfiniMiner/Minecraft inspired game")
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
set(CPACK_PACKAGE_VENDOR "celeron55")
set(CPACK_PACKAGE_CONTACT "Perttu Ahola <celeron55@gmail.com>")
set(CPACK_PACKAGE_VENDOR "MoNTE48")
set(CPACK_PACKAGE_CONTACT "MoNTE48@mail.ua")
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)

View File

@ -19,8 +19,8 @@ GAMES_TO_COPY = minetest_game
# Android Version code
# Increase for each build!
################################################################################
# Play Store actual version (16/03/15): 11
ANDROID_VERSION_CODE = 12
ANDROID_VERSION_CODE = 1
################################################################################
# toolchain config for arm old processors

View File

@ -416,7 +416,7 @@ msgstr "Schöne Bäume"
#: builtin/mainmenu/tab_settings.lua:189
msgid "Opaque Water"
msgstr "Undurchsichtiges Wasser"
msgstr "Undurchs. Wasser"
#: builtin/mainmenu/tab_settings.lua:191
msgid "Connected Glass"

View File

@ -573,7 +573,6 @@ private:
bool m_inventory_updated;
Inventory *m_inventory_from_server;
float m_inventory_from_server_age;
std::set<v3s16> m_active_blocks;
PacketCounter m_packetcounter;
bool m_show_highlighted;
// Block mesh animation parameters

View File

@ -183,7 +183,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
{
// Set the window caption
const wchar_t *text = wgettext("Main Menu");
device->setWindowCaption((narrow_to_wide(PROJECT_NAME) + L" [" + text + L"]").c_str());
device->setWindowCaption((narrow_to_wide("MultiCraft") + L" [" + text + L"]").c_str());
delete[] text;
try { // This is used for catching disconnects

View File

@ -1238,7 +1238,7 @@ void ServerEnvironment::step(float dtime)
// Read messages from object
while(!obj->m_messages_out.empty())
{
m_active_object_messages.push_back(
m_active_object_messages.push(
obj->m_messages_out.front());
obj->m_messages_out.pop();
}
@ -1462,7 +1462,7 @@ ActiveObjectMessage ServerEnvironment::getActiveObjectMessage()
return ActiveObjectMessage(0);
ActiveObjectMessage message = m_active_object_messages.front();
m_active_object_messages.pop_front();
m_active_object_messages.pop();
return message;
}

View File

@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <set>
#include <list>
#include <queue>
#include <map>
#include "irr_v3d.h"
#include "activeobject.h"
@ -378,7 +379,7 @@ private:
// Active object list
std::map<u16, ServerActiveObject*> m_active_objects;
// Outgoing network message buffer for active objects
std::list<ActiveObjectMessage> m_active_object_messages;
std::queue<ActiveObjectMessage> m_active_object_messages;
// Some timers
float m_send_recommended_timer;
IntervalLimiter m_object_management_interval;

View File

@ -1029,9 +1029,13 @@ static inline void create_formspec_menu(GUIFormSpecMenu **cur_formspec,
}
#ifdef __ANDROID__
#define SIZE_TAG "size[11,5.5]"
# define SIZE_TAG "size[11,5.5]"
# define PAUSE_MENU_SIZE_TAG "size[6,3.5]"
# define PAUSE_MENU_BUTTON_LEFT 1.5
#else
#define SIZE_TAG "size[11,5.5,true]" // Fixed size on desktop
# define SIZE_TAG "size[11,5.5,true]" // Fixed size on desktop
# define PAUSE_MENU_SIZE_TAG "size[11,5.5,true]" // Fixed size on desktop
# define PAUSE_MENU_BUTTON_LEFT 4
#endif
static void show_chat_menu(GUIFormSpecMenu **cur_formspec,
@ -1083,19 +1087,19 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
bool singleplayermode)
{
#ifdef __ANDROID__
std::string control_text = wide_to_narrow(wstrgettext("Default Controls:\n"
"No menu visible:\n"
"- single tap: button activate\n"
"- double tap: place/use\n"
"- slide finger: look around\n"
"Menu/Inventory visible:\n"
"- double tap (outside):\n"
" -->close\n"
"- touch stack, touch slot:\n"
" --> move stack\n"
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
));
// std::string control_text = wide_to_narrow(wstrgettext("Default Controls:\n"
// "No menu visible:\n"
// "- single tap: button activate\n"
// "- double tap: place/use\n"
// "- slide finger: look around\n"
// "Menu/Inventory visible:\n"
// "- double tap (outside):\n"
// " -->close\n"
// "- touch stack, touch slot:\n"
// " --> move stack\n"
// "- touch&drag, tap 2nd finger\n"
// " --> place single item to slot\n"
// ));
#else
std::string control_text = wide_to_narrow(wstrgettext("Default Controls:\n"
"- WASD: move\n"
@ -1114,29 +1118,31 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
float ypos = singleplayermode ? 0.5 : 0.1;
std::ostringstream os;
os << FORMSPEC_VERSION_STRING << SIZE_TAG
<< "button_exit[4," << (ypos++) << ";3,0.5;btn_continue;"
os << FORMSPEC_VERSION_STRING << PAUSE_MENU_SIZE_TAG
<< "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_continue;"
<< wide_to_narrow(wstrgettext("Continue")) << "]";
if (!singleplayermode) {
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_change_password;"
os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_change_password;"
<< wide_to_narrow(wstrgettext("Change Password")) << "]";
}
#ifndef __ANDROID__
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;"
os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_sound;"
<< wide_to_narrow(wstrgettext("Sound Volume")) << "]";
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;"
os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_key_config;"
<< wide_to_narrow(wstrgettext("Change Keys")) << "]";
#endif
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;"
os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_exit_menu;"
<< wide_to_narrow(wstrgettext("Exit to Menu")) << "]";
os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;"
os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_exit_os;"
<< wide_to_narrow(wstrgettext("Exit to OS")) << "]"
#ifndef __ANDROID__
<< "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]"
<< "textarea[0.4,0.25;3.5,6;;" << PROJECT_NAME "\n"
<< g_build_info << "\n"
<< "path_user = " << wrap_rows(porting::path_user, 20)
#endif
<< "\n;]";
/* Create menu */
@ -2029,7 +2035,7 @@ bool Game::createClient(const std::string &playername,
/* Set window caption
*/
std::wstring str = narrow_to_wide(PROJECT_NAME);
std::wstring str = narrow_to_wide("MultiCraft");
str += L" [";
str += driver->getName();
str += L"]";
@ -2054,7 +2060,7 @@ bool Game::initGui()
{
// First line of debug text
guitext = guienv->addStaticText(
narrow_to_wide(PROJECT_NAME).c_str(),
narrow_to_wide("MultiCraft").c_str(),
core::rect<s32>(0, 0, 0, 0),
false, false, guiroot);
@ -3509,14 +3515,24 @@ void Game::handlePointingAtNode(GameRunData *runData,
}
}
bool digging = false;
if (runData->nodig_delay_timer <= 0.0 && input->getLeftState()
&& client->checkPrivilege("interact")) {
handleDigging(runData, pointed, nodepos, playeritem_toolcap, dtime);
digging = true;
}
if ((input->getRightClicked() ||
runData->repeat_rightclick_timer >= m_repeat_right_click_time) &&
client->checkPrivilege("interact")) {
bool place = (input->getRightClicked() ||
runData->repeat_rightclick_timer >= m_repeat_right_click_time) &&
client->checkPrivilege("interact");
#ifdef HAVE_TOUCHSCREENGUI
place &= !digging;
place |= input->getLeftReleased();
#endif
if (place) {
runData->repeat_rightclick_timer = 0;
infostream << "Ground right-clicked" << std::endl;
@ -4018,7 +4034,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats,
std::ostringstream os(std::ios_base::binary);
os << std::fixed
<< PROJECT_NAME " " << g_version_hash
<< "MultiCraft " << g_version_hash
<< " FPS = " << fps
<< " (R: range_all=" << draw_control->range_all << ")"
<< std::setprecision(0)
@ -4034,7 +4050,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats,
guitext->setVisible(true);
} else if (flags.show_hud || flags.show_chat) {
std::ostringstream os(std::ios_base::binary);
os << PROJECT_NAME " " << g_version_hash;
os << "MultiCraft " << g_version_hash;
guitext->setText(narrow_to_wide(os.str()).c_str());
guitext->setVisible(true);
} else {
@ -4267,7 +4283,7 @@ void the_game(bool *kill,
} catch (SerializationError &e) {
error_message = std::string("A serialization error occurred:\n")
+ e.what() + "\n\nThe server is probably "
" running a different version of " PROJECT_NAME ".";
" running a different version of MultiCraft.";
errorstream << error_message << std::endl;
} catch (ServerError &e) {
error_message = e.what();

View File

@ -172,7 +172,7 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
m_sound_manager = &dummySoundManager;
//create topleft header
std::wstring t = narrow_to_wide(std::string(PROJECT_NAME " ") +
std::wstring t = narrow_to_wide(std::string("MultiCraft ") +
g_version_hash);
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight());

View File

@ -324,26 +324,23 @@ size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
if (schematic == NULL)
return 0;
if (flags & DECO_PLACE_CENTER_X)
p.X -= (schematic->size.X + 1) / 2;
if (flags & DECO_PLACE_CENTER_Y)
p.Y -= (schematic->size.Y + 1) / 2;
if (flags & DECO_PLACE_CENTER_Z)
p.Z -= (schematic->size.Z + 1) / 2;
bool force_placement = (flags & DECO_FORCE_PLACEMENT);
if (!vm->m_area.contains(p))
return 0;
u32 vi = vm->m_area.index(p);
content_t c = vm->m_data[vi].getContent();
if (!CONTAINS(c_place_on, c))
return 0;
if (flags & DECO_PLACE_CENTER_X)
p.X -= (schematic->size.X - 1) / 2;
if (flags & DECO_PLACE_CENTER_Y)
p.Y -= (schematic->size.Y - 1) / 2;
if (flags & DECO_PLACE_CENTER_Z)
p.Z -= (schematic->size.Z - 1) / 2;
Rotation rot = (rotation == ROTATE_RAND) ?
(Rotation)pr->range(ROTATE_0, ROTATE_270) : rotation;
bool force_placement = (flags & DECO_FORCE_PLACEMENT);
schematic->blitToVManip(p, vm, rot, force_placement, m_ndef);
return 1;

View File

@ -149,9 +149,7 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA;
*pkt >> denyCode;
if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
std::wstring wide_reason;
*pkt >> wide_reason;
m_access_denied_reason = wide_to_narrow(wide_reason);
*pkt >> m_access_denied_reason;
}
else if (denyCode < SERVER_ACCESSDENIED_MAX) {
m_access_denied_reason = accessDeniedStrings[denyCode];

View File

@ -217,7 +217,7 @@ void Server::handleCommand_Auth(NetworkPacket* pkt)
<< "but it was disallowed for the following reason: "
<< reason << std::endl;
DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING,
narrow_to_wide(reason.c_str()));
reason.c_str());
return;
}
}

View File

@ -894,6 +894,12 @@ int ModApiEnvMod::l_get_us_time(lua_State *L)
return 1;
}
int ModApiEnvMod::l_get_project_name(lua_State *L)
{
lua_pushstring(L, PROJECT_NAME);
return 1;
}
void ModApiEnvMod::Initialize(lua_State *L, int top)
{
API_FCT(set_node);
@ -934,4 +940,5 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(forceload_block);
API_FCT(forceload_free_block);
API_FCT(get_us_time);
API_FCT(get_project_name);
}

View File

@ -166,6 +166,8 @@ private:
// get us precision time
static int l_get_us_time(lua_State *L);
static int l_get_project_name(lua_State *L);
public:
static void Initialize(lua_State *L, int top);
};

View File

@ -1490,7 +1490,7 @@ void Server::SendBreath(u16 peer_id, u16 breath)
Send(&pkt);
}
void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::wstring &custom_reason)
void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason)
{
DSTACK(__FUNCTION_NAME);
@ -2535,7 +2535,7 @@ void Server::RespawnPlayer(u16 peer_id)
}
}
void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::wstring &custom_reason)
void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason)
{
DSTACK(__FUNCTION_NAME);

View File

@ -360,7 +360,7 @@ public:
void peerAdded(con::Peer *peer);
void deletingPeer(con::Peer *peer, bool timeout);
void DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::wstring &custom_reason=NULL);
void DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason="");
void DenyAccess_Legacy(u16 peer_id, const std::wstring &reason);
bool getClientConInfo(u16 peer_id, con::rtt_stat_type type,float* retval);
bool getClientInfo(u16 peer_id,ClientState* state, u32* uptime,
@ -383,7 +383,7 @@ private:
void SendMovement(u16 peer_id);
void SendHP(u16 peer_id, u8 hp);
void SendBreath(u16 peer_id, u16 breath);
void SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::wstring &custom_reason);
void SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason);
void SendAccessDenied_Legacy(u16 peer_id, const std::wstring &reason);
void SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target);
void SendItemDef(u16 peer_id,IItemDefManager *itemdef, u16 protocol_version);

View File

@ -39,7 +39,7 @@ using namespace irr::core;
extern Settings *g_settings;
const char** touchgui_button_imagenames = (const char*[]) {
const char *touchgui_button_imagenames[] = {
"up_arrow.png",
"down_arrow.png",
"left_arrow.png",
@ -49,7 +49,9 @@ const char** touchgui_button_imagenames = (const char*[]) {
"jump_btn.png",
"down.png",
"fly_btn.png",
#ifdef ENABLE_ANDROID_NOCLIP
"noclip_btn.png",
#endif
"fast_btn.png",
"debug_btn.png",
"chat_btn.png",
@ -88,9 +90,11 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
case fly_id:
key = "freemove";
break;
#ifdef ENABLE_ANDROID_NOCLIP
case noclip_id:
key = "noclip";
break;
#endif
case fast_id:
key = "fastmove";
break;
@ -187,40 +191,53 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
3 * button_size, m_screensize.Y);
/*
draw control pad
0 1 2
3 4 5
for now only 0, 1, 2, and 4 are used
0 3 6
1 4 7
2 5 8
*/
int number = 0;
for (int y = 0; y < 2; ++y)
for (int y = 0; y < 3; ++y)
for (int x = 0; x < 3; ++x, ++number) {
rect<s32> button_rect(
x * button_size, m_screensize.Y - button_size * (2 - y),
(x + 1) * button_size, m_screensize.Y - button_size * (1 - y)
y * button_size, m_screensize.Y - button_size * (3 - x),
(y + 1) * button_size, m_screensize.Y - button_size * (2 - x)
);
touch_gui_button_id id = after_last_element_id;
std::wstring caption;
switch (number) {
case 0:
break;
case 1:
id = left_id;
caption = L"<";
break;
case 1:
case 2:
break;
case 3:
id = forward_id;
caption = L"^";
break;
case 2:
id = right_id;
caption = L">";
break;
case 4:
id = jump_id;
caption = L"x";
break;
case 5:
id = backward_id;
caption = L"v";
break;
case 6:
break;
case 7:
id = right_id;
caption = L">";
break;
case 8:
break;
}
if (id != after_last_element_id) {
initButton(id, button_rect, caption, false);
}
}
}
/* init inventory button */
@ -233,20 +250,12 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
rect<s32>(2.5*button_size, m_screensize.Y - (button_size/2),
3*button_size, m_screensize.Y), L"drop", true);
/* init jump button */
initButton(jump_id,
/* init crunch button */
initButton(crunch_id,
rect<s32>(m_screensize.X-(1.75*button_size),
m_screensize.Y - (0.5*button_size),
m_screensize.X-(0.25*button_size),
m_screensize.Y),
L"x",false);
/* init crunch button */
initButton(crunch_id,
rect<s32>(m_screensize.X-(3.25*button_size),
m_screensize.Y - (0.5*button_size),
m_screensize.X-(1.75*button_size),
m_screensize.Y),
L"H",false);
/* init fly button */
@ -256,11 +265,13 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density)
m_screensize.X, m_screensize.Y - (button_size*1.5)),
L"fly", false, SLOW_BUTTON_REPEAT);
#ifdef ENABLE_ANDROID_NOCLIP
/* init noclip button */
initButton(noclip_id,
rect<s32>(m_screensize.X - (0.75*button_size), 2.25*button_size,
m_screensize.X, 3*button_size),
L"clip", false, SLOW_BUTTON_REPEAT);
#endif
/* init fast button */
initButton(fast_id,
@ -497,6 +508,24 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
m_receiver->OnEvent(*translated);
delete translated;
} else if (!m_move_has_really_moved) {
SEvent* translated = new SEvent;
memset(translated,0,sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_move_downlocation.X;
translated->MouseInput.Y = m_move_downlocation.Y;
translated->MouseInput.Shift = false;
translated->MouseInput.Control = false;
translated->MouseInput.ButtonStates = 0;
translated->MouseInput.Event = EMIE_LMOUSE_LEFT_UP;
m_receiver->OnEvent(*translated);
delete translated;
m_shootline = m_device
->getSceneManager()
->getSceneCollisionManager()
->getRayFromScreenCoordinates(
v2s32(event.TouchInput.X,event.TouchInput.Y));
}
else {
/* do double tap detection */

View File

@ -43,7 +43,9 @@ typedef enum {
jump_id,
crunch_id,
fly_id,
#ifdef ENABLE_ANDROID_NOCLIP
noclip_id,
#endif
fast_id,
debug_id,
chat_id,
@ -56,7 +58,7 @@ typedef enum {
#define MAX_TOUCH_COUNT 64
#define BUTTON_REPEAT_DELAY 0.2f
extern const char** touchgui_button_imagenames;
extern const char *touchgui_button_imagenames[];
class TouchScreenGUI
{