@@ -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
//--------------------------------------------------------------------------------------
Binary file not shown.
@@ -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>
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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\|

Large diffs are not rendered by default.

Binary file not shown.
@@ -0,0 +1,2 @@
#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit
Debug|Win32|C:\Users\Prini\Desktop\ICT290\Assignment 1\|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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 @@
��
Binary file not shown.
Binary file not shown.
Binary file not shown.
Empty file.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
��
@@ -0,0 +1 @@
��
@@ -0,0 +1 @@
��
@@ -0,0 +1 @@
��
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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

//--------------------------------------------------------------------------------------
Binary file not shown.
@@ -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

Large diffs are not rendered by default.

@@ -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
//--------------------------------------------------------------------------------------
Binary file not shown.
Binary file not shown.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

@@ -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

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

@@ -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