#include "GlobalUserInfo.h" #include "external/json/document.h" #include "JniFun.h" #include "Utility.h" CGlobalUserInfo __gGlobalUserInfo; //用户信息 ////////////////////////////////////////////////////////////////////////////////// //静态变量 CGlobalUserInfo * CGlobalUserInfo::m_pGlobalUserInfo=0; //用户信息 GlobalUserInfoSink * CGlobalUserInfo::m_pUserInfoSink=0; //用户信息 ////////////////////////////////////////////////////////////////////////////////// //构造函数 CGlobalUserInfo::CGlobalUserInfo() { //设置对象 ASSERT(m_pGlobalUserInfo==0); if (m_pGlobalUserInfo==0) m_pGlobalUserInfo=this; //设置变量 zeromemory(&m_GlobalUserData,sizeof(m_GlobalUserData)); zeromemory(&m_IndividualUserData,sizeof(m_IndividualUserData)); m_IsShowLottery = true; return; } //析构函数 CGlobalUserInfo::~CGlobalUserInfo() { //释放对象 ASSERT(m_pGlobalUserInfo==this); if (m_pGlobalUserInfo==this) m_pGlobalUserInfo=0; return; } //重置资料 void CGlobalUserInfo::ResetUserInfoData() { //设置变量 zeromemory(&m_GlobalUserData,sizeof(m_GlobalUserData)); zeromemory(&m_IndividualUserData,sizeof(m_IndividualUserData)); return; } void CGlobalUserInfo::setUserScore(SCORE lScore) { m_pGlobalUserInfo->GetGlobalUserData()->lUserScore = lScore; upPlayerInfo(); } void CGlobalUserInfo::setNickName(std::string kName) { strncpy(m_pGlobalUserInfo->GetGlobalUserData()->szNickName, (kName.c_str()), countarray(m_pGlobalUserInfo->GetGlobalUserData()->szNickName)); upPlayerInfo(); } void CGlobalUserInfo::setAccounts(std::string kAccounts) { strncpy(m_pGlobalUserInfo->GetGlobalUserData()->szAccounts, (kAccounts.c_str()), countarray(m_pGlobalUserInfo->GetGlobalUserData()->szAccounts)); upPlayerInfo(); } void CGlobalUserInfo::setUserInsure(SCORE lScore) { m_pGlobalUserInfo->GetGlobalUserData()->lUserInsure = lScore; upPlayerInfo(); } uint32 CGlobalUserInfo::getUserID() { return m_pGlobalUserInfo->GetGlobalUserData()->dwUserID; } uint32 CGlobalUserInfo::getGameID() { return m_pGlobalUserInfo->GetGlobalUserData()->dwGameID; } char* CGlobalUserInfo::getPassword() { return m_pGlobalUserInfo->GetGlobalUserData()->szPassword; } uint8 CGlobalUserInfo::getGender() { return m_pGlobalUserInfo->GetGlobalUserData()->cbGender; } std::string CGlobalUserInfo::getNickName() { return m_pGlobalUserInfo->GetGlobalUserData()->szNickName; } std::string CGlobalUserInfo::getHeadHttp() { return m_pGlobalUserInfo->GetGlobalUserData()->szHeadHttp; } std::string CGlobalUserInfo::getUserChannel() { return m_pGlobalUserInfo->GetGlobalUserData()->szUserChannel; } std::string CGlobalUserInfo::getAccounts() { return m_pGlobalUserInfo->GetGlobalUserData()->szAccounts; } SCORE CGlobalUserInfo::getUserScore() { return m_pGlobalUserInfo->GetGlobalUserData()->lUserScore; } SCORE CGlobalUserInfo::getUserInsure() { return m_pGlobalUserInfo->GetGlobalUserData()->lUserInsure; } void CGlobalUserInfo::setSink(GlobalUserInfoSink* pSink) { m_pUserInfoSink = pSink; } void CGlobalUserInfo::upPlayerInfo() { if (m_pUserInfoSink) { m_pUserInfoSink->upPlayerInfo(); } } void CGlobalUserInfo::LoginSucess() { if (m_pUserInfoSink) { m_pUserInfoSink->LoginSucess(); } } std::string CGlobalUserInfo::getPhoneNumber() { return m_IndividualUserData.szMobilePhone; } void CGlobalUserInfo::onLocationChanaged(std::string strJson) { rapidjson::Document doc; doc.Parse<0>(strJson.c_str()); if (doc.GetParseError()) { cocos2d::log("%s", strJson.c_str()); cocos2d::log("------------------------------"); return ; } if (doc.HasMember("ret") && doc["ret"].IsBool()) { bool bRet = doc["ret"].GetBool(); if ( bRet ) { m_UserAddr.isInit = true; if (doc.HasMember("latitude") && doc["latitude"].IsDouble()) { m_UserAddr.latitude = doc["latitude"].GetDouble(); } if (doc.HasMember("longitude") && doc["longitude"].IsDouble()) { m_UserAddr.longitude = doc["longitude"].GetDouble(); } if (doc.HasMember("accuracy") && doc["accuracy"].IsDouble()) { m_UserAddr.accuracy = doc["accuracy"].GetDouble(); } if (doc.HasMember("provider") && doc["provider"].IsString()) { m_UserAddr.strProvider = doc["provider"].GetString(); } if (doc.HasMember("address") && doc["address"].IsString()) { m_UserAddr.strAddress = doc["address"].GetString(); } std::string strInfo = cocos2d::StringUtils::format("%f, %f, %f, %s, %s", m_UserAddr.latitude, m_UserAddr.longitude, m_UserAddr.accuracy, m_UserAddr.strAddress.c_str(), m_UserAddr.strProvider.c_str()); cocos2d::log("%s", strInfo.c_str()); //JniFun::stopLocation(); } } } // 获取玩家位置; tagUserAddr* CGlobalUserInfo::GetUserAddr() { #if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 m_UserAddr.isInit = true; m_UserAddr.accuracy = 150.0f; m_UserAddr.latitude = 39.915129f; m_UserAddr.longitude = 116.4039945f; m_UserAddr.strAddress = utility::a_u8("北京天安门"); #endif return &m_UserAddr; } // 计算其他玩家与自己的距离; double CGlobalUserInfo::GetDistance(double latitude, double longitude) { double radLat1 = radian(m_UserAddr.latitude); double radLat2 = radian(latitude); double a = radLat1 - radLat2; double b = radian(m_UserAddr.longitude) - radian(longitude); double dst = 2 * asin((sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2)))); dst = dst * EARTH_RADIUS; dst = round(dst * 10000) / 10000; return dst; } // 求弧度; double CGlobalUserInfo::radian(double d) { return d * PI / 180.0f; //角度1? = π / 180 } //////////////////////////////////////////////////////////////////////////////////