#include "constants.h"
#include "utility.h"
-// Convert a privileges value into a human-readable string,
-// with each component separated by a comma.
-std::wstring privsToString(u64 privs)
-{
- std::wostringstream os(std::ios_base::binary);
- if(privs & PRIV_BUILD)
- os<<L"build,";
- if(privs & PRIV_TELEPORT)
- os<<L"teleport,";
- if(privs & PRIV_SETTIME)
- os<<L"settime,";
- if(privs & PRIV_PRIVS)
- os<<L"privs,";
- if(privs & PRIV_SHOUT)
- os<<L"shout,";
- if(os.tellp())
- {
- // Drop the trailing comma. (Why on earth can't
- // you truncate a C++ stream anyway???)
- std::wstring tmp = os.str();
- return tmp.substr(0, tmp.length() -1);
- }
- return os.str();
-}
-
-// Converts a comma-seperated list of privilege values into a
-// privileges value. The reverse of privsToString(). Returns
-// PRIV_INVALID if there is anything wrong with the input.
-u64 stringToPrivs(std::wstring str)
-{
- u64 privs=0;
- std::vector<std::wstring> pr;
- pr=str_split(str, ',');
- for(std::vector<std::wstring>::iterator i = pr.begin();
- i != pr.end(); ++i)
- {
- if(*i == L"build")
- privs |= PRIV_BUILD;
- else if(*i == L"teleport")
- privs |= PRIV_TELEPORT;
- else if(*i == L"settime")
- privs |= PRIV_SETTIME;
- else if(*i == L"privs")
- privs |= PRIV_PRIVS;
- else if(*i == L"shout")
- privs |= PRIV_SHOUT;
- else
- return PRIV_INVALID;
- }
- return privs;
-}
-
Player::Player():
touching_ground(false),
swimming_up(false),
craftresult_is_preview(true),
hp(20),
- privs(PRIV_DEFAULT),
peer_id(PEER_ID_INEXISTENT),
m_pitch(0),
m_yaw(0),
m_position(0,0,0)
{
updateName("<not set>");
- updatePassword("");
resetInventory();
}
Settings args;
args.setS32("version", 1);
args.set("name", m_name);
- args.set("password", m_password);
+ //args.set("password", m_password);
args.setFloat("pitch", m_pitch);
args.setFloat("yaw", m_yaw);
args.setV3F("position", m_position);
args.setBool("craftresult_is_preview", craftresult_is_preview);
args.setS32("hp", hp);
- args.setU64("privs", privs);
args.writeLines(os);
//args.getS32("version");
std::string name = args.get("name");
updateName(name.c_str());
- std::string password = "";
+ /*std::string password = "";
if(args.exists("password"))
password = args.get("password");
- updatePassword(password.c_str());
+ updatePassword(password.c_str());*/
m_pitch = args.getFloat("pitch");
m_yaw = args.getFloat("yaw");
m_position = args.getV3F("position");
}catch(SettingNotFoundException &e){
hp = 20;
}
- try{
+ /*try{
std::string sprivs = args.get("privs");
if(sprivs == "all")
{
}
}catch(SettingNotFoundException &e){
privs = PRIV_DEFAULT;
- }
+ }*/
inventory.deSerialize(is);
}
v3f oldpos = position;
v3s16 oldpos_i = floatToInt(oldpos, BS);
+ v3f old_speed = m_speed;
+
/*std::cout<<"oldpos_i=("<<oldpos_i.X<<","<<oldpos_i.Y<<","
<<oldpos_i.Z<<")"<<std::endl;*/
if(position.Y < min_y)
{
position.Y = min_y;
+
+ //v3f old_speed = m_speed;
+
if(m_speed.Y < 0)
m_speed.Y = 0;
+
+ /*if(collision_info)
+ {
+ // Report fall collision
+ if(old_speed.Y < m_speed.Y - 0.1)
+ {
+ CollisionInfo info;
+ info.t = COLLISION_FALL;
+ info.speed = m_speed.Y - old_speed.Y;
+ collision_info->push_back(info);
+ }
+ }*/
}
}
*/
if(other_axes_overlap && main_axis_collides)
{
- v3f old_speed = m_speed;
+ //v3f old_speed = m_speed;
m_speed -= m_speed.dotProduct(dirs[i]) * dirs[i];
position -= position.dotProduct(dirs[i]) * dirs[i];
position += oldpos.dotProduct(dirs[i]) * dirs[i];
- if(collision_info)
+ /*if(collision_info)
{
// Report fall collision
if(old_speed.Y < m_speed.Y - 0.1)
info.speed = m_speed.Y - old_speed.Y;
collision_info->push_back(info);
}
- }
+ }*/
}
}
Set new position
*/
setPosition(position);
+
+ /*
+ Report collisions
+ */
+ if(collision_info)
+ {
+ // Report fall collision
+ if(old_speed.Y < m_speed.Y - 0.1)
+ {
+ CollisionInfo info;
+ info.t = COLLISION_FALL;
+ info.speed = m_speed.Y - old_speed.Y;
+ collision_info->push_back(info);
+ }
+ }
}
void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d)