*** empty log message ***
This commit is contained in:
61
macosx/.cdtproject
Normal file
61
macosx/.cdtproject
Normal file
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?eclipse-cdt version="2.0"?>
|
||||
|
||||
<cdtproject id="org.eclipse.cdt.make.core.make">
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MachO" point="org.eclipse.cdt.core.BinaryParser">
|
||||
<attribute key="c++filt" value="c++filt"/>
|
||||
</extension>
|
||||
<extension id="org.eclipse.cdt.core.nullindexer" point="org.eclipse.cdt.core.CIndexer"/>
|
||||
<data>
|
||||
<item id="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="false" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="false"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="false" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="false"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="false" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="false"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</item>
|
||||
<item id="org.eclipse.cdt.core.pathentry">
|
||||
<pathentry include="/usr/X11R6/include" kind="inc" path="" system="true"/>
|
||||
<pathentry kind="src" path=""/>
|
||||
<pathentry kind="out" path=""/>
|
||||
<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
|
||||
</item>
|
||||
</data>
|
||||
</cdtproject>
|
||||
12
macosx/.gitignore
vendored
Normal file
12
macosx/.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
Debug
|
||||
oa.ncb
|
||||
Release
|
||||
OpenArena-0.1.2-alpha.exe
|
||||
vc70.idb
|
||||
OpenArena
|
||||
openarena
|
||||
oa.exe
|
||||
UpgradeLog.XML
|
||||
Makefile
|
||||
oa.vcproj.ARES.tomhicks.user
|
||||
.settings
|
||||
90
macosx/.project
Normal file
90
macosx/.project
Normal file
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>openarena</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.make.core.makeBuilder</name>
|
||||
<triggers>clean,full,incremental,</triggers>
|
||||
<arguments>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.arguments</key>
|
||||
<value>-k</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.core.errorOutputParser</key>
|
||||
<value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
|
||||
<value>false</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.environment</key>
|
||||
<value></value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.target.inc</key>
|
||||
<value>all</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.location</key>
|
||||
<value></value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.target.clean</key>
|
||||
<value>clean</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.command</key>
|
||||
<value>make</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.append_environment</key>
|
||||
<value>true</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.target.full</key>
|
||||
<value>clean all</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
|
||||
<value>false</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.build.target.auto</key>
|
||||
<value>all</value>
|
||||
</dictionary>
|
||||
<dictionary>
|
||||
<key>org.eclipse.cdt.make.core.stopOnError</key>
|
||||
<value>false</value>
|
||||
</dictionary>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||
<nature>org.eclipse.cdt.make.core.makeNature</nature>
|
||||
<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
22
macosx/Makefile.linux
Normal file
22
macosx/Makefile.linux
Normal file
@@ -0,0 +1,22 @@
|
||||
EXECUTABLES = OpenArena/OA
|
||||
LIBRARIES =
|
||||
BUILDROOT = /usr/local
|
||||
PREFIX =
|
||||
|
||||
.Phony: all clean install
|
||||
|
||||
all:
|
||||
$(MAKE) -C src all
|
||||
|
||||
clean:
|
||||
$(MAKE) -C src clean
|
||||
|
||||
install:
|
||||
|
||||
install-devel:
|
||||
|
||||
install-doc:
|
||||
|
||||
|
||||
|
||||
|
||||
21
macosx/Makefile.macosx
Normal file
21
macosx/Makefile.macosx
Normal file
@@ -0,0 +1,21 @@
|
||||
EXECUTABLES = OpenArena/OA
|
||||
LIBRARIES =
|
||||
BUILDROOT = /usr/local
|
||||
PREFIX =
|
||||
.Phony: all clean install
|
||||
|
||||
all:
|
||||
$(MAKE) -C src all
|
||||
|
||||
clean:
|
||||
$(MAKE) -C src clean
|
||||
|
||||
install:
|
||||
|
||||
install-devel:
|
||||
|
||||
install-doc:
|
||||
|
||||
|
||||
|
||||
|
||||
54
macosx/configure
vendored
Executable file
54
macosx/configure
vendored
Executable file
@@ -0,0 +1,54 @@
|
||||
#Symlink Makefiles
|
||||
case `uname -s` in
|
||||
Darwin)
|
||||
ln -sf Makefile.macosx Makefile
|
||||
ln -sf Makefile.macosx src/Makefile
|
||||
|
||||
#this should be set as a default if no option is specified and set via options otherwise
|
||||
USE_AGL=1
|
||||
;;
|
||||
Linux)
|
||||
ln -sf Makefile.linux Makefile
|
||||
ln -sf Makefile.linux src/Makefile
|
||||
|
||||
#this should be set as a default if no option is specified and set via options otherwise
|
||||
USE_GLX=1
|
||||
HAVE_XF86VIDMODE=1
|
||||
;;
|
||||
esac
|
||||
|
||||
#Generate config.h
|
||||
CONFIGFILE="src/config.h"
|
||||
|
||||
#Write Header
|
||||
echo "#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
" > $CONFIGFILE
|
||||
|
||||
#Check for GLX ie X11
|
||||
if [ $USE_GLX ]; then
|
||||
echo "#define USE_GLX" >> $CONFIGFILE
|
||||
if [ $HAVE_XF86VIDMODE ]; then
|
||||
echo "#define HAVE_XF86VIDMODE" >> $CONFIGFILE
|
||||
fi
|
||||
fi
|
||||
|
||||
#Check for AGL
|
||||
if [ $USE_AGL ]; then
|
||||
echo "#define USE_AGL" >> $CONFIGFILE
|
||||
fi
|
||||
|
||||
#Check for CGL
|
||||
if [ $USE_CGL ]; then
|
||||
echo "#define USE_CGL" >> $CONFIGFILE
|
||||
fi
|
||||
|
||||
#Check for WGL
|
||||
if [ $USE_WGL ]; then
|
||||
echo "#define USE_WGL" >> $CONFIGFILE
|
||||
fi
|
||||
|
||||
#Write Footer
|
||||
echo "
|
||||
#endif
|
||||
" >> $CONFIGFILE
|
||||
BIN
macosx/doc/OpenArena User's Manual.doc
Normal file
BIN
macosx/doc/OpenArena User's Manual.doc
Normal file
Binary file not shown.
1096
macosx/doc/OpenArena User's Manual.htm
Normal file
1096
macosx/doc/OpenArena User's Manual.htm
Normal file
File diff suppressed because it is too large
Load Diff
1096
macosx/doc/OpenArena User's Manual.html
Normal file
1096
macosx/doc/OpenArena User's Manual.html
Normal file
File diff suppressed because it is too large
Load Diff
28
macosx/heading.txt
Normal file
28
macosx/heading.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
/*******************************************************************************
|
||||
00000000011111111112222222222333333333344444444445555555555666666666677777777778
|
||||
12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
*******************************************************************************/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Module:
|
||||
// Author: Tom Hicks
|
||||
// Creation: 09-01-2003
|
||||
// LastEdit: 09-01-2003
|
||||
// Editors: None
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// Summary of Methods:
|
||||
// Global
|
||||
// -function name
|
||||
// description
|
||||
// blahClass
|
||||
// -function name
|
||||
// description
|
||||
//
|
||||
// Summary of Properties:
|
||||
// blahClass
|
||||
// -property name
|
||||
// description
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
1
macosx/license.txt
Normal file
1
macosx/license.txt
Normal file
@@ -0,0 +1 @@
|
||||
This program can be distributed under either the GPL or the QTPL. Copies of which will soon be added to this distribution.
|
||||
205
macosx/oa.nsi
Normal file
205
macosx/oa.nsi
Normal file
@@ -0,0 +1,205 @@
|
||||
; This script is based on example2.nsi
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; The name of the installer
|
||||
Name "OpenArena"
|
||||
|
||||
; The installer icon
|
||||
Icon "${NSISDIR}\Contrib\Graphics\Icons\modern-install-blue-full.ico"
|
||||
|
||||
; The uninstaller icon
|
||||
UninstallIcon "${NSISDIR}\Contrib\Graphics\Icons\modern-install-blue-full.ico"
|
||||
|
||||
|
||||
; The file to write
|
||||
OutFile "OpenArena-0.1.2-alpha.exe"
|
||||
|
||||
; The default installation directory
|
||||
InstallDir "$PROGRAMFILES\HHPS\OpenArena-0.1.2-alpha"
|
||||
|
||||
; Registry key to check for directory (so if you install again, it will
|
||||
; overwrite the old one automatically)
|
||||
InstallDirRegKey HKLM SOFTWARE\HHPS\OpenArena-0.1.2-alpha "Install_Dir"
|
||||
|
||||
; The text to prompt the user to enter a directory
|
||||
ComponentText "This will install OpenArena on your computer. Select which options you want installed."
|
||||
|
||||
; The text to prompt the user to enter a directory
|
||||
DirText "Choose a directory to install in to:"
|
||||
|
||||
;--------------------------------
|
||||
|
||||
; Main section docs and libs
|
||||
Section - "Base (required)"
|
||||
|
||||
SectionIn RO
|
||||
|
||||
;Dynamic libraries
|
||||
CreateDirectory $INSTDIR
|
||||
SetOutPath $INSTDIR
|
||||
File ".\OpenArena\bass.dll"
|
||||
WriteUninstaller "uninstall.exe"
|
||||
|
||||
;Documentation
|
||||
CreateDirectory "$INSTDIR\doc"
|
||||
SetOutPath "$INSTDIR\doc"
|
||||
File ".\doc\*.doc"
|
||||
File ".\doc\*.html"
|
||||
|
||||
; Write the installation path into the registry
|
||||
WriteRegStr HKLM SOFTWARE\HHPS\OpenArena-0.1.2-alpha "Install_Dir" "$INSTDIR"
|
||||
|
||||
; Write the uninstall keys for Windows
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.2-alpha" "DisplayName" "OpenArena v0.1.2-alpha (remove only)"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.2-alpha" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||
WriteUninstaller "uninstall.exe"
|
||||
CreateDirectory "$SMPROGRAMS\HHPS\OpenArena"
|
||||
SetOutPath $INSTDIR\OpenArena
|
||||
CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\Readme v0.1.2-alpha.lnk" "$INSTDIR\doc\OpenArena User's Manual.html"
|
||||
|
||||
SectionEnd
|
||||
|
||||
; Source Files required to create and compile a game using the OpenArena SDK
|
||||
Section "SDK"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources"
|
||||
SetOutPath "$INSTDIR\sources"
|
||||
File ".\*.txt"
|
||||
File ".\*.nsi"
|
||||
File ".\oa.*"
|
||||
File ".*"
|
||||
File "Makefile"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\lib"
|
||||
SetOutPath "$INSTDIR\sources\lib"
|
||||
File ".\lib\bass.lib"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\include"
|
||||
SetOutPath "$INSTDIR\sources\include"
|
||||
File ".\include\*.h"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\src"
|
||||
SetOutPath "$INSTDIR\sources\src"
|
||||
File ".\src\*.cpp"
|
||||
File ".\Makefile"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena"
|
||||
SetOutPath "$INSTDIR\sources\OpenArena"
|
||||
File ".\OpenArena\bass.dll"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena\oa"
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena\oa\config"
|
||||
SetOutPath "$INSTDIR\sources\OpenArena\oa\config"
|
||||
File ".\OpenArena\oa\config\my.cfg"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena\oa\maps"
|
||||
SetOutPath "$INSTDIR\sources\OpenArena\oa\maps"
|
||||
File ".\OpenArena\oa\maps\intro.map"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena\oa\music\bgm"
|
||||
;SetOutPath "$INSTDIR\sources\OpenArena\oa\music\bgm"
|
||||
;File ".\OpenArena\oa\music\bgm\*.mp3"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena\oa\textures"
|
||||
SetOutPath "$INSTDIR\sources\OpenArena\oa\textures"
|
||||
File ".\OpenArena\oa\textures\*.bmp"
|
||||
File ".\OpenArena\oa\textures\*.tga"
|
||||
CreateDirectory "$INSTDIR\sources\OpenArena\oa\textures\menu"
|
||||
SetOutPath "$INSTDIR\sources\OpenArena\oa\textures\menu"
|
||||
File ".\OpenArena\oa\textures\menu\*.bmp"
|
||||
File ".\OpenArena\oa\textures\menu\*.tga"
|
||||
|
||||
CreateDirectory "$INSTDIR\sources\ModelConverter"
|
||||
SetOutPath "$INSTDIR\sources\ModelConverter"
|
||||
File ".\ModelConverter\*.cs"
|
||||
File ".\ModelConverter\*.ico"
|
||||
File ".\ModelConverter\*.csproj"
|
||||
File ".\ModelConverter\*.csproj.user"
|
||||
|
||||
CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\OpenArena SDK v0.1.2-alpha.lnk" "$INSTDIR\sources\oa.sln"
|
||||
|
||||
SectionEnd
|
||||
|
||||
Section "Media"
|
||||
|
||||
CreateDirectory "$INSTDIR"
|
||||
SetOutPath "$INSTDIR"
|
||||
File ".\OpenArena\oa.exe"
|
||||
|
||||
CreateDirectory "$INSTDIR\oa"
|
||||
CreateDirectory "$INSTDIR\oa\config"
|
||||
SetOutPath "$INSTDIR\oa\config"
|
||||
File ".\OpenArena\oa\config\my.cfg"
|
||||
|
||||
CreateDirectory "$INSTDIR\oa\maps"
|
||||
SetOutPath $INSTDIR\oa\maps
|
||||
File ".\OpenArena\oa\maps\intro.map"
|
||||
File ".\OpenArena\oa\maps\oamap1.map"
|
||||
|
||||
CreateDirectory "$INSTDIR\oa\music"
|
||||
CreateDirectory "$INSTDIR\oa\music\bgm"
|
||||
SetOutPath $INSTDIR\oa\music\bgm
|
||||
File ".\OpenArena\oa\music\bgm\*.mp3"
|
||||
|
||||
CreateDirectory "$INSTDIR\oa\textures"
|
||||
SetOutPath $INSTDIR\oa\textures
|
||||
File ".\OpenArena\oa\textures\*.tga"
|
||||
File ".\OpenArena\oa\textures\*.bmp"
|
||||
|
||||
CreateDirectory "$INSTDIR\oa\textures\menu"
|
||||
SetOutPath $INSTDIR\oa\textures\menu
|
||||
File ".\OpenArena\oa\textures\menu\*.bmp"
|
||||
File ".\OpenArena\oa\textures\menu\*.tga"
|
||||
|
||||
SetOutPath $INSTDIR
|
||||
CreateShortCut "$SMPROGRAMS\HHPS\OpenArena\OpenArena v0.1.2-alpha.lnk" "$INSTDIR\oa.exe"
|
||||
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
; Uninstaller
|
||||
|
||||
UninstallText "This will uninstall OpenArena. Hit next to continue."
|
||||
; Uninstall section
|
||||
|
||||
Section "Uninstall"
|
||||
|
||||
; remove registry keys
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenArena v0.1.2-alpha"
|
||||
DeleteRegKey HKLM SOFTWARE\HHPS\OpenArena-0.1.2-alpha
|
||||
|
||||
; remove files and uninstaller
|
||||
Delete /REBOOTOK "$INSTDIR\oa"
|
||||
Delete /REBOOTOK "$INSTDIR\sources"
|
||||
Delete /REBOOTOK "$INSTDIR\doc"
|
||||
Delete /REBOOTOK "$INSTDIR\*.exe"
|
||||
Delete /REBOOTOK "$INSTDIR\*.dll"
|
||||
|
||||
;Delete /REBOOTOK $INSTDIR\lib\*
|
||||
;Delete /REBOOTOK $INSTDIR\src\*.*
|
||||
;Delete /REBOOTOK $INSTDIR\bass.dll
|
||||
;Delete /REBOOTOK $INSTDIR\heading.txt
|
||||
;Delete /REBOOTOK $INSTDIR\license.txt
|
||||
;Delete /REBOOTOK $INSTDIR\oa.ncb
|
||||
;Delete /REBOOTOK $INSTDIR\oa.sln
|
||||
;Delete /REBOOTOK $INSTDIR\oa.sou
|
||||
;Delete /REBOOTOK $INSTDIR\oa.vcproj
|
||||
;Delete /REBOOTOK "$INSTDIR\OpenArena User's Manual.doc"
|
||||
;Delete /REBOOTOK "$INSTDIR\OpenArena User's Manual.html"
|
||||
|
||||
Delete /REBOOTOK $INSTDIR\uninstall.exe
|
||||
|
||||
; remove shortcuts, if any
|
||||
Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\Readme v0.1.2-alpha.lnk"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\OpenArena SDK v0.1.2-alpha.lnk"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\HHPS\OpenArena\OpenArena v0.1.2-alpha.lnk"
|
||||
|
||||
; remove directories used
|
||||
RMDIR /r $INSTDIR\include
|
||||
RMDIR /r $INSTDIR\lib
|
||||
RMDIR /r $INSTDIR\OpenArena
|
||||
RMDIR /r $INSTDIR\src
|
||||
RMDIR /r "$INSTDIR"
|
||||
|
||||
SectionEnd
|
||||
41
macosx/oa.sln
Normal file
41
macosx/oa.sln
Normal file
@@ -0,0 +1,41 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "oa", "oa.vcproj", "{6F5D0FF6-A032-4356-932E-865B601E0DD4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelConverter", "ModelConverter\ModelConverter.csproj", "{4327B7E9-B631-479B-8419-BCE37C986360}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|Mixed Platforms = Debug|Mixed Platforms
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|Mixed Platforms = Release|Mixed Platforms
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Debug|Mixed Platforms.Build.0 = Debug|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release|Mixed Platforms.ActiveCfg = Release|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release|Mixed Platforms.Build.0 = Release|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{6F5D0FF6-A032-4356-932E-865B601E0DD4}.Release|Win32.Build.0 = Release|Win32
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Debug|Win32.ActiveCfg = Debug|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{4327B7E9-B631-479B-8419-BCE37C986360}.Release|Win32.ActiveCfg = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
520
macosx/oa.vcproj
Normal file
520
macosx/oa.vcproj
Normal file
@@ -0,0 +1,520 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="oa"
|
||||
ProjectGUID="{6F5D0FF6-A032-4356-932E-865B601E0DD4}"
|
||||
RootNamespace="oa"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\OpenArena"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Release/oa.tlb"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories="..\include"
|
||||
PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
PrecompiledHeaderFile=".\Release/oa.pch"
|
||||
AssemblerListingLocation=".\"
|
||||
ObjectFile=".\"
|
||||
ProgramDataBaseFileName=".\"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1033"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="/MACHINE:I386"
|
||||
AdditionalDependencies="odbc32.lib odbccp32.lib"
|
||||
OutputFile=".\OpenArena\oa.exe"
|
||||
Version="0.1.0-alpha"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
AdditionalLibraryDirectories=".\lib"
|
||||
ProgramDatabaseFile=".\Release/oa.pdb"
|
||||
SubSystem="2"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Debug"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="true"
|
||||
SuppressStartupBanner="true"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\Debug/oa.tlb"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS,USE_WGL"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
PrecompiledHeaderFile=".\Debug/oa.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1033"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="/MACHINE:I386"
|
||||
OutputFile=".\Debug\oa.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="true"
|
||||
AdditionalLibraryDirectories=".\lib"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Debug/oa.pdb"
|
||||
SubSystem="2"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\bmp.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\camera.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\ctrls.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\keys.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\level.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\linux.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\macosx.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\main.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\Model.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\mygl.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\myglFont.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\myglTexture.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\NullVideoPlugin.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\player.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\PluginManager.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\screen.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\strmanip.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\tga.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\vector.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\window.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\windows.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\WindowsLogger.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\bmp.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\camera.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\ctrls.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\datatypes.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\geometry.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\image.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\keys.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\level.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\list.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\Logger.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\main.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\Model.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\mydefs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\mygl.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\myglFont.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\myglTexture.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\NullVideoPlugin.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\player.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\Plugin.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\PluginManager.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\screen.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\strmanip.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\texture.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\tga.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\vector.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\version.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\VideoPlugin.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\window.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\WindowsLogger.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\worlddefs.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="oa"
|
||||
>
|
||||
<Filter
|
||||
Name="maps"
|
||||
Filter=".map, .lit"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\OpenArena\oa\maps\intro.map"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\OpenArena\oa\maps\oamap1.map"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="textures"
|
||||
Filter=".bmp, .jpg, .tga, .png"
|
||||
>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\textures\groundc.tga"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\textures\moonc.tga"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\textures\nightSkyc.tga"
|
||||
>
|
||||
</File>
|
||||
<Filter
|
||||
Name="menu"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\OpenArena\oa\textures\menu\con_back.bmp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\OpenArena\oa\textures\menu\con_back.tga"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\textures\menu\font.bmp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="config"
|
||||
Filter=".cfg"
|
||||
>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\config\G2k.cfg"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\config\My.cfg"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="music"
|
||||
>
|
||||
<Filter
|
||||
Name="bgm"
|
||||
>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\music\bgm\bgm1.mp3"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="OpenArena\oa\music\bgm\bgm2.mp3"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\Doxyfile.doxygen"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\heading.txt"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
3
macosx/src/.gitignore
vendored
Normal file
3
macosx/src/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*.o
|
||||
Makefile
|
||||
config.h
|
||||
76
macosx/src/EventManager.cpp
Normal file
76
macosx/src/EventManager.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
/**
|
||||
* @file EventManager.cpp
|
||||
* @breif Implementation of the EventManager class
|
||||
* This file along with EventManager.h implement the EventManager
|
||||
* class. The EventManager class collects and redistributes events
|
||||
* in a fashion similar to AWT's EventListeners.
|
||||
*
|
||||
* @see EventManager.h
|
||||
*/
|
||||
#include "EventManager.h"
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
EventManager::EventManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void EventManager::SendEvent(Events::Event* event)
|
||||
{
|
||||
unsigned int index;
|
||||
|
||||
for(index=0; index < eventHandlers.Length(); index++)
|
||||
{
|
||||
Events::Event::EventHandler* handler = eventHandlers[index];
|
||||
if(handler->Handles(event->GetEventType()))
|
||||
{
|
||||
handler->HandleEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
delete event;
|
||||
}
|
||||
|
||||
/*
|
||||
void EventManager::SendEvent(Events::Event event)
|
||||
{
|
||||
unsigned int index;
|
||||
|
||||
for(index=0; index < eventHandlers.Length(); index++)
|
||||
{
|
||||
Events::Event::EventHandler* handler = eventHandlers[index];
|
||||
if(handler->Handles(event.GetEventType()))
|
||||
{
|
||||
handler->HandleEvent(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
void EventManager::RegisterEventHandler(Events::Event::EventHandler* eventHandler)
|
||||
{
|
||||
eventHandlers.Insert(eventHandler);
|
||||
}
|
||||
};
|
||||
38
macosx/src/EventManager.h
Normal file
38
macosx/src/EventManager.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __OpenArena_EventMangaer_h__
|
||||
#define __OpenArena_EventMangaer_h__
|
||||
|
||||
#include "Events/Event.h"
|
||||
#include "list.h"
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
class EventManager
|
||||
{
|
||||
public:
|
||||
EventManager();
|
||||
void SendEvent(Events::Event* event);
|
||||
void RegisterEventHandler(Events::Event::EventHandler* eventHandler);
|
||||
private:
|
||||
list<Events::Event::EventHandler*> eventHandlers;
|
||||
};
|
||||
}
|
||||
#endif /*__OpenArena_EventMangaer_h__*/
|
||||
99
macosx/src/Makefile.linux
Normal file
99
macosx/src/Makefile.linux
Normal file
@@ -0,0 +1,99 @@
|
||||
#Dependencies soooo need to be fixed/finished
|
||||
CPP = g++ -g
|
||||
INCLUDES = -I/usr/X11R6/include
|
||||
LD = g++
|
||||
OBJECTS = screen.o bmp.o camera.o ctrls.o level.o mygl.o myglFont.o myglTexture.o player.o
|
||||
OBJECTS += strmanip.o tga.o vector.o window.o keys.o main.o x11.o EventManager.o Events/DrawEvent.o
|
||||
OBJECTS += Events/Event.o Object.o Events/KeyPressEvent.o Events/KeyReleaseEvent.o
|
||||
LIBS = -L/usr/X11R6/lib -lGL -lGLU -lXxf86vm
|
||||
LIBRARIES =
|
||||
SO_LIBS =
|
||||
SO_LIBRARIES = oa_game.so oa_audio.so oa_net.so oa_video.so oa_input.so
|
||||
CPPFLAGS = -DHAVE_CONFIG_H
|
||||
LDFLAGS = $(LIBS)
|
||||
|
||||
.Phony: all clean install
|
||||
|
||||
all: ../OpenArena
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
rm -f ../OpenArena
|
||||
|
||||
install:
|
||||
|
||||
#Executables
|
||||
../OpenArena: $(OBJECTS)
|
||||
$(LD) $(LDFLAGS) -o ../OpenArena $(OBJECTS)
|
||||
|
||||
#Dynamic Libraries
|
||||
oa_game.so:
|
||||
|
||||
oa_audio.so:
|
||||
|
||||
oa_net.so:
|
||||
|
||||
oa_video.so:
|
||||
|
||||
oa_input.so:
|
||||
|
||||
#Object Files
|
||||
Events/Event.o: Events/Event.cpp Events/Event.h Object.h
|
||||
$(CPP) $(CPPFLAGS) -c $(INCLUDE_DIRS) -o Events/Event.o Events/Event.cpp
|
||||
|
||||
Object.o: Object.cpp Object.h
|
||||
$(CPP) $(CPPFLAGS) -c $(INCLUDE_DIRS) -o Object.o Object.cpp
|
||||
|
||||
Events/KeyPressEvent.o: Events/KeyPressEvent.cpp Events/KeyPressEvent.h Events/Event.h
|
||||
$(CPP) $(CPPFLAGS) -c $(INCLUDE_DIRS) -o Events/KeyPressEvent.o Events/KeyPressEvent.cpp
|
||||
|
||||
Events/KeyReleaseEvent.o: Events/KeyReleaseEvent.cpp Events/KeyReleaseEvent.h Events/Event.h
|
||||
$(CPP) $(CPPFLAGS) -c $(INCLUDE_DIRS) -o Events/KeyReleaseEvent.o Events/KeyReleaseEvent.cpp
|
||||
|
||||
Events/DrawEvent.o: Events/DrawEvent.cpp Events/DrawEvent.h Events/Event.h
|
||||
$(CPP) $(CPPFLAGS) -c $(INCLUDE_DIRS) -o Events/DrawEvent.o Events/DrawEvent.cpp
|
||||
|
||||
screen.o: screen.cpp screen.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o screen.o screen.cpp
|
||||
|
||||
bmp.o: bmp.cpp bmp.h mygl.h datatypes.h texture.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o bmp.o bmp.cpp
|
||||
|
||||
camera.o: camera.cpp camera.h vector.h mygl.h screen.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o camera.o camera.cpp
|
||||
|
||||
ctrls.o: ctrls.cpp ctrls.h keys.h datatypes.h list.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o ctrls.o ctrls.cpp
|
||||
|
||||
level.o: level.cpp level.h version.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o level.o level.cpp
|
||||
|
||||
mygl.o: mygl.cpp mygl.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o mygl.o mygl.cpp
|
||||
|
||||
myglFont.o: myglFont.cpp myglFont.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o myglFont.o myglFont.cpp
|
||||
|
||||
myglTexture.o: myglTexture.cpp myglTexture.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o myglTexture.o myglTexture.cpp
|
||||
|
||||
player.o: player.cpp player.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o player.o player.cpp
|
||||
|
||||
strmanip.o: strmanip.cpp strmanip.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o strmanip.o strmanip.cpp
|
||||
|
||||
tga.o: tga.cpp tga.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o tga.o tga.cpp
|
||||
|
||||
vector.o: vector.cpp vector.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o vector.o vector.cpp
|
||||
|
||||
window.o: window.cpp window.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o window.o window.cpp
|
||||
|
||||
keys.o: keys.cpp keys.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o keys.o keys.cpp
|
||||
|
||||
main.o: linux.cpp main.h config.h
|
||||
$(CPP) $(CPPFLAGS) -c -o main.o linux.cpp
|
||||
109
macosx/src/Makefile.macosx
Normal file
109
macosx/src/Makefile.macosx
Normal file
@@ -0,0 +1,109 @@
|
||||
#Dependencies soooo need to be fixed/finished
|
||||
CPP = g++ -g
|
||||
INCLUDES =
|
||||
LD = g++
|
||||
X11INCLUDEDIR = /usr/X11R6/include
|
||||
X11LIBDIR = /usr/X11R6/lib
|
||||
INCLUDE_DIRS = -I$(X11INCLUDEDIR) -DHAVE_CONFIG_H
|
||||
LIBRARY_DIRS = -L$(X11LIBDIR)
|
||||
OBJECTS = screen.o bmp.o camera.o ctrls.o level.o mygl.o myglFont.o myglTexture.o player.o
|
||||
OBJECTS += strmanip.o tga.o vector.o window.o keys.o main.o x11.o EventManager.o Events/DrawEvent.o
|
||||
OBJECTS += Events/Event.o Object.o Events/KeyPressEvent.o Events/KeyReleaseEvent.o
|
||||
LIBS = $(LIBRARY_DIRS) -lGL -lGLU -lXxf86vm -lX11
|
||||
LIBRARIES =
|
||||
SO_LIBS =
|
||||
SO_LIBRARIES = oa_game.so oa_audio.so oa_net.so oa_video.so oa_input.so
|
||||
CPPFLAGS = $(INCLUDE_DIRS)
|
||||
LDFLAGS = $(LIBS) -bind_at_load -framework OpenGL -framework AGL -framework Carbon
|
||||
.Phony: all clean install
|
||||
|
||||
all: ../OpenArena
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
if [ -f ../OpenArena ]; then rm ../OpenArena; fi
|
||||
rm -f */*.o
|
||||
|
||||
install:
|
||||
|
||||
#Executables
|
||||
../OpenArena: $(OBJECTS)
|
||||
$(LD) $(LDFLAGS) $(INCLUDE_DIRS) -o ../OpenArena $(OBJECTS)
|
||||
|
||||
#Dynamic Libraries
|
||||
oa_game.so:
|
||||
|
||||
oa_audio.so:
|
||||
|
||||
oa_net.so:
|
||||
|
||||
oa_video.so:
|
||||
|
||||
oa_input.so:
|
||||
|
||||
#Object Files
|
||||
Events/Event.o: Events/Event.cpp Events/Event.h Object.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o Events/Event.o Events/Event.cpp
|
||||
|
||||
Object.o: Object.cpp Object.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o Object.o Object.cpp
|
||||
|
||||
Events/KeyPressEvent.o: Events/KeyPressEvent.cpp Events/KeyPressEvent.h Events/Event.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o Events/KeyPressEvent.o Events/KeyPressEvent.cpp
|
||||
|
||||
Events/KeyReleaseEvent.o: Events/KeyReleaseEvent.cpp Events/KeyReleaseEvent.h Events/Event.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o Events/KeyReleaseEvent.o Events/KeyReleaseEvent.cpp
|
||||
|
||||
Events/DrawEvent.o: Events/DrawEvent.cpp Events/DrawEvent.h Events/Event.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o Events/DrawEvent.o Events/DrawEvent.cpp
|
||||
|
||||
screen.o: screen.cpp screen.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o screen.o screen.cpp
|
||||
|
||||
bmp.o: bmp.cpp bmp.h mygl.h datatypes.h texture.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o bmp.o bmp.cpp
|
||||
|
||||
camera.o: camera.cpp camera.h vector.h mygl.h screen.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o camera.o camera.cpp
|
||||
|
||||
ctrls.o: ctrls.cpp ctrls.h keys.h datatypes.h list.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o ctrls.o ctrls.cpp
|
||||
|
||||
level.o: level.cpp level.h version.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o level.o level.cpp
|
||||
|
||||
mygl.o: mygl.cpp mygl.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o mygl.o mygl.cpp
|
||||
|
||||
myglFont.o: myglFont.cpp myglFont.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o myglFont.o myglFont.cpp
|
||||
|
||||
myglTexture.o: myglTexture.cpp myglTexture.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o myglTexture.o myglTexture.cpp
|
||||
|
||||
player.o: player.cpp player.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o player.o player.cpp
|
||||
|
||||
strmanip.o: strmanip.cpp strmanip.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o strmanip.o strmanip.cpp
|
||||
|
||||
tga.o: tga.cpp tga.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o tga.o tga.cpp
|
||||
|
||||
vector.o: vector.cpp vector.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o vector.o vector.cpp
|
||||
|
||||
window.o: window.cpp window.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o window.o window.cpp
|
||||
|
||||
keys.o: keys.cpp keys.h config.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o keys.o keys.cpp
|
||||
|
||||
main.o: macosx.cpp main.h config.h Events/Event.h Events/DrawEvent.h EventManager.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o main.o macosx.cpp
|
||||
|
||||
x11.o: x11.cpp x11.h EventManager.h main.h mygl.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o x11.o x11.cpp
|
||||
|
||||
EventManager.o: EventManager.cpp EventManager.h Events/Event.h
|
||||
$(CPP) -c $(INCLUDE_DIRS) -o EventManager.o EventManager.cpp
|
||||
17
macosx/src/Object.cpp
Normal file
17
macosx/src/Object.cpp
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "Object.h"
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
Object::Object()
|
||||
{
|
||||
}
|
||||
|
||||
Object::~Object()
|
||||
{
|
||||
}
|
||||
|
||||
const char * Object::GetClassName()
|
||||
{
|
||||
return 0x0;
|
||||
}
|
||||
};
|
||||
15
macosx/src/Object.h
Normal file
15
macosx/src/Object.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef __OpenArena_Object_h__
|
||||
#define __OpenArena_Object_h__
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
class Object
|
||||
{
|
||||
public:
|
||||
Object();
|
||||
virtual ~Object();
|
||||
virtual const char* GetClassName();
|
||||
};
|
||||
};
|
||||
|
||||
#endif //__OpenArena_Object_h__
|
||||
224
macosx/src/ctrls.cpp
Normal file
224
macosx/src/ctrls.cpp
Normal file
@@ -0,0 +1,224 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Module: ctrls.cpp
|
||||
// Author: Tom Hicks
|
||||
// Creation: 09-01-2003
|
||||
// LastEdit: 06-19-2005
|
||||
// Editors: Tom Hicks
|
||||
//
|
||||
// Purpose:
|
||||
// To implement a system for managing a bindable control scheme.
|
||||
//
|
||||
// Summary of Methods:
|
||||
// ControlScheme
|
||||
// void LoadDefaultControlScheme();
|
||||
// -Loads the default control scheme
|
||||
// void ClearControlScheme();
|
||||
// -Clears the control scheme
|
||||
// void Unbind(uint8 key);
|
||||
// -Removes key from all control lists.
|
||||
//
|
||||
// Summary of Properties:
|
||||
// ControlScheme
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "ctrls.h"
|
||||
#include "strmanip.h"
|
||||
using std::string;
|
||||
using std::ostream;
|
||||
using std::endl;
|
||||
|
||||
namespace OpenArena{
|
||||
void ControlScheme::LoadDefaultControlScheme()
|
||||
{
|
||||
Bind(OpenArena::KEY_LBUTTON, ACTION_FORWARD);
|
||||
Bind(OpenArena::KEY_RBUTTON, ACTION_BACKWARD);
|
||||
Bind(OpenArena::KEY_LEFT, ACTION_LOOKLEFT);
|
||||
Bind(OpenArena::KEY_RIGHT, ACTION_LOOKRIGHT);
|
||||
Bind(OpenArena::KEY_UP, ACTION_LOOKUP);
|
||||
Bind(OpenArena::KEY_DOWN, ACTION_LOOKDOWN);
|
||||
Bind(OpenArena::KEY_S, ACTION_MOVELEFT);
|
||||
Bind(OpenArena::KEY_D, ACTION_MOVERIGHT);
|
||||
Bind(OpenArena::KEY_SPACE, ACTION_MOVEUP);
|
||||
Bind(OpenArena::KEY_A, ACTION_MOVEDOWN);
|
||||
Bind(OpenArena::KEY_F, ACTION_FIREPRIMARY);
|
||||
Bind(OpenArena::KEY_G, ACTION_FIRESECONDARY);
|
||||
Bind(OpenArena::KEY_T, ACTION_WEAPONNEXT);
|
||||
Bind(OpenArena::KEY_R, ACTION_WEAPONPREV);
|
||||
Bind(OpenArena::KEY_L, ACTION_TOGGLE_LIGHTS);
|
||||
Bind(OpenArena::KEY_P, ACTION_TOGGLE_FPS);
|
||||
Bind(OpenArena::KEY_OEM_3, ACTION_TOGGLE_CONSOLE);
|
||||
Bind(OpenArena::KEY_M, ACTION_TOGGLE_MOUSELOOK);
|
||||
Bind(OpenArena::KEY_Q, ACTION_QUICKMOUSELOOK);
|
||||
Bind(OpenArena::KEY_W, ACTION_ROLLLEFT);
|
||||
Bind(OpenArena::KEY_E, ACTION_ROLLRIGHT);
|
||||
}
|
||||
void ControlScheme::UnBindAll()
|
||||
{
|
||||
OpenArena::Keys key;
|
||||
for(key=(OpenArena::Keys)0; key<(OpenArena::Keys)256; key = (OpenArena::Keys)(key+1))
|
||||
{
|
||||
UnBind(key);
|
||||
}
|
||||
}
|
||||
|
||||
void ControlScheme::UnBind(OpenArena::Keys key)
|
||||
{
|
||||
keyActions[key] = ACTION_NONE;
|
||||
}
|
||||
|
||||
void ControlScheme::Bind(OpenArena::Keys key, Action action)
|
||||
{
|
||||
keyActions[key] = action;
|
||||
}
|
||||
|
||||
void ControlScheme::WriteToStream(std::ostream& output)
|
||||
{
|
||||
//output << " bind " << action << keyname << endl;
|
||||
OpenArena::Keys key;
|
||||
for(key=(OpenArena::Keys)0; key<(OpenArena::Keys)256; key = (OpenArena::Keys)(key+1))
|
||||
{
|
||||
if(keyActions[key] != ACTION_NONE)
|
||||
{
|
||||
output << " bind " << ActionName(keyActions[key]) << GetKeyName(key) << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ControlScheme::Action ControlScheme::GetAction(const char* actionName)
|
||||
{
|
||||
string str = actionName;
|
||||
str = tolower(str);
|
||||
if(str == "none"){
|
||||
return ACTION_NONE;
|
||||
}else if(str == "forward"){
|
||||
return ACTION_FORWARD;
|
||||
}else if(str == "backward"){
|
||||
return ACTION_BACKWARD;
|
||||
}else if(str == "lookleft"){
|
||||
return ACTION_LOOKLEFT;
|
||||
}else if(str == "lookright"){
|
||||
return ACTION_LOOKRIGHT;
|
||||
}else if(str == "lookup"){
|
||||
return ACTION_LOOKUP;
|
||||
}else if(str == "lookdown"){
|
||||
return ACTION_LOOKDOWN;
|
||||
}else if(str == "moveleft"){
|
||||
return ACTION_MOVELEFT;
|
||||
}else if(str == "moveright"){
|
||||
return ACTION_MOVERIGHT;
|
||||
}else if(str == "moveup"){
|
||||
return ACTION_MOVEUP;
|
||||
}else if(str == "movedown"){
|
||||
return ACTION_MOVEDOWN;
|
||||
}else if(str == "rollleft"){
|
||||
return ACTION_ROLLLEFT;
|
||||
}else if(str == "rollright"){
|
||||
return ACTION_ROLLRIGHT;
|
||||
}else if(str == "fireprimary"){
|
||||
return ACTION_FIREPRIMARY;
|
||||
}else if(str == "firesecondary"){
|
||||
return ACTION_FIRESECONDARY;
|
||||
}else if(str == "weaponnext"){
|
||||
return ACTION_WEAPONNEXT;
|
||||
}else if(str == "weaponprev"){
|
||||
return ACTION_WEAPONPREV;
|
||||
}else if(str == "togglelights"){
|
||||
return ACTION_TOGGLE_LIGHTS;
|
||||
}else if(str == "togglefps"){
|
||||
return ACTION_TOGGLE_FPS;
|
||||
}else if(str == "toggleconsole"){
|
||||
return ACTION_TOGGLE_CONSOLE;
|
||||
}else if(str == "togglemouselook"){
|
||||
return ACTION_TOGGLE_MOUSELOOK;
|
||||
}else if(str == "quickmouselook"){
|
||||
return ACTION_QUICKMOUSELOOK;
|
||||
}else{
|
||||
return ACTION_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
string ControlScheme::ActionName(Action action)
|
||||
{
|
||||
switch(action)
|
||||
{
|
||||
case ACTION_NONE:
|
||||
return "none";
|
||||
case ACTION_FORWARD:
|
||||
return "forward";
|
||||
case ACTION_BACKWARD:
|
||||
return "backward";
|
||||
case ACTION_LOOKLEFT:
|
||||
return "lookleft";
|
||||
case ACTION_LOOKRIGHT:
|
||||
return "lookright";
|
||||
case ACTION_LOOKUP:
|
||||
return "lookup";
|
||||
case ACTION_LOOKDOWN:
|
||||
return "lookdown";
|
||||
case ACTION_MOVELEFT:
|
||||
return "moveleft";
|
||||
case ACTION_MOVERIGHT:
|
||||
return "moveright";
|
||||
case ACTION_MOVEUP:
|
||||
return "moveup";
|
||||
case ACTION_MOVEDOWN:
|
||||
return "movedown";
|
||||
case ACTION_ROLLLEFT:
|
||||
return "rollleft";
|
||||
case ACTION_ROLLRIGHT:
|
||||
return "rollright";
|
||||
case ACTION_FIREPRIMARY:
|
||||
return "fireprimary";
|
||||
case ACTION_FIRESECONDARY:
|
||||
return "firesecondary";
|
||||
case ACTION_WEAPONNEXT:
|
||||
return "weaponnext";
|
||||
case ACTION_WEAPONPREV:
|
||||
return "weaponprev";
|
||||
case ACTION_TOGGLE_LIGHTS:
|
||||
return "togglelights";
|
||||
case ACTION_TOGGLE_FPS:
|
||||
return "togglefps";
|
||||
case ACTION_TOGGLE_CONSOLE:
|
||||
return "toggleconsole";
|
||||
case ACTION_TOGGLE_MOUSELOOK:
|
||||
return "togglemouselook";
|
||||
case ACTION_QUICKMOUSELOOK:
|
||||
return "quickmouselook";
|
||||
default:
|
||||
return "unknown";
|
||||
};
|
||||
}
|
||||
|
||||
bool ControlScheme::IsBound(OpenArena::Keys key, Action action)
|
||||
{
|
||||
if(keyActions[key] == action)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
76
macosx/src/ctrls.h
Normal file
76
macosx/src/ctrls.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __ctrls_h__
|
||||
#define __ctrls_h__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "keys.h"
|
||||
#include "datatypes.h"
|
||||
|
||||
namespace OpenArena{
|
||||
class ControlScheme
|
||||
{
|
||||
public:
|
||||
enum Action
|
||||
{
|
||||
ACTION_NONE = 0,
|
||||
ACTION_FORWARD,
|
||||
ACTION_BACKWARD,
|
||||
ACTION_LOOKLEFT,
|
||||
ACTION_LOOKRIGHT,
|
||||
ACTION_LOOKUP,
|
||||
ACTION_LOOKDOWN,
|
||||
ACTION_MOVELEFT,
|
||||
ACTION_MOVERIGHT,
|
||||
ACTION_MOVEUP,
|
||||
ACTION_MOVEDOWN,
|
||||
ACTION_ROLLLEFT,
|
||||
ACTION_ROLLRIGHT,
|
||||
ACTION_FIREPRIMARY,
|
||||
ACTION_FIRESECONDARY,
|
||||
ACTION_WEAPONNEXT,
|
||||
ACTION_WEAPONPREV,
|
||||
ACTION_TOGGLE_LIGHTS,
|
||||
ACTION_TOGGLE_FPS,
|
||||
ACTION_TOGGLE_CONSOLE,
|
||||
ACTION_TOGGLE_MOUSELOOK,
|
||||
ACTION_QUICKMOUSELOOK,
|
||||
NUM_ACTIONS
|
||||
};
|
||||
|
||||
void LoadDefaultControlScheme();
|
||||
void UnBindAll();
|
||||
void UnBind(OpenArena::Keys key);
|
||||
void Bind(OpenArena::Keys key, Action action);
|
||||
void WriteToStream(std::ostream& output);
|
||||
static Action GetAction(const char* actionName);
|
||||
static const char* GetActionName(Action action);
|
||||
bool IsBound(OpenArena::Keys key, Action action);
|
||||
private:
|
||||
std::string ActionName(Action action);
|
||||
Action keyActions[256];
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
572
macosx/src/keys.cpp
Normal file
572
macosx/src/keys.cpp
Normal file
@@ -0,0 +1,572 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#include "keys.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
using std::string;
|
||||
|
||||
char OpenArena::KeyToASCII(Keys key, bool shift)
|
||||
{
|
||||
if(key == KEY_UNKNOWN)
|
||||
{
|
||||
return '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(key)
|
||||
{
|
||||
case KEY_OEM_1:
|
||||
if(shift)
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
else
|
||||
{
|
||||
return ';';
|
||||
}
|
||||
case KEY_OEM_2:
|
||||
if(shift)
|
||||
{
|
||||
return '?';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '/';
|
||||
}
|
||||
case KEY_OEM_3:
|
||||
if(shift)
|
||||
{
|
||||
return '~';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '`';
|
||||
}
|
||||
case KEY_OEM_4:
|
||||
if(shift)
|
||||
{
|
||||
return '{';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '[';
|
||||
}
|
||||
case KEY_OEM_5:
|
||||
if(shift)
|
||||
{
|
||||
return '|';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '\\';
|
||||
}
|
||||
case KEY_OEM_6:
|
||||
if(shift)
|
||||
{
|
||||
return '}';
|
||||
}
|
||||
else
|
||||
{
|
||||
return ']';
|
||||
}
|
||||
case KEY_OEM_7:
|
||||
if(shift)
|
||||
{
|
||||
return '\'';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '"';
|
||||
}
|
||||
case KEY_OEM_PERIOD:
|
||||
if(shift)
|
||||
{
|
||||
return '>';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '.';
|
||||
}
|
||||
case KEY_OEM_PLUS:
|
||||
if(shift)
|
||||
{
|
||||
return '+';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '=';
|
||||
}
|
||||
case KEY_OEM_COMMA:
|
||||
if(shift)
|
||||
{
|
||||
return '<';
|
||||
}
|
||||
else
|
||||
{
|
||||
return ',';
|
||||
}
|
||||
case KEY_OEM_MINUS:
|
||||
if(shift)
|
||||
{
|
||||
return '_';
|
||||
}
|
||||
else
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
default:
|
||||
if(key >= KEY_A && key <= KEY_Z)
|
||||
{
|
||||
if(shift)
|
||||
{
|
||||
return key - KEY_A + 'A';
|
||||
}
|
||||
else
|
||||
{
|
||||
return key - KEY_A + 'a';
|
||||
}
|
||||
}
|
||||
else if(key >= KEY_0 && key <= KEY_9)
|
||||
{
|
||||
if(shift)
|
||||
{
|
||||
switch(key - KEY_0)
|
||||
{
|
||||
case 0:
|
||||
return ')';
|
||||
case 1:
|
||||
return '!';
|
||||
case 2:
|
||||
return '@';
|
||||
case 3:
|
||||
return '#';
|
||||
case 4:
|
||||
return '$';
|
||||
case 5:
|
||||
return '%';
|
||||
case 6:
|
||||
return '^';
|
||||
case 7:
|
||||
return '&';
|
||||
case 8:
|
||||
return '*';
|
||||
case 9:
|
||||
return '(';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return key - KEY_0 + '0';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
return '\0';
|
||||
}
|
||||
|
||||
const char* OpenArena::GetKeyName(Keys key)
|
||||
{
|
||||
switch(key)
|
||||
{
|
||||
case KEY_UNKNOWN:
|
||||
return "unknown";
|
||||
case KEY_BUTTON0:
|
||||
return "button0";
|
||||
case KEY_BUTTON1:
|
||||
return "button1";
|
||||
case KEY_BUTTON2:
|
||||
return "button2";
|
||||
case KEY_BUTTON3:
|
||||
return "button3";
|
||||
case KEY_BUTTON4:
|
||||
return "button4";
|
||||
case KEY_LEFT:
|
||||
return "left";
|
||||
case KEY_RIGHT:
|
||||
return "right";
|
||||
case KEY_UP:
|
||||
return "up";
|
||||
case KEY_DOWN:
|
||||
return "down";
|
||||
case KEY_SPACE:
|
||||
return "space";
|
||||
case KEY_RETURN:
|
||||
return "return";
|
||||
case KEY_SHIFT:
|
||||
return "shift";
|
||||
case KEY_PAUSE:
|
||||
return "pause";
|
||||
case KEY_CONTROL:
|
||||
return "ctrl";
|
||||
case KEY_CAPITAL:
|
||||
return "caps";
|
||||
case KEY_ESCAPE:
|
||||
return "esc";
|
||||
case KEY_PRIOR:
|
||||
return "pgup";
|
||||
case KEY_NEXT:
|
||||
return "pgdn";
|
||||
case KEY_END:
|
||||
return "end";
|
||||
case KEY_HOME:
|
||||
return "home";
|
||||
case KEY_INSERT:
|
||||
return "insert";
|
||||
case KEY_DELETE:
|
||||
return "del";
|
||||
case KEY_LWIN:
|
||||
return "leftwin";
|
||||
case KEY_RWIN:
|
||||
return "rightwin";
|
||||
case KEY_APPS:
|
||||
return "apps";
|
||||
case KEY_NUMPAD0:
|
||||
return "kp0";
|
||||
case KEY_NUMPAD1:
|
||||
return "kp1";
|
||||
case KEY_NUMPAD2:
|
||||
return "kp2";
|
||||
case KEY_NUMPAD3:
|
||||
return "kp3";
|
||||
case KEY_NUMPAD4:
|
||||
return "kp4";
|
||||
case KEY_NUMPAD5:
|
||||
return "kp5";
|
||||
case KEY_NUMPAD6:
|
||||
return "kp6";
|
||||
case KEY_NUMPAD7:
|
||||
return "kp7";
|
||||
case KEY_NUMPAD8:
|
||||
return "kp8";
|
||||
case KEY_NUMPAD9:
|
||||
return "kp9";
|
||||
case KEY_MULTIPLY:
|
||||
return "multiply";
|
||||
case KEY_ADD:
|
||||
return "plus";
|
||||
case KEY_SUBTRACT:
|
||||
return "minus";
|
||||
case KEY_DIVIDE:
|
||||
return "divide";
|
||||
case KEY_F1:
|
||||
return "f1";
|
||||
case KEY_F2:
|
||||
return "f2";
|
||||
case KEY_F3:
|
||||
return "f3";
|
||||
case KEY_F4:
|
||||
return "f4";
|
||||
case KEY_F5:
|
||||
return "f5";
|
||||
case KEY_F6:
|
||||
return "f6";
|
||||
case KEY_F7:
|
||||
return "f7";
|
||||
case KEY_F8:
|
||||
return "f8";
|
||||
case KEY_F9:
|
||||
return "f9";
|
||||
case KEY_F10:
|
||||
return "f10";
|
||||
case KEY_F11:
|
||||
return "f11";
|
||||
case KEY_F12:
|
||||
return "f12";
|
||||
case KEY_NUMLOCK:
|
||||
return "numlock";
|
||||
case KEY_SCROLL:
|
||||
return "scrolllock";
|
||||
case KEY_SEPARATOR:
|
||||
return "_separator";
|
||||
case KEY_OEM_1:
|
||||
return "semicolon";
|
||||
case KEY_OEM_2:
|
||||
return "slash";
|
||||
case KEY_OEM_3:
|
||||
return "tilde";
|
||||
case KEY_OEM_4:
|
||||
return "leftbracket";
|
||||
case KEY_OEM_5:
|
||||
return "backslash";
|
||||
case KEY_OEM_6:
|
||||
return "rightbracket";
|
||||
case KEY_OEM_7:
|
||||
return "quote";
|
||||
case KEY_OEM_PERIOD:
|
||||
return "period";
|
||||
case KEY_OEM_PLUS:
|
||||
return "equals";
|
||||
case KEY_OEM_MINUS:
|
||||
return "minus";
|
||||
case KEY_OEM_COMMA:
|
||||
return "comma";
|
||||
case KEY_BACK:
|
||||
return "backspace";
|
||||
case KEY_TAB:
|
||||
return "tab";
|
||||
case KEY_0:
|
||||
return "0";
|
||||
case KEY_1:
|
||||
return "1";
|
||||
case KEY_2:
|
||||
return "2";
|
||||
case KEY_3:
|
||||
return "3";
|
||||
case KEY_4:
|
||||
return "4";
|
||||
case KEY_5:
|
||||
return "5";
|
||||
case KEY_6:
|
||||
return "6";
|
||||
case KEY_7:
|
||||
return "7";
|
||||
case KEY_8:
|
||||
return "8";
|
||||
case KEY_9:
|
||||
return "9";
|
||||
case KEY_A:
|
||||
return "a";
|
||||
case KEY_B:
|
||||
return "b";
|
||||
case KEY_C:
|
||||
return "c";
|
||||
case KEY_D:
|
||||
return "d";
|
||||
case KEY_E:
|
||||
return "e";
|
||||
case KEY_F:
|
||||
return "f";
|
||||
case KEY_G:
|
||||
return "g";
|
||||
case KEY_H:
|
||||
return "h";
|
||||
case KEY_I:
|
||||
return "i";
|
||||
case KEY_J:
|
||||
return "j";
|
||||
case KEY_K:
|
||||
return "k";
|
||||
case KEY_L:
|
||||
return "l";
|
||||
case KEY_M:
|
||||
return "m";
|
||||
case KEY_N:
|
||||
return "n";
|
||||
case KEY_O:
|
||||
return "o";
|
||||
case KEY_P:
|
||||
return "p";
|
||||
case KEY_Q:
|
||||
return "q";
|
||||
case KEY_R:
|
||||
return "r";
|
||||
case KEY_S:
|
||||
return "s";
|
||||
case KEY_T:
|
||||
return "t";
|
||||
case KEY_U:
|
||||
return "u";
|
||||
case KEY_V:
|
||||
return "v";
|
||||
case KEY_W:
|
||||
return "w";
|
||||
case KEY_X:
|
||||
return "x";
|
||||
case KEY_Y:
|
||||
return "y";
|
||||
case KEY_Z:
|
||||
return "z";
|
||||
case KEY_ALT_L:
|
||||
return "leftalt";
|
||||
case KEY_ALT_R:
|
||||
return "rightalt";
|
||||
case KEY_COMMAND:
|
||||
return "command";
|
||||
case KEY_ENTER:
|
||||
return "enter";
|
||||
case KEY_OPTION:
|
||||
return "option";
|
||||
}
|
||||
|
||||
return "invalid";
|
||||
}
|
||||
|
||||
OpenArena::Keys OpenArena::GetKey(const char* keyName)
|
||||
{
|
||||
string str = keyName;
|
||||
if (str.length() > 1)
|
||||
{
|
||||
if (str.substr(0,2) == "up")
|
||||
return OpenArena::KEY_UP;
|
||||
else if (str.substr(0,4) == "down")
|
||||
return OpenArena::KEY_DOWN;
|
||||
else if (str.substr(0,3) == "esc")
|
||||
return OpenArena::KEY_ESCAPE;
|
||||
else if (str.substr(0,6) == "pageup")
|
||||
return OpenArena::KEY_PRIOR;
|
||||
else if (str.substr(0,8) == "pagedown")
|
||||
return OpenArena::KEY_NEXT;
|
||||
else if (str.substr(0,5) == "right")
|
||||
return OpenArena::KEY_RIGHT;
|
||||
else if (str.substr(0,4) == "left")
|
||||
return OpenArena::KEY_LEFT;
|
||||
else if (str.substr(0,5) == "space")
|
||||
return OpenArena::KEY_SPACE;
|
||||
else if (str.substr(0,6) == "mouse1")
|
||||
return OpenArena::KEY_LBUTTON;
|
||||
else if (str.substr(0,6) == "mouse2")
|
||||
return OpenArena::KEY_RBUTTON;
|
||||
else if (str.substr(0,6) == "mouse3")
|
||||
return OpenArena::KEY_MBUTTON;
|
||||
else if (str.substr(0,4) == "home")
|
||||
return OpenArena::KEY_HOME;
|
||||
else if (str.substr(0,3) == "end")
|
||||
return OpenArena::KEY_END;
|
||||
else if (str.substr(0,3) == "tab")
|
||||
return OpenArena::KEY_TAB;
|
||||
else if (str.substr(0,5) == "enter")
|
||||
return OpenArena::KEY_RETURN;
|
||||
else if (str.substr(0,6) == "insert")
|
||||
return OpenArena::KEY_INSERT;
|
||||
else if (str.substr(0,6) == "delete")
|
||||
return OpenArena::KEY_DELETE;
|
||||
else if (str.substr(0,7) == "control")
|
||||
return OpenArena::KEY_CONTROL;
|
||||
else if (str.substr(0,5) == "shift")
|
||||
return OpenArena::KEY_SHIFT;
|
||||
else if (str.substr(0,7) == "numpad0")
|
||||
return OpenArena::KEY_NUMPAD0;
|
||||
else if (str.substr(0,7) == "numpad1")
|
||||
return OpenArena::KEY_NUMPAD1;
|
||||
else if (str.substr(0,7) == "numpad2")
|
||||
return OpenArena::KEY_NUMPAD2;
|
||||
else if (str.substr(0,7) == "numpad3")
|
||||
return OpenArena::KEY_NUMPAD3;
|
||||
else if (str.substr(0,7) == "numpad4")
|
||||
return OpenArena::KEY_NUMPAD4;
|
||||
else if (str.substr(0,7) == "numpad5")
|
||||
return OpenArena::KEY_NUMPAD5;
|
||||
else if (str.substr(0,7) == "numpad6")
|
||||
return OpenArena::KEY_NUMPAD6;
|
||||
else if (str.substr(0,7) == "numpad7")
|
||||
return OpenArena::KEY_NUMPAD7;
|
||||
else if (str.substr(0,7) == "numpad8")
|
||||
return OpenArena::KEY_NUMPAD8;
|
||||
else if (str.substr(0,7) == "numpad9")
|
||||
return OpenArena::KEY_NUMPAD9;
|
||||
else if (str.substr(0,9) == "separator")
|
||||
return OpenArena::KEY_SEPARATOR;
|
||||
else if (str.substr(0,4) == "lwin")
|
||||
return OpenArena::KEY_LWIN;
|
||||
else if (str.substr(0,4) == "rwin")
|
||||
return OpenArena::KEY_RWIN;
|
||||
else if (str.substr(0,4) == "apps")
|
||||
return OpenArena::KEY_APPS;
|
||||
else if (str.substr(0,7) == "numpad*")
|
||||
return OpenArena::KEY_MULTIPLY;
|
||||
else if (str.substr(0,7) == "numpad+")
|
||||
return OpenArena::KEY_ADD;
|
||||
else if (str.substr(0,7) == "numpad/")
|
||||
return OpenArena::KEY_DIVIDE;
|
||||
else if (str.substr(0,7) == "numpad-")
|
||||
return OpenArena::KEY_SUBTRACT;
|
||||
else if (str.substr(0,6) == "scroll")
|
||||
return OpenArena::KEY_SCROLL;
|
||||
else if (str.substr(0,7) == "numlock")
|
||||
return OpenArena::KEY_NUMLOCK;
|
||||
else if (str.substr(0,5) == "pause")
|
||||
return OpenArena::KEY_PAUSE;
|
||||
else if (str.substr(0,8) == "capslock")
|
||||
return OpenArena::KEY_CAPITAL;
|
||||
|
||||
|
||||
|
||||
/*uncomment this to enable f1 as a mappable key
|
||||
else if(str.substr(0,2) == "f1")
|
||||
return OpenArena::KEY_F1;
|
||||
*/
|
||||
|
||||
else if (str.substr(0,2) == "f2")
|
||||
return OpenArena::KEY_F2;
|
||||
else if (str.substr(0,2) == "f3")
|
||||
return OpenArena::KEY_F3;
|
||||
else if (str.substr(0,2) == "f4")
|
||||
return OpenArena::KEY_F4;
|
||||
else if (str.substr(0,2) == "f5")
|
||||
return OpenArena::KEY_F5;
|
||||
else if (str.substr(0,2) == "f6")
|
||||
return OpenArena::KEY_F6;
|
||||
else if (str.substr(0,2) == "f7")
|
||||
return OpenArena::KEY_F7;
|
||||
else if (str.substr(0,2) == "f8")
|
||||
return OpenArena::KEY_F8;
|
||||
else if (str.substr(0,2) == "f9")
|
||||
return OpenArena::KEY_F9;
|
||||
else if (str.substr(0,2) == "f10")
|
||||
return OpenArena::KEY_F10;
|
||||
else if (str.substr(0,2) == "f11")
|
||||
return OpenArena::KEY_F11;
|
||||
else if (str.substr(0,2) == "f12")
|
||||
return OpenArena::KEY_F12;
|
||||
//Add Game specific keys here and e-mail headhunter45@hotmail.com subject OpenArena keys so I can add them please
|
||||
else if (str.substr(0,4) == "null")
|
||||
return OpenArena::KEY_UNKNOWN;
|
||||
else
|
||||
return OpenArena::KEY_UNKNOWN;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(str[0] == '~' || str[0] == '`')
|
||||
return OpenArena::KEY_OEM_3;
|
||||
else if (str[0] == '?' || str[0] == '/')
|
||||
return OpenArena::KEY_OEM_2;
|
||||
else if (str[0] == '.' || str[0] == '>')
|
||||
return OpenArena::KEY_OEM_PERIOD;
|
||||
else if (str[0] == '+' || str[0] == '=')
|
||||
return OpenArena::KEY_OEM_PLUS;
|
||||
else if (str[0] == ';' || str[0] == ':')
|
||||
return OpenArena::KEY_OEM_1;
|
||||
else if (str[0] == ',' || str[0] == '<')
|
||||
return OpenArena::KEY_OEM_COMMA;
|
||||
else if (str[0] == '-' || str[0] == '_')
|
||||
return OpenArena::KEY_OEM_MINUS;
|
||||
else if (str[0] == '[' || str[0] == '{')
|
||||
return OpenArena::KEY_OEM_4;
|
||||
else if (str[0] == ']' || str[0] == '}')
|
||||
return OpenArena::KEY_OEM_6;
|
||||
else if (str[0] == '\\' || str[0] == '|')
|
||||
return OpenArena::KEY_OEM_5;
|
||||
else if (str[0] == '\'' || str[0] == '"')
|
||||
return OpenArena::KEY_OEM_7;
|
||||
else if (isalpha(str[0]))
|
||||
return (OpenArena::Keys)(toupper(str[0]) - 'A' + OpenArena::KEY_A);
|
||||
else if(isdigit(str[0]))
|
||||
return (OpenArena::Keys)(str[0] - '0' + OpenArena::KEY_0);
|
||||
else
|
||||
return OpenArena::KEY_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
220
macosx/src/keys.h
Normal file
220
macosx/src/keys.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __keys_h__
|
||||
#define __keys_h__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for Keys here.
|
||||
*
|
||||
* Write detailed description for Keys here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for Keys here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
enum Keys{
|
||||
KEY_UNKNOWN = 0,
|
||||
KEY_BUTTON0,
|
||||
KEY_BUTTON1,
|
||||
KEY_BUTTON2,
|
||||
KEY_BUTTON3,
|
||||
KEY_BUTTON4,
|
||||
KEY_LEFT,
|
||||
KEY_RIGHT,
|
||||
KEY_UP,
|
||||
KEY_DOWN,
|
||||
KEY_SPACE,
|
||||
KEY_RETURN,
|
||||
KEY_SHIFT,
|
||||
KEY_PAUSE,
|
||||
KEY_CONTROL,
|
||||
KEY_CAPITAL,
|
||||
KEY_ESCAPE,
|
||||
KEY_PRIOR,
|
||||
KEY_NEXT,
|
||||
KEY_END,
|
||||
KEY_HOME,
|
||||
KEY_INSERT,
|
||||
KEY_DELETE,
|
||||
KEY_LWIN,
|
||||
KEY_RWIN,
|
||||
KEY_APPS,
|
||||
KEY_NUMPAD0,
|
||||
KEY_NUMPAD1,
|
||||
KEY_NUMPAD2,
|
||||
KEY_NUMPAD3,
|
||||
KEY_NUMPAD4,
|
||||
KEY_NUMPAD5,
|
||||
KEY_NUMPAD6,
|
||||
KEY_NUMPAD7,
|
||||
KEY_NUMPAD8,
|
||||
KEY_NUMPAD9,
|
||||
KEY_MULTIPLY,
|
||||
KEY_ADD,
|
||||
KEY_SUBTRACT,
|
||||
KEY_DIVIDE,
|
||||
KEY_F1,
|
||||
KEY_F2,
|
||||
KEY_F3,
|
||||
KEY_F4,
|
||||
KEY_F5,
|
||||
KEY_F6,
|
||||
KEY_F7,
|
||||
KEY_F8,
|
||||
KEY_F9,
|
||||
KEY_F10,
|
||||
KEY_F11,
|
||||
KEY_F12,
|
||||
KEY_NUMLOCK,
|
||||
KEY_SCROLL,
|
||||
KEY_SEPARATOR,
|
||||
KEY_OEM_1,
|
||||
KEY_OEM_2,
|
||||
KEY_OEM_3,
|
||||
KEY_OEM_4,
|
||||
KEY_OEM_5,
|
||||
KEY_OEM_6,
|
||||
KEY_OEM_7,
|
||||
KEY_OEM_PERIOD,
|
||||
KEY_OEM_PLUS,
|
||||
KEY_OEM_MINUS,
|
||||
KEY_OEM_COMMA,
|
||||
KEY_BACK,
|
||||
KEY_TAB,
|
||||
KEY_0,
|
||||
KEY_1,
|
||||
KEY_2,
|
||||
KEY_3,
|
||||
KEY_4,
|
||||
KEY_5,
|
||||
KEY_6,
|
||||
KEY_7,
|
||||
KEY_8,
|
||||
KEY_9,
|
||||
KEY_A,
|
||||
KEY_B,
|
||||
KEY_C,
|
||||
KEY_D,
|
||||
KEY_E,
|
||||
KEY_F,
|
||||
KEY_G,
|
||||
KEY_H,
|
||||
KEY_I,
|
||||
KEY_J,
|
||||
KEY_K,
|
||||
KEY_L,
|
||||
KEY_M,
|
||||
KEY_N,
|
||||
KEY_O,
|
||||
KEY_P,
|
||||
KEY_Q,
|
||||
KEY_R,
|
||||
KEY_S,
|
||||
KEY_T,
|
||||
KEY_U,
|
||||
KEY_V,
|
||||
KEY_W,
|
||||
KEY_X,
|
||||
KEY_Y,
|
||||
KEY_Z,
|
||||
KEY_ALT_L,
|
||||
KEY_ALT_R,
|
||||
KEY_ENTER,
|
||||
KEY_COMMAND,
|
||||
KEY_OPTION
|
||||
};
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for KEY_LBUTTON here.
|
||||
*
|
||||
* Write detailed description for KEY_LBUTTON here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for KEY_LBUTTON here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
const Keys KEY_LBUTTON = KEY_BUTTON0;
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for KEY_RBUTTON here.
|
||||
*
|
||||
* Write detailed description for KEY_RBUTTON here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for KEY_RBUTTON here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
const Keys KEY_RBUTTON = KEY_BUTTON1;
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for KEY_MBUTTON here.
|
||||
*
|
||||
* Write detailed description for KEY_MBUTTON here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for KEY_MBUTTON here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
const Keys KEY_MBUTTON = KEY_BUTTON2;
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for KeyToASCII here.
|
||||
*
|
||||
* \param key
|
||||
* Description of parameter key.
|
||||
*
|
||||
* \param shift
|
||||
* Description of parameter shift.
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for KeyToASCII here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for KeyToASCII here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
char KeyToASCII(Keys key, bool shift);
|
||||
const char* GetKeyName(Keys key);
|
||||
OpenArena::Keys GetKey(const char* keyName);
|
||||
|
||||
};
|
||||
#endif
|
||||
956
macosx/src/level.cpp
Normal file
956
macosx/src/level.cpp
Normal file
@@ -0,0 +1,956 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Module: level.cpp
|
||||
// Author: Tom Hicks
|
||||
// Creation: 09-01-2003
|
||||
// LastEdit: 06-20-2005
|
||||
// Editors: Tom Hicks
|
||||
//
|
||||
// Purpose:
|
||||
// To implement the world or at least a reasonable copy.
|
||||
//
|
||||
// Summary of Methods:
|
||||
// Global
|
||||
// -function name
|
||||
// description
|
||||
// blahClass
|
||||
// -function name
|
||||
// description
|
||||
//
|
||||
// Summary of Properties:
|
||||
// blahClass
|
||||
// -property name
|
||||
// description
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "level.h"
|
||||
#include "version.h"
|
||||
|
||||
#pragma comment(lib, "bass.lib")
|
||||
#ifdef WIN32
|
||||
#pragma warning(disable:4996)
|
||||
#endif
|
||||
using namespace std;
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
Level::Level(EventManager* eventManager)
|
||||
{
|
||||
_eventManager = eventManager;
|
||||
_window = NULL;
|
||||
textureNames = NULL;
|
||||
numTextures = 0;
|
||||
|
||||
screen.SetName(OPENARENA_VERSION);
|
||||
|
||||
showFPS = false;
|
||||
showConsole = false;
|
||||
|
||||
nextLevel = "intro.map";
|
||||
gamedir = "oa/";
|
||||
sound = true;
|
||||
|
||||
defaultPlayer = new Player;
|
||||
|
||||
numTriangles = 0;
|
||||
triangles = NULL;
|
||||
/*
|
||||
for(int x=0; x<4; x++)
|
||||
LightAmbient[x] = 5;
|
||||
*/
|
||||
//Player Stuff
|
||||
mouseSpeed = 5;
|
||||
turnSpeed = 1.0f;
|
||||
moveSpeed = 0.2f;
|
||||
mlook = true;
|
||||
}
|
||||
|
||||
Level::~Level()
|
||||
{
|
||||
if(defaultPlayer)
|
||||
{
|
||||
delete defaultPlayer;
|
||||
defaultPlayer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool Level::LoadMap(string mapname)
|
||||
{
|
||||
ifstream input;
|
||||
string readBuffer;
|
||||
|
||||
//players.Insert(*defaultPlayer);
|
||||
|
||||
mapname = gamedir + "maps/" + mapname;
|
||||
|
||||
if(tolower(Right(mapname, 4)) != ".map")
|
||||
mapname = mapname + ".map";
|
||||
|
||||
input.open(mapname.c_str());
|
||||
|
||||
if(!input)
|
||||
{
|
||||
char* tmpChar = new char[mapname.length() + 41];
|
||||
strcpy(tmpChar, "Unable to load level file ");
|
||||
strcat(tmpChar, mapname.c_str());
|
||||
strcat(tmpChar, " doesn't exist.");
|
||||
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
MessageBox(NULL,tmpChar,"ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
#endif
|
||||
delete [] tmpChar;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsolePrint("map file \"" + mapname + "\" opened successfully");
|
||||
}
|
||||
|
||||
//Gravity
|
||||
input >> readBuffer;
|
||||
gravity = (float)atof(readBuffer.c_str());
|
||||
|
||||
//Number of triangles
|
||||
input >> readBuffer;
|
||||
numTriangles = Integer(readBuffer);
|
||||
|
||||
//Triangle Data
|
||||
triangles = new Triangle[numTriangles];
|
||||
for(unsigned int i=0; i<numTriangles; i++)
|
||||
{
|
||||
//TextureID
|
||||
input >> readBuffer;
|
||||
triangles[i].texID = Integer(readBuffer);
|
||||
|
||||
for(unsigned int i2=0; i2<3; i2++)
|
||||
{
|
||||
//Vertex Data
|
||||
input >> readBuffer;
|
||||
triangles[i].vertecies[i2].coordinates.x = atof(readBuffer.c_str());
|
||||
input >> readBuffer;
|
||||
triangles[i].vertecies[i2].coordinates.y = atof(readBuffer.c_str());
|
||||
input >> readBuffer;
|
||||
triangles[i].vertecies[i2].coordinates.z = atof(readBuffer.c_str());
|
||||
input >> readBuffer;
|
||||
triangles[i].vertecies[i2].textureCoordinates.x = (float)atof(readBuffer.c_str());
|
||||
input >> readBuffer;
|
||||
triangles[i].vertecies[i2].textureCoordinates.y = (float)atof(readBuffer.c_str());
|
||||
}
|
||||
|
||||
//Normal
|
||||
input >> readBuffer;
|
||||
|
||||
triangles[i].normal.x = atof(readBuffer.c_str());
|
||||
input >> readBuffer;
|
||||
triangles[i].normal.y = atof(readBuffer.c_str());
|
||||
input >> readBuffer;
|
||||
triangles[i].normal.z = atof(readBuffer.c_str());
|
||||
}
|
||||
char lpszNumTriangles[6];
|
||||
sprintf(lpszNumTriangles, "%d", numTriangles);
|
||||
ConsolePrint(lpszNumTriangles + string(" triangles successfully read"));
|
||||
|
||||
//Number of textures;
|
||||
input >> readBuffer;
|
||||
numTextures = Integer(readBuffer);
|
||||
|
||||
//Texture data
|
||||
textureNames = new string[numTextures];
|
||||
for(unsigned int i=0; i<numTextures; i++)
|
||||
{
|
||||
input >> textureNames[i];
|
||||
}
|
||||
LoadGLTextures();
|
||||
char lpszNumTextures[6];
|
||||
sprintf(lpszNumTextures, "%d", numTextures);
|
||||
ConsolePrint(lpszNumTextures + string(" textures successfully read"));
|
||||
|
||||
//BGM
|
||||
input >> bgm;
|
||||
|
||||
//Build display list
|
||||
|
||||
//Sound
|
||||
if (sound)
|
||||
{
|
||||
ConsolePrint("Starting sound");
|
||||
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
BASS_Init(-1, 44100, BASS_DEVICE_LEAVEVOL, g_hWnd);
|
||||
BASS_Start();
|
||||
BASS_CDInit(NULL, BASS_DEVICE_LEAVEVOL);
|
||||
#endif
|
||||
|
||||
if(bgm.length()>=4)
|
||||
{
|
||||
if( toupper(bgm[0]) == 'C' &&
|
||||
toupper(bgm[1]) == 'D' &&
|
||||
toupper(bgm[2]) == 'A')
|
||||
{
|
||||
bgmCDA = Integer(bgm.substr(3,bgm.length()));
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
BASS_CDPlay(bgmCDA, 1, 0);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
bgmCDA=0;
|
||||
string tmpstr = gamedir + "music/bgm/" + bgm;
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
bgmStream = BASS_StreamCreateFile(0, (void*)tmpstr.c_str(), 0, 0, BASS_STREAM_AUTOFREE);
|
||||
BASS_StreamPlay(bgmStream, 1, BASS_SAMPLE_LOOP);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
ConsolePrint("Sound init complete");
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsolePrint("Sound disabled");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
bool Level::LoadMap()
|
||||
{
|
||||
return LoadMap(nextLevel);
|
||||
}
|
||||
|
||||
void Level::SaveMap(string mapname)
|
||||
{
|
||||
ofstream output;
|
||||
|
||||
mapname = gamedir + "maps/" + mapname;
|
||||
|
||||
if(tolower(Right(mapname, 4)) != ".map")
|
||||
mapname = mapname + ".map";
|
||||
|
||||
output.open(mapname.c_str());
|
||||
|
||||
if(!output)
|
||||
{
|
||||
char* tmpChar = new char[mapname.length() + 42];
|
||||
strcpy(tmpChar, "Unable to save level file ");
|
||||
strcat(tmpChar, mapname.c_str());
|
||||
strcat(tmpChar, " already exists.");
|
||||
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
MessageBox(NULL,tmpChar,"ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
#endif
|
||||
delete [] tmpChar;
|
||||
return;
|
||||
}
|
||||
|
||||
//Gravity
|
||||
output << gravity << endl;
|
||||
|
||||
//Number of triangles
|
||||
output << numTriangles << endl;
|
||||
|
||||
//Triangle Data
|
||||
for(unsigned int i=0; i<numTriangles; i++)
|
||||
{
|
||||
output << triangles[i].texID << endl;
|
||||
|
||||
for(unsigned int i2=0; i2<3; i2++)
|
||||
{
|
||||
output << triangles[i].vertecies[i2].coordinates.x << " "
|
||||
<< triangles[i].vertecies[i2].coordinates.y << " "
|
||||
<< triangles[i].vertecies[i2].coordinates.z << " "
|
||||
<< triangles[i].vertecies[i2].textureCoordinates.x << " "
|
||||
<< triangles[i].vertecies[i2].textureCoordinates.y << endl;
|
||||
}
|
||||
|
||||
output << triangles[i].normal.x << " "
|
||||
<< triangles[i].normal.y << " "
|
||||
<< triangles[i].normal.z << endl;
|
||||
}
|
||||
|
||||
//Number of textures;
|
||||
output << numTextures;
|
||||
|
||||
//Texture data
|
||||
for(unsigned int i=0; i<numTextures; i++)
|
||||
{
|
||||
output << textureNames[i];
|
||||
}
|
||||
|
||||
//BGM
|
||||
output << bgm;
|
||||
|
||||
}
|
||||
|
||||
void Level::Render()
|
||||
{
|
||||
glPushMatrix();
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glLoadIdentity();
|
||||
|
||||
// Move the camera to where the player is
|
||||
defaultPlayer->camera.Look();
|
||||
|
||||
for (uint32 i=0; i<numTriangles; i++)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, textures[triangles[i].texID]->ID());//Bind this triangle's texture
|
||||
glBegin(GL_TRIANGLES);
|
||||
// glNormal3f((GLfloat)triangles[i].normal.x, (GLfloat)triangles[i].normal.y, (GLfloat)triangles[i].normal.z);
|
||||
for (uint32 i2=0; i2<3; i2++)
|
||||
{
|
||||
glTexCoord2f(triangles[i].vertecies[i2].textureCoordinates.x,
|
||||
triangles[i].vertecies[i2].textureCoordinates.y);
|
||||
glVertex3f((GLfloat)triangles[i].vertecies[i2].coordinates.x,
|
||||
(GLfloat)triangles[i].vertecies[i2].coordinates.y,
|
||||
(GLfloat)triangles[i].vertecies[i2].coordinates.z);
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
glPopMatrix();
|
||||
|
||||
//Draw HUD
|
||||
//ummm nothing here yet
|
||||
|
||||
|
||||
|
||||
//Draw FPS
|
||||
//This may not work yet
|
||||
if (showFPS)
|
||||
{
|
||||
char fps[20];
|
||||
sprintf(fps, "fps %d", FPS());
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glColor3f(1,1,1);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
glFont.Print(glFont.ScreenWidth() - 120, glFont.ScreenHeight() - 30, fps, 0);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
if(showConsole)
|
||||
{
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glColor3f(1,1,1);
|
||||
|
||||
//disable lighting and depth testing
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, menuTextures[GL_MY_TEXTURE_CONSOLEBACKGROUND].ID());
|
||||
//glBindTexture(GL_TEXTURE_2D, 4);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glOrtho(0, screen.GetWidth(), 0, screen.GetHeight(), -1, 1);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(0,0);
|
||||
glVertex2i(0,screen.GetHeight()/2);
|
||||
glTexCoord2f(0,1);
|
||||
glVertex2i(0,screen.GetHeight());
|
||||
glTexCoord2f(1,1);
|
||||
glVertex2i(screen.GetWidth(),screen.GetHeight());
|
||||
glTexCoord2f(1,0);
|
||||
glVertex2i(screen.GetWidth(),screen.GetHeight()/2);
|
||||
glEnd();
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
|
||||
glDisable(GL_LIGHTING);
|
||||
|
||||
//enable blending
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
//render the console background
|
||||
//render the console output text
|
||||
unsigned int i;
|
||||
for(i=0; i<MAX_CONSOLE_LINES-1; i++)
|
||||
{
|
||||
Print(30, glFont.ScreenHeight() - i*20, consoleOutput[MAX_CONSOLE_LINES-i-2].c_str(), 0);
|
||||
}
|
||||
|
||||
//Render the currently typed command
|
||||
Print(30,glFont.ScreenHeight() - i*20, consoleHistory[0].c_str(),0);
|
||||
|
||||
//disable blending
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
//re-enable lighting and depth testing
|
||||
//glEnable(GL_LIGHTING);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
}
|
||||
|
||||
void Level::UnloadMap()
|
||||
{
|
||||
//Stop audio
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
BASS_StreamFree(bgmStream);
|
||||
BASS_Stop();
|
||||
BASS_CDFree();
|
||||
BASS_Free();
|
||||
#endif
|
||||
|
||||
//Delete display list
|
||||
|
||||
//Free all polygon data
|
||||
if(triangles)
|
||||
{
|
||||
delete [] triangles;
|
||||
triangles = NULL;
|
||||
}
|
||||
|
||||
//Free all map textures
|
||||
if(!textures.IsEmpty())
|
||||
{
|
||||
//TODOiterate over list and delete all entries
|
||||
}
|
||||
textures.Clear();
|
||||
|
||||
//Free the array of texture names
|
||||
if (textureNames)
|
||||
{
|
||||
delete [] textureNames;
|
||||
textureNames = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void Level::LoadGLTextures()
|
||||
{
|
||||
if(_window != NULL)
|
||||
{
|
||||
/*
|
||||
GLfloat light[4] = {1.0f,1.0f,1.0f,0.5f};
|
||||
glLightfv(GL_LIGHT1, GL_AMBIENT, light);
|
||||
glEnable(GL_LIGHT1);
|
||||
glEnable(GL_LIGHTING);
|
||||
*/
|
||||
|
||||
textures.Clear();
|
||||
|
||||
for(uint32 i=0; i<numTextures; i++)
|
||||
{
|
||||
Texture* texture = new Texture();
|
||||
if(!texture->Load(gamedir + "textures/" + textureNames[i]))
|
||||
texture->Load(DEFAULT_TEXTURE_NAME);
|
||||
textures[i] = texture;
|
||||
}
|
||||
|
||||
if(!glFont.BuildFont((gamedir + "textures/menu/font.bmp").c_str()))
|
||||
glFont.BuildFont("oa/textures/menu/font.bmp");
|
||||
|
||||
//Load the console background image
|
||||
if(!menuTextures[GL_MY_TEXTURE_CONSOLEBACKGROUND].Load(gamedir + "textures/menu/con_back.tga"))
|
||||
{
|
||||
menuTextures[GL_MY_TEXTURE_CONSOLEBACKGROUND].Load("oa/textures/menu/con_back.bmp");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32 Level::FPS()
|
||||
{
|
||||
static uint32 fps=0;
|
||||
static uint32 fps2=0;
|
||||
static float last=0.0f; // might need to change to double
|
||||
|
||||
//hmmm what the hell is this called in linux I should possibly abstract this
|
||||
#ifdef WIN32
|
||||
float time=GetTickCount()*.001f;
|
||||
#else
|
||||
float time = 0;
|
||||
#endif
|
||||
|
||||
++fps;
|
||||
|
||||
if(time>last+1)
|
||||
{
|
||||
last=time;
|
||||
fps2 = fps;
|
||||
fps=0;
|
||||
}
|
||||
return fps2;
|
||||
}
|
||||
|
||||
void Level::Execute(string cmd)
|
||||
{
|
||||
string command;
|
||||
|
||||
uint32 i=0xFFFFFFFF;
|
||||
while(word(cmd, ++i) != "")
|
||||
{
|
||||
command = tolower(word(cmd, i));
|
||||
|
||||
if(command == "set")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
|
||||
if(command == "turnspeed")
|
||||
{
|
||||
turnSpeed = (float)atof(word(cmd, ++i).c_str());//Floating(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "movespeed")
|
||||
{
|
||||
moveSpeed = (float)atof(word(cmd, ++i).c_str());//FLoating(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "mousespeed")
|
||||
{
|
||||
mouseSpeed = (float)atof(word(cmd, ++i).c_str());
|
||||
}
|
||||
else if(command == "mouselook")
|
||||
{
|
||||
mlook = Truth(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "maxfps")
|
||||
{
|
||||
maxFPS = Integer(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "sound")
|
||||
{
|
||||
sound = Truth(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "game")
|
||||
{
|
||||
gamedir= word(cmd, ++i);
|
||||
}
|
||||
else if(command == "screenwidth")
|
||||
{
|
||||
screen.SetWidth(Integer(word(cmd, ++i)));
|
||||
}
|
||||
else if(command == "screenheight")
|
||||
{
|
||||
screen.SetHeight(Integer(word(cmd, ++i)));
|
||||
}
|
||||
else if(command == "fullscreen")
|
||||
{
|
||||
screen.SetFullscreen(Truth(word(cmd, ++i)));
|
||||
}
|
||||
else if(command == "colordepth")
|
||||
{
|
||||
screen.SetColorDepth(Integer(word(cmd, ++i)));
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsolePrint("Variable " + command + " doesn't exist");
|
||||
}
|
||||
}
|
||||
else if(command == "bind")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
string key = tolower(word(cmd, ++i));
|
||||
if(ControlScheme::GetAction(command.c_str())==OpenArena::ControlScheme::ACTION_NONE)
|
||||
{
|
||||
ConsolePrint("No action identified by " + command);
|
||||
}
|
||||
else if (GetKey(key.c_str()) == OpenArena::KEY_UNKNOWN)
|
||||
{
|
||||
ConsolePrint("No key identified by " + key);
|
||||
}
|
||||
else
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(key.c_str()), ControlScheme::GetAction(command.c_str()));
|
||||
}
|
||||
}
|
||||
else if(command == "map" || command == "map_load")
|
||||
{
|
||||
nextLevel = word(cmd, ++i);
|
||||
UnloadMap();
|
||||
if(!LoadMap())
|
||||
{
|
||||
ConsolePrint("Unable to load level " + command);
|
||||
nextLevel = "intro.map";
|
||||
LoadMap();
|
||||
}
|
||||
}
|
||||
else if(command == "unbind")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
|
||||
if(command == "all")
|
||||
{
|
||||
defaultPlayer[0].controls.UnBindAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
defaultPlayer[0].controls.UnBind(GetKey(command.c_str()));
|
||||
}
|
||||
}
|
||||
else if(command == "exec" || command == "config_load")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
if(!LoadConfig(command))
|
||||
{
|
||||
ConsolePrint("Unable to load config file " + word(cmd, i));
|
||||
}
|
||||
}
|
||||
else if(command == "map_save")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
SaveMap(command);
|
||||
}
|
||||
else if(command == "config_save")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
SaveConfig(command);
|
||||
}
|
||||
/*
|
||||
else if(command == "map_add_triangle")
|
||||
{
|
||||
if(triangles != NULL)
|
||||
{
|
||||
TRIANGLE* temp = triangles;
|
||||
triangles = new TRIANGLE[numTriangles + 1];
|
||||
for(int i=0; i<numTriangles; i++)
|
||||
{
|
||||
triangles[i] = temp[i];
|
||||
}
|
||||
|
||||
triangles[numTriangles].texID = 0;
|
||||
for(int i=0; i<3; i++)
|
||||
{
|
||||
triangles[numTriangles].vertecies[i].x = 0;
|
||||
triangles[numTriangles].vertecies[i].y = 0;
|
||||
triangles[numTriangles].vertecies[i].z = 0;
|
||||
triangles[numTriangles].texCoords[i].x = 0;
|
||||
triangles[numTriangles].texCoords[i].y = 0;
|
||||
}
|
||||
numTriangles++;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
*/
|
||||
else if(command == "quit")
|
||||
{
|
||||
//This needs to be abstracted somehow
|
||||
#ifdef WIN32
|
||||
PostQuitMessage(0);
|
||||
#endif
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsolePrint("Unknown command " + command);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Level::ParseCmds(const char* lpCmdLine)
|
||||
{
|
||||
string cmd = lpCmdLine;
|
||||
string command;
|
||||
|
||||
uint32 i=0;
|
||||
command = word(cmd, i);
|
||||
while(command != "")
|
||||
{
|
||||
if(command == "+set")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
|
||||
if(command == "turnspeed")
|
||||
{
|
||||
turnSpeed = (float)atof(word(cmd, ++i).c_str());
|
||||
}
|
||||
else if(command == "mousespeed")
|
||||
{
|
||||
mouseSpeed = (float)atof(word(cmd, ++i).c_str());
|
||||
}
|
||||
else if(command == "maxfps")
|
||||
{
|
||||
maxFPS = Integer(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "sound")
|
||||
{
|
||||
sound = Truth(word(cmd, ++i));
|
||||
}
|
||||
else if(command == "game")
|
||||
{
|
||||
gamedir= word(cmd, ++i);
|
||||
if(gamedir[gamedir.length()-1] != '/'){
|
||||
gamedir = gamedir + '/';
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(command == "+bind")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
|
||||
if(command == "forward")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_FORWARD);
|
||||
}
|
||||
else if(command == "backward")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_BACKWARD);
|
||||
}
|
||||
else if(command == "lookleft")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_LOOKLEFT);
|
||||
}
|
||||
else if(command == "lookright")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_LOOKRIGHT);
|
||||
}
|
||||
else if(command == "lookup")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_LOOKUP);
|
||||
}
|
||||
else if(command == "lookdown")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_LOOKDOWN);
|
||||
}
|
||||
else if(command == "moveup")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_MOVEUP);
|
||||
}
|
||||
else if(command == "movedown")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_MOVEDOWN);
|
||||
}
|
||||
else if(command == "moveleft")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_MOVELEFT);
|
||||
}
|
||||
else if(command == "moveright")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_MOVERIGHT);
|
||||
}
|
||||
else if(command == "fireprimary")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_FIREPRIMARY);
|
||||
}
|
||||
else if(command == "firesecondary")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_FIRESECONDARY);
|
||||
}
|
||||
else if(command == "weapnext")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_WEAPONNEXT);
|
||||
}
|
||||
else if(command == "weapprev")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_WEAPONPREV);
|
||||
}
|
||||
else if(command == "togglelights" || command == "togglelighting")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_TOGGLE_LIGHTS);
|
||||
}
|
||||
else if(command == "togglefps")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_TOGGLE_FPS);
|
||||
}
|
||||
else if(command == "toggleconsole")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_TOGGLE_CONSOLE);
|
||||
}
|
||||
else if(command == "togglemouselook")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_TOGGLE_MOUSELOOK);
|
||||
}
|
||||
else if(command == "quickmouselook")
|
||||
{
|
||||
defaultPlayer[0].controls.Bind(GetKey(word(cmd, ++i).c_str()), OpenArena::ControlScheme::ACTION_QUICKMOUSELOOK);
|
||||
}
|
||||
}
|
||||
else if(command == "+map" || command == "+map_load")
|
||||
{
|
||||
nextLevel = word(cmd, ++i);
|
||||
UnloadMap();
|
||||
LoadMap();
|
||||
}
|
||||
else if(command == "+unbind")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
|
||||
if(command == "all")
|
||||
{
|
||||
defaultPlayer[0].controls.UnBindAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
defaultPlayer[0].controls.UnBind(GetKey(command.c_str()));
|
||||
}
|
||||
}
|
||||
else if(command == "+exec" || command == "+config_load")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
LoadConfig(command);
|
||||
}
|
||||
else if(command == "+map_save")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
SaveMap(command);
|
||||
}
|
||||
else if(command == "+config_save")
|
||||
{
|
||||
command = tolower(word(cmd, ++i));
|
||||
SaveConfig(command);
|
||||
}
|
||||
|
||||
command = word(cmd, ++i);
|
||||
}
|
||||
}
|
||||
|
||||
void Level::LoadConfig()
|
||||
{
|
||||
showFPS = false;
|
||||
nextLevel = "intro.map";
|
||||
gamedir = "oa/";
|
||||
sound = true;
|
||||
|
||||
mouseSpeed = 5;
|
||||
turnSpeed = 1.0f;
|
||||
moveSpeed = .2f;
|
||||
mlook = true;
|
||||
}
|
||||
bool Level::LoadConfig(string cfgname)
|
||||
{
|
||||
ifstream input;
|
||||
string readBuffer;
|
||||
|
||||
cfgname = gamedir + "config/" + cfgname;
|
||||
|
||||
if(tolower(Right(cfgname, 4)) !=".cfg")
|
||||
cfgname = cfgname + ".cfg";
|
||||
|
||||
input.open(cfgname.c_str());
|
||||
|
||||
if(!input)
|
||||
return false;
|
||||
|
||||
getline(input, readBuffer);
|
||||
|
||||
while(input)
|
||||
{
|
||||
uint32 i=0xFFFFFFFF;
|
||||
|
||||
if(readBuffer[0] == '/' && readBuffer[1] == '/')
|
||||
{
|
||||
getline(input, readBuffer);
|
||||
}
|
||||
|
||||
Execute(readBuffer);
|
||||
|
||||
getline(input, readBuffer);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Level::SaveConfig(string cfgname)
|
||||
{
|
||||
ofstream output;
|
||||
|
||||
cfgname = gamedir + "config/" + cfgname;
|
||||
|
||||
if(tolower(Right(cfgname, 4)) !=".cfg")
|
||||
cfgname = cfgname + ".cfg";
|
||||
|
||||
output.open(cfgname.c_str());
|
||||
|
||||
if(!output)
|
||||
return;
|
||||
|
||||
//Client Config
|
||||
output << "set turnspeed " << turnSpeed << endl;
|
||||
output << "set mousespeed " << mouseSpeed << endl;
|
||||
output << "set mouselook " << mlook << endl;
|
||||
output << "set screenwidth " << screen.GetWidth() << endl;
|
||||
output << "set screenheight " << screen.GetHeight() << endl;
|
||||
output << "set colordepth " << screen.GetColorDepth() << endl;
|
||||
output << "set fullscreen " << screen.GetFullscreen() << endl;
|
||||
output << "set maxfps " << maxFPS << endl;
|
||||
|
||||
//Control Scheme
|
||||
defaultPlayer->controls.WriteToStream(output);
|
||||
}
|
||||
|
||||
void Level::Print(int x, int y, const char* str, unsigned int set)
|
||||
{
|
||||
glFont.Print(x,y,str, set);
|
||||
}
|
||||
|
||||
void Level::UpdateConsole(char newChar)
|
||||
{
|
||||
if(newChar == '\n')
|
||||
{
|
||||
for (int i=MAX_CONSOLE_HISTORY_LINES - 1; i>0; i--)
|
||||
{
|
||||
consoleHistory[i] = consoleHistory[i-1];
|
||||
}
|
||||
consoleHistory[0] = "";
|
||||
ConsolePrint(consoleHistory[1]);
|
||||
Execute(tolower(consoleHistory[1]));
|
||||
|
||||
}
|
||||
else if(newChar == OpenArena::KEY_BACK)
|
||||
{
|
||||
consoleHistory[0] = Left(consoleHistory[0], consoleHistory[0].length()-1);
|
||||
}
|
||||
else if(!(defaultPlayer->controls.IsBound(GetKey(&newChar), ControlScheme::ACTION_TOGGLE_CONSOLE)))
|
||||
{
|
||||
consoleHistory[0] = consoleHistory[0] + newChar;
|
||||
/*
|
||||
char errmsg[256];
|
||||
sprintf(errmsg, "Unhangled keypress: %d", newChar);
|
||||
MessageBox(NULL, errmsg, "Balls", MB_OK);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
void Level::ConsolePrint(string line)
|
||||
{
|
||||
for (int i=MAX_CONSOLE_OUTPUT_LINES - 1; i>0; i--)
|
||||
{
|
||||
consoleOutput[i] = consoleOutput[i-1];
|
||||
}
|
||||
consoleOutput[0] = line;
|
||||
}
|
||||
|
||||
void Level::SetWindow(Window* window)
|
||||
{
|
||||
_window = window;
|
||||
}
|
||||
|
||||
Window* Level::GetWindow()
|
||||
{
|
||||
return _window;
|
||||
}
|
||||
};
|
||||
143
macosx/src/level.h
Normal file
143
macosx/src/level.h
Normal file
@@ -0,0 +1,143 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __LEVEL_H__
|
||||
#define __LEVEL_H__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <cctype>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
#if defined USE_GLX
|
||||
#include <GL/gl.h>
|
||||
#elif defined USE_AGL
|
||||
#include <OpenGL/gl.h>
|
||||
#elif defined USE_CGL
|
||||
#include <OpenGL/gl.h>
|
||||
#elif defined USE_WGL
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#endif
|
||||
|
||||
#include <cstdio> //for file I/O
|
||||
|
||||
#include "mydefs.h"
|
||||
#include "bmp.h"
|
||||
#include "tga.h"
|
||||
#include "list.h"
|
||||
#ifdef WIN32
|
||||
#include "../lib/bass.h" //for audio in windows only this should be replaced by oa_audio
|
||||
#endif
|
||||
#include "vector.h"
|
||||
#include "camera.h"
|
||||
#include "geometry.h"
|
||||
#include "myglFont.h"
|
||||
#include "myglTexture.h"
|
||||
#include "player.h"
|
||||
#include "strmanip.h"
|
||||
#include "keys.h"
|
||||
#include "EventManager.h"
|
||||
|
||||
using namespace std;
|
||||
using OpenArena::Triangle;
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
const float piover180 = 0.0174532925f;
|
||||
const string DEFAULT_TEXTURE_NAME = "oa/textures/default.bmp";
|
||||
const unsigned int MAX_CONSOLE_LINES = 30; //The max number of lines to be displayed in the console
|
||||
const unsigned int MAX_CONSOLE_HISTORY_LINES = MAX_CONSOLE_LINES + 20; //The max number of console lines to store in the history
|
||||
const unsigned int MAX_CONSOLE_OUTPUT_LINES = MAX_CONSOLE_LINES;
|
||||
const unsigned int MAX_OUTPUT_TEXT_LINES = 4; //The max number of output lines to be displayed on the screen
|
||||
|
||||
enum {GL_MY_TEXTURE_CONSOLEBACKGROUND=0, NUM_MENU_TEXTURES};
|
||||
|
||||
class Level
|
||||
{
|
||||
public:
|
||||
Level(EventManager* eventManager);
|
||||
~Level();
|
||||
bool LoadMap(string mapname);
|
||||
bool LoadMap();
|
||||
void SaveMap(string mapname);
|
||||
bool LoadConfig(string cfgname);
|
||||
void LoadConfig();
|
||||
void SaveConfig(string cfgname);
|
||||
void Execute(string cmd);
|
||||
void LoadGLTextures();
|
||||
void Render();
|
||||
void UnloadMap();
|
||||
void UpdateConsole(char);
|
||||
uint32 FPS();
|
||||
void ParseCmds(const char*);
|
||||
void Print(int x, int y, const char* string, unsigned int set);
|
||||
void SetWindow(Window*);
|
||||
Window* GetWindow();
|
||||
|
||||
/*Not Yet Implemented
|
||||
void PlayerConnect(); // implement later
|
||||
void PlayerDisconnect(); // implement later
|
||||
*/
|
||||
Screen screen;
|
||||
Font glFont;
|
||||
string nextLevel;
|
||||
Player* defaultPlayer;
|
||||
uint32 numTextures;
|
||||
string* textureNames;
|
||||
|
||||
string bgm;
|
||||
#ifdef WIN32
|
||||
HSTREAM bgmStream;
|
||||
#endif
|
||||
unsigned char bgmCDA;
|
||||
string gamedir;
|
||||
float gravity;
|
||||
bool mlook;
|
||||
bool showFPS;
|
||||
bool showConsole;
|
||||
bool sound;
|
||||
float turnSpeed;
|
||||
float moveSpeed;
|
||||
float mouseSpeed;
|
||||
unsigned char maxFPS;
|
||||
//Map
|
||||
Triangle* triangles;
|
||||
uint32 numTriangles;
|
||||
list<Player> players;
|
||||
// list<ENTITY> ents;
|
||||
list<Texture*> textures;
|
||||
Texture menuTextures[NUM_MENU_TEXTURES];
|
||||
Window* _window;
|
||||
|
||||
// private:
|
||||
void ConsolePrint(string);
|
||||
private:
|
||||
EventManager* _eventManager;
|
||||
string consoleHistory[MAX_CONSOLE_HISTORY_LINES];
|
||||
string consoleOutput[MAX_CONSOLE_OUTPUT_LINES];
|
||||
string outputText[MAX_OUTPUT_TEXT_LINES];
|
||||
};
|
||||
};
|
||||
#endif
|
||||
254
macosx/src/linux.cpp
Normal file
254
macosx/src/linux.cpp
Normal file
@@ -0,0 +1,254 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Module: linux.cpp
|
||||
// Author: Tom Hicks
|
||||
// Creation: 09-01-2003
|
||||
// LastEdit: 06-19-2005
|
||||
// Editors: Tom Hicks
|
||||
//
|
||||
// Purpose:
|
||||
// To implement the OpenArena SDK.
|
||||
//
|
||||
// Summary of Methods:
|
||||
// Global
|
||||
// -InitControls()
|
||||
// Loads the defaultPlayer's configuration.
|
||||
// -InitGL()
|
||||
// Initializes OpenGL and is responsible for loading textures.
|
||||
// -ResizeGLScene(GLsizei width, GLsizei height)
|
||||
// Resizes the viewport to the current size of the visible area of the window specified by width and height.
|
||||
// -KillGLWindow()
|
||||
// Closes the window.
|
||||
// -CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag)
|
||||
// Creates the window with the specified parameters.
|
||||
// -WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
// Main procedure.
|
||||
// -WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
// Window Procedure for the OpenGL window.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#ifdef __linux
|
||||
|
||||
//include necessary header files
|
||||
#include "main.h"
|
||||
#include "version.h"
|
||||
#include "x11.h"
|
||||
using namespace std;
|
||||
|
||||
void InitControls();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function Definitions
|
||||
|
||||
int DrawGLScene(OpenArena::Level* level)
|
||||
{
|
||||
level->Render();
|
||||
|
||||
g_Screen->SwapBuffers();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
//void InitControls()
|
||||
// Purpose:
|
||||
// Initializes controls by loading the default control config file "my.cfg".
|
||||
void InitControls(OpenArena::Level* level)
|
||||
{
|
||||
if (!level->LoadConfig("my.cfg"))
|
||||
level->LoadConfig();
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
OpenArena::EventManager* em = new OpenArena::EventManager();
|
||||
OpenArena::Level* level = new OpenArena::Level(em);
|
||||
XEvent event;
|
||||
bool done = false;
|
||||
|
||||
string commandLine = "";
|
||||
int i;
|
||||
for(i=1; i<argc; i++)
|
||||
{
|
||||
commandLine = commandLine + " " + argv[i];
|
||||
}
|
||||
level->ParseCmds(commandLine.c_str());
|
||||
|
||||
InitControls(level);
|
||||
|
||||
level->glFont.SetScreenDimensions(level->screen.GetWidth()*2, level->screen.GetHeight()*2);
|
||||
|
||||
//Hack for now
|
||||
if(level->screen.GetColorDepth() == 32)
|
||||
{
|
||||
level->screen.SetColorDepth(24);
|
||||
}
|
||||
|
||||
// g_Screen.SetOnInit(InitGL);
|
||||
// g_Screen.SetOnResize(ResizeGLScene);
|
||||
|
||||
if(!g_Screen->Open(OPENARENA_VERSION, level->screen.GetWidth(), level->screen.GetHeight(), level->screen.GetColorDepth(), level->screen.GetFullscreen()))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
level->SetWindow(g_Screen);
|
||||
|
||||
if(level->nextLevel == "")
|
||||
{
|
||||
level->LoadMap("intro.map");
|
||||
}
|
||||
else
|
||||
{
|
||||
level->LoadMap();
|
||||
}
|
||||
|
||||
while(!done)
|
||||
{
|
||||
while(XPending(g_Screen->GetDisplay()) > 0)
|
||||
{
|
||||
//Equivalent of WNDPROC
|
||||
XNextEvent(g_Screen->GetDisplay(), &event);
|
||||
switch(event.type)
|
||||
{
|
||||
case Expose:
|
||||
if(event.xexpose.count != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
DrawGLScene(level);
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
if((event.xconfigure.width != g_Screen->GetWidth()) || (event.xconfigure.height != g_Screen->GetHeight()))
|
||||
{
|
||||
g_Screen->SetWidth(event.xconfigure.width);
|
||||
g_Screen->SetHeight(event.xconfigure.height);
|
||||
ResizeGLScene(event.xconfigure.width, event.xconfigure.height);
|
||||
}
|
||||
break;
|
||||
case ButtonPress:
|
||||
keys[TranslateButton(event.xbutton.button)] = true;
|
||||
break;
|
||||
case ButtonRelease:
|
||||
keys[TranslateButton(event.xbutton.button)] = false;
|
||||
keys2[TranslateButton(event.xbutton.button)] = false;
|
||||
break;
|
||||
case KeyPress:
|
||||
if(level->showConsole)
|
||||
{
|
||||
HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0)), level);
|
||||
}
|
||||
else
|
||||
{
|
||||
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true;
|
||||
}
|
||||
break;
|
||||
case KeyRelease:
|
||||
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||
keys2[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||
break;
|
||||
case ClientMessage:
|
||||
if(*XGetAtomName(g_Screen->GetDisplay(), event.xclient.message_type) == *"WM_PROTOCOLS")
|
||||
{
|
||||
printf("Exiting sanely...\n");
|
||||
done = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} //End Equivalent of WNDPROC
|
||||
|
||||
if(active)
|
||||
{
|
||||
if(keys[OpenArena::KEY_ESCAPE])
|
||||
{
|
||||
done = true;
|
||||
}
|
||||
else if(keys[OpenArena::KEY_F1])
|
||||
{
|
||||
g_Screen->Close();
|
||||
g_Screen->ToggleFullscreen();
|
||||
g_Screen->Open();
|
||||
}
|
||||
else
|
||||
{
|
||||
level->defaultPlayer[0].camera.Update();
|
||||
if(!level->showConsole)
|
||||
{
|
||||
if(level->mlook)
|
||||
{
|
||||
using OpenArena::Vec2i;
|
||||
Vec2i middleOfScreen = Vec2i(g_Screen->GetWidth()/2, g_Screen->GetHeight()/2);
|
||||
Vec2i mousePosition = g_Screen->GetMousePosition();
|
||||
if(mousePosition != middleOfScreen)
|
||||
{
|
||||
//Vec2i mouseDelta = mousePosition - middleOfScreen;
|
||||
Vec2i mouseDelta = middleOfScreen - mousePosition;
|
||||
g_Screen->SetMousePosition(middleOfScreen);
|
||||
const float MOUSE_SENSITIVITY_HORIZONTAL = 0.005;
|
||||
const float MOUSE_SENSITIVITY_VERTICAL = 0.005;
|
||||
float horizontalAngle = mouseDelta.x * MOUSE_SENSITIVITY_HORIZONTAL;
|
||||
float verticalAngle = mouseDelta.y * MOUSE_SENSITIVITY_VERTICAL;
|
||||
level->defaultPlayer[0].camera.RotateHorizontal(horizontalAngle);
|
||||
level->defaultPlayer[0].camera.RotateVertical(verticalAngle);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef WIN32
|
||||
SetCursorPos(g_Screen->width/2, g_Screen->height/2);//Shit this may be windows specific
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DrawGLScene(level);
|
||||
|
||||
if(keys[OpenArena::KEY_F1])
|
||||
{
|
||||
keys[OpenArena::KEY_F1] = false;
|
||||
g_Screen->Close();
|
||||
g_Screen->ToggleFullscreen();
|
||||
if(!g_Screen->Open(OPENARENA_VERSION, level->screen.GetWidth(), level->screen.GetHeight(), level->screen.GetColorDepth(), level->screen.GetFullscreen()))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
level->UnloadMap();
|
||||
g_Screen->Close();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
bool keys[256];
|
||||
bool keys2[256];
|
||||
bool active;
|
||||
bool fullscreen;
|
||||
//bool showConsole = false;
|
||||
OpenArena::Vec2i g_mousePosition;
|
||||
float lastTime;
|
||||
float currentTime;
|
||||
|
||||
#endif
|
||||
318
macosx/src/macosx.cpp
Normal file
318
macosx/src/macosx.cpp
Normal file
@@ -0,0 +1,318 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Module: macosx.cpp
|
||||
// Author: Tom Hicks
|
||||
// Creation: 03-11-2006
|
||||
// LastEdit: 03-11-2006
|
||||
// Editors: Tom Hicks
|
||||
//
|
||||
// Purpose:
|
||||
// To implement the OpenArena SDK.
|
||||
//
|
||||
// Summary of Methods:
|
||||
// Global
|
||||
// -InitControls()
|
||||
// Loads the defaultPlayer's configuration.
|
||||
// -InitGL()
|
||||
// Initializes OpenGL and is responsible for loading textures.
|
||||
// -ResizeGLScene(GLsizei width, GLsizei height)
|
||||
// Resizes the viewport to the current size of the visible area of the window specified by width and height.
|
||||
// -KillGLWindow()
|
||||
// Closes the window.
|
||||
// -CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag)
|
||||
// Creates the window with the specified parameters.
|
||||
// -WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
// Main procedure.
|
||||
// -WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
// Window Procedure for the OpenGL window.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#ifdef __APPLE__
|
||||
#include "main.h"
|
||||
#include "version.h"
|
||||
#include "EventManager.h"
|
||||
#include "Events/DrawEvent.h"
|
||||
#include "Events/KeyPressEvent.h"
|
||||
#include "Events/KeyReleaseEvent.h"
|
||||
#include "x11.h"
|
||||
//include necessary header files
|
||||
using namespace std;
|
||||
|
||||
bool g_done = false;
|
||||
class KeyPressEventHandler: public OpenArena::Events::KeyPressEvent::KeyPressEventHandler
|
||||
{
|
||||
private:
|
||||
public:
|
||||
KeyPressEventHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void HandleEvent(OpenArena::Events::Event* event)
|
||||
{
|
||||
OpenArena::Events::KeyPressEvent* ev = (OpenArena::Events::KeyPressEvent*) event;
|
||||
switch (ev->GetKey())
|
||||
{
|
||||
case OpenArena::KEY_ESCAPE:
|
||||
g_done = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
int DrawGLScene(OpenArena::Level* level)
|
||||
{
|
||||
//The context is somehow different if this call is inside the RT function
|
||||
level->Render();
|
||||
|
||||
g_Screen->SwapBuffers();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#if defined USE_GLX
|
||||
//void InitControls();
|
||||
void HandleConsoleKeyPress(OpenArena::Keys key);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function Definitions
|
||||
|
||||
void ProcessCommandLineArgs(int argc, char** argv, OpenArena::Level* level)
|
||||
{
|
||||
string commandLine = "";
|
||||
int i;
|
||||
for(i=1; i<argc; i++)
|
||||
{
|
||||
commandLine = commandLine + " " + argv[i];
|
||||
}
|
||||
level->ParseCmds(commandLine.c_str());
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
g_Screen = new OpenArena::Window();
|
||||
OpenArena::EventManager* em = new OpenArena::EventManager();
|
||||
OpenArena::Level* level = new OpenArena::Level(em);
|
||||
OpenArena::Events::DrawEvent::DrawEventHandler* _drawEventHandler = new OpenArena::Events::DrawEvent::DrawEventHandler(level);
|
||||
KeyPressEventHandler* _keyPressEventHandler = new KeyPressEventHandler();
|
||||
OpenArena::Events::KeyReleaseEvent::KeyReleaseEventHandler* _keyReleaseEventHandler = new OpenArena::Events::KeyReleaseEvent::KeyReleaseEventHandler();
|
||||
em->RegisterEventHandler(_drawEventHandler);
|
||||
em->RegisterEventHandler(_keyPressEventHandler);
|
||||
em->RegisterEventHandler(_keyReleaseEventHandler);
|
||||
|
||||
XEvent event;
|
||||
OpenArena::Events::Event* ev;
|
||||
|
||||
ProcessCommandLineArgs(argc, argv, level);
|
||||
|
||||
if (!level->LoadConfig("my.cfg"))
|
||||
level->LoadConfig();
|
||||
|
||||
level->glFont.SetScreenDimensions(level->screen.GetWidth()*2, level->screen.GetHeight()*2);
|
||||
|
||||
if(level->nextLevel == "")
|
||||
{
|
||||
level->LoadMap("intro.map");
|
||||
}
|
||||
else
|
||||
{
|
||||
level->LoadMap();
|
||||
}
|
||||
|
||||
//Hack for now X11 no like 32 bit depth
|
||||
if(level->screen.GetColorDepth() == 32)
|
||||
{
|
||||
level->screen.SetColorDepth(24);
|
||||
}
|
||||
|
||||
if(!g_Screen->Open(OPENARENA_VERSION, level->screen.GetWidth(), level->screen.GetHeight(), level->screen.GetColorDepth(), level->screen.GetFullscreen()))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
level->SetWindow(g_Screen);
|
||||
|
||||
level->LoadGLTextures();
|
||||
|
||||
while(!g_done)
|
||||
{
|
||||
while(XPending(g_Screen->GetDisplay()) > 0)
|
||||
{
|
||||
OpenArena::Events::Event* ev = 0x0;
|
||||
//Equivalent of WNDPROC
|
||||
XNextEvent(g_Screen->GetDisplay(), &event);
|
||||
switch(event.type)
|
||||
{
|
||||
case Expose:
|
||||
if(event.xexpose.count != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
em->SendEvent(new OpenArena::Events::DrawEvent());
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
if((event.xconfigure.width != g_Screen->GetWidth()) || (event.xconfigure.height != g_Screen->GetHeight()))
|
||||
{
|
||||
g_Screen->SetWidth(event.xconfigure.width);
|
||||
g_Screen->SetHeight(event.xconfigure.height);
|
||||
ResizeGLScene(event.xconfigure.width, event.xconfigure.height);
|
||||
|
||||
//em->SendEvent(new ResizeWindowEvent(event.xconfigure.width, event.xconfigure.width);
|
||||
}
|
||||
break;
|
||||
case ButtonPress:
|
||||
em->SendEvent(new OpenArena::Events::KeyPressEvent(TranslateButton(event.xbutton.button)));
|
||||
break;
|
||||
case ButtonRelease:
|
||||
em->SendEvent(new OpenArena::Events::KeyReleaseEvent(TranslateButton(event.xbutton.button)));
|
||||
break;
|
||||
case KeyPress:
|
||||
em->SendEvent(new OpenArena::Events::KeyPressEvent((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0))));
|
||||
/*
|
||||
if(level->showConsole)
|
||||
{
|
||||
HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0)));
|
||||
}
|
||||
else
|
||||
{
|
||||
keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true;
|
||||
}
|
||||
*/
|
||||
break;
|
||||
case KeyRelease:
|
||||
em->SendEvent(new OpenArena::Events::KeyReleaseEvent((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0))));
|
||||
// keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||
// keys2[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false;
|
||||
break;
|
||||
case ClientMessage:
|
||||
if(*XGetAtomName(g_Screen->GetDisplay(), event.xclient.message_type) == *"WM_PROTOCOLS")
|
||||
{
|
||||
printf("Exiting sanely...\n");
|
||||
g_done = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} //End Equivalent of WNDPROC
|
||||
|
||||
/*
|
||||
if(active)
|
||||
{
|
||||
if(keys[OpenArena::KEY_ESCAPE])
|
||||
{
|
||||
g_done = true;
|
||||
}
|
||||
else if(keys[OpenArena::KEY_F1])
|
||||
{
|
||||
g_Screen->Close();
|
||||
g_Screen->ToggleFullscreen();
|
||||
g_Screen->Open();
|
||||
}
|
||||
else
|
||||
{
|
||||
level->defaultPlayer[0].camera.Update();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
em->SendEvent(new OpenArena::Events::DrawEvent());
|
||||
|
||||
if(keys[OpenArena::KEY_F1])
|
||||
{
|
||||
keys[OpenArena::KEY_F1] = false;
|
||||
g_Screen->Close();
|
||||
g_Screen->ToggleFullscreen();
|
||||
if(!g_Screen->Open(OPENARENA_VERSION, level->screen.GetWidth(), level->screen.GetHeight(), level->screen.GetColorDepth(), level->screen.GetFullscreen()))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
level->UnloadMap();
|
||||
g_Screen->Close();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#elif defined USE_AGL
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
g_Screen = new OpenArena::Window();
|
||||
OpenArena::Events::DrawEvent::DrawEventHandler* _drawEventHandler = new OpenArena::Events::DrawEvent::DrawEventHandler();
|
||||
OpenArena::Events::KeyPressEvent::KeyPressEventHandler* _keyPressEventHandler = new OpenArena::Events::KeyPressEvent::KeyPressEventHandler();
|
||||
OpenArena::Events::KeyReleaseEvent::KeyReleaseEventHandler* _keyReleaseEventHandler = new OpenArena::Events::KeyReleaseEvent::KeyReleaseEventHandler();
|
||||
OpenArena::EventManager* em = new OpenArena::EventManager();
|
||||
em->RegisterEventHandler(_drawEventHandler);
|
||||
em->RegisterEventHandler(_keyPressEventHandler);
|
||||
em->RegisterEventHandler(_keyReleaseEventHandler);
|
||||
|
||||
// ProcessCommandLineArgs(argc, argv);
|
||||
|
||||
// InitControls();
|
||||
|
||||
level->glFont.SetScreenDimensions(level->screen.GetWidth()*2, level->screen.GetHeight()*2);
|
||||
|
||||
if(level->nextLevel == "")
|
||||
{
|
||||
level->LoadMap("intro.map");
|
||||
}
|
||||
else
|
||||
{
|
||||
level->LoadMap();
|
||||
}
|
||||
|
||||
//Hack for now X11 no like 32 bit depth
|
||||
if(level->screen.GetColorDepth() == 32)
|
||||
{
|
||||
level->screen.SetColorDepth(24);
|
||||
}
|
||||
|
||||
if(!g_Screen->Open(OPENARENA_VERSION, level->screen.GetWidth(), level->screen.GetHeight(), level->screen.GetColorDepth(), level->screen.GetFullscreen()))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
level->SetWindow(g_Screen);
|
||||
|
||||
level->LoadGLTextures();
|
||||
|
||||
RunApplicationEventLoop();
|
||||
|
||||
}
|
||||
#elif defined USE_CGL
|
||||
#error
|
||||
#endif
|
||||
|
||||
bool keys[256] = {0}; // Array for which keys are down now
|
||||
bool keys2[256] = {0}; // Array for which keys are were down already
|
||||
bool active = true; // Is window active flag
|
||||
bool fullscreen = false; // Is window fullscreen flag
|
||||
//bool showConsole = false;// Do we need to draw the console
|
||||
OpenArena::Vec2i g_mousePosition;
|
||||
float lastTime = 0.0f; // This will hold the time from the last frame
|
||||
float currentTime;
|
||||
|
||||
#endif
|
||||
|
||||
135
macosx/src/main.h
Normal file
135
macosx/src/main.h
Normal file
@@ -0,0 +1,135 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __main_h__
|
||||
#define __main_h__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#if defined USE_GLX
|
||||
#include <GL/gl.h> // Header file for OpenGL32 library
|
||||
#include <GL/glu.h> // Header file for Glu32 library
|
||||
#elif defined USE_AGL
|
||||
#include "mygl.h"
|
||||
#elif defined USE_CGL
|
||||
#error unimplemented method
|
||||
#elif defined USE_WGL
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h> // Header file for OpenGL32 library
|
||||
#include <GL/glu.h> // Header file for Glu32 library
|
||||
#endif
|
||||
|
||||
#include <cstdio> // Header file for standard input/output
|
||||
#include <math.h>
|
||||
|
||||
#include "camera.h"
|
||||
#include "level.h"
|
||||
#include "mygl.h"
|
||||
#include "worlddefs.h"
|
||||
#include "mydefs.h"
|
||||
#include "screen.h"
|
||||
#include "window.h"
|
||||
#include "vector.h"
|
||||
#pragma warning(disable: 4786)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Variables
|
||||
|
||||
extern bool keys[256]; // Array for which keys are down now
|
||||
extern bool keys2[256]; // Array for which keys are were down already
|
||||
extern bool active; // Is window active flag
|
||||
extern bool fullscreen; // Is window fullscreen flag
|
||||
//extern bool showConsole = false;// Do we need to draw the console
|
||||
extern OpenArena::Vec2i g_mousePosition;
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
extern POINT mpos;
|
||||
#endif
|
||||
extern float lastTime; // This will hold the time from the last frame
|
||||
extern float currentTime;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function Declarations
|
||||
|
||||
//This shouldn't need to be here
|
||||
//LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration for WndProc
|
||||
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for InitControls here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for InitControls here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for InitControls here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
void InitControls(); // Sets up player controls
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for InitGL here.
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for InitGL here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for InitGL here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
int InitGL(); // All setup for OpenGL goes here
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for ReSizeGLScene here.
|
||||
*
|
||||
* \param width
|
||||
* Description of parameter width.
|
||||
*
|
||||
* \param height
|
||||
* Description of parameter height.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for ReSizeGLScene here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for ReSizeGLScene here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
void ReSizeGLScene(GLsizei width, GLsizei height); // Resize and initialize the GL window
|
||||
int DrawGLScene(OpenArena::Level* level);
|
||||
|
||||
#endif
|
||||
85
macosx/src/mygl.cpp
Normal file
85
macosx/src/mygl.cpp
Normal file
@@ -0,0 +1,85 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#include "mygl.h"
|
||||
namespace OpenArena
|
||||
{
|
||||
void FreeGLTexture(GLuint& texture)
|
||||
{
|
||||
glDeleteTextures(1, &texture);
|
||||
}
|
||||
|
||||
bool LoadGLTexture(string fn, GLuint& texture, GLuint mag, GLuint min)
|
||||
{
|
||||
if(Right(tolower(fn), 4) == ".bmp")
|
||||
{
|
||||
TextureImage* texImage = NULL;
|
||||
if(texImage = LoadBMP(fn.c_str()))
|
||||
{
|
||||
glGenTextures(1, &texture);
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, 3, texImage->sizeX, texImage->sizeY, 0, texImage->type, GL_UNSIGNED_BYTE, texImage->data);
|
||||
|
||||
if(texImage) //Just in case somehow the file was empty or unloadable
|
||||
{
|
||||
if(texImage->data)
|
||||
free(texImage->data);
|
||||
free(texImage);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(Right(tolower(fn), 4) == ".tga")
|
||||
{
|
||||
TextureImage* texImage = NULL;
|
||||
if(texImage = LoadTGA(fn.c_str()))
|
||||
{
|
||||
glGenTextures(1, &texture);
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, 3, texImage->sizeX, texImage->sizeY, 0, texImage->type, GL_UNSIGNED_BYTE, texImage->data);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
if(texImage) //Just in case somehow the file was empty or unloadable
|
||||
{
|
||||
if(texImage->data)
|
||||
free(texImage->data);
|
||||
free(texImage);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
OpenArena::Window* g_Screen = new OpenArena::Window();
|
||||
113
macosx/src/mygl.h
Normal file
113
macosx/src/mygl.h
Normal file
@@ -0,0 +1,113 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __MYGL_H__
|
||||
#define __MYGL_H__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#if defined USE_GLX
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#elif defined USE_AGL
|
||||
#include <OpenGL/gl.h>
|
||||
#include <OpenGL/glu.h>
|
||||
#include <OpenGL/OpenGL.h>
|
||||
//#error unimplemented method
|
||||
#elif defined USE_CGL
|
||||
#error unimplemented method
|
||||
#elif defined USE_WGL
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include "datatypes.h"
|
||||
#include "screen.h"
|
||||
#include "tga.h"
|
||||
#include "bmp.h"
|
||||
#include "strmanip.h"
|
||||
#include "window.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
#ifdef WIN32
|
||||
//These this is windows specific
|
||||
static HINSTANCE hInstance; // Application instance
|
||||
#endif
|
||||
extern OpenArena::Window* g_Screen;
|
||||
//This doesn't need to be here I think
|
||||
//int InitGL(GLvoid);
|
||||
namespace OpenArena
|
||||
{
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for LoadGLTexture here.
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for LoadGLTexture here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for LoadGLTexture here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
bool LoadGLTexture(string , GLuint&, GLuint = GL_LINEAR, GLuint = GL_LINEAR);
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for FreeGLTexture here.
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for FreeGLTexture here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for FreeGLTexture here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
void FreeGLTexture(GLuint&);
|
||||
};
|
||||
#endif
|
||||
57
macosx/src/player.h
Normal file
57
macosx/src/player.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __PLAYER_H__
|
||||
#define __PLAYER_H__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "EventManager.h"
|
||||
#include "camera.h"
|
||||
#include "ctrls.h"
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
class Player
|
||||
{
|
||||
public:
|
||||
void Load();
|
||||
void Save();
|
||||
void CreateCharacter();
|
||||
void AddItem(unsigned int item);
|
||||
void RemoveItem(unsigned int item);
|
||||
|
||||
ControlScheme controls;
|
||||
Camera camera;
|
||||
EventManager* eventManager;
|
||||
|
||||
class EventHandler
|
||||
{
|
||||
public:
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
private:
|
||||
};
|
||||
};
|
||||
#endif
|
||||
320
macosx/src/strmanip.cpp
Normal file
320
macosx/src/strmanip.cpp
Normal file
@@ -0,0 +1,320 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#include <cctype>
|
||||
#include "strmanip.h"
|
||||
|
||||
bool Truth(std::string str)
|
||||
{
|
||||
if (toupper(str[0]) == 'T' || str[0] == '1')
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
int Integer(std::string str)
|
||||
{
|
||||
int last = str.length() - 1;
|
||||
int number = 0;
|
||||
|
||||
for (int x = last; x>=0; x--)
|
||||
{
|
||||
switch(str[x])
|
||||
{
|
||||
case '1':
|
||||
number += (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '2':
|
||||
number += 2 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '3':
|
||||
number += 3 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '4':
|
||||
number += 4 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '5':
|
||||
number += 5 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '6':
|
||||
number += 6 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '7':
|
||||
number += 7 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '8':
|
||||
number += 8 * (int)pow(10.0, last-x);
|
||||
break;
|
||||
case '9':
|
||||
number += 9 * (int)pow(10.0, last-x);
|
||||
}
|
||||
}
|
||||
return number;
|
||||
}
|
||||
|
||||
float Floating(std::string str)
|
||||
{
|
||||
//this doesn't work right yet so use atof for now
|
||||
|
||||
int last = str.length() - 1;
|
||||
float number = 0.0f;
|
||||
bool period = false;
|
||||
|
||||
for (int x = last; x>=0; x--)
|
||||
{
|
||||
switch(str[x])
|
||||
{
|
||||
case '1':
|
||||
number += (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '2':
|
||||
number += 2 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '3':
|
||||
number += 3 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '4':
|
||||
number += 4 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '5':
|
||||
number += 5 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '6':
|
||||
number += 6 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '7':
|
||||
number += 7 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '8':
|
||||
number += 8 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '9':
|
||||
number += 9 * (float)pow(10.0, last-x);
|
||||
break;
|
||||
case '.':
|
||||
if (!period)
|
||||
{
|
||||
number *= (float)pow(10.0, -(last-x));
|
||||
last -= (x+1);
|
||||
period = true;
|
||||
}
|
||||
else
|
||||
return number;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(str[0] =='-')
|
||||
return -number;
|
||||
else
|
||||
return number;
|
||||
}
|
||||
|
||||
string KeyString(uint8 key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case OpenArena::KEY_LBUTTON:
|
||||
return "mouse1";
|
||||
case OpenArena::KEY_RBUTTON:
|
||||
return "mouse2";
|
||||
case OpenArena::KEY_MBUTTON:
|
||||
return "mouse3";
|
||||
case OpenArena::KEY_TAB:
|
||||
return "tab";
|
||||
case OpenArena::KEY_RETURN:
|
||||
return "enter";
|
||||
case OpenArena::KEY_SHIFT:
|
||||
return "shift";
|
||||
case OpenArena::KEY_CONTROL:
|
||||
return "control";
|
||||
case OpenArena::KEY_PAUSE:
|
||||
return "pause";
|
||||
case OpenArena::KEY_CAPITAL:
|
||||
return "capslock";
|
||||
case OpenArena::KEY_ESCAPE:
|
||||
return "esc";
|
||||
case OpenArena::KEY_SPACE:
|
||||
return "space";
|
||||
case OpenArena::KEY_PRIOR:
|
||||
return "pageup";
|
||||
case OpenArena::KEY_NEXT:
|
||||
return "pagedown";
|
||||
case OpenArena::KEY_END:
|
||||
return "end";
|
||||
case OpenArena::KEY_HOME:
|
||||
return "home";
|
||||
case OpenArena::KEY_LEFT:
|
||||
return "left";
|
||||
case OpenArena::KEY_UP:
|
||||
return "up";
|
||||
case OpenArena::KEY_RIGHT:
|
||||
return "right";
|
||||
case OpenArena::KEY_DOWN:
|
||||
return "down";
|
||||
case OpenArena::KEY_INSERT:
|
||||
return "insert";
|
||||
case OpenArena::KEY_DELETE:
|
||||
return "delete";
|
||||
case OpenArena::KEY_LWIN:
|
||||
return "lwin";
|
||||
case OpenArena::KEY_RWIN:
|
||||
return "rwin";
|
||||
case OpenArena::KEY_APPS:
|
||||
return "apps";
|
||||
case OpenArena::KEY_NUMPAD0:
|
||||
return "numpad0";
|
||||
case OpenArena::KEY_NUMPAD1:
|
||||
return "numpad1";
|
||||
case OpenArena::KEY_NUMPAD2:
|
||||
return "numpad2";
|
||||
case OpenArena::KEY_NUMPAD3:
|
||||
return "numpad3";
|
||||
case OpenArena::KEY_NUMPAD4:
|
||||
return "numpad4";
|
||||
case OpenArena::KEY_NUMPAD5:
|
||||
return "numpad5";
|
||||
case OpenArena::KEY_NUMPAD6:
|
||||
return "numpad6";
|
||||
case OpenArena::KEY_NUMPAD7:
|
||||
return "numpad7";
|
||||
case OpenArena::KEY_NUMPAD8:
|
||||
return "numpad8";
|
||||
case OpenArena::KEY_NUMPAD9:
|
||||
return "numpad9";
|
||||
case OpenArena::KEY_MULTIPLY:
|
||||
return "numpad*";
|
||||
case OpenArena::KEY_ADD:
|
||||
return "numpad+";
|
||||
case OpenArena::KEY_SUBTRACT:
|
||||
return "numpad-";
|
||||
case OpenArena::KEY_DIVIDE:
|
||||
return "numpad/";
|
||||
case OpenArena::KEY_F1:
|
||||
return "f1";
|
||||
case OpenArena::KEY_F2:
|
||||
return "f2";
|
||||
case OpenArena::KEY_F3:
|
||||
return "f3";
|
||||
case OpenArena::KEY_F4:
|
||||
return "f4";
|
||||
case OpenArena::KEY_F5:
|
||||
return "f5";
|
||||
case OpenArena::KEY_F6:
|
||||
return "f6";
|
||||
case OpenArena::KEY_F7:
|
||||
return "f7";
|
||||
case OpenArena::KEY_F8:
|
||||
return "f8";
|
||||
case OpenArena::KEY_F9:
|
||||
return "f9";
|
||||
case OpenArena::KEY_F10:
|
||||
return "f10";
|
||||
case OpenArena::KEY_F11:
|
||||
return "f11";
|
||||
case OpenArena::KEY_F12:
|
||||
return "f2";
|
||||
case OpenArena::KEY_NUMLOCK:
|
||||
return "numlock";
|
||||
case OpenArena::KEY_SCROLL:
|
||||
return "scroll";
|
||||
case OpenArena::KEY_SEPARATOR:
|
||||
return "separator";
|
||||
default:
|
||||
return "null";
|
||||
};
|
||||
}
|
||||
|
||||
string Right(string str, uint32 len)
|
||||
{
|
||||
return str.substr(str.length()-len, len);
|
||||
}
|
||||
|
||||
string Left(string str, uint32 len)
|
||||
{
|
||||
return str.substr(0, len);
|
||||
}
|
||||
|
||||
string tolower(string str)
|
||||
{
|
||||
for(uint32 i=0; i<str.length(); i++)
|
||||
str[i] = tolower(str[i]);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
string toupper(string str)
|
||||
{
|
||||
for(uint32 i=0; i<str.length(); i++)
|
||||
str[i] = toupper(str[i]);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
string word(string str, uint32 wordNum)
|
||||
{
|
||||
///////////////
|
||||
//stopped here
|
||||
///////////////
|
||||
uint32 start = 0;
|
||||
uint32 length = 0;
|
||||
uint32 maxLength = str.length();
|
||||
if(str.length() > 0)
|
||||
{
|
||||
if(wordNum < 1)
|
||||
{
|
||||
while(isspace(str[start]))
|
||||
++start;
|
||||
|
||||
while (!isspace(str[++length]) && length < maxLength);
|
||||
|
||||
if(length < maxLength || isspace(str[length])){
|
||||
if(length >0)
|
||||
{
|
||||
length--;
|
||||
}
|
||||
}
|
||||
return str.substr(start, length);
|
||||
}
|
||||
else
|
||||
{
|
||||
while(isspace(str[start]))
|
||||
++start;
|
||||
|
||||
for(uint32 i=0; i<wordNum; i++)
|
||||
{
|
||||
while(start <maxLength && !isspace(str[start]))// && start <= maxLength)
|
||||
++start;
|
||||
while(start < maxLength && isspace(str[start]))
|
||||
++start;
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
while((start+length) < maxLength && !isspace(str[start+length]))
|
||||
++length;
|
||||
|
||||
return str.substr(start, length);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
239
macosx/src/strmanip.h
Normal file
239
macosx/src/strmanip.h
Normal file
@@ -0,0 +1,239 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __strmanip_h__
|
||||
#define __strmanip_h__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <cmath>
|
||||
#include "keys.h"
|
||||
#include "datatypes.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for Truth here.
|
||||
*
|
||||
* \param str
|
||||
* Description of parameter str.
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for Truth here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for Truth here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
bool Truth(string str);
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for Integer here.
|
||||
*
|
||||
* \param str
|
||||
* Description of parameter str.
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for Integer here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for Integer here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
int Integer(string str);
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for Floating here.
|
||||
*
|
||||
* \param str
|
||||
* Description of parameter str.
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for Floating here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for Floating here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
float Floating(string str);
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Write brief comment for KeyString here.
|
||||
*
|
||||
* @param keyCode - Description of parameter .
|
||||
*
|
||||
* @returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* Write detailed description for KeyString here.
|
||||
*
|
||||
* @remarks
|
||||
* Write remarks for KeyString here.
|
||||
*
|
||||
* @see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
string KeyString(uint8 keyCode);
|
||||
/*!
|
||||
* @brief
|
||||
* Write brief comment for Right here.
|
||||
*
|
||||
* @param
|
||||
* Description of parameter .
|
||||
*
|
||||
* @param
|
||||
* Description of parameter .
|
||||
*
|
||||
* @returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* @throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for Right here.
|
||||
*
|
||||
* @remarks
|
||||
* Write remarks for Right here.
|
||||
*
|
||||
* @see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
string Right(string, uint32);
|
||||
/*!
|
||||
* @brief
|
||||
* Write brief comment for Left here.
|
||||
*
|
||||
* @param
|
||||
* Description of parameter .
|
||||
*
|
||||
* @param
|
||||
* Description of parameter .
|
||||
*
|
||||
* @returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* @throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for Left here.
|
||||
*
|
||||
* @remarks
|
||||
* Write remarks for Left here.
|
||||
*
|
||||
* @see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
string Left(string, uint32);
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for tolower here.
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for tolower here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for tolower here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
string tolower(string);
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for toupper here.
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for toupper here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for toupper here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
string toupper(string);
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for word here.
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \param
|
||||
* Description of parameter .
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for word here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for word here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
string word(string, uint32);
|
||||
|
||||
#endif
|
||||
101
macosx/src/tga.h
Normal file
101
macosx/src/tga.h
Normal file
@@ -0,0 +1,101 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __TGA_H__
|
||||
#define __TGA_H__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "mygl.h"
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include "texture.h"
|
||||
|
||||
namespace OpenArena{
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for TGAHeader here.
|
||||
*
|
||||
* Write detailed description for TGAHeader here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for TGAHeader here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
struct TGAHeader
|
||||
{
|
||||
GLubyte Header[12]; // File Header To Determine File Type
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for TGA here.
|
||||
*
|
||||
* Write detailed description for TGA here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for TGA here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
struct TGA
|
||||
{
|
||||
GLubyte header[6]; // Holds The First 6 Useful Bytes Of The File
|
||||
GLuint bytesPerPixel; // Number Of BYTES Per Pixel (3 Or 4)
|
||||
GLuint imageSize; // Amount Of Memory Needed To Hold The Image
|
||||
GLuint type; // The Type Of Image, GL_RGB Or GL_RGBA
|
||||
GLuint Height; // Height Of Image
|
||||
GLuint Width; // Width Of Image
|
||||
GLuint Bpp; // Number Of BITS Per Pixel (24 Or 32)
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief
|
||||
* Write brief comment for LoadTGA here.
|
||||
*
|
||||
* \param filename
|
||||
* Description of parameter filename.
|
||||
*
|
||||
* \returns
|
||||
* Write description of return value here.
|
||||
*
|
||||
* \throws <exception class>
|
||||
* Description of criteria for throwing this exception.
|
||||
*
|
||||
* Write detailed description for LoadTGA here.
|
||||
*
|
||||
* \remarks
|
||||
* Write remarks for LoadTGA here.
|
||||
*
|
||||
* \see
|
||||
* Separate items with the '|' character.
|
||||
*/
|
||||
TextureImage* LoadTGA(const char *filename);
|
||||
|
||||
const GLubyte uTGAcompare[12] = {0,0,2, 0,0,0,0,0,0,0,0,0}; // Uncompressed TGA Header
|
||||
const GLubyte cTGAcompare[12] = {0,0,10,0,0,0,0,0,0,0,0,0}; // Compressed TGA Header
|
||||
TextureImage* LoadUncompressedTGA(FILE *); // Load an Uncompressed file
|
||||
TextureImage* LoadCompressedTGA(FILE *); // Load a Compressed file
|
||||
};
|
||||
#endif
|
||||
515
macosx/src/window.cpp
Normal file
515
macosx/src/window.cpp
Normal file
@@ -0,0 +1,515 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#include "window.h"
|
||||
|
||||
void OpenArena::Window::SwapBuffers()
|
||||
{
|
||||
#if defined USE_GLX
|
||||
if(doubleBuffered)
|
||||
{
|
||||
glXSwapBuffers(display, window);
|
||||
}
|
||||
#elif defined USE_AGL
|
||||
aglSwapBuffers(_aglContext);
|
||||
#elif defined USE_CGL
|
||||
CGLFlushDrawable(cglContext);
|
||||
#elif defined USE_WGL
|
||||
::SwapBuffers(deviceContext);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool OpenArena::Window::Open()
|
||||
{
|
||||
#if defined USE_GLX
|
||||
XVisualInfo* vi;
|
||||
Colormap cmap;
|
||||
int bestMode = 0;
|
||||
int vidModeMajorVersion;
|
||||
int vidModeMinorVersion;
|
||||
int glxMajorVersion;
|
||||
int glxMinorVersion;
|
||||
int modeNum;
|
||||
#if defined HAVE_XF86VIDMODE
|
||||
XF86VidModeModeInfo** modes;
|
||||
#endif
|
||||
Atom wmDelete;
|
||||
::Window winDummy;
|
||||
unsigned int borderDummy;
|
||||
|
||||
display = XOpenDisplay(0);
|
||||
screen = DefaultScreen(display);
|
||||
|
||||
#if defined HAVE_XF86VIDMODE
|
||||
XF86VidModeQueryVersion(display, &vidModeMajorVersion, &vidModeMinorVersion);
|
||||
printf("XF86VidModeExtension-Version %d.%d\n", vidModeMajorVersion, vidModeMinorVersion);
|
||||
|
||||
XF86VidModeGetAllModeLines(display, screen, &modeNum, &modes);
|
||||
vidMode = *modes[0];
|
||||
|
||||
int i;
|
||||
for(i=0; i<modeNum; i++)
|
||||
{
|
||||
//Add a check for colordepth here
|
||||
if((modes[i]->hdisplay == _width) && (modes[i]->vdisplay == _height))
|
||||
{
|
||||
bestMode = i;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
vi = glXChooseVisual(display, screen, attrListDbl);
|
||||
if(vi == NULL){
|
||||
vi = glXChooseVisual(display, screen, attrListSgl);
|
||||
doubleBuffered = false;
|
||||
printf("Only Singlebuffered Visual!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
doubleBuffered = true;
|
||||
printf("Got Doublebuffered Visual!\n");
|
||||
}
|
||||
|
||||
glXQueryVersion(display, &glxMajorVersion, & glxMinorVersion);
|
||||
printf("glX-Version %d.%d\n", glxMajorVersion, glxMinorVersion);
|
||||
|
||||
hRC = glXCreateContext(display, vi, 0, GL_TRUE);
|
||||
cmap = XCreateColormap(display, RootWindow(display, vi->screen), vi->visual, AllocNone);
|
||||
attributes.colormap = cmap;
|
||||
attributes.border_pixel = 0;
|
||||
|
||||
attributes.event_mask = ExposureMask |
|
||||
KeyPressMask | KeyReleaseMask |
|
||||
ButtonPressMask | ButtonReleaseMask |
|
||||
// PointerMotionMask | ButtonMotionMask |
|
||||
StructureNotifyMask;
|
||||
|
||||
if(_fullscreen)
|
||||
{
|
||||
#if defined HAVE_XF86VIDMODE
|
||||
XF86VidModeSwitchToMode(display, screen, modes[bestMode]);
|
||||
XF86VidModeSetViewPort(display, screen, 0, 0);
|
||||
XFree(modes);
|
||||
#endif
|
||||
|
||||
attributes.override_redirect = true;
|
||||
window = XCreateWindow(display, RootWindow(display, vi->screen), 0, 0, _width, _height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect, &attributes);
|
||||
XWarpPointer(display, None, window, 0, 0, 0, 0, 0, 0);
|
||||
XMapRaised(display, window);
|
||||
XGrabKeyboard(display, window, true, GrabModeAsync, GrabModeAsync, CurrentTime);
|
||||
XGrabPointer(display, window, true, ButtonPressMask, GrabModeAsync, GrabModeAsync, window, None, CurrentTime);
|
||||
XDefineCursor(display, window, CreateFullscreenCursor());
|
||||
}
|
||||
else
|
||||
{
|
||||
window = XCreateWindow(display, RootWindow(display, vi->screen), 0, 0, _width, _height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap | CWEventMask, &attributes);
|
||||
wmDelete = XInternAtom(display, "WM_DELETE_WINDOW", true);
|
||||
XSetWMProtocols(display, window, &wmDelete, 1);
|
||||
XSetStandardProperties(display, window, GetName(), GetName(), None, NULL, 0, NULL);
|
||||
XMapRaised(display, window);
|
||||
XDefineCursor(display, window, CreateWindowedCursor());
|
||||
}
|
||||
|
||||
glXMakeCurrent(display, window, hRC);
|
||||
unsigned int twidth, theight, depth;
|
||||
XGetGeometry(display, window, &winDummy, &x, &y, &twidth, &theight, &borderDummy, &depth);
|
||||
_colorDepth = (char)depth;
|
||||
_height = (short)twidth;
|
||||
_width = (short)theight;
|
||||
printf("Resolution %dx%d\n", twidth, theight);
|
||||
printf("Depth %d\n", depth);
|
||||
if(glXIsDirect(display, hRC))
|
||||
{
|
||||
printf("Congrats, you have Direct Rendering!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Sorry, no Direct Rendering possible!\n");
|
||||
}
|
||||
_initializer->Initialize();
|
||||
return true;
|
||||
#elif defined USE_AGL
|
||||
OSStatus err = noErr;
|
||||
SetRect(&_bounds, 0, 0, 640, 480);
|
||||
err = CreateNewWindow(kDocumentWindowClass, kWindowStandardHandlerAttribute | kWindowCloseBoxAttribute | kWindowFullZoomAttribute | kWindowCollapseBoxAttribute, &_bounds, &_window);
|
||||
if(err != noErr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
RepositionWindow(_window, NULL, kWindowCascadeOnMainScreen);
|
||||
|
||||
AGLDevice* devices = NULL;
|
||||
GLint deviceCount = 0;
|
||||
GLint attributes[] = {AGL_ACCELERATED, AGL_NO_RECOVERY, AGL_RGBA, AGL_DOUBLEBUFFER, AGL_NONE};
|
||||
AGLPixelFormat pixelFormat;
|
||||
|
||||
pixelFormat = aglChoosePixelFormat(devices,deviceCount,attributes);
|
||||
_aglContext = aglCreateContext(pixelFormat, NULL);
|
||||
if(!_aglContext)
|
||||
{
|
||||
exit (5);
|
||||
}
|
||||
|
||||
aglDestroyPixelFormat(pixelFormat);
|
||||
|
||||
if(!aglSetCurrentContext(_aglContext))
|
||||
{
|
||||
exit(6);
|
||||
}
|
||||
|
||||
if(!aglSetDrawable(_aglContext, GetWindowPort(_window)))
|
||||
{
|
||||
exit(7);
|
||||
}
|
||||
|
||||
glClearColor(0.0f,0.0f,0.0f,0.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
aglSwapBuffers(_aglContext);
|
||||
ShowWindow(_window);
|
||||
#elif defined USE_CGL
|
||||
#error undefined method
|
||||
#elif defined USE_WGL
|
||||
unsigned int PixelFormat;
|
||||
WNDCLASS wc;
|
||||
DWORD dwExStyle;
|
||||
DWORD dwStyle;
|
||||
RECT WindowRect;
|
||||
WindowRect.left=(long)0;
|
||||
WindowRect.right=(long)_width;
|
||||
WindowRect.top=(long)0;
|
||||
WindowRect.bottom=(long)_height;
|
||||
|
||||
instance = GetModuleHandle(NULL);
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||
wc.lpfnWndProc = (WNDPROC)WndProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = instance;
|
||||
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = NULL;
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.lpszClassName = "OpenArena v0.1.0";
|
||||
|
||||
if (!RegisterClass(&wc))
|
||||
{
|
||||
MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_fullscreen)
|
||||
{
|
||||
DEVMODE dmScreenSettings;
|
||||
memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
|
||||
dmScreenSettings.dmSize = sizeof(dmScreenSettings);
|
||||
dmScreenSettings.dmPelsWidth = _width;
|
||||
dmScreenSettings.dmPelsHeight = _height;
|
||||
dmScreenSettings.dmBitsPerPel = _colorDepth;
|
||||
dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||
|
||||
|
||||
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
|
||||
{
|
||||
if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","OpenArena",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
|
||||
_fullscreen = false;
|
||||
else
|
||||
{
|
||||
|
||||
MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_fullscreen)
|
||||
{
|
||||
dwExStyle = WS_EX_APPWINDOW;
|
||||
dwStyle = WS_POPUP;
|
||||
ShowCursor(/*true*/false);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowCursor(false);
|
||||
dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||
dwStyle = WS_OVERLAPPEDWINDOW;
|
||||
}
|
||||
|
||||
AdjustWindowRectEx(&WindowRect, dwStyle, false, dwExStyle);
|
||||
|
||||
if (!(window = CreateWindowEx(dwExStyle, "OpenArena v0.1.0", GetName(), WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle, 0, 0, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top, NULL, NULL, instance, NULL)))
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
static PIXELFORMATDESCRIPTOR pfd={sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, _colorDepth, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 };
|
||||
|
||||
if (!(deviceContext=GetDC(window)))
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(PixelFormat=ChoosePixelFormat(deviceContext,&pfd)))
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!SetPixelFormat(deviceContext,PixelFormat,&pfd))
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(glContext=wglCreateContext(deviceContext)))
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!wglMakeCurrent(deviceContext,glContext))
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
ShowWindow(window,SW_SHOW);
|
||||
SetForegroundWindow(window);
|
||||
SetFocus(window);
|
||||
_resizer->Resize(_width, _height);
|
||||
|
||||
if (!_initializer->Initialize())
|
||||
{
|
||||
Close();
|
||||
MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
void OpenArena::Window::Close()
|
||||
{
|
||||
#if defined USE_GLX
|
||||
if(_fullscreen)
|
||||
{
|
||||
#if defined HAVE_XF86VIDMODE
|
||||
XF86VidModeSwitchToMode(display, screen, &vidMode);
|
||||
XF86VidModeSetViewPort(display, screen, 0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
if(hRC)
|
||||
{
|
||||
if(!glXMakeCurrent(display, None, NULL))
|
||||
{
|
||||
printf("Could not release drawing context.\n");
|
||||
}
|
||||
glXDestroyContext(display, hRC);
|
||||
hRC = NULL;
|
||||
}
|
||||
|
||||
XCloseDisplay(display);
|
||||
#elif defined USE_AGL
|
||||
if(!_fullscreen)
|
||||
{
|
||||
aglSetCurrentContext(NULL);
|
||||
aglDestroyContext(_aglContext);
|
||||
_aglContext = NULL;
|
||||
}
|
||||
#elif defined USE_CGL
|
||||
#error unimplemented method
|
||||
#elif defined USE_WGL
|
||||
if(_fullscreen)
|
||||
{
|
||||
ChangeDisplaySettings(NULL, 0);
|
||||
ShowCursor(true);
|
||||
}
|
||||
|
||||
if(glContext)
|
||||
{
|
||||
if(!wglMakeCurrent(NULL, NULL))
|
||||
MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
|
||||
|
||||
if (!wglDeleteContext(glContext))
|
||||
MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
|
||||
|
||||
glContext=NULL;
|
||||
}
|
||||
|
||||
if (deviceContext && !ReleaseDC(window, deviceContext))
|
||||
{
|
||||
MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
|
||||
deviceContext=NULL;
|
||||
}
|
||||
|
||||
if (window && !DestroyWindow(window))
|
||||
{
|
||||
MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
|
||||
window=NULL;
|
||||
}
|
||||
|
||||
if (!UnregisterClass("OpenArena v0.1.0", instance))
|
||||
{
|
||||
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
|
||||
instance=NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool OpenArena::Window::Open(string title, int width, int height, int bits, bool fullscreenflag)
|
||||
{
|
||||
_fullscreen = fullscreenflag;
|
||||
_width = width;
|
||||
_height = height;
|
||||
_colorDepth = bits;
|
||||
_name = title;
|
||||
|
||||
return Open();
|
||||
}
|
||||
|
||||
OpenArena::Window::Window()
|
||||
{
|
||||
_initializer = new Initializer();
|
||||
_resizer = new Resizer();
|
||||
}
|
||||
|
||||
OpenArena::Window::~Window()
|
||||
{
|
||||
}
|
||||
|
||||
void OpenArena::Window::SetInitializer(OpenArena::Window::Initializer* initializer)
|
||||
{
|
||||
_initializer = initializer;
|
||||
}
|
||||
|
||||
void OpenArena::Window::SetResizer(OpenArena::Window::Resizer* resizer)
|
||||
{
|
||||
_resizer = resizer;
|
||||
}
|
||||
|
||||
void OpenArena::Window::Resizer::Resize(GLsizei width, GLsizei height)
|
||||
{
|
||||
if (height==0)
|
||||
height=1;
|
||||
|
||||
glViewport(0, 0, width, height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
|
||||
gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
|
||||
}
|
||||
|
||||
int OpenArena::Window::Initializer::Initialize()
|
||||
{
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glClearDepth(1.0f);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OpenArena::Window::Resize(GLsizei width, GLsizei height)
|
||||
{
|
||||
_resizer->Resize(width, height);
|
||||
}
|
||||
|
||||
OpenArena::Vec2i OpenArena::Window::GetMousePosition()
|
||||
{
|
||||
#ifdef USE_GLX
|
||||
::Window rootWindow;
|
||||
::Window childWindow;
|
||||
int rootX;
|
||||
int rootY;
|
||||
int mouseX;
|
||||
int mouseY;
|
||||
unsigned int mask;
|
||||
if(!XQueryPointer(display, window, &rootWindow, &childWindow, &rootX, &rootY, &mouseX, &mouseY, &mask))
|
||||
{
|
||||
return Vec2i(-1,-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Vec2i(mouseX, mouseY);
|
||||
}
|
||||
#elif defined USE_AGL
|
||||
#warning unimplemented method
|
||||
#elif defined USE_CGL
|
||||
#error unimplemented method
|
||||
#elif defined USE_WGL
|
||||
POINT pos;
|
||||
GetCursorPos(&pos);
|
||||
return Vec2i(pos.x, pos.y);
|
||||
#endif
|
||||
}
|
||||
|
||||
void OpenArena::Window::SetMousePosition(Vec2i pos)
|
||||
{
|
||||
#if defined USE_GLX
|
||||
XWarpPointer(display, None, window, 0, 0, 0, 0, pos.x, pos.y);
|
||||
#elif defined USE_AGL
|
||||
#warning unimplemented method
|
||||
#elif defined USE_CGL
|
||||
#error unimplemented method
|
||||
#elif defined USE_WGL
|
||||
SetCursorPos(pos.x, pos.y);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef USE_GLX
|
||||
Display* OpenArena::Window::GetDisplay()
|
||||
{
|
||||
return display;
|
||||
}
|
||||
|
||||
Cursor OpenArena::Window::CreateWindowedCursor()
|
||||
{
|
||||
return CreateFullscreenCursor();
|
||||
}
|
||||
|
||||
Cursor OpenArena::Window::CreateFullscreenCursor()
|
||||
{
|
||||
Pixmap pixmap = XCreatePixmap(display, window, 1, 1, 1);
|
||||
XColor color;
|
||||
color.pixel = 0;
|
||||
color.red = 0;
|
||||
color.flags = DoRed;
|
||||
Cursor cur = XCreatePixmapCursor(display, pixmap, pixmap, &color, &color, 0, 0);
|
||||
XFreePixmap(display, pixmap);
|
||||
return cur;
|
||||
}
|
||||
#endif
|
||||
125
macosx/src/window.h
Normal file
125
macosx/src/window.h
Normal file
@@ -0,0 +1,125 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __window_h__
|
||||
#define __window_h__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "screen.h"
|
||||
|
||||
#if defined USE_GLX
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h> //maybe not necessary
|
||||
#include <GL/glx.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/keysym.h>
|
||||
#if defined HAVE_XF86VIDMODE
|
||||
#include <X11/extensions/xf86vmode.h>
|
||||
#endif
|
||||
#elif defined USE_AGL
|
||||
#include <AGL/agl.h>
|
||||
#include <OpenGL/gl.h>
|
||||
#include <OpenGL/glu.h>
|
||||
#elif defined USE_CGL
|
||||
#include <OpenGL/OpenGL.h>
|
||||
#include <OpenGL/gl.h>
|
||||
#elif defined USE_WGL
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#endif
|
||||
#include "vector.h"
|
||||
|
||||
namespace OpenArena
|
||||
{
|
||||
class Window: public Screen
|
||||
{
|
||||
public:
|
||||
class Resizer
|
||||
{
|
||||
public:
|
||||
void Resize(GLsizei width, GLsizei height);
|
||||
};
|
||||
|
||||
class Initializer
|
||||
{
|
||||
public:
|
||||
int Initialize();
|
||||
};
|
||||
|
||||
public:
|
||||
Window();
|
||||
~Window();
|
||||
void Close();
|
||||
bool Open();
|
||||
bool Open(string title, int width, int height, int bits, bool fullscreenflag); //make that string a const char* after this works
|
||||
void SetInitializer(Initializer* initializer);
|
||||
void SetResizer(Resizer* resizer);
|
||||
void SwapBuffers();
|
||||
void Resize(GLsizei width, GLsizei height);
|
||||
Vec2i GetMousePosition();
|
||||
void SetMousePosition(Vec2i pos);
|
||||
|
||||
#ifdef USE_GLX
|
||||
Display* GetDisplay();
|
||||
#endif
|
||||
private:
|
||||
#ifdef USE_GLX
|
||||
Cursor CreateWindowedCursor();
|
||||
Cursor CreateFullscreenCursor();
|
||||
int screen;
|
||||
::Window window;
|
||||
GLXContext hRC;
|
||||
XSetWindowAttributes attributes;
|
||||
bool doubleBuffered;
|
||||
#if defined HAVE_XF86VIDMODE
|
||||
XF86VidModeModeInfo vidMode;
|
||||
#endif
|
||||
int x, y;
|
||||
Display* display;
|
||||
#elif defined USE_AGL
|
||||
AGLContext _aglContext;
|
||||
WindowRef _window;
|
||||
Rect _bounds;
|
||||
#elif defined USE_WGL
|
||||
HGLRC glContext;
|
||||
HWND window;
|
||||
HDC deviceContext;
|
||||
HINSTANCE instance;
|
||||
#endif
|
||||
Resizer* _resizer;
|
||||
Initializer* _initializer;
|
||||
};
|
||||
};
|
||||
|
||||
#if defined USE_GLX
|
||||
static int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4, GLX_DEPTH_SIZE, 16, None};
|
||||
static int attrListDbl[] = {GLX_RGBA, GLX_DOUBLEBUFFER, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4, GLX_BLUE_SIZE, 4, GLX_DEPTH_SIZE, 16, None};
|
||||
#elif defined USE_WGL
|
||||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
31
macosx/src/worlddefs.h
Normal file
31
macosx/src/worlddefs.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __WorldDefs_h__
|
||||
#define __WorldDefs_h__
|
||||
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "level.h"
|
||||
|
||||
//static OpenArena::Level level;
|
||||
|
||||
#endif
|
||||
408
macosx/src/x11.cpp
Normal file
408
macosx/src/x11.cpp
Normal file
@@ -0,0 +1,408 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Module: x11.cpp
|
||||
// Author: Tom Hicks
|
||||
// Creation: 10-08-2006
|
||||
// LastEdit: 10-08-2006
|
||||
// Editors: Tom Hicks
|
||||
//
|
||||
// Purpose:
|
||||
// To implement the OpenArena SDK.
|
||||
//
|
||||
// Summary of Methods:
|
||||
// Global
|
||||
// -InitControls()
|
||||
// Loads the defaultPlayer's configuration.
|
||||
// -InitGL()
|
||||
// Initializes OpenGL and is responsible for loading textures.
|
||||
// -ResizeGLScene(GLsizei width, GLsizei height)
|
||||
// Resizes the viewport to the current size of the visible area of the window specified by width and height.
|
||||
// -KillGLWindow()
|
||||
// Closes the window.
|
||||
// -CreateGLWindow(string title, int width, int height, int bits, bool fullscreenflag)
|
||||
// Creates the window with the specified parameters.
|
||||
// -WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
// Main procedure.
|
||||
// -WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
// Window Procedure for the OpenGL window.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#include "x11.h"
|
||||
#if defined USE_GLX
|
||||
#include "main.h"
|
||||
#include "version.h"
|
||||
|
||||
int InitGL(OpenArena::Level* level)
|
||||
{
|
||||
level->LoadGLTextures();
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glClearDepth(1.0f);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
|
||||
/*lighting disabled temporarily
|
||||
glLightfv(GL_LIGHT1, GL_AMBIENT, level->LightAmbient);
|
||||
for(index=0; index<level->numLights; index++)
|
||||
{
|
||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, level->light[index].color);
|
||||
glLightfv(GL_LIGHT1, GL_POSITION, level->light[index].coords);
|
||||
}
|
||||
|
||||
glEnable(GL_LIGHT1);
|
||||
glEnable(GL_LIGHTING);
|
||||
*/
|
||||
//BuildFont();
|
||||
return true;
|
||||
}
|
||||
|
||||
//This should probably be moved into oa_input
|
||||
OpenArena::Keys TranslateKey(int keyCode)
|
||||
{
|
||||
switch (keyCode)
|
||||
{
|
||||
case XK_BackSpace:
|
||||
return OpenArena::KEY_BACK;
|
||||
case XK_Tab:
|
||||
return OpenArena::KEY_TAB;
|
||||
case XK_Return:
|
||||
return OpenArena::KEY_RETURN;
|
||||
case XK_Escape:
|
||||
return OpenArena::KEY_ESCAPE;
|
||||
case XK_Left:
|
||||
return OpenArena::KEY_LEFT;
|
||||
case XK_Right:
|
||||
return OpenArena::KEY_RIGHT;
|
||||
case XK_Up:
|
||||
return OpenArena::KEY_UP;
|
||||
case XK_Down:
|
||||
return OpenArena::KEY_DOWN;
|
||||
case XK_Home:
|
||||
return OpenArena::KEY_HOME;
|
||||
case XK_End:
|
||||
return OpenArena::KEY_END;
|
||||
case XK_Prior:
|
||||
return OpenArena::KEY_PRIOR;
|
||||
case XK_Next:
|
||||
return OpenArena::KEY_NEXT;
|
||||
case XK_Num_Lock:
|
||||
return OpenArena::KEY_NUMLOCK;
|
||||
case XK_KP_Enter:
|
||||
return OpenArena::KEY_RETURN;
|
||||
case XK_KP_Home:
|
||||
return OpenArena::KEY_HOME;
|
||||
case XK_KP_End:
|
||||
return OpenArena::KEY_END;
|
||||
case XK_KP_Prior:
|
||||
return OpenArena::KEY_PRIOR;
|
||||
case XK_KP_Next:
|
||||
return OpenArena::KEY_NEXT;
|
||||
case XK_KP_0:
|
||||
return OpenArena::KEY_NUMPAD0;
|
||||
case XK_KP_1:
|
||||
return OpenArena::KEY_NUMPAD1;
|
||||
case XK_KP_2:
|
||||
return OpenArena::KEY_NUMPAD2;
|
||||
case XK_KP_3:
|
||||
return OpenArena::KEY_NUMPAD3;
|
||||
case XK_KP_4:
|
||||
return OpenArena::KEY_NUMPAD4;
|
||||
case XK_KP_5:
|
||||
return OpenArena::KEY_NUMPAD5;
|
||||
case XK_KP_6:
|
||||
return OpenArena::KEY_NUMPAD6;
|
||||
case XK_KP_7:
|
||||
return OpenArena::KEY_NUMPAD7;
|
||||
case XK_KP_8:
|
||||
return OpenArena::KEY_NUMPAD8;
|
||||
case XK_KP_9:
|
||||
return OpenArena::KEY_NUMPAD9;
|
||||
case XK_KP_Multiply:
|
||||
return OpenArena::KEY_MULTIPLY;
|
||||
case XK_KP_Add:
|
||||
return OpenArena::KEY_ADD;
|
||||
case XK_KP_Subtract:
|
||||
return OpenArena::KEY_SUBTRACT;
|
||||
case XK_KP_Divide:
|
||||
return OpenArena::KEY_DIVIDE;
|
||||
case XK_F1:
|
||||
return OpenArena::KEY_F1;
|
||||
case XK_F2:
|
||||
return OpenArena::KEY_F2;
|
||||
case XK_F3:
|
||||
return OpenArena::KEY_F3;
|
||||
case XK_F4:
|
||||
return OpenArena::KEY_F4;
|
||||
case XK_F5:
|
||||
return OpenArena::KEY_F5;
|
||||
case XK_F6:
|
||||
return OpenArena::KEY_F6;
|
||||
case XK_F7:
|
||||
return OpenArena::KEY_F7;
|
||||
case XK_F8:
|
||||
return OpenArena::KEY_F8;
|
||||
case XK_F9:
|
||||
return OpenArena::KEY_F9;
|
||||
case XK_F10:
|
||||
return OpenArena::KEY_F10;
|
||||
case XK_F11:
|
||||
return OpenArena::KEY_F11;
|
||||
case XK_F12:
|
||||
return OpenArena::KEY_F12;
|
||||
case XK_Shift_L:
|
||||
return OpenArena::KEY_SHIFT;
|
||||
case XK_Shift_R:
|
||||
return OpenArena::KEY_SHIFT;
|
||||
case XK_Control_L:
|
||||
return OpenArena::KEY_CONTROL;
|
||||
case XK_Control_R:
|
||||
return OpenArena::KEY_CONTROL;
|
||||
case XK_Caps_Lock:
|
||||
return OpenArena::KEY_CAPITAL;
|
||||
case XK_Pause:
|
||||
return OpenArena::KEY_PAUSE;
|
||||
case XK_KP_Space:
|
||||
case XK_space:
|
||||
return OpenArena::KEY_SPACE;
|
||||
case XK_Insert:
|
||||
return OpenArena::KEY_INSERT;
|
||||
case XK_Delete:
|
||||
return OpenArena::KEY_DELETE;
|
||||
case XK_KP_Separator:
|
||||
return OpenArena::KEY_SEPARATOR;
|
||||
case XK_Scroll_Lock:
|
||||
return OpenArena::KEY_SCROLL;
|
||||
case XK_period:
|
||||
return OpenArena::KEY_OEM_PERIOD;
|
||||
case XK_plus:
|
||||
return OpenArena::KEY_OEM_PLUS;
|
||||
case XK_minus:
|
||||
return OpenArena::KEY_OEM_MINUS;
|
||||
case XK_comma:
|
||||
return OpenArena::KEY_OEM_COMMA;
|
||||
case XK_0:
|
||||
return OpenArena::KEY_0;
|
||||
case XK_1:
|
||||
return OpenArena::KEY_1;
|
||||
case XK_2:
|
||||
return OpenArena::KEY_2;
|
||||
case XK_3:
|
||||
return OpenArena::KEY_3;
|
||||
case XK_4:
|
||||
return OpenArena::KEY_4;
|
||||
case XK_5:
|
||||
return OpenArena::KEY_5;
|
||||
case XK_6:
|
||||
return OpenArena::KEY_6;
|
||||
case XK_7:
|
||||
return OpenArena::KEY_7;
|
||||
case XK_8:
|
||||
return OpenArena::KEY_8;
|
||||
case XK_9:
|
||||
return OpenArena::KEY_9;
|
||||
case XK_a:
|
||||
case XK_A:
|
||||
return OpenArena::KEY_A;
|
||||
case XK_b:
|
||||
case XK_B:
|
||||
return OpenArena::KEY_B;
|
||||
case XK_c:
|
||||
case XK_C:
|
||||
return OpenArena::KEY_C;
|
||||
case XK_d:
|
||||
case XK_D:
|
||||
return OpenArena::KEY_D;
|
||||
case XK_e:
|
||||
case XK_E:
|
||||
return OpenArena::KEY_E;
|
||||
case XK_f:
|
||||
case XK_F:
|
||||
return OpenArena::KEY_F;
|
||||
case XK_g:
|
||||
case XK_G:
|
||||
return OpenArena::KEY_G;
|
||||
case XK_h:
|
||||
case XK_H:
|
||||
return OpenArena::KEY_H;
|
||||
case XK_i:
|
||||
case XK_I:
|
||||
return OpenArena::KEY_I;
|
||||
case XK_j:
|
||||
case XK_J:
|
||||
return OpenArena::KEY_J;
|
||||
case XK_k:
|
||||
case XK_K:
|
||||
return OpenArena::KEY_K;
|
||||
case XK_l:
|
||||
case XK_L:
|
||||
return OpenArena::KEY_L;
|
||||
case XK_m:
|
||||
case XK_M:
|
||||
return OpenArena::KEY_M;
|
||||
case XK_n:
|
||||
case XK_N:
|
||||
return OpenArena::KEY_N;
|
||||
case XK_o:
|
||||
case XK_O:
|
||||
return OpenArena::KEY_O;
|
||||
case XK_p:
|
||||
case XK_P:
|
||||
return OpenArena::KEY_P;
|
||||
case XK_q:
|
||||
case XK_Q:
|
||||
return OpenArena::KEY_Q;
|
||||
case XK_r:
|
||||
case XK_R:
|
||||
return OpenArena::KEY_R;
|
||||
case XK_s:
|
||||
case XK_S:
|
||||
return OpenArena::KEY_S;
|
||||
case XK_t:
|
||||
case XK_T:
|
||||
return OpenArena::KEY_T;
|
||||
case XK_u:
|
||||
case XK_U:
|
||||
return OpenArena::KEY_U;
|
||||
case XK_v:
|
||||
case XK_V:
|
||||
return OpenArena::KEY_V;
|
||||
case XK_w:
|
||||
case XK_W:
|
||||
return OpenArena::KEY_W;
|
||||
case XK_x:
|
||||
case XK_X:
|
||||
return OpenArena::KEY_X;
|
||||
case XK_y:
|
||||
case XK_Y:
|
||||
return OpenArena::KEY_Y;
|
||||
case XK_z:
|
||||
case XK_Z:
|
||||
return OpenArena::KEY_Z;
|
||||
case XK_grave:
|
||||
return OpenArena::KEY_OEM_3;
|
||||
case XK_Super_L:
|
||||
return OpenArena::KEY_LWIN;
|
||||
case XK_Super_R:
|
||||
return OpenArena::KEY_RWIN;
|
||||
case XK_Menu:
|
||||
return OpenArena::KEY_APPS;
|
||||
case XK_bracketleft:
|
||||
return OpenArena::KEY_OEM_4;
|
||||
case XK_bracketright:
|
||||
return OpenArena::KEY_OEM_6;
|
||||
case XK_backslash:
|
||||
return OpenArena::KEY_OEM_5;
|
||||
case XK_semicolon:
|
||||
return OpenArena::KEY_OEM_1;
|
||||
case XK_apostrophe:
|
||||
return OpenArena::KEY_OEM_7;
|
||||
case XK_slash:
|
||||
return OpenArena::KEY_OEM_2;
|
||||
case XK_Alt_L:
|
||||
return OpenArena::KEY_ALT_L;
|
||||
case XK_Alt_R:
|
||||
return OpenArena::KEY_ALT_L;
|
||||
case XK_equal:
|
||||
return OpenArena::KEY_OEM_PLUS;
|
||||
case XK_Mode_switch:
|
||||
return OpenArena::KEY_OPTION;
|
||||
case XK_Meta_L:
|
||||
return OpenArena::KEY_COMMAND;
|
||||
case 16777219:
|
||||
return OpenArena::KEY_ENTER;
|
||||
default:
|
||||
return OpenArena::KEY_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
OpenArena::Keys TranslateButton(int keyCode)
|
||||
{
|
||||
switch(keyCode)
|
||||
{
|
||||
case Button1:
|
||||
return OpenArena::KEY_BUTTON0;
|
||||
case Button2:
|
||||
return OpenArena::KEY_BUTTON2;
|
||||
case Button3:
|
||||
return OpenArena::KEY_BUTTON1;
|
||||
case Button4:
|
||||
return OpenArena::KEY_BUTTON3;
|
||||
case Button5:
|
||||
return OpenArena::KEY_BUTTON4;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleConsoleKeyPress(OpenArena::Keys key, OpenArena::Level* level)
|
||||
{
|
||||
if(level->defaultPlayer[0].controls.IsBound(key, OpenArena::ControlScheme::ACTION_TOGGLE_CONSOLE))
|
||||
{
|
||||
level->showConsole = false;
|
||||
}
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case OpenArena::KEY_SHIFT:
|
||||
keys[OpenArena::KEY_SHIFT] = true;
|
||||
break;
|
||||
case OpenArena::KEY_RETURN:
|
||||
level->UpdateConsole('\n');
|
||||
break;
|
||||
case OpenArena::KEY_SPACE:
|
||||
printf("hello");
|
||||
level->UpdateConsole(' ');
|
||||
break;
|
||||
case OpenArena::KEY_BACK:
|
||||
level->UpdateConsole(OpenArena::KEY_BACK);
|
||||
break;
|
||||
case OpenArena::KEY_ESCAPE:
|
||||
level->showConsole = false;
|
||||
break;
|
||||
default:
|
||||
char ascii = OpenArena::KeyToASCII(key, keys[OpenArena::KEY_SHIFT]);
|
||||
if(ascii != '\0')
|
||||
{
|
||||
level->UpdateConsole(ascii);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResizeGLScene(GLsizei width, GLsizei height)
|
||||
{
|
||||
if(height == 0)
|
||||
height = 1;
|
||||
|
||||
glViewport(0,0,width, height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45.0f, (GLfloat)width/height, 0.1f, 100.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
void RT()
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* USE_GLX */
|
||||
40
macosx/src/x11.h
Normal file
40
macosx/src/x11.h
Normal file
@@ -0,0 +1,40 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006 by Tom Hicks *
|
||||
* tomhicks@cse.buffalo.edu *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the *
|
||||
* Free Software Foundation, Inc., *
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
***************************************************************************/
|
||||
#ifndef __x11_h__
|
||||
#define __x11_h__
|
||||
#if defined HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#if defined USE_GLX
|
||||
#include "mygl.h"
|
||||
#include "EventManager.h"
|
||||
#include "level.h"
|
||||
|
||||
int DrawGLScene();
|
||||
OpenArena::Keys TranslateButton(int keyCode);
|
||||
OpenArena::Keys TranslateKey(int keyCode);
|
||||
void ResizeGLScene(GLsizei width, GLsizei height);
|
||||
void HandleConsoleKeyPress(OpenArena::Keys key);
|
||||
int DrawGLScene(OpenArena::Level* level);
|
||||
int InitGL(OpenArena::Level* level);
|
||||
void HandleConsoleKeyPress(OpenArena::Keys key, OpenArena::Level* level);
|
||||
#endif /* USE_GLX */
|
||||
#endif /* __x11_h__ */
|
||||
Reference in New Issue
Block a user