176 lines
5.7 KiB
C++
176 lines
5.7 KiB
C++
/*****************************************************************************\
|
|
FILE: room.h
|
|
|
|
DESCRIPTION:
|
|
|
|
BryanSt 12/24/2000
|
|
Copyright (C) Microsoft Corp 2000-2001. All rights reserved.
|
|
\*****************************************************************************/
|
|
|
|
|
|
#ifndef ROOM_H
|
|
#define ROOM_H
|
|
|
|
#include "util.h"
|
|
#include "main.h"
|
|
#include "painting.h"
|
|
#include "pictures.h"
|
|
|
|
|
|
#define WATER_COLOR 0x00008899
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Defines, constants, and global variables
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#define WALL_VECTORS 6
|
|
#define CEILING_VECTORS 4
|
|
#define FLOOR_VECTORS 4
|
|
|
|
|
|
#define DOORFRAME_DEPTH 1.0f
|
|
#define DOOR_HEIGHT 30.0f
|
|
#define DOOR_WIDTH 30.0f
|
|
#define WALL_WIDTHBEFOREDOOR 145.0f
|
|
|
|
#define TOEGUARD_HEIGHT 1.25f
|
|
|
|
// Smaller numbers make them appear larger.
|
|
#define TEXTURESCALE_WALLPAPER 0.6f // 0.6f for 25x36 Orig, 0.3f for CDWallpaper 256x256.
|
|
#define TEXTURESCALE_TOEGUARD 0.6f // 0.6f for 32x32.
|
|
#define TEXTURESCALE_CEILING 0.09f
|
|
#define TEXTURESCALE_FLOOR 0.05f // 0.03f or 0.05f for Hardwoods (476x214), 0.09f for Tile (256x256)
|
|
|
|
#define DOOR_DISTANCETOFIRSTDOOR 0.6f
|
|
|
|
#define NUM_PAINTINGS 8
|
|
|
|
extern float g_fRoomWidthX;
|
|
extern float g_fRoomDepthZ;
|
|
extern float g_fRoomHeightY;
|
|
extern float g_fFudge; // This will cause one object to be above another.
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
D3DXVECTOR3 vLocation;
|
|
D3DXVECTOR3 vNormal;
|
|
} PAINTING_LAYOUT;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
int nEnterDoor;
|
|
int nExitDoor;
|
|
int nMovementPattern; // What pattern should be used in the user's movements?
|
|
BOOL fDoor0; // Does this door exist?
|
|
BOOL fDoor1; // Does this door exist?
|
|
BOOL fDoor2; // Does this door exist?
|
|
int nPaintings; // Number of PAINTING_LAYOUT in pPaintingsLayout.
|
|
PAINTING_LAYOUT * pPaintingsLayout;
|
|
} ROOM_FLOORPLANS;
|
|
|
|
|
|
|
|
|
|
class CTheRoom : public IUnknown
|
|
{
|
|
public:
|
|
//////////////////////////////////////////////////////
|
|
// Public Interfaces
|
|
//////////////////////////////////////////////////////
|
|
// *** IUnknown ***
|
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
|
|
virtual STDMETHODIMP_(ULONG) AddRef(void);
|
|
virtual STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
public:
|
|
HRESULT OneTimeSceneInit(int nFutureRooms, BOOL fLowPriority);
|
|
HRESULT Render(IDirect3DDevice8 * lpDev, int nRenderPhase, BOOL fFrontToBack);
|
|
HRESULT FinalCleanup(void);
|
|
HRESULT DeleteDeviceObjects(void);
|
|
HRESULT SetCurrent(BOOL fCurrent);
|
|
HRESULT GetNextRoom(CTheRoom ** ppNextRoom);
|
|
HRESULT LoadCameraMoves(CCameraMove * ptheCamera);
|
|
HRESULT FreePictures(int nMaxBatch = -1);
|
|
|
|
float GetDoorOffset(void) {return (g_fRoomWidthX / 2.0f);} // This will return the distance between the new room's 0 coord and the middle of it's the enter door.
|
|
int GetMaxRenderPhases(void) {return 8;};
|
|
int GetEnterDoor(void);
|
|
int GetExitDoor(void);
|
|
|
|
CTheRoom(BOOL fLobby, CMSLogoDXScreenSaver * pMain, CTheRoom * pEnterRoom, int nBatch);
|
|
virtual ~CTheRoom();
|
|
|
|
protected:
|
|
int m_nBatch;
|
|
|
|
private:
|
|
long m_cRef;
|
|
|
|
D3DXMATRIX m_matIdentity;
|
|
|
|
C3DObject m_objWall1;
|
|
C3DObject m_objCeiling;
|
|
C3DObject m_objToeGuard1;
|
|
C3DObject m_objFloor;
|
|
|
|
C3DObject m_theRug;
|
|
C3DObject m_thePowerSocket;
|
|
CPainting * m_pPaintings[NUM_PAINTINGS];
|
|
|
|
BOOL m_fWalls;
|
|
BOOL m_fToeGuard;
|
|
BOOL m_fRug;
|
|
BOOL m_fPower;
|
|
BOOL m_fCeiling;
|
|
BOOL m_fFloor;
|
|
BOOL m_fPaintings;
|
|
BOOL m_fLobby;
|
|
|
|
BOOL m_fCurrentRoom; // Current Room
|
|
BOOL m_fVisible;
|
|
BOOL m_fLowPriority;
|
|
|
|
CMSLogoDXScreenSaver * m_pMain; // Weak reference
|
|
ROOM_FLOORPLANS * m_pFloorPlan;
|
|
|
|
CTheRoom * m_pEnterRoom; // Equal to m_pFirstRoom or m_pLeftRoom or m_pRightRoom
|
|
CTheRoom * m_pFirstRoom; // Thru Door 0
|
|
CTheRoom * m_pLeftRoom; // Thru Door 1
|
|
CTheRoom * m_pRightRoom; // Thru Door 2
|
|
D3DXMATRIX m_matFirstRoom;
|
|
D3DXMATRIX m_matLeftRoom;
|
|
D3DXMATRIX m_matRightRoom;
|
|
|
|
BOOL m_fRoomCreated;
|
|
|
|
// Functions:
|
|
LPCTSTR _GetItemTexturePath(DWORD dwItem);
|
|
HRESULT _InitPaintings(void);
|
|
HRESULT _CreateRoom(void);
|
|
HRESULT _AddWallWithDoor(C3DObject * pobjWall, C3DObject * pobjToeGuard, C3DObject * pobjFloor, D3DXVECTOR3 vLocation, D3DXVECTOR3 vWidth, D3DXVECTOR3 vHeight, D3DXVECTOR3 vNormal,
|
|
float fTotalHeight, float fDoorHeight, float fTotalWidth, float fDoorWidth, float fDoorStart);
|
|
HRESULT _RenderThisRoom(IDirect3DDevice8 * pD3DDevice, int nRenderPhase, BOOL fFrontToBack);
|
|
HRESULT _SetRotationMatrix(void);
|
|
HRESULT _LoadLobbyPath(CCameraMove * ptheCamera);
|
|
HRESULT _CreateLobbySign(void);
|
|
|
|
HRESULT _LongRoomEnterDoorMovements(CCameraMove * ptheCamera);
|
|
HRESULT _LongRoomSideEnterLeaveMovements(CCameraMove * ptheCamera);
|
|
|
|
BOOL _IsRoomVisible(IDirect3DDevice8 * pD3DDevice, int nRoomNumber);
|
|
HRESULT _AddWall(BOOL fWithDoor, D3DXVECTOR3 vLocation, D3DXVECTOR3 vWidth, D3DXVECTOR3 vHeight, D3DXVECTOR3 vNormal,
|
|
float fTotalHeight, float fDoorHeight, float fTotalWidth, float fDoorWidth, float fDoorStart);
|
|
HRESULT _AddPaintingToPaintingMovements(CCameraMove * ptheCamera, D3DXVECTOR3 vSourceLocIn, D3DXVECTOR3 vSourceTangentIn,
|
|
D3DXVECTOR3 vPainting, D3DXVECTOR3 * pvDestDir, float fDest, D3DXVECTOR3 * pvDestTangent, int nBatch);
|
|
|
|
friend CMSLogoDXScreenSaver;
|
|
};
|
|
|
|
|
|
#endif // ROOM_H
|