#include #include #include #include #include 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(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-25,25,zBegin),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-25,-100,zBegin),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-100,100,zBegin+25),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-150,150,zBegin+50),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(0,0,zBegin+50),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(50,0,zBegin+75),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-200,100,zBegin+100),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-400,100,zBegin+100),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-500,100,zBegin+100),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&mBmFighter)); initVector(Point3D(-600,100,zBegin+100),50,vector3D); pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); pureObjects.insert(&SmartPointer(pSimpleObject)); pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); pSimpleObject->setTexture(SmartPointer(&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>16!=Ship)continue; Vector3D vector3D(pureObject.getVector()); if(!index){minDistance=cameraPoint.z()-vector3D[0].z();minIndex=index;} else if(minDistancegetVector()); TestObject *pTestObject=::new TestObject(vector3D,(Other<<16)|getObjects().size()); getObjects().insert(&SmartPointer(pTestObject)); getObjects()[getObjects().size()-1].disposition(PointerDisposition::Delete); pTestObject->setTexture(SmartPointer(&mBmBurst)); }