| @@ -0,0 +1,33 @@ | ||
| // AABBNode.cpp | ||
| // | ||
| // Implementation file for AABBNode Class | ||
| // Defines all the methods declared, but not defined, in AABBNode.h | ||
| // | ||
| // Shay Leary, March 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "AABBNode.h" | ||
|
|
||
| //---------------------------------------------------------------- | ||
|
|
||
| void AABBNode::Clear() | ||
| { | ||
| m_next = NULL; | ||
| } | ||
|
|
||
| //---------------------------------------------------------------- | ||
|
|
||
|
|
||
| void AABBNode::SetData(const GLdouble maxX, const GLdouble minX, | ||
| const GLdouble maxY, const GLdouble minY, | ||
| const GLdouble maxZ, const GLdouble minZ) | ||
| { | ||
| m_BBox.max.x = maxX; | ||
| m_BBox.min.x = minX; | ||
| m_BBox.max.y = maxY; | ||
| m_BBox.min.y = minY; | ||
| m_BBox.max.z = maxZ; | ||
| m_BBox.min.z = minZ; | ||
| } | ||
|
|
||
| //---------------------------------------------------------------- |
| @@ -0,0 +1,76 @@ | ||
| // AABBNODE.h | ||
| // Header file for the AABBNODE class | ||
| // Stores details for each bounding box used for collsion detection. Each node is stored | ||
| // in each link of the AABB Linked List | ||
|
|
||
| // Shay Leary, March 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #ifndef AABBNODE_H | ||
| #define AABBNODE_H | ||
|
|
||
| #include <vector> | ||
| #include <gl/glut.h> | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| class AABBNode | ||
| { | ||
| public: | ||
| AABBNode () {Clear();} | ||
| virtual ~AABBNode () {Clear();} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| void Clear (); | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Get Methods | ||
| //---------------------------------------------------------------------------------- | ||
| GLdouble GetMaxX () {return m_BBox.max.x;} | ||
| GLdouble GetMinX () {return m_BBox.min.x;} | ||
| GLdouble GetMaxY () {return m_BBox.max.y;} | ||
| GLdouble GetMinY () {return m_BBox.min.y;} | ||
| GLdouble GetMaxZ () {return m_BBox.max.z;} | ||
| GLdouble GetMinZ () {return m_BBox.min.z;} | ||
|
|
||
| // Return the address of the link to the next node in the list | ||
| AABBNode *GetNext () const {return m_next;} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Set Methods | ||
| //---------------------------------------------------------------------------------- | ||
| void SetData(const GLdouble maxX, const GLdouble minX, | ||
| const GLdouble maxY, const GLdouble minY, | ||
| const GLdouble maxZ, const GLdouble minZ); | ||
|
|
||
| // Set the address of the link to the next node in the list | ||
| void SetNext (AABBNode *next) {m_next = next;} | ||
|
|
||
| private: | ||
| // The address of the next node in the list | ||
| AABBNode *m_next; | ||
|
|
||
| // stores x,y,z co-ordinates | ||
| struct XYZ | ||
| { | ||
| GLdouble x, y, z; | ||
| }; | ||
| // stores max and min values of co-ordinates | ||
| struct BoundingBox | ||
| { | ||
| XYZ max; | ||
| XYZ min; | ||
| }; | ||
| // stores above info | ||
| BoundingBox m_BBox; | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| // Privatised copy constructor and assignment operator | ||
| AABBNode (const AABBNode &newNode) {}; | ||
| AABBNode &operator = (const AABBNode &newNode) {}; | ||
| }; | ||
|
|
||
| #endif | ||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1,178 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| <ItemGroup Label="ProjectConfigurations"> | ||
| <ProjectConfiguration Include="Debug|Win32"> | ||
| <Configuration>Debug</Configuration> | ||
| <Platform>Win32</Platform> | ||
| </ProjectConfiguration> | ||
| <ProjectConfiguration Include="Release|Win32"> | ||
| <Configuration>Release</Configuration> | ||
| <Platform>Win32</Platform> | ||
| </ProjectConfiguration> | ||
| <ProjectConfiguration Include="Debug|x64"> | ||
| <Configuration>Debug</Configuration> | ||
| <Platform>x64</Platform> | ||
| </ProjectConfiguration> | ||
| <ProjectConfiguration Include="Release|x64"> | ||
| <Configuration>Release</Configuration> | ||
| <Platform>x64</Platform> | ||
| </ProjectConfiguration> | ||
| </ItemGroup> | ||
| <PropertyGroup Label="Globals"> | ||
| <ProjectGuid>{98501C4D-CAD8-43B3-96D2-00DB997EC827}</ProjectGuid> | ||
| <RootNamespace>Assignment1</RootNamespace> | ||
| <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> | ||
| </PropertyGroup> | ||
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||
| <ConfigurationType>Application</ConfigurationType> | ||
| <UseDebugLibraries>true</UseDebugLibraries> | ||
| <PlatformToolset>v140</PlatformToolset> | ||
| <CharacterSet>MultiByte</CharacterSet> | ||
| </PropertyGroup> | ||
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||
| <ConfigurationType>Application</ConfigurationType> | ||
| <UseDebugLibraries>false</UseDebugLibraries> | ||
| <PlatformToolset>v140</PlatformToolset> | ||
| <WholeProgramOptimization>true</WholeProgramOptimization> | ||
| <CharacterSet>MultiByte</CharacterSet> | ||
| </PropertyGroup> | ||
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||
| <ConfigurationType>Application</ConfigurationType> | ||
| <UseDebugLibraries>true</UseDebugLibraries> | ||
| <PlatformToolset>v140</PlatformToolset> | ||
| <CharacterSet>MultiByte</CharacterSet> | ||
| </PropertyGroup> | ||
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||
| <ConfigurationType>Application</ConfigurationType> | ||
| <UseDebugLibraries>false</UseDebugLibraries> | ||
| <PlatformToolset>v140</PlatformToolset> | ||
| <WholeProgramOptimization>true</WholeProgramOptimization> | ||
| <CharacterSet>MultiByte</CharacterSet> | ||
| </PropertyGroup> | ||
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||
| <ImportGroup Label="ExtensionSettings"> | ||
| </ImportGroup> | ||
| <ImportGroup Label="Shared"> | ||
| </ImportGroup> | ||
| <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||
| <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||
| </ImportGroup> | ||
| <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||
| <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||
| </ImportGroup> | ||
| <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||
| <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||
| </ImportGroup> | ||
| <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||
| <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||
| </ImportGroup> | ||
| <PropertyGroup Label="UserMacros" /> | ||
| <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||
| <IncludePath>C:\Users\Prini\Desktop\ICT290\Assignment 1\Assignment 1\dependencies\include;$(IncludePath)</IncludePath> | ||
| <LibraryPath>C:\Users\Prini\Desktop\ICT290\Assignment 1\Assignment 1\dependencies\lib;$(LibraryPath)</LibraryPath> | ||
| </PropertyGroup> | ||
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||
| <ClCompile> | ||
| <WarningLevel>Level3</WarningLevel> | ||
| <Optimization>Disabled</Optimization> | ||
| <SDLCheck>true</SDLCheck> | ||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||
| </ClCompile> | ||
| <Link> | ||
| <GenerateDebugInformation>true</GenerateDebugInformation> | ||
| </Link> | ||
| </ItemDefinitionGroup> | ||
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||
| <ClCompile> | ||
| <WarningLevel>Level3</WarningLevel> | ||
| <Optimization>Disabled</Optimization> | ||
| <SDLCheck>true</SDLCheck> | ||
| </ClCompile> | ||
| <Link> | ||
| <GenerateDebugInformation>true</GenerateDebugInformation> | ||
| </Link> | ||
| </ItemDefinitionGroup> | ||
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||
| <ClCompile> | ||
| <WarningLevel>Level3</WarningLevel> | ||
| <Optimization>MaxSpeed</Optimization> | ||
| <FunctionLevelLinking>true</FunctionLevelLinking> | ||
| <IntrinsicFunctions>true</IntrinsicFunctions> | ||
| <SDLCheck>true</SDLCheck> | ||
| </ClCompile> | ||
| <Link> | ||
| <GenerateDebugInformation>true</GenerateDebugInformation> | ||
| <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||
| <OptimizeReferences>true</OptimizeReferences> | ||
| </Link> | ||
| </ItemDefinitionGroup> | ||
| <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||
| <ClCompile> | ||
| <WarningLevel>Level3</WarningLevel> | ||
| <Optimization>MaxSpeed</Optimization> | ||
| <FunctionLevelLinking>true</FunctionLevelLinking> | ||
| <IntrinsicFunctions>true</IntrinsicFunctions> | ||
| <SDLCheck>true</SDLCheck> | ||
| </ClCompile> | ||
| <Link> | ||
| <GenerateDebugInformation>true</GenerateDebugInformation> | ||
| <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||
| <OptimizeReferences>true</OptimizeReferences> | ||
| </Link> | ||
| </ItemDefinitionGroup> | ||
| <ItemGroup> | ||
| <ClInclude Include="AABB.H" /> | ||
| <ClInclude Include="AABBLinkedList.h" /> | ||
| <ClInclude Include="AABBNode.h" /> | ||
| <ClInclude Include="camera.h" /> | ||
| <ClInclude Include="cameraMap.h" /> | ||
| <ClInclude Include="collision.h" /> | ||
| <ClInclude Include="EasySound.h" /> | ||
| <ClInclude Include="math\mathlib.h" /> | ||
| <ClInclude Include="math\physics.h" /> | ||
| <ClInclude Include="PlainLinkedList.h" /> | ||
| <ClInclude Include="PlainNode.h" /> | ||
| <ClInclude Include="player.h" /> | ||
| <ClInclude Include="SizeAndOffset.h" /> | ||
| <ClInclude Include="Sound.h" /> | ||
| <ClInclude Include="SoundTime.h" /> | ||
| <ClInclude Include="texturedPolygons.h" /> | ||
| <ClInclude Include="types\angles.h" /> | ||
| <ClInclude Include="types\bound_box.h" /> | ||
| <ClInclude Include="types\polygon.h" /> | ||
| <ClInclude Include="types\rayplane.h" /> | ||
| <ClInclude Include="types\vector.h" /> | ||
| <ClInclude Include="types\world_geometry.h" /> | ||
| </ItemGroup> | ||
| <ItemGroup> | ||
| <ClCompile Include="AABB.CPP" /> | ||
| <ClCompile Include="AABBLinkedList.cpp" /> | ||
| <ClCompile Include="AABBNode.cpp" /> | ||
| <ClCompile Include="camera.cpp" /> | ||
| <ClCompile Include="cameraMap.cpp" /> | ||
| <ClCompile Include="collision.cpp" /> | ||
| <ClCompile Include="EasySound.cpp" /> | ||
| <ClCompile Include="main.cpp" /> | ||
| <ClCompile Include="math\mathlib.cpp" /> | ||
| <ClCompile Include="math\physics.cpp" /> | ||
| <ClCompile Include="PlainLinkedList.cpp" /> | ||
| <ClCompile Include="PlainNode.cpp" /> | ||
| <ClCompile Include="player.cpp" /> | ||
| <ClCompile Include="SizeAndOffset.cpp" /> | ||
| <ClCompile Include="SizeAndOffsetTool.cpp" /> | ||
| <ClCompile Include="Sound.cpp" /> | ||
| <ClCompile Include="SoundTime.cpp" /> | ||
| <ClCompile Include="test_main.cpp" /> | ||
| <ClCompile Include="texturedPolygons.cpp" /> | ||
| <ClCompile Include="types\angles.cpp" /> | ||
| <ClCompile Include="types\bound_box.cpp" /> | ||
| <ClCompile Include="types\polygon.cpp" /> | ||
| <ClCompile Include="types\rayplane.cpp" /> | ||
| <ClCompile Include="types\vector.cpp" /> | ||
| <ClCompile Include="types\world_geometry.cpp" /> | ||
| </ItemGroup> | ||
| <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||
| <ImportGroup Label="ExtensionTargets"> | ||
| </ImportGroup> | ||
| </Project> |
| @@ -0,0 +1,174 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| <ItemGroup> | ||
| <Filter Include="Source Files"> | ||
| <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||
| <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||
| </Filter> | ||
| <Filter Include="Header Files"> | ||
| <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||
| <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> | ||
| </Filter> | ||
| <Filter Include="Resource Files"> | ||
| <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||
| <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||
| </Filter> | ||
| <Filter Include="Source Files\math"> | ||
| <UniqueIdentifier>{0736d850-d2b2-4e45-965c-1daac6c4dec5}</UniqueIdentifier> | ||
| </Filter> | ||
| <Filter Include="Source Files\types"> | ||
| <UniqueIdentifier>{ab1a6409-6d2e-4306-a0eb-b226cf8b4f2b}</UniqueIdentifier> | ||
| </Filter> | ||
| <Filter Include="Header Files\math"> | ||
| <UniqueIdentifier>{e9ff31bf-a45b-422d-8b2e-d6327680f178}</UniqueIdentifier> | ||
| </Filter> | ||
| <Filter Include="Header Files\types"> | ||
| <UniqueIdentifier>{72cad827-b628-43db-a3c3-2ff23ecec9bd}</UniqueIdentifier> | ||
| </Filter> | ||
| </ItemGroup> | ||
| <ItemGroup> | ||
| <ClInclude Include="AABB.H"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="AABBLinkedList.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="AABBNode.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="camera.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="cameraMap.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="collision.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="EasySound.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="PlainLinkedList.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="PlainNode.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="player.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="SizeAndOffset.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="Sound.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="SoundTime.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="texturedPolygons.h"> | ||
| <Filter>Header Files</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="math\mathlib.h"> | ||
| <Filter>Header Files\math</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="math\physics.h"> | ||
| <Filter>Header Files\math</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="types\angles.h"> | ||
| <Filter>Header Files\types</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="types\bound_box.h"> | ||
| <Filter>Header Files\types</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="types\polygon.h"> | ||
| <Filter>Header Files\types</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="types\rayplane.h"> | ||
| <Filter>Header Files\types</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="types\vector.h"> | ||
| <Filter>Header Files\types</Filter> | ||
| </ClInclude> | ||
| <ClInclude Include="types\world_geometry.h"> | ||
| <Filter>Header Files\types</Filter> | ||
| </ClInclude> | ||
| </ItemGroup> | ||
| <ItemGroup> | ||
| <ClCompile Include="AABB.CPP"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="AABBLinkedList.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="AABBNode.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="camera.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="cameraMap.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="collision.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="EasySound.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="main.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="PlainLinkedList.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="PlainNode.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="player.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="SizeAndOffset.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="SizeAndOffsetTool.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="Sound.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="SoundTime.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="test_main.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="texturedPolygons.cpp"> | ||
| <Filter>Source Files</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="types\angles.cpp"> | ||
| <Filter>Source Files\types</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="types\bound_box.cpp"> | ||
| <Filter>Source Files\types</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="types\polygon.cpp"> | ||
| <Filter>Source Files\types</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="types\rayplane.cpp"> | ||
| <Filter>Source Files\types</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="types\vector.cpp"> | ||
| <Filter>Source Files\types</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="types\world_geometry.cpp"> | ||
| <Filter>Source Files\types</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="math\mathlib.cpp"> | ||
| <Filter>Source Files\math</Filter> | ||
| </ClCompile> | ||
| <ClCompile Include="math\physics.cpp"> | ||
| <Filter>Source Files\math</Filter> | ||
| </ClCompile> | ||
| </ItemGroup> | ||
| </Project> |
| @@ -0,0 +1,4 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| <PropertyGroup /> | ||
| </Project> |
| @@ -0,0 +1,67 @@ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\AABBNODE.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\CAMERA.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\CAMERAMAP.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\COLLISION.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\EASYSOUND.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\MATHLIB.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\PHYSICS.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\PLAINLINKEDLIST.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\PLAINNODE.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\PLAYER.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\SOUND.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\SOUNDTIME.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\TEXTUREDPOLYGONS.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\ANGLES.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\BOUND_BOX.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\WORLD_GEOMETRY.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\POLYGON.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\VECTOR.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\AABB.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\AABBLINKEDLIST.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\VC110.PDB | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\TEST_MAIN.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\ASSIGNMENT 1\DEBUG\MAIN.OBJ | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\DEBUG\ASSIGNMENT 1.ILK | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\DEBUG\ASSIGNMENT 1.EXE | ||
| C:\USERS\SAM\DROPBOX\UNIVERSITY WORK SYNC\ICT290\ASSIGNMENT 1\PROJECT\DEBUG\ASSIGNMENT 1.PDB | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\AABB.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\AABBLinkedList.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\AABBNode.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\angles.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\bound_box.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\camera.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\cameraMap.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\collision.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\EasySound.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\main.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\mathlib.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\physics.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\PlainLinkedList.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\PlainNode.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\player.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\polygon.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\Sound.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\SoundTime.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\test_main.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\texturedPolygons.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\vector.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\world_geometry.obj | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\cl.command.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\CL.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\CL.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link-cvtres.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link-cvtres.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link-rc.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link-rc.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.5156-cvtres.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.5156-cvtres.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.5156-rc.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.5156-rc.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.5156.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.5156.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.command.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.read.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\link.write.1.tlog | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\vc110.idb | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Assignment 1\Debug\vc110.pdb | ||
| C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\Debug\Assignment 1.pdb |
| @@ -0,0 +1,2 @@ | ||
| #v4.0:v110:false | ||
| Debug|Win32|C:\Users\Sam\Dropbox\University Work Sync\ICT290\Assignment 1\Project\| |
| @@ -0,0 +1,2 @@ | ||
| #TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit | ||
| Debug|Win32|C:\Users\Prini\Desktop\ICT290\Assignment 1\| |
| @@ -0,0 +1,42 @@ | ||
| Build started 9/09/2015 9:32:44 AM. | ||
| 1>Project "C:\Users\Prini\Desktop\ICT290\ICT290.vcxproj" on node 2 (Build target(s)). | ||
| 1>Link: | ||
| C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\Prini\Desktop\ICT290\Debug\ICT290.exe" /INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /Debug /PDB:"C:\Users\Prini\Desktop\ICT290\Debug\ICT290.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\Prini\Desktop\ICT290\Debug\ICT290.lib" /MACHINE:X86 "Debug\Assignment 1.res" | ||
| Debug\AABB.obj | ||
| Debug\AABBLinkedList.obj | ||
| Debug\AABBNode.obj | ||
| Debug\camera.obj | ||
| Debug\cameraMap.obj | ||
| Debug\collision.obj | ||
| Debug\EasySound.obj | ||
| Debug\main.obj | ||
| Debug\mathlib.obj | ||
| Debug\physics.obj | ||
| Debug\PlainLinkedList.obj | ||
| Debug\PlainNode.obj | ||
| Debug\player.obj | ||
| Debug\SizeAndOffset.obj | ||
| Debug\Sound.obj | ||
| Debug\SoundTime.obj | ||
| Debug\SizeAndOffsetTool.obj | ||
| Debug\polygon_test.obj | ||
| Debug\vector_test.obj | ||
| Debug\test_main.obj | ||
| Debug\texturedPolygons.obj | ||
| Debug\angles.obj | ||
| Debug\bound_box.obj | ||
| Debug\polygon.obj | ||
| Debug\rayplane.obj | ||
| Debug\vector.obj | ||
| Debug\world_geometry.obj | ||
| 1>SDLmain.lib(SDL_win32_main.obj) : error LNK2005: _main already defined in main.obj | ||
| 1>MSVCRTD.lib(initializers.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library | ||
| 1>SDLmain.lib(SDL_win32_main.obj) : warning LNK4217: locally defined symbol _fprintf imported in function _ShowError | ||
| 1>SDLmain.lib(SDL_win32_main.obj) : error LNK2019: unresolved external symbol _SDL_main referenced in function _main | ||
| 1>SDLmain.lib(SDL_win32_main.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _ShowError | ||
| 1>C:\Users\Prini\Desktop\ICT290\Debug\ICT290.exe : fatal error LNK1120: 2 unresolved externals | ||
| 1>Done Building Project "C:\Users\Prini\Desktop\ICT290\ICT290.vcxproj" (Build target(s)) -- FAILED. | ||
|
|
||
| Build FAILED. | ||
|
|
||
| Time Elapsed 00:00:00.93 |
| @@ -0,0 +1,2 @@ | ||
| #TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit | ||
| Debug|Win32|C:\Users\Prini\Desktop\ICT290\| |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1 @@ | ||
| �� |
| @@ -0,0 +1,154 @@ | ||
| // EasySound.cpp: implementation of the CEasySound class. | ||
| // | ||
| ////////////////////////////////////////////////////////////////////// | ||
| #include "EasySound.h" | ||
|
|
||
|
|
||
| extern void mixaudio(void *unused, Uint8 *stream, int len){ | ||
| CEasySound::Instance()->CallMixAudio(unused,stream,len); | ||
| } | ||
|
|
||
| ////////////////////////////////////////////////////////////////////// | ||
| // Member for Singleton Pattern | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| CEasySound* CEasySound::_instance = NULL; | ||
|
|
||
| ////////////////////////////////////////////////////////////////////// | ||
| // Construction/Destruction | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| CEasySound::CEasySound() | ||
| { | ||
|
|
||
| if ((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_NOPARACHUTE)==-1)) { | ||
| fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); | ||
| exit(1); | ||
| } | ||
| atexit(SDL_Quit); | ||
|
|
||
| /* Open the audio device */ | ||
|
|
||
| /* 22050Hz - FM Radio quality */ | ||
| desired.freq=ES_FREQ; | ||
|
|
||
| /* 16-bit signed audio */ | ||
| desired.format=AUDIO_S16; | ||
|
|
||
| /* Mono */ | ||
| desired.channels=2; | ||
|
|
||
| /* Large audio buffer reduces risk of dropouts but increases response time */ | ||
| desired.samples=ES_SAMPLE; | ||
|
|
||
| desired.callback = mixaudio; | ||
|
|
||
| desired.userdata=NULL; | ||
| /* Open the audio device */ | ||
| if ( SDL_OpenAudio(&desired, &obtained) < 0 ){ | ||
| fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); | ||
| exit(-1); | ||
| } | ||
|
|
||
| } | ||
|
|
||
| CEasySound::~CEasySound() | ||
| { | ||
| SDL_Quit(); | ||
| delete _instance; | ||
| _instance = NULL; | ||
| } | ||
|
|
||
| CEasySound* CEasySound::Instance() | ||
| { | ||
| if (_instance == NULL) | ||
| _instance = new CEasySound(); | ||
| return _instance; | ||
| } | ||
|
|
||
| void CEasySound::CallMixAudio(void *unused, Uint8 *stream, int len) | ||
| { | ||
|
|
||
| //int i; | ||
| Uint32 amount, data_len, data_pos; | ||
|
|
||
| std::list<CSound*>::iterator cs; | ||
|
|
||
| for (cs = m_listSound.begin(); cs != m_listSound.end(); ++cs) { | ||
| //data_len = (*cs)->GetLength().GetSDLTime(); | ||
| data_len = (*cs)->m_stop.GetSDLTime(); | ||
| data_pos = (*cs)->m_pos.GetSDLTime(); | ||
| amount = (data_len - data_pos); | ||
| if ( amount > len) { | ||
| amount = len; | ||
| } | ||
| Uint8 *data = &(*cs)->m_data[data_pos]; | ||
| SDL_MixAudio(stream, data, amount, SDL_MIX_MAXVOLUME); | ||
| (*cs)->m_pos = CSoundTime(data_pos + amount); | ||
| } | ||
|
|
||
| } | ||
|
|
||
|
|
||
| int CEasySound::Load(char *filename) | ||
| { | ||
| // find ID for sound | ||
| std::list<CSound*>::iterator cs; | ||
| int iSoundID = 0; | ||
| bool bFoundID = true; | ||
| while( bFoundID ) { // while loop until if there no ID match and set that ID for new sound's ID | ||
| bFoundID = false; | ||
| for (cs = m_listSound.begin(); cs != m_listSound.end(); ++cs) { | ||
| if ((*cs)->GetSoundID() == iSoundID) { | ||
| bFoundID = true; | ||
| iSoundID++; | ||
| break; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| // load the sound with new ID | ||
| CSound* sound = new CSound(filename,iSoundID); | ||
| if (sound->GetLength() == CSoundTime(0,0,0)) { | ||
| return -1; // fail to load | ||
| } | ||
| m_listSound.insert(m_listSound.end(),sound); | ||
| return iSoundID; // fail to load | ||
| } | ||
|
|
||
| void CEasySound::Unload(int iSoundID) | ||
| { | ||
| std::list<CSound*>::iterator cs; | ||
| for (cs = m_listSound.begin(); cs != m_listSound.end(); ++cs) { | ||
| if ((*cs)->GetSoundID() == iSoundID) { | ||
| m_listSound.erase(cs); | ||
| delete (*cs); | ||
| return; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| void CEasySound::Unload(CSound *sound) | ||
| { | ||
| std::list<CSound*>::iterator cs; | ||
| for (cs = m_listSound.begin(); cs != m_listSound.end(); ++cs) { | ||
| if ((*cs)->GetSoundID() == sound->GetSoundID()) { | ||
| m_listSound.erase(cs); | ||
| delete (*cs); | ||
| return; | ||
| } | ||
| } | ||
| } | ||
|
|
||
| CSound* CEasySound::GetSound(int iSoundID) | ||
| { | ||
| std::list<CSound*>::iterator cs; | ||
| for (cs = m_listSound.begin(); cs != m_listSound.end(); ++cs) { | ||
| if ((*cs)->GetSoundID() == iSoundID) { | ||
| return (*cs); | ||
| } | ||
| } | ||
|
|
||
| return NULL; // empty sound | ||
| } | ||
|
|
| @@ -0,0 +1,119 @@ | ||
| // EasySound.h: interface for the CEasySound class. | ||
| // | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| #ifndef EASY_SOUND_H | ||
| #define EASY_SOUND_H | ||
|
|
||
| #include <stdlib.h> | ||
| #include <SDL.h> | ||
| //#include <SDL_mixer.h> | ||
| //#include <SDL_audio.h> | ||
|
|
||
| #include <list> | ||
| #include "Sound.h" | ||
| #include "SoundTime.h" | ||
|
|
||
| /** | ||
| * class Score: This class displays the score, bonus and time on the screen | ||
| * | ||
| * @author Shay Leary | ||
| */ | ||
|
|
||
| // make sure to link this librarys or error will occur | ||
| #pragma comment(lib, "SDL.lib") | ||
| #pragma comment(lib, "SDLmain.lib") | ||
|
|
||
| #define ES_SAMPLE 8192 | ||
| #define ES_FREQ 88200 | ||
|
|
||
| using namespace std; | ||
|
|
||
| extern void mixaudio(void *unused, Uint8 *stream, int len); | ||
| /** | ||
| * class CEasySound: This class is singleton design pattern, and it control all object related to sound. (use SDL library) | ||
| * | ||
| * @author Shannon, Graham and Shay | ||
| */ | ||
| class CEasySound | ||
| { | ||
| public: | ||
| /** | ||
| * Instance: Get CEasySound class before using any methods (Singleton Design Pattern) | ||
| * | ||
| * @return static CEasySound* | ||
| */ | ||
| static CEasySound* Instance(); | ||
| /** | ||
| * ~CEasySound: | ||
| * | ||
| * @return | ||
| */ | ||
| virtual ~CEasySound(); | ||
|
|
||
| /** | ||
| * CallMixAudio: ? no idea eh | ||
| * | ||
| * @param unused | ||
| * @param stream | ||
| * @param len | ||
| * @return void | ||
| */ | ||
| void CallMixAudio(void *unused, Uint8 *stream, int len); | ||
|
|
||
| /** | ||
| * Load: load the sound and store in the m_listSound list | ||
| * | ||
| * @param filename - filename of sound wave file | ||
| * @return int - get sound's ID for future use | ||
| */ | ||
| int Load(char *filename); | ||
| /** | ||
| * Unload: unload the sound and remove form the m_listSound list | ||
| * | ||
| * @param iSoundID - Sound's ID to find if there match ID in the m_listSound and unload it. | ||
| * @return void | ||
| */ | ||
| void Unload(int iSoundID); | ||
| /** | ||
| * Unload: unload the sound and remove from the m_listSound list | ||
| * | ||
| * @param sound - CSound class to find if there match ID in the m_listSound and unload it. | ||
| * @return void | ||
| */ | ||
| void Unload(CSound *sound); | ||
| /** | ||
| * GetSound: get the sound from the m_listSound list | ||
| * | ||
| * @param iSoundID - Sound's ID to be given before get Sound Object from the m_listSound | ||
| * @return CSound* - Sound Object to use it (Play, Stop, etc) | ||
| */ | ||
| CSound* GetSound(int iSoundID); | ||
|
|
||
| SDL_AudioSpec GetObtained() { return obtained; }; | ||
|
|
||
| protected: | ||
| /** | ||
| * CEasySound: The construction had to be protected because of Singleton Design Pattern | ||
| * | ||
| * @return | ||
| */ | ||
| CEasySound(); | ||
| private: | ||
| /** | ||
| * _instance: pointer of CEasySound class as part of the Singleton Design Pattern | ||
| */ | ||
| static CEasySound* _instance; | ||
|
|
||
| /** | ||
| * m_listSound: list of Sound's object to store it. (STL's list object) | ||
| */ | ||
| std::list<CSound*> m_listSound; | ||
|
|
||
| SDL_AudioSpec desired; | ||
| SDL_AudioSpec obtained; | ||
|
|
||
| // int m_currentID; | ||
| }; | ||
|
|
||
| #endif |
| @@ -0,0 +1,205 @@ | ||
| // PlainLinkedList.cpp | ||
| // | ||
| // Implementation file for PlainLinkedList Class | ||
| // Defines all the methods declared, but not defined, in PlainLinkedList.h | ||
| // | ||
| // Shay Leary, April 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "PlainLinkedList.h" | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| void PlainLinkedList::Clear() | ||
| { | ||
| PlainNode *ptr = m_first; | ||
|
|
||
| while (ptr->GetNext() != NULL) | ||
|
|
||
| // clear memory | ||
| Delete(ptr); | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| void PlainLinkedList::Delete(PlainNode *before) | ||
| { | ||
| PlainNode *temp = before->GetNext(); | ||
|
|
||
| before->SetNext(temp->GetNext()); | ||
|
|
||
| delete temp; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
|
|
||
| bool PlainLinkedList::AddToStart (const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe) | ||
| { | ||
| PlainNode *newNode; | ||
|
|
||
| try | ||
| { | ||
| newNode = new PlainNode; | ||
| } | ||
| catch(...) | ||
| { | ||
| return false; | ||
| } | ||
|
|
||
| // add the value to the node | ||
| newNode->SetData(tempType, tempXs, tempXe, tempYs, tempYe, tempZs, tempZe); | ||
| // set the address of the net node | ||
| newNode->SetNext(m_first->GetNext()); | ||
| // reset the address of the first node | ||
| m_first->SetNext(newNode); | ||
|
|
||
| return true; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetType (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetType(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetXstart (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetXstart(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetXend (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetXend(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetYstart (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetYstart(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetYend (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetYend(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetZstart (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetZstart(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| GLdouble PlainLinkedList::GetZend (int ptrCount) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
|
|
||
| if (ptr->GetNext() != NULL) | ||
| return ptr->GetNext()->GetZend(); | ||
| else | ||
| return NULL; | ||
| } | ||
|
|
||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| void PlainLinkedList::SetData (const int &ptrCount, const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe) | ||
| { | ||
| PlainNode *ptr = (m_first); | ||
|
|
||
| for (int count = 0; count < ptrCount; count++) | ||
| { | ||
| ptr = ptr->GetNext(); | ||
| } | ||
| ptr->GetNext()->SetData(tempType, tempXs, tempXe, tempYs, tempYe, tempZs, tempZe); | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| int PlainLinkedList::GetListSize() | ||
| { | ||
| int tmpSize = 0; | ||
| // count size of list | ||
| for (PlainNode *ptr = (m_first); ptr->GetNext() != NULL; ptr = ptr->GetNext()) | ||
| { | ||
| tmpSize++; | ||
| } | ||
| return tmpSize; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1,83 @@ | ||
| // PlainLinkedList.h | ||
| // Header file for the PlainLinkedList class | ||
| // Linked List used to store nodes (PlainNode) which contain the co-ordinates of the | ||
| // of each plain used in the program. | ||
| // | ||
| // The program will split the world into four quadrants and creates a linked list to | ||
| // store the bounding box details for each | ||
| // | ||
| // Author: Shay Leary | ||
| // April 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #ifndef PLAINLINKED_LIST_H | ||
| #define PLAINLINKED_LIST_H | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "PlainNode.h" | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| class PlainLinkedList | ||
| { | ||
| public: | ||
| // constructor creates pointer to first node | ||
| PlainLinkedList() {m_first = new PlainNode;} | ||
|
|
||
| virtual ~PlainLinkedList() {Clear();} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| // clears linked list and frees memory | ||
| void Clear(); | ||
|
|
||
| // add a node to the start of the linked list | ||
| bool AddToStart (const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe); | ||
|
|
||
| // set the values of the node data | ||
| void SetData(const int &ptrCount, const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe); | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Get Methods | ||
| //---------------------------------------------------------------------------------- | ||
| GLdouble GetType (int ptrCount); | ||
| GLdouble GetXstart (int ptrCount); | ||
| GLdouble GetXend (int ptrCount); | ||
| GLdouble GetYstart (int ptrCount); | ||
| GLdouble GetYend (int ptrCount); | ||
| GLdouble GetZstart (int ptrCount); | ||
| GLdouble GetZend (int ptrCount); | ||
|
|
||
| // Return size of list | ||
| int GetListSize (); | ||
|
|
||
| // Return the address of the link to the next node in the list | ||
| PlainNode *GetNext () const {return m_first->GetNext();} | ||
| // Return the address of the link to the first node in the list | ||
| PlainNode *GetFirst() const {return m_first;} | ||
|
|
||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| private: | ||
| // pointer to first node in list | ||
| PlainNode *m_first; | ||
|
|
||
| // used to clear memory | ||
| void Delete (PlainNode *before); | ||
|
|
||
| // Privatised copy constructor and assignment operator | ||
| PlainLinkedList (const PlainLinkedList &array) {}; | ||
| PlainLinkedList &operator = (const PlainLinkedList &array) {}; | ||
| }; | ||
|
|
||
| #endif | ||
|
|
||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1,34 @@ | ||
| // PlainNode.cpp | ||
| // | ||
| // Implementation file for PlainNode Class | ||
| // Defines all the methods declared, but not defined, in PlainNode.h | ||
| // | ||
| // Shay Leary, April 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "PlainNode.h" | ||
|
|
||
| //---------------------------------------------------------------- | ||
|
|
||
| void PlainNode::Clear() | ||
| { | ||
| m_next = NULL; | ||
| } | ||
|
|
||
| //---------------------------------------------------------------- | ||
|
|
||
| void PlainNode::SetData(const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe) | ||
| { | ||
| m_type = tempType; | ||
| m_xPlainStart = tempXs; | ||
| m_xPlainEnd = tempXe; | ||
| m_yPlainStart = tempYs; | ||
| m_yPlainEnd = tempYe; | ||
| m_zPlainStart = tempZs; | ||
| m_zPlainEnd = tempZe; | ||
| } | ||
|
|
||
| //---------------------------------------------------------------- |
| @@ -0,0 +1,78 @@ | ||
| // PlainNode.h | ||
| // Header file for the PlainNode class | ||
| // Stores details for each plain. Each node is stored in each link of the Plain Linked List | ||
|
|
||
| // Shay Leary, April 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #ifndef PLAINNODE_H | ||
| #define PLAINNODE_H | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include <iostream> | ||
| #include <math.h> | ||
| #include <gl/glut.h> | ||
|
|
||
| class PlainNode | ||
| { | ||
|
|
||
| public: | ||
| PlainNode () {Clear();} | ||
| virtual ~PlainNode () {Clear();} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| void Clear (); | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Get Methods | ||
| //---------------------------------------------------------------------------------- | ||
| GLdouble GetType () {return m_type;} | ||
| GLdouble GetXstart () {return m_xPlainStart;} | ||
| GLdouble GetXend () {return m_xPlainEnd;} | ||
| GLdouble GetYstart () {return m_yPlainStart;} | ||
| GLdouble GetYend () {return m_yPlainEnd;} | ||
| GLdouble GetZstart () {return m_zPlainStart;} | ||
| GLdouble GetZend () {return m_zPlainEnd;} | ||
|
|
||
| // Return the address of the link to the next node in the list | ||
| PlainNode *GetNext () const {return m_next;} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Set Methods | ||
| //---------------------------------------------------------------------------------- | ||
| void SetData(const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe); | ||
|
|
||
| // Set the address of the link to the next node in the list | ||
| void SetNext (PlainNode *next) {m_next = next;} | ||
|
|
||
| private: | ||
| // The address of the next node in the list | ||
| PlainNode *m_next; | ||
|
|
||
| // Stores type of plain: | ||
| // (0: flat plane) | ||
| // (1: incline from z to y) | ||
| // (2: incline from x to y) | ||
| GLdouble m_type; | ||
|
|
||
|
|
||
| // stores start and end co-ordinates of plane on x, y and z axis | ||
| GLdouble m_xPlainStart, m_xPlainEnd; | ||
| GLdouble m_yPlainStart, m_yPlainEnd; | ||
| GLdouble m_zPlainStart, m_zPlainEnd; | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| // Privatised copy constructor and assignment operator | ||
| PlainNode (const PlainNode &newNode) {}; | ||
| PlainNode &operator = (const PlainNode &newNode) {}; | ||
| }; | ||
|
|
||
| #endif | ||
|
|
||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1,30 @@ | ||
| #include "SizeAndOffset.h" | ||
| #include "camera.h" | ||
|
|
||
| int scale; | ||
| int x; | ||
| int y; | ||
| int z; | ||
|
|
||
| SizeAndOffset::SizeAndOffset(int inscale, int xOffset, int yOffset, int zOffset) | ||
| { | ||
| scale = inscale; | ||
| x = xOffset; | ||
| y = yOffset; | ||
| z = zOffset; | ||
| } | ||
|
|
||
| int saoX(int coord) { | ||
| return (scale*coord) + x; | ||
| } | ||
|
|
||
| int saoY(int coord) { | ||
| return (scale*coord) + y; | ||
| } | ||
| int saoZ(int coord) { | ||
| return (scale*coord) + z; | ||
| } | ||
|
|
||
| CVector Coordinates(int xPoint, int yPoint, int zPoint) { | ||
| return CVector(saoX(xPoint), saoY(yPoint), saoZ(zPoint)); | ||
| } |
| @@ -0,0 +1,7 @@ | ||
| #pragma once | ||
| class SizeAndOffset | ||
| { | ||
| public: | ||
| SizeAndOffset(int inscale, int xOffset, int yOffset, int zOffset); | ||
| }; | ||
|
|
| @@ -0,0 +1,31 @@ | ||
| #include "camera.h" | ||
| class SizeAndOffsetTool { | ||
| public: | ||
| int scale; | ||
| int x; | ||
| int y; | ||
| int z; | ||
|
|
||
| SizeAndOffsetTool(int inscale, int xOffset, int yOffset, int zOffset) { | ||
| scale = inscale; | ||
| x = xOffset; | ||
| y = yOffset; | ||
| z = zOffset; | ||
|
|
||
| } | ||
|
|
||
| int saoX(int coord) { | ||
| return (scale*coord) + x; | ||
| } | ||
|
|
||
| int saoY(int coord) { | ||
| return (scale*coord) + y; | ||
| } | ||
| int saoZ(int coord) { | ||
| return (scale*coord) + z; | ||
| } | ||
|
|
||
| CVector Coordinates(int xPoint, int yPoint, int zPoint) { | ||
| return CVector(saoX(xPoint),saoY(yPoint),saoZ(zPoint)); | ||
| } | ||
| }; |
| @@ -0,0 +1,79 @@ | ||
| // Sound.cpp: implementation of the CSound class. | ||
| // | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| #include <memory.h> | ||
| #include <malloc.h> | ||
|
|
||
| #include "Sound.h" | ||
| #include "EasySound.h" | ||
|
|
||
| ////////////////////////////////////////////////////////////////////// | ||
| // Construction/Destruction | ||
| ////////////////////////////////////////////////////////////////////// | ||
| CSound::CSound(char *filename, int iSoundID) | ||
| { | ||
| m_iSoundID = iSoundID; | ||
| Uint32 len; | ||
| if (SDL_LoadWAV(filename, &m_spec, &m_data, &len) == NULL ) { | ||
| fprintf(stderr, "Couldn't load %s: %s\n",filename, SDL_GetError()); | ||
| m_len = CSoundTime(0); | ||
| return; | ||
| } | ||
| m_len = CSoundTime(len); | ||
| m_pos = CSoundTime(0); | ||
|
|
||
| CEasySound *es = CEasySound::Instance(); | ||
| SDL_AudioSpec obtained = es->GetObtained(); | ||
| SDL_AudioCVT cvt; | ||
|
|
||
| SDL_BuildAudioCVT(&cvt, m_spec.format, m_spec.channels, m_spec.freq, obtained.format, obtained.channels, obtained.freq); | ||
| cvt.buf = (Uint8*)malloc(m_len.GetSDLTime() * cvt.len_mult); | ||
| memcpy(cvt.buf, m_data, m_len.GetSDLTime()); | ||
| cvt.len = m_len.GetSDLTime(); | ||
| SDL_ConvertAudio(&cvt); | ||
| SDL_FreeWAV(m_data); | ||
|
|
||
| SDL_LockAudio(); | ||
| m_data = cvt.buf; | ||
| // the new length of sound after convert from 8bit to 16bit | ||
| m_len = CSoundTime( cvt.len_cvt ); | ||
| m_pos = CSoundTime( 0 ); | ||
| SDL_UnlockAudio(); | ||
|
|
||
| } | ||
|
|
||
| CSound::~CSound() | ||
| { | ||
| SDL_FreeWAV(m_data); | ||
| } | ||
|
|
||
|
|
||
| bool CSound::Play(CSoundTime start, CSoundTime length) | ||
| { | ||
| m_pos = start; | ||
| m_stop = length; | ||
| SDL_PauseAudio(0); | ||
| return 0; | ||
| } | ||
|
|
||
| bool CSound::Play() | ||
| { | ||
| m_pos = CSoundTime(0); | ||
| m_stop = m_len; | ||
| SDL_PauseAudio(0); | ||
|
|
||
| return 0; | ||
| } | ||
|
|
||
| CSoundTime CSound::Stop() | ||
| { | ||
| SDL_PauseAudio(1); | ||
| return CSoundTime(0,0,0); | ||
| } | ||
|
|
||
| CSoundTime CSound::GetLength() | ||
| { | ||
| return CSoundTime(m_len); | ||
| } | ||
|
|
| @@ -0,0 +1,92 @@ | ||
| // Sound.h: interface for the CSound class. | ||
| // | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| #ifndef SOUND_H | ||
| #define SOUND_H | ||
|
|
||
| #include <SDL.h> | ||
| #include "SoundTime.h" | ||
|
|
||
| /** | ||
| * class CSound: This class is the sound object, and it allow to play, stop, etc | ||
| * | ||
| * @author Shannon, Grahan and Shay | ||
| */ | ||
| class CSound | ||
| { | ||
| public: | ||
| /** | ||
| * CSound: | ||
| * | ||
| * @param filename | ||
| * @param iSoundID | ||
| * @return | ||
| */ | ||
| CSound(char *filename, int iSoundID); | ||
| /** | ||
| * ~CSound: | ||
| * | ||
| * @return | ||
| */ | ||
| virtual ~CSound(); | ||
|
|
||
| /** | ||
| * Play: | ||
| * | ||
| * @param start | ||
| * @param length | ||
| * @return bool | ||
| */ | ||
| bool Play(CSoundTime start, CSoundTime length); | ||
| /** | ||
| * Play: | ||
| * | ||
| * @return bool | ||
| */ | ||
| bool Play(); | ||
| /** | ||
| * Stop: | ||
| * | ||
| * @return CSoundTime | ||
| */ | ||
| CSoundTime Stop(); | ||
| /** | ||
| * GetLength: | ||
| * | ||
| * @return CSoundTime | ||
| */ | ||
| CSoundTime GetLength(); | ||
| /** | ||
| * GetSoundID: | ||
| * | ||
| * @return int | ||
| */ | ||
| int GetSoundID() { return m_iSoundID; }; | ||
|
|
||
| public: | ||
| /** | ||
| * m_data: | ||
| */ | ||
| Uint8 *m_data; | ||
| /** | ||
| * m_pos: | ||
| */ | ||
| CSoundTime m_pos; | ||
| /** | ||
| * m_len: | ||
| */ | ||
| CSoundTime m_len; | ||
| CSoundTime m_stop; | ||
| /** | ||
| * m_spec: | ||
| */ | ||
| SDL_AudioSpec m_spec; | ||
| /** | ||
| * m_iSoundID: | ||
| */ | ||
| int m_iSoundID; // id number for sound | ||
|
|
||
| }; | ||
|
|
||
| #endif |
| @@ -0,0 +1,91 @@ | ||
| // SoundTime.cpp: implementation of the CSoundTime class. | ||
| // | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| #include "SoundTime.h" | ||
|
|
||
| ////////////////////////////////////////////////////////////////////// | ||
| // Construction/Destruction | ||
| ////////////////////////////////////////////////////////////////////// | ||
| CSoundTime::CSoundTime(Uint32 time) | ||
| { | ||
| m_time = time; | ||
| // convert to mins, sec and ms <- someone need to do this one | ||
| m_minutes = 0; | ||
| m_seconds = 0; | ||
| m_milliseconds = 0; | ||
| } | ||
|
|
||
| CSoundTime::CSoundTime(int min, int sec, int ms) | ||
| { | ||
| m_minutes = min; | ||
| m_seconds = sec; | ||
| m_milliseconds = ms; | ||
| // convert to time from mins, sec and ms | ||
| // convert to time from mins, sec and ms | ||
| double tmpTime = (100.0 / 60.0 * (double)min * 100000.0) + (100.0 / 60.0 * (double)sec * 1000.0) + (double)ms; | ||
| Uint32 m_time = (Uint32) tmpTime; // <- someone need to do this one | ||
| } | ||
|
|
||
| CSoundTime::~CSoundTime() | ||
| { | ||
| } | ||
|
|
||
| Uint32 CSoundTime::GetSDLTime() | ||
| { | ||
| return (Uint32)m_time; | ||
| } | ||
|
|
||
|
|
||
| CSoundTime & CSoundTime::operator+= (CSoundTime *) | ||
| { | ||
| return *this; | ||
| } | ||
|
|
||
| CSoundTime & CSoundTime::operator-= (CSoundTime *) | ||
| { | ||
| return *this; | ||
| } | ||
|
|
||
| CSoundTime & CSoundTime::operator+= (int) | ||
| { | ||
| return *this; | ||
| } | ||
|
|
||
| CSoundTime & CSoundTime::operator-= (int) | ||
| { | ||
| return *this; | ||
| } | ||
|
|
||
| CSoundTime & CSoundTime::operator++ () | ||
| { | ||
| return *this; | ||
| } | ||
|
|
||
| CSoundTime & CSoundTime::operator-- () | ||
| { | ||
| return *this; | ||
| } | ||
|
|
||
| //int CSoundTime::operator== (const CSoundTime& cst1, const CSoundTime& cst2) | ||
| //{ | ||
| // return 0; | ||
| //} | ||
|
|
||
| int CSoundTime::operator== (const CSoundTime& cst) | ||
| { | ||
| return 0; | ||
| } | ||
|
|
||
| void CSoundTime::addMin(int mins) | ||
| { | ||
| } | ||
|
|
||
| void CSoundTime::addSec(int seconds) | ||
| { | ||
| } | ||
|
|
||
| void CSoundTime::addMS(int milliseconds) | ||
| { | ||
|
|
||
| } |
| @@ -0,0 +1,156 @@ | ||
| // SoundTime.h: interface for the CSoundTime class. | ||
| // | ||
| ////////////////////////////////////////////////////////////////////// | ||
|
|
||
| #ifndef SOUND_TIME_H | ||
| #define SOUND_TIME_H | ||
|
|
||
| #include <SDL.h> | ||
|
|
||
| // perfer to have all define start with ES_ as easy sound similar to GL_ for openGL | ||
| /** | ||
| * -1: the value is play the sound looping | ||
| */ | ||
| #define ES_LOOP -1 | ||
| /** | ||
| * 0: the value is play the sound once | ||
| */ | ||
| #define ES_ONCE 0 | ||
|
|
||
| /** | ||
| * class CSoundTime: The is the time convertion from min:sec:ms into int value for SDL library | ||
| * | ||
| * @author Shannon, Grahan and Shay | ||
| */ | ||
| class CSoundTime | ||
| { | ||
| public: | ||
| /** | ||
| * CSoundTime: | ||
| * | ||
| * @param time | ||
| * @return | ||
| */ | ||
| CSoundTime(Uint32 time = (Uint32)0); | ||
| /** | ||
| * CSoundTime: | ||
| * | ||
| * @param min | ||
| * @param sec | ||
| * @param ms | ||
| * @return | ||
| */ | ||
| CSoundTime(int min, int sec, int ms); | ||
| /** | ||
| * ~CSoundTime: | ||
| * | ||
| * @return | ||
| */ | ||
| virtual ~CSoundTime(); | ||
|
|
||
| /** | ||
| * GetSDLTime: | ||
| * | ||
| * @return int | ||
| */ | ||
| Uint32 GetSDLTime(); | ||
|
|
||
| /** | ||
| * operator+=: | ||
| * | ||
| * @param | ||
| * @return CSoundTime& | ||
| */ | ||
| CSoundTime & operator+= (CSoundTime *); | ||
| /** | ||
| * operator-=: | ||
| * | ||
| * @param | ||
| * @return CSoundTime& | ||
| */ | ||
| CSoundTime & operator-= (CSoundTime *); | ||
| /** | ||
| * operator+=: | ||
| * | ||
| * @param | ||
| * @return CSoundTime& | ||
| */ | ||
| CSoundTime & operator+= (int); // add by seconds | ||
| /** | ||
| * operator-=: | ||
| * | ||
| * @param | ||
| * @return CSoundTime& | ||
| */ | ||
| CSoundTime & operator-= (int); // sub by seconds | ||
| /** | ||
| * operator++: | ||
| * | ||
| * @return CSoundTime& | ||
| */ | ||
| CSoundTime & operator++ (); // add count of seconds | ||
| /** | ||
| * operator--: | ||
| * | ||
| * @return CSoundTime& | ||
| */ | ||
| CSoundTime & operator-- (); // sub count of seconds | ||
| /** | ||
| * friend operator==: | ||
| * | ||
| * @param cst1 | ||
| * @param cst2 | ||
| * @return int | ||
| */ | ||
| friend int operator== (const CSoundTime& cst1, const CSoundTime& cst2); | ||
| /** | ||
| * operator==: | ||
| * | ||
| * @param cst | ||
| * @return int | ||
| */ | ||
| int operator== (const CSoundTime& cst); | ||
|
|
||
| /** | ||
| * addMin: | ||
| * | ||
| * @param mins | ||
| * @return void | ||
| */ | ||
| void addMin(int mins); | ||
| /** | ||
| * addSec: | ||
| * | ||
| * @param seconds | ||
| * @return void | ||
| */ | ||
| void addSec(int seconds); | ||
| /** | ||
| * addMS: | ||
| * | ||
| * @param milliseconds | ||
| * @return void | ||
| */ | ||
| void addMS(int milliseconds); | ||
|
|
||
| private: | ||
| /** | ||
| * m_minutes: | ||
| */ | ||
| int m_minutes; | ||
| /** | ||
| * m_seconds: | ||
| */ | ||
| int m_seconds; | ||
| /** | ||
| * m_milliseconds: | ||
| */ | ||
| int m_milliseconds; | ||
|
|
||
| /** | ||
| * m_time: | ||
| */ | ||
| Uint32 m_time; // the time need for SDL library | ||
| }; | ||
|
|
||
| #endif |
| @@ -0,0 +1,174 @@ | ||
| // camera.h | ||
| // Header file for the camera class | ||
| // Allows the camera to be navigated around the world. | ||
| // Also sets Plains, Bounding Boxes and view Maps | ||
| // | ||
| // Shay Leary, March 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
| #ifndef CAMERA_H | ||
| #define CAMERA_H | ||
|
|
||
| #define PI 3.1415962654 | ||
|
|
||
| #include "collision.h" | ||
| #include "cameraMap.h" | ||
| #include "PlainLinkedList.h" | ||
| #include "EasySound.h" | ||
| #include "types\vector.h" | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| class Camera | ||
| { | ||
| public: | ||
|
|
||
| Camera(); | ||
| CVector GetPos(); | ||
| virtual ~Camera() {es->Unload(stepSound);} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Set Methods | ||
| //---------------------------------------------------------------------------------- | ||
| // sets initial value for bounding boxes (in the array AABB) | ||
| void SetAABBMaxX(const int & tempIndex, const GLdouble &tempX) {m_colDetect.SetAABBMaxX(tempIndex, tempX);} | ||
| void SetAABBMinX(const int & tempIndex, const GLdouble &tempX) {m_colDetect.SetAABBMinX(tempIndex, tempX);} | ||
| void SetAABBMaxY(const int & tempIndex, const GLdouble &tempY) {m_colDetect.SetAABBMaxY(tempIndex, tempY);} | ||
| void SetAABBMinY(const int & tempIndex, const GLdouble &tempY) {m_colDetect.SetAABBMinY(tempIndex, tempY);} | ||
| void SetAABBMaxZ(const int & tempIndex, const GLdouble &tempZ) {m_colDetect.SetAABBMaxZ(tempIndex, tempZ);} | ||
| void SetAABBMinZ(const int & tempIndex, const GLdouble &tempZ) {m_colDetect.SetAABBMinZ(tempIndex, tempZ);} | ||
|
|
||
| // set step and rotation size | ||
| void SetRotateSpeed (const GLdouble &tempSpeed) {m_rotateSpeed = tempSpeed;} | ||
| void SetMoveSpeed (const GLdouble &tempSpeed) {m_moveSpeed = tempSpeed;} | ||
|
|
||
| // COLLSION DETECTION FUNCTIONS | ||
| // set collision detection (TRUE = on) | ||
| void SetCollisionDetectionOn (const bool &tempCol) {m_CollisionDetectionOn = tempCol;} | ||
| // set number of bounding boxes | ||
| void SetNoBoundingBoxes(const int & tempSize) {m_colDetect.SetNoBoundingBoxes(tempSize);} | ||
| // set the co-ordinates of the world | ||
| void SetWorldCoordinates (const GLdouble &tempX, const GLdouble &tempZ); | ||
| // creates a linked list for each quadrant of the world and places the bounding box | ||
| // data in each. Then clears and deletes AABB array. | ||
| void InitiateBoundingBoxes() {m_colDetect.CreateLinkedList();} | ||
|
|
||
| // sets the co-ordinate of each plain | ||
| void SetPlains (const int tempType, | ||
| const GLdouble tempXs, const GLdouble tempXe, | ||
| const GLdouble tempYs, const GLdouble tempYe, | ||
| const GLdouble tempZs, const GLdouble tempZe); | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Get Methods | ||
| //---------------------------------------------------------------------------------- | ||
| GLdouble GetLR () {return m_x;} | ||
| GLdouble GetUD () {return m_y;} | ||
| GLdouble GetFB () {return m_z;} | ||
| GLdouble GetAABBMaxX (const int & tempIndex) {return m_colDetect.GetAABBMaxX (tempIndex);} | ||
| GLdouble GetAABBMinX (const int & tempIndex) {return m_colDetect.GetAABBMinX (tempIndex);} | ||
| GLdouble GetAABBMaxY (const int & tempIndex) {return m_colDetect.GetAABBMaxY (tempIndex);} | ||
| GLdouble GetAABBMinY (const int & tempIndex) {return m_colDetect.GetAABBMinY (tempIndex);} | ||
| GLdouble GetAABBMaxZ (const int & tempIndex) {return m_colDetect.GetAABBMaxZ (tempIndex);} | ||
| GLdouble GetAABBMinZ (const int & tempIndex) {return m_colDetect.GetAABBMinZ (tempIndex);} | ||
|
|
||
| // position the camera | ||
| void Position (GLdouble const & tempX, | ||
| GLdouble const & tempY, | ||
| GLdouble const & tempZ, | ||
| GLdouble const & tempAngle); | ||
|
|
||
| // check whether ok to move | ||
| void CheckCamera(); | ||
|
|
||
| // Used to pass direction to move or rotate (i.e. 1, -1 or 0) | ||
| void DirectionFB(int const & tempMove); | ||
| void DirectionLR(int const & tempMove); | ||
| void DirectionUD(int const & tempMove); | ||
| void DirectionRotateLR(GLdouble const & tempMove); | ||
| void DirectionLookUD(int const & tempMove); | ||
|
|
||
| // display map | ||
| void DisplayMap(const int & screenWidth, const int & screenHeight, | ||
| const GLuint & tempImage); | ||
| // display welcome screen | ||
| void DisplayWelcomeScreen (const int & screenWidth, const int & screenHeight, | ||
| const int & tempExit, const GLuint & tempImage); | ||
| // display no exit | ||
| void DisplayNoExit (const int & screenWidth, const int & screenHeight, | ||
| const GLuint & tempImage); | ||
|
|
||
| private: | ||
|
|
||
| //steep incline increments | ||
| GLdouble m_incrementX; | ||
| GLdouble m_incrementZ; | ||
| int m_No_Plains; | ||
| int m_plainNo; | ||
| GLdouble m_plainHeight; | ||
|
|
||
| // rotation variables | ||
| GLdouble m_rotateAngleLR; | ||
| GLdouble m_deltaAngleLR; | ||
| GLdouble m_rotateAngleUD; | ||
| GLdouble m_deltaAngleUD; | ||
|
|
||
| // movement variables | ||
| GLdouble m_x, m_y, m_z, m_zLast, m_xLast; | ||
| GLdouble m_lookX, m_lookY,m_lookZ; | ||
| GLdouble m_lookXX, m_lookYY, m_lookZZ; | ||
| GLdouble m_deltaMoveLR; | ||
| GLdouble m_deltaMoveFB; | ||
| GLdouble m_deltaMoveUD; | ||
| GLdouble m_direction; | ||
|
|
||
| // movement speed (step size) | ||
| GLdouble m_rotateSpeed; | ||
| GLdouble m_moveSpeed; | ||
|
|
||
| // is it ok to move | ||
| bool MoveFBOK(); | ||
| bool MoveLROK(); | ||
| bool MoveUDOK(); | ||
| bool RotateLROK(); | ||
| bool LookUDOK(); | ||
|
|
||
| // move around the world | ||
| void MoveFB(); | ||
| void MoveLR(); | ||
| void MoveUD(); | ||
| void RotateLR(); | ||
| void LookUD(); | ||
|
|
||
| // overloaded function for setting plain | ||
| void SetPlains(const int & moveX, const int & moveZ); | ||
|
|
||
| // resets camera | ||
| void ResetXYZ(); | ||
| // display new view | ||
| void callGLLookAt(); | ||
|
|
||
| bool m_CollisionDetectionOn; | ||
|
|
||
| // objects | ||
| Collision m_colDetect; | ||
| CameraMap m_map; | ||
| PlainLinkedList m_Plain; | ||
|
|
||
| // These functions were set up to climb stairs, but are not used. | ||
| // The Plain object is used instead | ||
| void ClimbSteps(GLdouble stepStart, GLdouble stepFinish, GLdouble stepHeight, GLdouble stepWidth, int noSteps); | ||
| void CheckSteps(); | ||
|
|
||
| CEasySound *es; | ||
| CSound* stepSound; | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| // Privatised copy constructor and assignment operator | ||
| Camera (const Camera &cam) {}; | ||
| Camera &operator = (const Camera &cam) {}; | ||
| }; | ||
|
|
||
| #endif |
| @@ -0,0 +1,111 @@ | ||
| // cameraMap.cpp | ||
| // | ||
| // Implementation file for CameraMap Class | ||
| // Defines all the methods declared, but not defined, in cameraMap.h | ||
| // | ||
| // Shay Leary, April 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "cameraMap.h" | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
| // Display a map with a cursor on it, which moves with the camera | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| void CameraMap::DisplayMap(const int & screenWidth, const int & screenHeight, | ||
| const GLdouble &xPos, const GLdouble & zPos, const GLuint & tempImage) | ||
| { | ||
| GLdouble tempX = xPos/163.0 - 2096/163; | ||
| GLdouble tempZ = zPos/164.0 - 4688/164; | ||
| glPushMatrix(); | ||
| glMatrixMode(GL_PROJECTION); | ||
| glPushMatrix(); | ||
| glLoadIdentity(); | ||
| gluOrtho2D(0, screenWidth, 0, screenHeight); | ||
| glScalef(1, -1, 1); | ||
|
|
||
| // mover the origin from the bottom left corner | ||
| // to the upper left corner | ||
| glTranslatef(0, -screenHeight, 0); | ||
|
|
||
| glMatrixMode(GL_MODELVIEW); | ||
| glLoadIdentity(); | ||
|
|
||
| // display the cursor of the camera position | ||
| glBegin(GL_QUADS); | ||
| glVertex3f(219.0 - tempX - 2.0, 256.0 - tempZ - 2.0, 0.0); | ||
| glVertex3f(219.0 - tempX + 2.0, 256.0 - tempZ - 2.0, 0.0); | ||
| glVertex3f(219.0 - tempX + 2.0, 256.0 - tempZ + 2.0, 0.0); | ||
| glVertex3f(219.0 - tempX - 2.0, 256.0 - tempZ + 2.0, 0.0); | ||
| glEnd(); | ||
|
|
||
| // display map | ||
| glBindTexture(GL_TEXTURE_2D, tempImage); | ||
| glCallList(448); | ||
|
|
||
| // Reset Perspective Projection | ||
| glMatrixMode(GL_PROJECTION); | ||
| glPopMatrix(); | ||
| glMatrixMode(GL_MODELVIEW); | ||
| glPopMatrix(); | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
| // Displays a welcome or exit screen | ||
| //-------------------------------------------------------------------------------------- | ||
| void CameraMap::DisplayWelcomeScreen (const int & screenWidth, const int & screenHeight, | ||
| const int & tempExit, const GLuint & tempImage) | ||
| { | ||
| glPushMatrix(); | ||
| glMatrixMode(GL_PROJECTION); | ||
| glPushMatrix(); | ||
| glLoadIdentity(); | ||
| gluOrtho2D(0, screenWidth, 0, screenHeight); | ||
| glScalef(1, -1, 1); | ||
|
|
||
| // move to centre of screen | ||
| glTranslatef(screenWidth/2 -256.0, -screenHeight/2 -256.0, 0); | ||
| glMatrixMode(GL_MODELVIEW); | ||
| glLoadIdentity(); | ||
| // display exit screen or welcome screen | ||
| if (tempExit == 1) | ||
| { | ||
| glBindTexture(GL_TEXTURE_2D, tempImage); | ||
| } | ||
| else | ||
| { | ||
| glBindTexture(GL_TEXTURE_2D, tempImage); | ||
| } | ||
| // display image | ||
| glCallList(449); | ||
| // Reset Perspective Projection | ||
| glMatrixMode(GL_PROJECTION); | ||
| glPopMatrix(); | ||
| glMatrixMode(GL_MODELVIEW); | ||
| glPopMatrix(); | ||
| } | ||
|
|
||
| void CameraMap::DisplayNoExit (const int & screenWidth, const int & screenHeight, | ||
| const GLuint & tempImage) | ||
| { | ||
| glPushMatrix(); | ||
| glMatrixMode(GL_PROJECTION); | ||
| glPushMatrix(); | ||
| glLoadIdentity(); | ||
| gluOrtho2D(0, screenWidth, 0, screenHeight); | ||
| glScalef(1, -1, 1); | ||
|
|
||
| // move to centre of screen | ||
| glTranslatef(screenWidth/2 -128.0, -screenHeight/2 -32.0, 0); | ||
| glMatrixMode(GL_MODELVIEW); | ||
| glLoadIdentity(); | ||
| // display sign | ||
| glBindTexture(GL_TEXTURE_2D, tempImage); | ||
| // display image | ||
| glCallList(454); | ||
| // Reset Perspective Projection | ||
| glMatrixMode(GL_PROJECTION); | ||
| glPopMatrix(); | ||
| glMatrixMode(GL_MODELVIEW); | ||
| glPopMatrix(); | ||
| } |
| @@ -0,0 +1,43 @@ | ||
| // cameraMap.h | ||
| // Header file for the cameraMap class | ||
| // Displays a map and welcome screen in 2D on the screen | ||
| // | ||
| // Shay Leary, April 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #ifndef CAMERA_MAP_H | ||
| #define CAMERA_MAP_H | ||
|
|
||
| #include <gl/glut.h> | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| class CameraMap | ||
| { | ||
| public: | ||
| CameraMap() {}; | ||
| virtual ~CameraMap() {}; | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| // display the map | ||
| void DisplayMap(const int & screenWidth, const int & screenHeight, | ||
| const GLdouble & xPos, const GLdouble & zPos, | ||
| const GLuint & tempImage); | ||
|
|
||
| // display the welcome screen | ||
| void DisplayWelcomeScreen (const int & screenWidth, const int & screenHeight, | ||
| const int & tempExit, const GLuint & tempImage); | ||
|
|
||
| void DisplayNoExit (const int & screenWidth, const int & screenHeight, | ||
| const GLuint & tempImage); | ||
|
|
||
| private: | ||
| // Privatised copy constructor and assignment operator | ||
| CameraMap (const CameraMap &cam) {}; | ||
| CameraMap &operator = (const CameraMap &cam) {}; | ||
| }; | ||
|
|
||
| #endif | ||
|
|
||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1,132 @@ | ||
| // collision.cpp | ||
| // | ||
| // Implementation file for Collsion Class | ||
| // Defines all the methods declared, but not defined, in collsion.h | ||
| // | ||
| // Shay Leary, March 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "collision.h" | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
| // Creates a linked list for each quadrant and then copies the bounding box data from | ||
| // AABB (array) to the required linked list. | ||
| // I initially just created AABB, then decided to place the bounding box info into a list. | ||
| // I kept the array has it allows for the data to be copied into the list in any reuired | ||
| // order. | ||
| //-------------------------------------------------------------------------------------- | ||
| void Collision::CreateLinkedList() | ||
|
|
||
| { | ||
| int tempNoBoxes = GetNoBoundingBoxes(); | ||
| // initilize list size for each quadrant | ||
| m_listSize[0] = 0; | ||
| m_listSize[1] = 0; | ||
| m_listSize[2] = 0; | ||
| m_listSize[3] = 0; | ||
|
|
||
| for (int count = 0; count < tempNoBoxes; count++) | ||
| { | ||
| GLdouble maxX = GetAABBMaxX(count); | ||
| GLdouble minX = GetAABBMinX(count); | ||
| GLdouble maxY = GetAABBMaxY(count); | ||
| GLdouble minY = GetAABBMinY(count); | ||
| GLdouble maxZ = GetAABBMaxZ(count); | ||
| GLdouble minZ = GetAABBMinZ(count); | ||
| // 1st quadrant | ||
| if (((minX <= m_worldSizeX / 2.0) || (maxX <= m_worldSizeX / 2.0)) && | ||
| ((minZ <= m_worldSizeZ / 2.0) || (maxZ <= m_worldSizeZ / 2.0))) | ||
| { | ||
| // increment list size | ||
| m_listSize[0]++; | ||
| // add bb data to list | ||
| m_list[0].AddToStart(maxX, minX, maxY, minY, maxZ, minZ); | ||
| } | ||
| // 2nd quadrant | ||
| if (((minX <= m_worldSizeX / 2.0) || (maxX <= m_worldSizeX / 2.0)) && | ||
| ((minZ >= m_worldSizeZ / 2.0) || (maxZ >= m_worldSizeZ / 2.0))) | ||
| { | ||
| // increment list size | ||
| m_listSize[1]++; | ||
| // add bb data to list | ||
| m_list[1].AddToStart(maxX, minX, maxY, minY, maxZ, minZ); | ||
| } | ||
| // 3rd quadrant | ||
| if (((minX >= m_worldSizeX / 2.0) || (maxX >= m_worldSizeX / 2.0)) && | ||
| ((minZ <= m_worldSizeZ / 2.0) || (maxZ <= m_worldSizeZ / 2.0))) | ||
| { | ||
| // increment list size | ||
| m_listSize[2]++; | ||
| // add bb data to list | ||
| m_list[2].AddToStart(maxX, minX, maxY, minY, maxZ, minZ); | ||
| } | ||
| // 4th quadrant | ||
| if (((minX >= m_worldSizeX / 2.0) || (maxX >= m_worldSizeX / 2.0)) && | ||
| ((minZ >= m_worldSizeZ / 2.0) || (maxZ >= m_worldSizeZ / 2.0))) | ||
| { | ||
| // increment list size | ||
| m_listSize[3]++; | ||
| // add bb data to list | ||
| m_list[3].AddToStart(maxX, minX, maxY, minY, maxZ, minZ); | ||
| } | ||
| } | ||
| // Call AABB constructor the delete array and clear memory | ||
| // (the array AABB is not required once the lists have been created) | ||
| m_AABB.~AABB(); | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
| // Returns TRUE if a collsion occurs. | ||
| // The parameters passed to this function are the co-ordinates of the camera. | ||
| // At present this function uses if statements to split the world into quadrants | ||
| // this is to be improved (for the project) so that the quadrants (or levels) are | ||
| // stored in a list or tree data structure. | ||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| bool Collision::Collide(GLdouble endX, GLdouble endY, GLdouble endZ) | ||
| { | ||
| bool Collision = false; | ||
| // check 1st quadrant (1st linked list) | ||
| if (((endX <= m_worldSizeX / 2.0) || (endX <= m_worldSizeX / 2.0)) && | ||
| ((endZ <= m_worldSizeZ / 2.0) || (endZ <= m_worldSizeZ / 2.0))) | ||
| { | ||
| Collision = CheckCollision(0, endX, endY, endZ); | ||
| } | ||
| // check 2nd quadrant (2nd linked list) | ||
| if (((endX <= m_worldSizeX / 2.0) || (endX <= m_worldSizeX / 2.0)) && | ||
| ((endZ >= m_worldSizeZ / 2.0) || (endZ >= m_worldSizeZ / 2.0))) | ||
| { | ||
| Collision = CheckCollision(1, endX, endY, endZ); | ||
| } | ||
| // check 3rd quadrant (3rd linked list) | ||
| if (((endX >= m_worldSizeX / 2.0) || (endX >= m_worldSizeX / 2.0)) && | ||
| ((endZ <= m_worldSizeZ / 2.0) || (endZ <= m_worldSizeZ / 2.0))) | ||
| { | ||
| Collision = CheckCollision(2, endX, endY, endZ); | ||
| } | ||
| // check 4th quadrant (4th linked list) | ||
| if (((endX >= m_worldSizeX / 2.0) || (endX >= m_worldSizeX / 2.0)) && | ||
| ((endZ >= m_worldSizeZ / 2.0) || (endZ >= m_worldSizeZ / 2.0))) | ||
| { | ||
| Collision = CheckCollision(3, endX, endY, endZ); | ||
| } | ||
| return Collision; | ||
| } | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
| // Called from above function to check if collsion occurred. | ||
| //-------------------------------------------------------------------------------------- | ||
| bool Collision::CheckCollision(int index, GLdouble endX, GLdouble endY, GLdouble endZ) | ||
| { | ||
| bool CollisionFound = false; | ||
| for (int count = 0; count < m_listSize[index]; count++) | ||
| { | ||
| if (((endX < m_list[index].GetMaxX(count)) && (endX > m_list[index].GetMinX(count))) && | ||
| ((endZ < m_list[index].GetMaxZ(count)) && (endZ > m_list[index].GetMinZ(count)))) | ||
| { | ||
| CollisionFound = true; | ||
| } | ||
| } | ||
| return CollisionFound; | ||
| } | ||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1,90 @@ | ||
| // collsion.h | ||
| // Header file for the collision class | ||
| // | ||
| // | ||
| // Shay Leary, March 2005 | ||
| //-------------------------------------------------------------------------------------- | ||
| #ifndef COLLISION_H | ||
| #define COLLISION_H | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| #include "AABB.h" | ||
| #include "AABBLinkedList.h" | ||
|
|
||
| //-------------------------------------------------------------------------------------- | ||
|
|
||
| class Collision | ||
| { | ||
| public: | ||
|
|
||
| Collision() {} | ||
| virtual ~Collision() {} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Set Methods | ||
| //---------------------------------------------------------------------------------- | ||
| // sets initial co-ordinates of bounding boxes (these set the co-ords is AABB, the array, | ||
| // the values for the list are copied from the array using CreateLinkedList). | ||
| void SetAABBMaxX(const int & tempIndex, const double &tempX) {m_AABB.SetMaxX(tempIndex, tempX);} | ||
| void SetAABBMinX(const int & tempIndex, const double &tempX) {m_AABB.SetMinX(tempIndex, tempX);} | ||
| void SetAABBMaxY(const int & tempIndex, const double &tempY) {m_AABB.SetMaxY(tempIndex, tempY);} | ||
| void SetAABBMinY(const int & tempIndex, const double &tempY) {m_AABB.SetMinY(tempIndex, tempY);} | ||
| void SetAABBMaxZ(const int & tempIndex, const double &tempZ) {m_AABB.SetMaxZ(tempIndex, tempZ);} | ||
| void SetAABBMinZ(const int & tempIndex, const double &tempZ) {m_AABB.SetMinZ(tempIndex, tempZ);} | ||
|
|
||
| // sets the actual world co-ordinates | ||
| void SetWorldX(const double &tempX) {m_worldSizeX = tempX;} | ||
| void SetWorldZ(const double &tempZ) {m_worldSizeZ = tempZ;} | ||
|
|
||
| // set number of bounding boxes | ||
| void SetNoBoundingBoxes(const int & tempSize) {m_AABB.SetNoBoundingBoxes(tempSize);} | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
| // Returns Methods | ||
| //---------------------------------------------------------------------------------- | ||
| // returns co-ordinates of bounding boxes | ||
| double GetAABBMaxX (const int & tempIndex) {return m_AABB.GetMaxX (tempIndex);} | ||
| double GetAABBMinX (const int & tempIndex) {return m_AABB.GetMinX (tempIndex);} | ||
| double GetAABBMaxY (const int & tempIndex) {return m_AABB.GetMaxY (tempIndex);} | ||
| double GetAABBMinY (const int & tempIndex) {return m_AABB.GetMinY (tempIndex);} | ||
| double GetAABBMaxZ (const int & tempIndex) {return m_AABB.GetMaxZ (tempIndex);} | ||
| double GetAABBMinZ (const int & tempIndex) {return m_AABB.GetMinZ (tempIndex);} | ||
|
|
||
| // returns number of bounding boxes | ||
| int GetNoBoundingBoxes() {return m_AABB.GetNoBoundingBoxes();} | ||
|
|
||
| // returns TRUE if a collsion occurred | ||
| bool Collide (double endX, double endY, double endZ); | ||
|
|
||
| // reads the BB info from AABB (dynamic array) and creates a Linked List | ||
| // containing BB data | ||
| void CreateLinkedList(); | ||
|
|
||
| private: | ||
| // initially stores BB info in AABB (dynamic array) before copying to Linked List | ||
| AABB m_AABB; | ||
|
|
||
| // lists to store bounding box info in each quadrant | ||
| AABBLinkedList m_list[4]; | ||
|
|
||
| // Stores the list size of each linked list | ||
| // Set to 4 has the world is split into 4 quadrants | ||
| int m_listSize[4]; | ||
|
|
||
| // stores world co-ordinates | ||
| double m_worldSizeX; | ||
| double m_worldSizeZ; | ||
|
|
||
| // checks if collsion occurred (called from Collide) | ||
| bool CheckCollision(int index, double endX, double endY, double endZ); | ||
|
|
||
| //---------------------------------------------------------------------------------- | ||
|
|
||
| // Privatised copy constructor and assignment operator | ||
| Collision (const Collision &coll) {}; | ||
| Collision &operator = (const Collision &coll) {}; | ||
| }; | ||
|
|
||
| #endif | ||
| //-------------------------------------------------------------------------------------- |
| @@ -0,0 +1 @@ | ||
| ML5ML5ED/ED/ljJljJ��p��p��c��c[Y<[Y<][>][>`^@`^@b`Ab`AdbCdbCecDecDgeEgeEhfGhfGigGigGjhHjhHjhIjhIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiIkiISQ9SQ9ED/ED/caCcaCwuWwuW��p��pjiRjiRJI3JI3JI3JI3JI3JI3JI3JI3JI3JI3JI3JI3��[��[��[��[��[��[��[��[��[��[��[��[��[��[��[��[��[��[��[��[��Z��Z��Z��Z�Y�Y}W}W}{V}{V{yU{yUxvSxvSusQusQrqOrqOonMonMlkKlkK |
| @@ -0,0 +1 @@ | ||
| caAcaAcaAcaA |
| @@ -0,0 +1 @@ | ||
| ��t��_��`��y��l�uR��u��t��f��j��d��^��l��l��j��r��o��\��f��d��c��r��c��`��r��y��k��h�����r��w��x��l��g��b��b��X��Q��h��k��k��x��p��_��h��j��^��c��b��m��s��k��e��_��c��r��a��u�uR��l��y��`��_��t�}T��`��l��W��]��]��^��`��v��j��j��k��Z��a��������u��p��p��Z��V��f��^��]��e��i�_��`��q��x��]��|�]��a��`��f��[�{L��b��v��d��X��`��e��p��j��\��f��t��x��e��d��d��c��a��g��g��^��]��]��W��l��`�}T��t��c�zX�X��b��i��\��c��_�zU��f��t��o��l��i��a��d��j��b��g��z�����s��f��V��f��^��]��d��h��u��p�}W��^��Z��d��h�U�yT��h��e��Z��^��j��f��^��g��s��o��c��U��c��i��j��g��_��p��\��i��b�X�zX��c��t��c�yS�z\��s��t��i��c��^��i��f��^�U��]��j��c��^��l��l��j��r��o��\��f��d��c��s��c��`��r��y��k��i��i��r��c��^��p��k�{\��e��l��h��_��b��\��Z��j��g��W��V��c��i��h��t��x��i��e��c��i��t��s�z\�yS��c��d��|��f��Z��[�T��f��h��q��q��a��a��l��j��j��k��[��a��������u��p��p��[��V��f��^��]��e��i�_��`��h��t�����}��o��e��e��r��q��b��u��j��]��_��v��r��m��m��b��i��f��k��b��^��r��j�T��[��Z��f��|��d��h��h��a��b��[��b��]��i��e��i��q��|��w��h��p��p��V�}V��o��o��c��b��a��d��e��j��l��l��c��i��b��a��Z��^��a��`��l��h��b��j��p��`��_��b��b��]��i��i��f��r��x��o��V��^��Z��d��e�|R��b��[��b��a��h��h�y[��o��x��w��m��u��e��s��s��t��m��s��j��f��`��^��g��^��[��g��e��f��g��m��i��[�qG��b��b��l��b��[��^��g��h��\��U��^��f��f��_��g��r��r��^��d��]��^��b��q��j��j��]��b��a��e��Z�{J��u��o��w��x��o�y[��g��u�����}��x��j��_��h��t��l��c��j��k��g��d��e��p��d��X��c��e��f��c��Z��W�yW�tO�~Z��t��m��g��i��u��m��e��b��Z��k��w�����p��j��k��g��b��X��d��p��e��d��g��l��k��d��m��u��h��_��j��x��}�����u��g��c��g��|��b�}]��`��q��m��f��\��^��c��o��g��b��i��s��j��[��b��m��o��p��g��f��t��t��c��s��c��b��r��v��b��^��r��z��j��c��g��_��a��r��q��a��[��j��s��i��a��g��o��c��^��\��f��m��q��`�}]��b��|��g��c��a��d��^�zT��^��q��s��i��i��b��^��a��b��Z��^��k��c��X��^��e��k��p��k��g��b��g��o��_��]��l��b��b��_��`��g��m��x��p�W��`��X��i��v��m��d��^��X��c��k��^��Z��b��a��^��b��i��i��s��q��^�zT��^��d��a��c��r��_��i��a��l��v�����q��c��f��m��f��f��l��k��\��R��X��[��d��b��S��]��g��g��_��j��t��y��s��f��X��g��s��b��[��j��b��c��a��g��b��`��]��X��R��\��k��l��f��f��m��f��c��q�����v��l��b��j��_��r��c��t��r��k��l��b��h��g��k��c��^��q��k�yZ�c��l��g��a��b��_��X��b��e��c��_��^��e��h��f��t��d��m��t��c��e��v��k��d��l��d��\��b��j��b��a��Z��_��b��a��g��l�c�yZ��k��p��^��b��k��g��h��c��m��l��r��t��j��i��f��q��w��o�~W��^��Z��d��f�~T�{U��k��f��V��\��i��g��^��[��b��o��`��`��i��k��X��]��^��l��k��s��o��`��^��\��k��i��a��^��l��b��[��^��g��i��\��V��f��k�{T��b��r��t��d��_��`��i��a��[��_��m��`��[��^��`��p��k��j��]��`��a��d��\�{L��`��v��e��Z��b��e��m��u��i��g��m��d��a��^��k��m��j��i��g��`��o��g��j��j��o��k��^��a��d��m��g��i��u��m��e��b��Z��e��v��_��b��g��j��d��f��d��Z��V��a��i��b��a��q��g��_��c��f��k��o��i��a��a��W�}L��^��d�j��z��r��^��b��v��r��b��c��m��e��[��`��r��}��i��d��d��w��e��i��}��r��`��[��e��m��c��b��r��v��b��^��r��z�j��e��^��X��^�Z��^��h��i��f��d��e��e��p��k��z��e��^��c��w��x��q��p��e��d��`��^��q��r��u��w��m��g��`��_��b��b��l��s��l��e�_��b��s��a��j��q��z��j��b��s��b�_��e��l��s��l��b��b��_��`��g��m��w��u��s��q��b��f��c��[��]��b��`��i��e��^��r��b�x\�yX��f��o��x��x��c��`��c��b��p�����������m��[��b��s��g��X��f��s��y��e��d��d��d��a��g��g��l��h��m��k��g��g��a��d��d��d��e��y��s��f��X��g��m��m��l��b��a��a��v��o��e��c��a��}��s��t��]��U��d��`�y[��h��Z��j��l��r��i��^��^��d��i��t��p��u��b��^��k��v��e��d��u��o��e��U��c��h��j��g��_��p��p��d��g��p��p��_��g��j��h��c��U��e��o��u��d��e��d��p��u��Z��Z��l��k��`��m��q��w��x��^��`��e��e��h��i��l��m��\��f��h��m��i��e��`��d�xQ�vT��b��_��`��g��u��h��`��h��i��X��W��b��j��h��t��x��i��d��j��a��h��j��d��i��x��t��h��j��b��W��X��j��h��`��`��h��`��_��d��s��u��o��e��e��d��m��h��j��l��g��^�h?��[��\��u��k��g��b�~^��m��k��h��]��[��d��Z��g��t��`�Z��e��j��_��U��_��f��f��_��f��r��r��h��t��m��d��j��k��g��d��f��_��f��f��_��U��_��j��e��[��a��f��s��y��c��d��m��b��\��Z�U��[��V��^��c��^��`��c��W��d��\��X��X��Z��r��s��t��r��]��`��m�~a�zV��]��h��r��o��o��l��h��c��k��p��`��_��a��m��f��\��^��c��o��g��b��`��p��k��c��h��l��o��o��r��h��\�zV�~`��l��c��`��Z��V��^��a��k��_��]��[��]��l��f��s��l��b��W��_��\��W��k�wW�{X��`��X��c��f��^��c��l��p��h��b��p��o��e��e��s��r��c��u��i��i��i��a��^��`��b��Z��^��c��r��s��e��e��o��p��b��h��p��l��d��^��d��j��i��d��b��e��f��b��^�}[��]��l��x��s�{T��|��q��e��f��_��k��|��c��b��r��i��]��d��e��]��f��l��`��^��g��c��Z��X�xV�qL�[��r��l�����q��b��f��m��f��f��l�[�qM�xV��X��Z��c��g��]��`��l��h��_��d��d��]��e��f��c��e��g��l��l��t��c�}`��i��t�wR��p��o��g��g��h��y��s��q��x��z��m��c��`��c��d��f��r��w��o��d��f��m��i��[�sH��c��b��_��i��i��w����i��i��_��b��d�tJ��[��i��m��f��b��k��s��r��d��]��e��f��c��e��m��k��d��u��c��r��s��e��e��o��o��\��\��l��w��l��p��`��W��`�vU�tZ��q��j��V��b��v��q��j��s��q��_��b��b��c��m��o��m��d��d��k��m��e��j��m��l��d��b��k��k��j��d��c��c��b��u��|��q��g��d��d��b��d��b��`��a��\��s�[�qL�xV��X��Z��c��g��g��p��l��a��b��h��m��m��s��h��c��i��o��h��e��f��m��c�~T��^��l��m��[��[��u��p��d��d��Z��V��Z��S��W��`��\��^��d��\��]��g��V��[��p��r��r��v��m��l��u��b��S��b��b��d��i��m��b��c�sH��[��i��m��f��d��b��b��l��s��k��e�_��c��f��[��_��b��k��c��_��h��l��e��^��b��r��t��d��_��`��i��a��[��`��m��`��]��[��]��o��j��p��e��d��s��d��d��g��_��`��W�{_�j`�x_��d��]��^��_��i��p��g��d��m��o��m��c��b��b��_��f��s��y��e��d��d��d��a��r��e��b��c��]��Z��c��k��]�Q��]��b��g��j��d��f��d��Z��V��a��h��s��z��q��d��^��f��u��b��h��`��l��g��e��a��d��h��f��l��z��o��g��x��|��s��k��o��e��d��d��p��u��[��[��m��k��t��o��e��U��c��h��j��g��o��a��j��o�t[��q��j��j��^��Z��Z��X��^�Z��^��h��i��f��d��e��e��k��x��p��_��h��i��^��e��f��l��b��g��`��U��Z��`��r��v��d��a��j��p��x��w��g��h��r��[��a��i��`��_��d��s��r��i��X��W��b��j��h��t��x��[��^��a��h��c��i��o��g��k��h��i��b��f��c��[��]��b��`��i��e��^��d��X��`��e��p��i��\��d��e��h��k��`��Z��b��l��c��h��k��S�vF��c��t��j��k��c��c��Z��a��V��Z��d��f��d��i��g��_��U��_��f��f��_��f��r��\��^��`��d��_��a��k�xG��]��_��d��v��o��e��c��a��}��s��s��]��h��u��m��d��k��l��g��d��a��a��g��U��W��d��d��j��s��a��^��`�zJ�{Q��f��g��l��g��d��g��e��d��f��i��h��^�Z��^��o��l��h��c��k��p��`��_��h��b��~��e��d��m��f�����l�c��v��k��`��m��q��w��x��^��`��e��o��f��\��^��c��o��g��b��e��g��f��h��h�������v��k��q��q��o��s��f��W��_��d��g��[��g��e��i��`��c��]��[��c��f��p��o��e��e��s��r��c��u��`��m��g��\��c��k��l�zI��_��^��c��v��o��e��e��d��m��h��j��l��i��i��b��^��a��b��Z��^��h��f��b��w�����u��i��d��d��e��f��p��x��u��s��u��~��|��q��v��]��t��s��}��a��c��e��o��g��c��Z��X�xV�qL�[��s��_��]��c��^��l��h��`�xI��S��l��i��d��m��b��\��Z�U��[��V��]�����q��c��f��m��f��f��l��o��k��h��]�zS��g��s��o��m��i��a��f��i��b��f��y��d��c��f��g��e��`��^��x��w��q��l��`��d��f��m��i��[�sH��c��b��_��d��l��v��j��j��Z��d��e��v��r��`��Z��V��^��a��k��_��]��[��]��e��f��l��i��b��a��e��p��m��d��i��e��^�~U��]��k��b��`��l��l��k��t��e��U��c��o��i��g��]��_��g��d��j��j��w��_��b��b��c��m��o��m��d��b��o��f��t��b��h��`��o��z��k��e��h��d��b��e��f��b��^�}[��]��l��d��e��h��c��`��a��b��g��c��Z��q��q�~a��b��p��i��j��i�}X��a�������V��b��i��g��r��r��s��|��`��Z��h��y��}��k��m��[��[��u��p��d��d��b��q��o��[��q����i��d��i��i��e��e��f��c��e��g��l��l��t��c�}`��i��u��g��f��a��s��Z��X��]��i��d��i��q��}��v��e��p��o��U�]��j��f��^��f��f��h��j��t��`�~V��g��m��d��\��e��r��s��d��_��`��i��a��[��e��j��[��U��Z��c��d��X��Z��_��a��b��_��g��d��d��s��d��e��q��v��h��j�xZ��r��z��e��d��e��e��s��s��t��m��s��h��f��`��]��d��p��u��s��q��l��p��b��e��\��e��d�}U��i��e��f��h��g��i��d��f��d��Z��V��a��`��a��c��b��[��X��_��p��x��r��o��r��s��p��[��V��g��]��\��f��j��_��`��g��v�����`��e��g��^��h��t��k��e��k��k��g��d��f��j��j��q��q��e��h��o��g��e��d��k��l��W��a��e��j��k��^�Z��^��h��i��f��d��e��]�sT�s]��q��j��S��a��y��v��o��x��u��b��c��c��d��j��k��k��b��e��m��m��b��h��z��T��`��f��r��m��d��Z��_��c��o��f��c��i��o��p��h��^��\��c��i��l��`��h��o��o��^��`��j��t��c��f��c��[��]��c��`��i��e��s��y��|��m��d��b��d��d��f��p��t��k��b��f��m��i��[�sI��c��b��^��h��i��a��e��\��a��\��`��s��i��j��c��_��a��a��Z��_��k��^��^��m��f��^��a��_��\��Z��h��g��W��\��d��h��s��p��o��e��c��a��~��s��t��]��d��b��r��h��]��d��d��^��g��l��`��]��g��c��Z��X�xV�qM�[��s��m��g��c��d��s��_��i��c��l��v�����q��c��f��m��f��f��l��k�U��g��~��e��d��m��f��d��l��k��a��R��[��X��`��^��e��`��m��q��w��x��^��`��e�wW�{X��`��W��c��f��^��d��l��p��h��b��p��o��e��e��s��r��c��u��i��]��_��v��r��l��l��b��i��f��j��b��^��r��j�xX��b��k��g��a��h��g��\��c��k��l��c��`��e��k��a��i��Z��`��^��h��c��W��d��[��W��X��Z��r��s��t��r��]��_��m�~`�zV��\��h��r��o��m��k��h��b��j��p��`��_��b��b��]��i��i��f��r��x��o�V��^��Z��d��f�|R�{V��l��e��V��]��f��c��^��l��h��`��b��]��Z��k��h��X��W��c��j��h��[��\��u��k��g��b�~^��m��k��h��]��[��d��y��r��f��`�[��\��_��w�����u��j��e��e��e��f��s��^��d��]��^��b��q��j��j��]��b��a��f��[�{K��a��t��b��^��e��e��l��v��j��k��Z��S��W��b��m��_��V��`��f��e��`��l��m��\��f��h��m��i��e��`��d�wP��u��l��e��k��k��u��h��[��c��]�zS��g��s��o��m��i��a��j��e��j��r��g��^��e��h��r��m��a��f��]��T��]��c��s��z��q��d��^��f��u��b��h��a��Z��_��j��q��o��l��i��c��l��g�y[��h��Z��j��l��r��i��^��^��d��j��e��[��_��c��o��k��v��c��^��i��e��^�~U��]��k��b��`��`��p��p��z��d��]��f��y��l��g��b��b��W��Q��h��l��k��x��p��_��h��i��^��e��f��l��j��b��a��e��p��m��d��d��s��b�x\�yX��f��o��x��x��c��`��c��b��q��k��c��`��`��`��b��s��e��h��q��q�~a��b��p��i��j��i��i��h��m�uX�yZ��g��q��|�]��a��`��f��[�{L��b��v��d��X��`��e��p��j��\��d��e��h��c��a��`��a��g��c��[��X�wT��c��z��e��^��c��w��x��q��p��e��d��`��`��a��j��h��h��o��g��]��i��d��i��q��}��v��e��p��o��i��a��i�wU��g��W��k��p�}W��^��Z��d��h�U�yT��i��e��Z��_��j��f��^��g��a��`��g��c��g��p��i��d��g��m��i�[��u��q��g��_��c��f��k��o��i��a��a��W�~L��_��e�j��z��r��^��e��s��s��t��m��s��h��f��`��]��_��d��p��m��k��]��g��i��i��s��d��^��p��k�{\��e��l��i��`��b��\��Z��k��e��g��f��a��d��i��`��b��d��b��d��j��o��[��^��`��p��k��j��]��`��a��d��\�{L��`��v��e��[��b��e��^��h��t��k��e��k��k��g��d��f��d��f��e��w��Z��j��q��q��e��h��o��g��e��d��k��e��k��k��Z��S��W��b��m��h��f��c�qJ�rH��b��f��k��s��Z��W��g��W��j��i��f��q��w��o�~W��^��Z��d��f�~T�{U��k��f��V��\��h��r��o��e��[��_��c��o��f��c��i��u��b�uQ��s��W��p��h��^��\��c��i��l��`��h��o��\��c��h��a��Z��_��j��q��o��l��i��c��l��g��m��d��_��^��k��p��k��t��r��k��l��b��h��g��k��c��^��q��k�yZ�c��l��g��a��b��t��i��k��c��_��a��`��X��_��k��i��c��\��[��l��^��m��f��^��a��_��\��Z��h��g��d��e��f��l��j��b��a��e��p��m��d��d��s��a��c��m��e��[��`��r��|��c��r��_��i��a��l��v�����q��c��f��m��f��f��l��k��\��R��X��\��_��`��j��h��h��o��d��f��X��g��m�}S��}��g��~��e��d��m��f��d��l��k��`��c��d��e��h��c��a��`��a��g��c��[��X�wT��b��o��s��l��e��_��b��r��a��d��^�zT��^��q��s��i��i��b��^��a��b��Z��^��k��c��X��^��d��m��t��j�{[��d��l��l��c��h��l��o��\��m��h��g��\��c��k��l��c��`��e��k��c��a��a��g��c��g��p��i��d��g��m��i�[��u��x��e��d��d��c��a��g��c��g��|��b�}\��`��q��m��f��\��^��c��o��g��b��i��s��j��[��a��q��q�e�wg��_��c��h��\��g��j��g��\��b��f��c��^��l��h��_��b��\��Z��k��_��e��g��f��a��d��i��`��a��d��b��d��j��o��c��U��c��i��j��g��_��g��u�����}��w��j��_��h��t��l��d��j��l��g��d��e��p��d��X��b��g��l��k��g��d��d��\��_��h��f�|O��V�����|��c��b��g��b��Z��h��p��g��f��g��h��f��c�qJ�rH��b��f��j��s��Z��X��g��X��W��c��j��h��t��x��i�y[��o��x��w��m��t��d��s��s��t��o��s��j��f��`��^��g��^��[��g��e��h��e��a��q��j��d��p��k��d��X��]��c��h��`��`��e��`��c��l��i��Z��c��j��a��V��\��c�~\��e��x��l��e��d��e��s��V��`��f��e��`��g��q��q��h��h��a��b��k��u��b��^��i��d��^�~U��]��l��c��`��`��p��p��|��d��]��f��y��g�yS�uV��i��c��a��d��i�_��a��S��l��e�\��d��g��r��l��m��r��q��j��o��}��r��f��h��b��a��e��g��l��l��h��c��l��p��`��_��a��d��|��f��X��b��s��e��h��q��q�b��c��p��i��j��i��i��h��m�uX�yZ��h��r��}�}N�{N��m��s��V��W��d��i��]��m��]��b��e��_��c��l��i��Z��m��d��a��a��`��d��e��`��b��`��T��`��f��b��m��d��d��s��q��c��u��i��c�yS�z\��s��t��h��c��^��i��f��^��U��]��j��d��^��y��m��g��b��b��W��P��g��l��l��x��p��_��i��j��^��c��b��o��s��l��e��_��c��r��a��e��Z��V��_��k��f�~b��u�����t��a��\��a��k��c��[��X�xU�qK��[��s��l��t��c�zX�X��b��i��\��c��_�zT��f��s��o��m��i��a��|�]��a��`��f��Z�{L��b��v��d��X��a��e��p��j��\��f��t��x��e��d��d��c��a��g��g��c������uM�zH��_��^��b��r��j��f��e��Z��V��g��m��i��[�vK��d��b��^�}T��`��l��W��]��]��^��`��u�����v��j��d��d��d��f��p�}W��^��Z��d��h�U�yT��i��e��Z��^��j��f��^��g��t��o��c��U��c��i��j��g��_��p��h��k��c��Z��h��l��`��_��]�~Z��]��c��c��b��d��b��d��j��k��k��b��e��t��_��`��y��l�uR��u��t��e��f��|�����t��j��o��o��i��i��r��d��^��p��k�|\��e��l��i��`��b��\��Z��k��g��X��W��c��i��h��t��w��i��d��m��l��x��z��~��h��a��v��j��a��m��q��r��j��r��Z��X��h��]��\��f��l |
| @@ -0,0 +1 @@ | ||
| �]�xW�yP��]�zZ�tS�b�{Z�wQ�{X�~c��l��\�sJ��`��e�U�xT�yX�rR�tY�tY�wW�~a�tU�{\�|Y�}W��m��g�zR�z_�~W�vN�xV�z`�zY�rN�uR�yS�zZ�y]�~]����������sS�qM�tO�uW�qO�rN�{`�rR�xQ�}S�wW�hL�xY�wV�zU��e�mG��e��Y�zU�~U��d��f�sR�c��i�zY�wT�sU��c��b��Y�|\�pN~hH��d��^�{W�{\�wQ�sQ��d��e�}\�{X�qO��j�y\��^�}V�zU�nK�zY�a�y\�vQ�wT�vQ�z[�pU��a����������qS�tP��]�{]�wQ��[�x`�`�zT�{W�~e�t`�wZ��m�jG�{V�zS�wR�xP��^��W�rO�tV�vS�xZ�~f�~]�{V�qR�tS��^�vK�yW�~\�rL�}W�|V�|Y�{V��S�zS�~[�]�~X�zX�tW��[�|]��c��U�yN�wP�{U�{T�pL�xQ�|[�pJ�tR|hM�vX����������sQ}jD�vM�vS�}X�wN�x\�pO�qP��l��s�~i�tT�Y�lP�lL��_�~T�|Q��_�i@{d@��d��c�uT�v\�}]�|X�yY�sO�yR�uN�}V��`�zO�}X�|]�zT�zL�}N�uM��X�wT�{U��]�|`�}N�}X��j�uT�xP��Z�}X�yP�rL�vS�zY�mI�vS�mQ�lK����������wR}nL�wS�zT�rQ�rL�|]�|[jG�sT��o��i�zV�tN��f�qM�xL��l��\�^�sP�lJ��g��`�~Z�~^�~X�Y�`�{Z�yT��g�~Y��[��X��a��`�tK�yM��]�zP�yQ�yS�tL�pJ�z[�U��[��l�vo�}W�}[��W�vR��e�z]�nL}fG��a��a~hJ����������tO�{a�|W�yT�pG�yR�uU�xT�sQ�nP��k�b�tP�vP��h�{W�}R��a�zN�|Y��^�uN��Y�X�[�~X�vK��Z��h��b�Y��`�|W��Y��\��e��d�zU��]�xV�uH�vM��d��a��Y�rL��p��U�{T�~g�}U�~Y�zN��[�a��`~c;v`>�~a�z[�pN����������rN�wa�vQ�zV�wL�Z�|Z��^��d�tT�^��i�{W�sJ��^��^�~SzjH�xP��X��c�}Q��Z�^�}V�}M��Y��m��e��Y��c��\�~V��_��W��[��g��c��a��a�}W��]��e��a��[�~V��i��S�~V��i��^�X�uK�|T�~W��_�U�nM�pS�}[�yQ�����������e�qj�xR�{Z�V�wR�~Z��i��g��e�xT�o@�qI��`�Y�yR�T��k��h��[��^��Z��d��c�vM�{O��f��k��Y�~X��^��Y��`��g��W�~X��a��Y�{Q��\��b��_��_��[�{S��j��h��^��\�yS��[��Z�yV�wO��X�}W�U��c��d�zX�~V�����������e�rR�uO��Z�~Y�{R��_��r��^��b��^�P��\��h��\��g��^�yX��a�|Z�wN��b��Z��c��j��^��a�vS�nL��j��c�i@��\��^��Y��Z��W�~O�~U��X��c��R�X��]��]��a��i��`��^��l��]��\�vP��f�Z�Z��_�yO�zV�|W�|V����������`��U�xN�xQ�~X��X�}W��e��^��\��k��\��\�}V��`�~W��^��i��j��[�{R��Y��^��_��]�}P��\��a�yP��\��[�iB�~Y��[��[��b�{R�zK��Z��[��\��T��d��_��Z��`��_��g��^��h�}R��Z��Y��]��c��d��\�~T�]�|U�zS�����������]�~W�{U�pM��]��g�zS�|X�~X�{R��d��X�}R��Z��p��_�Y�{[��j��\��^�U�Y��^��]�|S��[��f��T��]��b��\��_��`��a��e��Z�|S��Y��e��_��X��b��h��i��_��b��\��\��t��_��^�Z��]��`��^��Y�yT�`�|Y�zV����������zR�|a��Y�zR�~[��f��e�\�|U��U��\�Z��W��d��m��c��\�yX��f�V��_��Z�|M��Z��^��l��]��`��\��f��e��_��`��Y��^��_��a��d��a��d��f��Z��\��a��e��_��[�{N��]��v��\��c��b��l��h�{T�~W�zV�{X�|X�}[�����������]��h��U�vM��W�}W��`��c��X��Z��c�yU�yO��_�}a��b��]��^��Z�wS��c��m��Y��[��e��c��Z��]��`��i��h��a��^��Z��]��^��[��c��e��\��]�W��U��^��j��W��O��^��r��m��W��^��a��m��q�{S�|W�{X�yV�wP��\����������|]�{T��c�|R��T�oJ�nP��\��Y��f��d��b��h��b��b��\��]��d��c�zV��k��z�~[��a��q��_��Y��b��Z��^��j��f��d��`�}U��W��n��o��W��U��^��_�W��j��l�_��|��m��_��k�}O��]��j��f��m�zR�sH�|V�}Y�~W�vV����������sM�|T�ye�tY��j��`�tY��\�Q��^��_��b��q�[��\�{N��^��l��o�}X��[��n�|Y��_�}^��[��b��i��Y��Z��c��[�~S��W��c��b��_��e��\��`��w��f��a��j��n��c��x��d�}[��m��^�rI��Z��`��]�yY�}W�X�~X�~W�sQ����������tM�yU�zg�q^��Z��[��a��b��U��X��\��i��k��f��O��\��q��f�zZ��Y��W�w[��^��k�wU�kA��]��`��Z��[��X��P��U��_��i��a��W��^��_��a��`�W��i��c��i�xV�|Z��e��b��p��k�qB�l>�}W��d�lT��i��X�yQ�{R�zV�����������f�}^�i��m�wO�|L��]��a��b��`��]��Z��_��f�~P��h��m��[�}a��e��X��_��]��v�~\�jC�Z��\��\��c�|S�{L��[��c��^��X��]��^��V��Z�xN��W��h��c��]�{N�vQ��e��_��h��g��W�zJ�xZ��oz_U��`��[��W��[��]����������a��_�}`��e�}W�zQ�~W�zR��Z��j��h��V��b��k��`��l��_��\��w��a�sA��d��Y��h�{U��\��_��`��a��e��Z�|S��Y��X��Y��i��j�}W��O��`��d��d��b��_��V��h��b��Y��Z��^��i��U��b��l��a�oT�ya��d��d��^��a����������}V��_�Z�R�Z�}^�~X�wI�xO��a��\��U��b��o��c��`�}U��W��s�{S�nF��X�~Z��c�}O��_��`��Z��^��_��a��d��b��S�}Q��q��s��[��^��d��e��X��\��]��Y��i��c��[��b��]��i�}X��_��h�\��M�sj��o��e�}S�~Z����������yW�zZ�|S��V��a��\�|U�}N�~U�zR�zP��\��V�~X�~S��W��c��c��q��\��x�}O�~Z��j��Z��a��^��Z��]��^��\��d��e��^��]�{d��l��m��e�y[��_��S��_��`��_��^��b��d��f��\��c��j�}Z��V��^��U�wf��h��^�{P�yT����������{V�uL�xR��i��i��S�{P�}S��[�X��Z�{V��[�~V��U��_��i��a��e��d����~S��]��k��c��`��X��\��\��]��U��^�{^��b��o�}e�z\��Z�tO�qQ��_��Z��h��d��a��o��i�~V��h��\��n��a��c�~P�Z�~T��f�yV�~U��Z��a�����������f��Y�}U�e�]�P��W�}V��d��h��_��j�[��c��[��c��^��X��f��a��\��^��f��f��\��_��d��d��Y��`��h��d�tU�rM��[��a�V�tD�uK��c��f��Z��\��d��l��v�}[�wN��l��a�����[��Y�xL��W��\��d�}W�Y�}V��`�����������`��e��U�zV�{[�W�}X�yX��l��i��c��j�{X��n��X��W��Y��i��]��i��`�|Z�~S��e�~S��`�~S��^��d��a��a��]��d�xN�tE�zJ�}M��T��_��k��_�X��X��^��f��j�wZ��W��`��m��w��[�~Q�|V��[��Y�wP�~W��`�wM�zW����������{W��j��_��W��a��a�`�]��`�{X��b�~_�~Y�|[��a��S�}Q��q��b��X��`��k��b��k��b��i�U��Y��e��S��Y��^��i��a��T�P��V��_��]�W��\��\�~S��d��m��b��j��^�sL��{��`�zN��W��]��]��Y�wK�zX�\�rL�{W����������rH�|X��e��`�~Y�zS�X��W�|O��V��h�yW��i��j��e��^��]�{d��p��`��Z�|\��e��`��e��a��[��\��]��U��e��`�W��]��_��[��_��Z�~S��[��j��c��]��m��l�}]��j��b�zV��o��`�wL��b��X��a��g��[�~^�rO�iJ��d����������zU�|W�}_�zY�zV�}V�}R�{Y��W��^��{��^��c��k�{^��a��o�}d��m��c��\�yX��\��]��\��S��X��e��_��X��b��h��]�}S��Y��[�~Z��[��W��c��{��b��f��a��l��b��S��]��a�Z��^��^��_��b�{V��Y�}R��_�f?ycA��c����������zZ�zW�xX�rO�xS��^��Z�vX�uN��Z��o��^��[��^�tU�rM��[��a�}a��b��]��^��X�xU��Y��[��a��d��f��Z��\��a��l��W�~Z��`��f�zV�xO��_��o��l��k�}W��^�}V��\��f��d��^��_�X��\��\��^��Z�zQ��_��W�pN�sU����������{\�zW�pR�uT��_��`��a�`��g��a��c�V��a��^��d�xN�tE�zJ��b��\��]��e��^�{^��^��`��e��\��]�W��U��^��b�vP�xV��e��k��c��h��b��e��Y��_��`��^�~Q��`��i��h��`��]�X��[��[��X��d��Y�|V��U�|^�{Q����������yY�wT�tU��e��c�vQ��Z�wQ��n��q�|R�yM��e��h��i��a��T�Q��\�{N��^��l�|[��e��Y�[��W��U��^��_�W��j��b��i��u��r��a��c��q�[��\��U��Y��^��]�|S��[��^��e��V��Z��[�zS�|T��j��_�~S�{X�|R�{Y�xM����������vQ�|Z��e��p��^�{S��`�{X��d��i��Z�T��Y��v�W��]��_��[��P��\��q��h�~V�~L��Y��\��\��`��w��f��a��j��`��d��j��_��^��j��k��e��b��Z�|M��Y��^��l��Z��Z��_��R��_��^��`��_��\��d�Q�|_�}\�~Y�}T�����������a�|Z�tU�~]��^�|U��k��i��^��U��]��`��Z��}��\�}S��Y��[�~Q��h��m��[��f��Z��a��u��_��a��`�W��i��c�|V��P��`�|V��W��[��_��e�|X�|U��s��}��s�zZ��Y��[��_��Z��g��c��g��^�T�zR��U�`�w\��_�zR�����������a��]�{]�{Y��[��d�}[�]��W��Y��e��_�W��m��k��W�~Z��`��`��m��_��\�V�xX�y\�����[��f��v��e�~P��S��d��`�rS��]��`��W��b��k��l��^��a��o�~k�~_��\��b��f��Y��[��b��\��U��Z�zP�}L�{^��p�{Y�vQ����������|Y��_��l��j��c��g��Y�yN�}V��m��m��V�S��a��b�vP�xV��e��d��`�}U��W��b��b��V�}O�~U�~U�vL�yT��l��p��f�pN�nQ��s��k��V��b��o��]��Z��[��`�qS��`��a��e��_�~V��V��[�}W��f��f�zR�yH�sY�i�xU�xS����������|V��[��c�{X�yU��`��i��\��Y��i��a��S��Z�|Y��b��i��u��q�~S��W��c��c��]��]�}Q�uH��`��h��f��U�nJ��^��i��b��f��i��c��]��V�~X�~\��b��f�|Y��c��n��^��_��\��Z�}T��d�zO��m��o�|U�{O�}`�x\��c�~[�����������a��^�z]�zX��[��a��b��i��Y�~Y�_��Z��[�xX��d��n��V��p��U��_��i��b�|P��Z��]��_��c��e��`��\��[��_��]��Z��a��i��^�|W��[�}V��`��a��f�yX��a��b��]��^��j��a��^��l��[�wa�}h��b�vK�z_�}\��r�~[�����������a�|Z�uT�]��]�}S�Z��n��c��Z��e��d��b��b��r��a��q��k��[��c��^��X��O��\��d��a��`��a�zQ��b��n��]��X��b��b��Y��c��l�~[��b��f��W��^��c��o�vY��e��V��z��a��g��_��U��[��^�~U�xO�{X�|R��^�x[����������vQ�|Z��e��p��^�zR��i��j�wT��j��l��Z��\��^��k��]��j��~��Y��W��Z��i��l��b��i��X��U��\��_��d��b��_��V��h��b��Y��Z��_�{X��n��l��[��[��_��j�|\�|V��T��V��d��]�{T��\��[�{W�yP��Y�X�U��d��f����������yY�wT�tU��e��a�xN�y\�{`�|V�{Z�vR��Z��e��V��Y��V�{Y��a��b��S�}Q��q��f�nO�]��U��a��e��]��X��\��]��Y��i��c��[��b��^�~Y�|\�xT��\��d��U��^��m�vT��V�}O��b��X��j��`��Z�xL�~V��Y��`��V�pN�sU����������{\�zW�pR�uT��_��`��^�vU��f��k�lG�i?��e��W��\��W�xX��d��e��^��]�{e�tG�rL��c��]��\��e��h��Q��_��`��_��^��b��d��f��^��i��k�jF�lB��d��V��]��e�~W��X�T��`�~V��j��W��\�}P��^��d��b�e=yc@��c����������zZ�zW�xX�rO�xS��^��[��]��^��k�qO�yS��c��_��l��_��b��r�{^��b��o�}e�vG��`��j��]��X��]��a��Y��h��d��a��o��i�~V��h��^��c��l�qO�zT��c��`��l��e��[��d�xN��e��p�{t��Y��_��Z�zU��i�`�qO�iJ��d����������zU�|W�}_�zY�zV�}U��T��]�Y��]�xO��a��^�{O��\�zO��^��k�uU�rM��[��`��v��r��Z�}`�p`�tT��a��Z��\��d��l��v�}[�wN��l��c��[��^�zQ��b��]�}O��]��`��_��Z�}S��\��o�{X�}T��^��\�~T�wP�{W�\�rL�{W����������rH�|X��e��`�~Y�zU�}U�}S�^��^�~R��e��]�{T��]��_��V��Y��d�xN�tE�zI��k��_��^��d�x^��c��c��X��X��^��f��j�wZ��W��`��n��a��^�S��f��\�}T��]��^��^�}W��U��]��i��Z�R�}T��Z��Y�vP�~V��`�wM�zW����������{W��j��_��W��a��d�|Y�uJ��b��g��[��_��Z��i��_��l��W��\��i��a��S�P��a�|V��a��e��j��m�}Y��\�~T��d��m��b��j��^�sL��|��d��h��\��_��\��i��`��\��[�|O��[��]��e��\��Z�tP��`��h��a�}V�Y�}V��`�����������`��e��U�zV�{[�~W�[�~X��g��f��^��^��[��i��U��~��_��k�W��]��_��[�rS��]��^��`��j��f��X��d��^��m��l�}]��j��b�zV��p��f��i��`��[��[��l��X��_��]��S��f��g��X��f��]�~T��]��f��`�zS�~W��Z��a�����������f��Y�}U�e�]�~P��X��Z��b��d��]��]�\��n��h��s�zO��\��]�}S��Y��[�nQ��u��`��[��Z��]��U��b��h��a��l��b��a�~W��\�~X��h��[��V��d��n��k��[��^��a��Y�]��n��c��m��Y�yN��X�}W�yS��d��a�{Q�yT����������{V�uL�xR��i��i��S�{N�|Q��\�~Y��[��_��h��}��k��`�zS��]��k��W�~Z��`��f��i�zT�zQ�|T��W��Q��m��k�}W��^�}V��^��\�}T��U��k��a��Y��m��q��h��Z��^��^��k��b��[��n�~[��`�}P�}S�zS�qI��f��i�}S�~Z����������yW�zZ�|S��V��a��\�|U�}N�~U�zR�zP�yS��h��z��c�~[��i��_��b�vP�xV��f��a��i��W��]��c�{Q�{K��[��a��^��W��`��l��o��a�xT��a��i��e��i��h�~k��X��b��d��o��e��V�w[��V�_�|P�tG�}Z�{X��^��d��^��a�����������g��e�Z�R�Z�}^�~X�wI�xO��a��\��V�vO�}Z��e��c��i��U��b��i��u��r��b��Y��`��i��l��\�~U��Z��U��[��k��h�[��d��n��Y�yU��e��`��_��o�|q��S��b��s�}^�|L��W�}d��T��b�zT�{S��a��a��d��Y��Y��]�����������]�wU�}`��e�}W�zQ�~W�zR��Z��j��h��_�{O�zT��e��]��n��h��h��_��Z��W��b��Y��W��^��b��d��d��`��O�}T��s��a��Y��h��d��_�sO��]��W��]��r�|i��Q��]��h��]�qB�rA��y�o?��^��`��`��]��[��i�W�zP�zU����������|Q�sN�i��m�wO�|L��]��a��b��`��]��V��i��d��W��Z��}��k��h��]��b��]��c��\��Y��]��[��W��e��e��_��^�xc��a��Y��\��d��k�wY�|W��]��]��Z�}X��]��b��Y�|S��Y��d��^��b��f��`��Y�}T�Z�|V�}V��X�sQ����������}T��_�zg�q^��Z��[��a��b��U��Y��\��X��i��c��\��b��y��c��c��]��f��c��b��e��_��`��`��S��_�x\��d��o�{^��c��Y��X��^��r��f��_��]��[�yL�|Q��\��x��a��c��a��c��e��X��`�yg�{P��X��\�uK�yS�W�vX�����������f��t�xd�tX��j��`�tY��\�Q��^��_��^��a��c��c��e�|Z��e��m��]��h�~V��i�~V��c��e��h��[��_�rS�tN��Y��X�~Z��\�~T��e��]�|X��\��V�}]��c�T�S��j��[��c��e��[�\��V��Z�jQ�~S��`��c�~^�tV�yP�{U����������a��x��c�|R��U�oK�nP��\��Y��f��c��b��p��e�~V��h�yS��e�����c��l�yN�~\�wN��l��c��\��Z��f��d�wM�tE�wE��Y��d��^��n�zT��V��P��a��f�~j��[�}N��T��m��o��W�T��]�~[��_��e�Y��W��]�vd�x`��[�}K����������e��s�zR�pA�oB�rJ��`��c��X��Z��b��k��u�|Z�xN��m��d��W��u��o��_��W�x[��W��h��]��W�W��_��j��_��U��P��Y��j��c�pI�{V��k��Y��k��u�lV��\�~T��h��_��e��\��_��v��W��X��`�{X�~T��XgN��l��d�{R����������|[��b�zS�yL�}Q��[��f��\�|U��U��[��e��j�yZ��W��_��c��]��_��{�sM��_��j��]��m��e�~U��[��\�W��]��]��Z��]��[��]��]��a��m�tQ��[��r�lM��Z��c��j��h��]��V��e��Z��U��U�|W�~[�xP��\�iJ��j�{U�kK����������}V�{U�W��U��Y��Y�{T�}Y�Y�|S��d��l�b��j��_�sN��c��c��^��n�{X��b��j��b��l��m��_��b��j��\�}S��Z��Z��^��\��W��Y��d��l�pP�~]��l�V��Y��^��[��[�}X�~X��X��`�|S�zR��e��g�[��g�yT��c�wV�hJ����������zQ�~V�X�|U�}V�xO��Y��g��`��]��l��k�}^��j��b�{X��o��_��m�~Y��\�~W��a�~W��l��a��f��b��z��d��W�~Y��b��i��Y��W��^��f��k��^�}V��^��^�Z�~T��]��]��[��l��m�zW��i��n�]�{W�wX��a�vL��e��m�}]����������yQ�|S��b�}]�xU�{S��`��v��`��d��`��k��b��a�W��\�~Y��m��n��W�}U��\��^��[��]�}X��j��l��o��`�wP�yV��h��j��\��b��b�wW�{S��Y��m��b��]�|O��Z��]��f��\�xT�{[�}X�}]��j��`�~Z�sT��a�yT��k�{]�pJ����������[�{V��c��b�sR�rM��]��l��i��h�|W��]�~V��_��\�}U��W��nnK��V��b��a��l��n��m��c�{Y��j��e��a��h��c��d��q��q��k��f�z[�|Q��W��l��Y��_��S��b��i��h�lA�jE��j��h�yV�z_��^�~Z�zZ��\�~c�~[�wR�xO�����������c��i��j�_�~^��d��^��b��h�yW��b��m�[�xM��b��b��VnK��e��V��[��m�[��d��f��p�vU�|W��Z�[��p��d��_��p��q��e��a�`�|P��q�}w��\��b��]��Y��n��f�yT�qO��k��c��]��a��Y��Z�`��W�}_�Z��Y�zQ����������}]��i��i�{Z��_��k�{X�~W�yU�tT��p��e�zT�|T��m��[��V��e��r�P�xQ��l�{Q��[��p��v�|[�sM��b��e��j��i��\��\��h��c��_��d�~T��p�}Z��V��a��_��X�}T��\��b�zQ��]��[��]�Y�wL��[��g�{V��j�~Z�yX�sJ�����������\��a�zW��W��d��e��a��_�pK�zY��u��o��[�{S��l�xQ�P��r��Y��e�sQ�sU��_�|Z��q��|��u�|W�|X��d��_��Y��X�|W��_��S�|U��n��]��j��\��T��W��]��]�|T��[��f�S��]��`�~V�~N��[��n��a��`��_�b�|c�xU����������xM�zY�uR�S��U��[�`�xU�yU��s��{��p�|Z��_�sU�sQ��e��Y�X��Y��\�rL��u��a�~h��n��`��]��k��k��b��W��`��^�rQ��a��f��U�P��f��^��\�xS��b��l��f��[��_��\��h��d�xM�{O��e��h��W��d�vQ��c��n�}^����������xZ�kL�{X��[�S�^��g��h��[��^��m�~h��a��u�rL��\��Y�X��m�vM��m��\��]��a�rT��`��\��Z��\��m��c��T��j��s�qU�rT��e��T��\��Y��h��_��W��`��k��d��X��]��`��i��g�|W��`��j��\�W��\�tQ�jG�mH��e����������jN�jP��m��e�}P��_��i�|Y��X��[��_�rT��a��]��\��m�vM��m |