// WorkStream.cpp: implementation of the CWorkStream class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GFrame.h"
#include "WorkStream.h"
#include "MyMath.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#ifdef _DEBUG
#pragma comment(lib, "LIB/OpenGLD.lib")
#else
#pragma comment(lib, "LIB/OpenGL.lib")
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWorkStream::CWorkStream()
{
m_iShowMode = 0;
}
CWorkStream::~CWorkStream()
{
}
BOOL CWorkStream::InitStream()
{
switch(m_iShowMode)
{
case 0://local script
{
m_objCMainConfig.LoadActionScript(&m_dequeLocalActionScript);
if(0)//生成脚本用,正式版本中自动被优化
{
m_objCMainConfig.SaveActionScript(&m_dequeLocalActionScript);
}
CorrectActionScript();//补充不足的数据,仅仅用于简化部分脚本编写
}
break;
case 1://net
{
char cIP[20] = "\0", cPort[8] = "\0";
m_objCMainConfig.GetServerIP(cIP, cPort);
if(!CClientMaster::Init(cIP, cPort))//第一次均返回FALSE
{
}
}
break;
}
return TRUE;
}
BOOL CWorkStream::SendStream()
{
if(GetSceneMode() >= 2)//编辑模式不处理外部动作流
return FALSE;
m_objCMyCriticalSection[Type_CarSprite].Lock();
//流翻译为动作代码并发送
switch(m_iShowMode)
{
case 0://local script
{
LocalScriptStreamToActionStream();
}
break;
case 1://net
{
NetStreamToActionStream();
}
break;
}
m_objCMyCriticalSection[Type_CarSprite].Unlock();
return TRUE;
}
BOOL CWorkStream::ReceiveStream()
{
switch(m_iShowMode)
{
case 0://local script InitStream()中已处理
{
}
break;
case 1://net 已自动调用OnDataReceived,此处不处理
{
}
break;
case 2://other
{
}
break;
default:
return FALSE;
}
return TRUE;
}
BOOL CWorkStream::Init(HWND hWnd, int x, int y)
{
if(!CTSELReader::ImportTrackSerialFileFromRes())
{
AfxMessageBox("轨道数据装载失败,可能是程序文件被病毒感染或者被非法篡改!");
return FALSE;
}
if(!m_objCMainConfig.Load())
{
m_objCMainConfig.SetServerIP("127.0.0.1", "6669");
m_objCMainConfig.Save();
AfxMessageBox("配置数据[网络模块]装载失败,可能是配置文件被病毒感染或者被非法篡改!");
}
SetThreadAffinityMask(::GetCurrentThread(), 0x00000001);
m_iShowMode = m_objCMainConfig.GetShowMode();
SetShowMode(m_iShowMode);
if(!InitStream())
{
AfxMessageBox("工作流装载失败,可能是网络或者脚本数据错误!");
return FALSE;
}
CSceneMaster::SetTrackPhysicalLen(m_objCMainConfig.GetTrackPhysicalLen());
return CSceneMaster::Init(hWnd, x, y);
}
void CWorkStream::Close()
{
m_dequeNetCarInputStream.clear();
m_dequeLocalScriptInputStream.clear();
m_dequeLocalActionScript.clear();
//m_dequeLocalActionScript
COpenGL::Close();
}
void CWorkStream::SetSceneSize(int cx, int cy)
{
COpenGL::ChangeSize(cx, cy);
}
//接收网络数据
void CWorkStream::OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount)
{
if(GetSceneMode() >= 2)//编辑模式不处理外部动作流
{
return;
}
if(dwCount > 1024)
{
TRACE("Net package Size error! %d\n", dwCount);
g_pObjCGlobal->g_objCTipInfo.SetTipInfo("网络数据包长度错误!", 1, 3000, RGB(255, 0, 0));
return;
}
USHORT usHeadCmd = 0;
memcpy(&usHeadCmd, lpBuffer, sizeof(USHORT));
if(usHeadCmd < 1 || usHeadCmd > 5)
{
char cBuf[128] = "\0";
sprintf(cBuf, "收到未定义的命令头![%d]", usHeadCmd);
g_pObjCGlobal->g_objCTipInfo.SetTipInfo(cBuf, 1, 3000, RGB(255, 0, 0));
g_pObjCGlobal->g_objCTipInfo.MyTrace(1000, RGB(255, 0, 0), cBuf);
TRACE("Net cmd error! %d\n", usHeadCmd);
return;
}
switch(usHeadCmd)
{
case 1://轨道车数据
{
TAG_NET_CAR_COMMUNICATE st = {0};
memcpy(&st.stTAG_NET_PACK, lpBuffer, sizeof(st.stTAG_NET_PACK));
if(st.stTAG_NET_PACK.iDataLenght != sizeof(TAG_PLCDATA))
{
//非法包
g_pObjCGlobal->g_objCTipInfo.SetTipInfo("轨道车动作网络数据包校验错误!", 1, 3000, RGB(255, 0, 0));
}
else
{
m_objCMyCriticalSection[Type_CarSprite].Lock();
m_dequeNetCarInputStream.push_back(st);
m_objCMyCriticalSection[Type_CarSprite].Unlock();
}
}
break;
case 2://横梁
{
}
break;
case 3://门
{
}
break;
case 4://动物
{
}
break;
case 5://屏幕
{
}
break;
default:
;
}
//print log file in here...
}
BOOL CWorkStream::LocalScriptStreamToActionStream()
{
for(ULONG ulIndex = 0; ulIndex < m_dequeLocalActionScript.size(); ulIndex ++)
{
for(ULONG ulSubID = 0; ulSubID < m_dequeLocalActionScript.at(ulIndex).dequeCarAction.size(); ulSubID++)
{
BOOL bUpdate = FALSE;
ULONG ulID = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).ulID_Bottom;
//根据ID确定动作指示的车辆
CCarSprite::TAG_CAR_STATE st = {0};
for(ULONG ulCar = 0; ulCar < CCarSpriteMaster::GetCarNum(); ulCar++)
{
if(!CCarSpriteMaster::GetState(ulCar, st))
return FALSE;
if(st.ulID == ulID)
{
break;
}
}
if((st.stCarBottom.emActionState == ActionNullState) && m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).ulKeepMs_Bottom > 0)//上一个动作已执行完成
{
if(DoubeEqual(m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dSpeed_Bottom, 0.00000f, 0.00001f))// 0 不显示 1 刹车 2 前进 3 后退
{
st.stCarBottom.iState = 1;//刹车
}
else if(m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dSpeed_Bottom > 0.00000f)
{
st.stCarBottom.iState = 2;//前
}
else
{
st.stCarBottom.iState = 3;//后
}
//st.ulID
st.stCarBottom.dPhysicalLacation = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dPhysicalLacation_Bottom;
st.stCarBottom.dSpeed = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dSpeed_Bottom;
st.stCarBottom.stActionPreState_Parameter.ulKeepMs = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).ulPreKeepMs_Bottom;
st.stCarBottom.stActionExecuteState_Parameter.ulKeepMs = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).ulKeepMs_Bottom;
st.stCarBottom.stActionNextState_Parameter.ulKeepMs = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).ulNextKeepMs_Bottom;
st.stCarBottom.emActionState = ActionPreState;//启动
bUpdate = TRUE;
}
for(int iObj = 0; iObj < 3; iObj++)
{
if((st.stBody.stRotate.stActionXYZ[iObj].emActionState == ActionNullState) && m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).ulKeepMs_Body_Rotate[iObj] > 0)//上一个动作已执行完成
{
if(iObj == 0)//X
{
st.stBody.stRotate.dAngleX = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleX_Body;
st.stBody.stRotate.dAngleRateX = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleRateX_Body;
}
else if(iObj == 1)//Y
{
TRACE("%lf\n", m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleY_Body);
st.stBody.stRotate.dAngleY = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleY_Body;
st.stBody.stRotate.dAngleRateY = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleRateY_Body;
}
else//Z
{
st.stBody.stRotate.dAngleZ = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleZ_Body;
st.stBody.stRotate.dAngleRateZ = m_dequeLocalActionScript.at(ulIndex).dequeCarAction.at(ulSubID).dAngleRateZ_Body;
}
st.stBody.stRotate.stActionXYZ[iObj].stActionPreState_Par
没有合适的资源?快使用搜索试试~ 我知道了~
luojie.rar_模拟汽车_汽车 游戏
共137个文件
h:36个
3ds:26个
cpp:26个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 143 浏览量
2022-09-20
17:29:11
上传
评论
收藏 10MB RAR 举报
温馨提示
模拟现实中汽车跑动,以及汽车的转动,属于游戏方面的设计
资源推荐
资源详情
资源评论
收起资源包目录
luojie.rar_模拟汽车_汽车 游戏 (137个子文件)
ANIMAL.3DS 253KB
ANIMAL.3DS 253KB
Bf109G6.3DS 235KB
SCORPION.3DS 97KB
SCORPION.3DS 97KB
CAR_BOTTOM.3DS 87KB
CAR_BOTTOM.3DS 87KB
CAR_TOP.3DS 83KB
CAR_TOP.3DS 83KB
BAT.3DS 78KB
BAT.3DS 78KB
FLY.3DS 73KB
FLY.3DS 73KB
xBf109G6.3DS 32KB
Screen_Link.3DS 3KB
Screen_Link.3DS 3KB
Screen_Arc.3DS 2KB
Screen_Arc.3DS 2KB
DOOR.3DS 2KB
BEAM_FLAT.3DS 1KB
BEAM_FLAT.3DS 1KB
BEAM.3DS 1KB
DOOR.3DS 1KB
BEAM.3DS 1KB
Screen_Flat.3DS 1KB
Screen_Flat.3DS 1KB
GFrame.aps 1.08MB
BACK00.bmp 2.93MB
SMonitor.CFG 6KB
SMonitor.CFG 78B
GFrame.clw 826B
WorkStream.cpp 32KB
3DSMaster.cpp 26KB
MainConfig.cpp 25KB
SceneMaster.cpp 20KB
SpriteConfig.cpp 20KB
CarSprite.cpp 19KB
CarSpriteMaster.cpp 15KB
ScreenSpriteMaster.cpp 9KB
FlySpriteMaster.cpp 8KB
DoorSpriteMaster.cpp 7KB
BeamSpriteMaster.cpp 7KB
TSELReader.cpp 4KB
TipInfo.cpp 4KB
ClientMaster.cpp 3KB
DoorSprite.cpp 3KB
GFrame.cpp 3KB
FlySprite.cpp 3KB
BeamSprite.cpp 2KB
ScreenSprite.cpp 2KB
MainWnd.cpp 2KB
MyCriticalSection.cpp 1KB
Global.cpp 937B
MyMath.cpp 806B
MainMaster.cpp 735B
SpriteAtionBase.cpp 594B
StdAfx.cpp 275B
Thumbs.db 16KB
Thumbs.db 8KB
Thumbs.db 6KB
GFrame.dsp 8KB
GFrame.dsw 535B
Load3DS.h 13KB
SocketComm.h 6KB
anorms.h 6KB
Communicate.h 6KB
CarSprite.h 5KB
3DSMaster.h 2KB
CarSpriteMaster.h 2KB
OpenGLFont.h 2KB
SceneMaster.h 2KB
OpenGL.h 2KB
WorkStream.h 1KB
TipInfo.h 1KB
ScreenSprite.h 1KB
FlySpriteMaster.h 1KB
GFrame.h 1KB
ScreenSpriteMaster.h 1KB
FlySprite.h 1KB
DoorSprite.h 1KB
TickElapse.h 1KB
BeamSprite.h 1KB
DoorSpriteMaster.h 1KB
TSELReader.h 1KB
BeamSpriteMaster.h 1KB
MainWnd.h 1KB
Texture.h 1KB
ClientMaster.h 1KB
StdAfx.h 1KB
MainConfig.h 1KB
SpriteConfig.h 905B
SpriteAtionBase.h 860B
MainMaster.h 859B
Global.h 810B
MyMath.h 680B
SpriteBase.h 680B
MyCriticalSection.h 668B
resource.h 635B
GFrame.ico 1KB
lakerem.jpg 128KB
共 137 条
- 1
- 2
资源评论
APei
- 粉丝: 63
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功