Initial
This commit is contained in:
219
proto/source/SCENE.CPP
Normal file
219
proto/source/SCENE.CPP
Normal file
@@ -0,0 +1,219 @@
|
||||
#include <proto/scene.hpp>
|
||||
#include <proto/sobject.hpp>
|
||||
#include <proto/tobject.hpp>
|
||||
#include <common/keydata.hpp>
|
||||
#include <engine/vector3d.hpp>
|
||||
|
||||
SceneManager::SceneManager(GUIWindow &displayWindow)
|
||||
: DisplayManager(displayWindow,PurePalette("syspal.pal")),
|
||||
mBmFighter("c:\\work\\scene\\media\\bmp\\tiea1.bmp"),
|
||||
mBmBurst("c:\\work\\scene\\media\\bmp\\burst.bmp"),
|
||||
mDisplayWindow(displayWindow)
|
||||
{
|
||||
ASMRoutines::setMaskInfo(TRUE,0);
|
||||
mFreezeFrame=false;
|
||||
}
|
||||
|
||||
SceneManager::~SceneManager()
|
||||
{
|
||||
}
|
||||
|
||||
void SceneManager::initVector(const Point3D &point3D,int width,Vector3D &vector3D)const
|
||||
{
|
||||
vector3D[0]=point3D;
|
||||
vector3D[1]=Point3D(point3D.x()+width,point3D.y(),point3D.z());
|
||||
vector3D[2]=Point3D(point3D.x()+width,point3D.y()-width,point3D.z());
|
||||
vector3D[3]=Point3D(point3D.x(),point3D.y()-width,point3D.z());
|
||||
}
|
||||
|
||||
// virtuals
|
||||
|
||||
bool SceneManager::initializeHandler(PointerPureObjectBlock &pureObjects)
|
||||
{
|
||||
SimpleObject *pSimpleObject;
|
||||
Vector3D vector3D;
|
||||
int zBegin(350);
|
||||
|
||||
pureObjects.remove();
|
||||
for(zBegin=150;zBegin<500;zBegin+=50)
|
||||
{
|
||||
initVector(Point3D(200,25,zBegin+100),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-25,25,zBegin),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-25,-100,zBegin),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-100,100,zBegin+25),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-150,150,zBegin+50),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(0,0,zBegin+50),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(50,0,zBegin+75),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-200,100,zBegin+100),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-400,100,zBegin+100),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-500,100,zBegin+100),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
|
||||
initVector(Point3D(-600,100,zBegin+100),50,vector3D);
|
||||
pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size());
|
||||
pureObjects.insert(&SmartPointer<PureObject>(pSimpleObject));
|
||||
pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete);
|
||||
pSimpleObject->setTexture(SmartPointer<Bitmap>(&mBmFighter));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SceneManager::preprocessHandler(PointerPureObject &pureObject)
|
||||
{
|
||||
if(mFreezeFrame)return true;
|
||||
if(PureObject::Idle==pureObject->getState())return true;
|
||||
if(!(pureObject->getID()%2))pureObject->translate(Point(1,-2),TranslationMatrix::AboutX);
|
||||
else pureObject->translate(Point(-1,-1),TranslationMatrix::AboutX);
|
||||
// pureObject->normalize();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SceneManager::scopeHandler(PointerPureObject &scopeObject)
|
||||
{
|
||||
if(scopeObject->getID()>>16==Ship)
|
||||
{
|
||||
((SimpleObject&)*scopeObject).setVector(((SimpleObject&)*scopeObject).getInitVector());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void SceneManager::keyDownHandler(const KeyData &keyData)
|
||||
{
|
||||
int repeatIndex;
|
||||
switch(keyData.virtualKey())
|
||||
{
|
||||
case inKey :
|
||||
break;
|
||||
case outKey :
|
||||
break;
|
||||
case VK_UP :
|
||||
for(repeatIndex=0;repeatIndex<keyData.repeatCount();repeatIndex++)handleUpArrow();
|
||||
mDisplayWindow.invalidate(FALSE);
|
||||
break;
|
||||
case VK_DOWN :
|
||||
for(repeatIndex=0;repeatIndex<keyData.repeatCount();repeatIndex++)handleDownArrow();
|
||||
mDisplayWindow.invalidate(FALSE);
|
||||
break;
|
||||
case VK_LEFT :
|
||||
for(repeatIndex=0;repeatIndex<keyData.repeatCount();repeatIndex++)handleLeftArrow();
|
||||
mDisplayWindow.invalidate(FALSE);
|
||||
break;
|
||||
case VK_RIGHT :
|
||||
for(repeatIndex=0;repeatIndex<keyData.repeatCount();repeatIndex++)handleRightArrow();
|
||||
mDisplayWindow.invalidate(FALSE);
|
||||
break;
|
||||
default:
|
||||
{
|
||||
// String strKey;
|
||||
// ::sprintf(strKey,"%lx",keyData.virtualKey());
|
||||
// ::OutputDebugString(strKey);
|
||||
// if(0x20==keyData.virtualKey())mFreezeFrame=!mFreezeFrame;
|
||||
// if(mFreezeFrame)handleFreezeFrame();
|
||||
if(0x20==keyData.virtualKey())handleFreezeFrame();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void SceneManager::handleLeftArrow(void)
|
||||
{
|
||||
Point3D cameraPoint(getViewSystem().cameraPoint());
|
||||
if(KeyData::shiftKeyPressed())getViewSystem().cameraTwistDegrees(getViewSystem().cameraTwistDegrees()-ThetaDelta);
|
||||
else cameraPoint.x(cameraPoint.x()+TurnDelta);
|
||||
getViewSystem().cameraPoint(cameraPoint);
|
||||
}
|
||||
|
||||
void SceneManager::handleRightArrow(void)
|
||||
{
|
||||
Point3D cameraPoint(getViewSystem().cameraPoint());
|
||||
if(KeyData::shiftKeyPressed())getViewSystem().cameraTwistDegrees(getViewSystem().cameraTwistDegrees()+ThetaDelta);
|
||||
else cameraPoint.x(cameraPoint.x()-TurnDelta);
|
||||
getViewSystem().cameraPoint(cameraPoint);
|
||||
}
|
||||
|
||||
void SceneManager::handleUpArrow(void)
|
||||
{
|
||||
Point3D cameraPoint(getViewSystem().cameraPoint());
|
||||
cameraPoint.y(cameraPoint.y()+TurnDelta);
|
||||
getViewSystem().cameraPoint(cameraPoint);
|
||||
}
|
||||
|
||||
void SceneManager::handleDownArrow(void)
|
||||
{
|
||||
Point3D cameraPoint(getViewSystem().cameraPoint());
|
||||
cameraPoint.y(cameraPoint.y()-TurnDelta);
|
||||
getViewSystem().cameraPoint(cameraPoint);
|
||||
}
|
||||
|
||||
void SceneManager::handleFreezeFrame(void)
|
||||
{
|
||||
DisplayManager::PointerPureObjectBlock &objects=getObjects();
|
||||
int minDistance;
|
||||
int minIndex;
|
||||
int distance;
|
||||
|
||||
Point3D cameraPoint(getViewSystem().cameraPoint());
|
||||
for(int index=0;index<objects.size();index++)
|
||||
{
|
||||
PureObject &pureObject=*objects[index];
|
||||
if(pureObject.getID()>>16!=Ship)continue;
|
||||
Vector3D vector3D(pureObject.getVector());
|
||||
if(!index){minDistance=cameraPoint.z()-vector3D[0].z();minIndex=index;}
|
||||
else if(minDistance<cameraPoint.z()-vector3D[0].z()){minDistance=cameraPoint.z()-vector3D[0].z();minIndex=index;}
|
||||
}
|
||||
Vector3D vector3D(objects[minIndex]->getVector());
|
||||
TestObject *pTestObject=::new TestObject(vector3D,(Other<<16)|getObjects().size());
|
||||
getObjects().insert(&SmartPointer<PureObject>(pTestObject));
|
||||
getObjects()[getObjects().size()-1].disposition(PointerDisposition::Delete);
|
||||
pTestObject->setTexture(SmartPointer<Bitmap>(&mBmBurst));
|
||||
}
|
||||
Reference in New Issue
Block a user