[Orxonox-commit 4598] r9269 - in code/branches/presentation2012merge: . data/gui/layouts data/gui/scripts data/levels data/levels/includes data/levels/templates data/overlays src/modules src/modules/pickup src/modules/pickup/items src/orxonox src/orxonox/controllers src/orxonox/worldentities/pawns
landauf at orxonox.net
landauf at orxonox.net
Sun Jun 3 16:33:14 CEST 2012
Author: landauf
Date: 2012-06-03 16:33:13 +0200 (Sun, 03 Jun 2012)
New Revision: 9269
Added:
code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout
code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua
code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw
code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi
code/branches/presentation2012merge/data/levels/surfaceRace.oxw
code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt
code/branches/presentation2012merge/data/levels/templates/tower.oxt
code/branches/presentation2012merge/data/levels/towerDefense.oxw
code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo
code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc
code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h
code/branches/presentation2012merge/src/modules/towerdefense/
code/branches/presentation2012merge/src/orxonox/ShipManager.cc
code/branches/presentation2012merge/src/orxonox/ShipManager.h
Modified:
code/branches/presentation2012merge/
code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua
code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua
code/branches/presentation2012merge/data/levels/includes/pickups.oxi
code/branches/presentation2012merge/data/levels/pickups.oxw
code/branches/presentation2012merge/data/levels/portals.oxw
code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw
code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt
code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt
code/branches/presentation2012merge/data/levels/theTimeMachine.oxw
code/branches/presentation2012merge/data/levels/tutorial.oxw
code/branches/presentation2012merge/src/modules/CMakeLists.txt
code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h
code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt
code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h
code/branches/presentation2012merge/src/orxonox/LevelInfo.cc
code/branches/presentation2012merge/src/orxonox/LevelInfo.h
code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc
code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc
code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h
Log:
merged presentation2012 to presentation2012merge
Property changes on: code/branches/presentation2012merge
___________________________________________________________________
Modified: svn:ignore
- build
codeblocks
vs
dependencies
+ .project
build
codeblocks
dependencies
vs
Modified: svn:mergeinfo
- /code/branches/ai:6592-7033
/code/branches/ai2:8721-8880
/code/branches/bigships:8137-8588
/code/branches/buildsystem:1874-2276,2278-2400
/code/branches/buildsystem2:2506-2658
/code/branches/buildsystem3:2662-2708
/code/branches/ceguilua:1802-1808
/code/branches/chat:6527-6797
/code/branches/chat2:6836-6910
/code/branches/console:5941-6104
/code/branches/consolecommands2:6451-7178
/code/branches/consolecommands3:7178-7283
/code/branches/core3:1572-1739
/code/branches/core4:3221-3224,3227,3234-3238,3242,3244-3250,3252-3254,3256,3259-3261,3264-3265,3268-3275,3277-3278,3280,3284-3285,3287,3289-3294,3305,3309-3310
/code/branches/core5:5768-5928,6009
/code/branches/data_cleanup:7537-7686
/code/branches/doc:7290-7400
/code/branches/dockingsystem:8101-8192
/code/branches/dockingsystem2:8196-8560
/code/branches/dynamicmatch:6584-7030
/code/branches/environment3:8887-8975
/code/branches/formation:8885-8991
/code/branches/fps:6591-7072
/code/branches/gamecontent:8893-8968
/code/branches/gameimmersion:8102-8577
/code/branches/gamestate:6430-6572,6621-6661
/code/branches/gamestates2:6594-6745
/code/branches/gametypes:2826-3031
/code/branches/gcc43:1580
/code/branches/gui:1635-1723,2795-2894
/code/branches/hud:8883-8986
/code/branches/hudelements:6584-6941
/code/branches/hudimprovements:7920-8672
/code/branches/ingamemenu:6000-6023
/code/branches/input:1629-1636
/code/branches/ipv6:7293-7458
/code/branches/kicklib:7940-8096,8098-8277
/code/branches/kicklib2:8282-8350
/code/branches/lastmanstanding:7479-7644
/code/branches/lastmanstanding3:7903-8175
/code/branches/libraries:5612-5692
/code/branches/libraries2:5703-5737
/code/branches/lod:6586-6911
/code/branches/lodfinal:2372-2411
/code/branches/mac_osx:7789-8128,8135
/code/branches/map:2801-3086,3089
/code/branches/masterserver:7502-7738
/code/branches/masterserverfix:8933-8936
/code/branches/menu:5941-6146,6148,7536-7687
/code/branches/menue:8884-8976
/code/branches/miniprojects:2754-2824
/code/branches/netp2:2835-2988
/code/branches/netp3:2988-3082
/code/branches/netp6:3214-3302
/code/branches/network:2356
/code/branches/network2:6434-6465
/code/branches/network3:7196-7344
/code/branches/network4:7497-7755
/code/branches/network5:7757-7781
/code/branches/network6:7823-8315
/code/branches/network64:2210-2355
/code/branches/notifications:7314-7401
/code/branches/objecthierarchy:1911-2085,2100,2110-2169
/code/branches/objecthierarchy2:2171-2479
/code/branches/ois_update:7506-7788
/code/branches/output:8739-8857
/code/branches/overlay:2117-2385
/code/branches/particles:2829-3085
/code/branches/particles2:6050-6106,6109
/code/branches/pch:3113-3194
/code/branches/physics:1912-2055,2107-2439
/code/branches/physics_merge:2436-2457
/code/branches/pickup:8145-8555
/code/branches/pickup2:5942-6405
/code/branches/pickup3:6418-6523
/code/branches/pickup4:6594-6710
/code/branches/pickups:1926-2086,2127,2827-2915
/code/branches/pickups2:2107-2497,2915-3071
/code/branches/png2:7262-7263
/code/branches/portals:8087-8455
/code/branches/portals2:8460-8602
/code/branches/ppspickups1:6552-6708
/code/branches/ppspickups2:6527-6532,6554-6709
/code/branches/ppspickups3:6757-6997
/code/branches/ppspickups4:7003-7089
/code/branches/presentation:2369-2652,2654-2660,7736-7786,8500-8705
/code/branches/presentation2:6106-6416,7787-7800
/code/branches/presentation2011:8974-9015
/code/branches/presentation3:6913-7162
/code/branches/questsystem:1894-2088
/code/branches/questsystem2:2107-2259
/code/branches/questsystem5:2776-2905
/code/branches/releasetodo:7614-7647
/code/branches/resource:3327-3366
/code/branches/resource2:3372-5694
/code/branches/rocket:6523-6950
/code/branches/rocket2:6953-6970
/code/branches/script_trigger:1295-1953,1955
/code/branches/skybox2:6559-6989
/code/branches/sound:2829-3010
/code/branches/sound3:5941-6102
/code/branches/spaceboundaries:8085-8457
/code/branches/spaceboundaries2:8460-8613
/code/branches/spacerace:8182-8630
/code/branches/spaceraceTwo:8881-8996
/code/branches/steering:5949-6091,8140-8595
/code/branches/tetris:8100-8563
/code/branches/tutoriallevel:7827-8370
/code/branches/tutoriallevel2:8370-8452
/code/branches/tutoriallevel3:8453-8636
/code/branches/unity_build:8440-8716
/code/branches/usability:7915-8078
/code/branches/weapon:1925-2094
/code/branches/weapon2:2107-2488
/code/branches/weapons:2897-3051,8143-8591
/code/branches/weaponsystem:2742-2890
+ /code/branches/ai:6592-7033
/code/branches/ai2:8721-8880
/code/branches/bigships:8137-8588
/code/branches/buildsystem:1874-2276,2278-2400
/code/branches/buildsystem2:2506-2658
/code/branches/buildsystem3:2662-2708
/code/branches/ceguilua:1802-1808
/code/branches/chat:6527-6797
/code/branches/chat2:6836-6910
/code/branches/console:5941-6104
/code/branches/consolecommands2:6451-7178
/code/branches/consolecommands3:7178-7283
/code/branches/core3:1572-1739
/code/branches/core4:3221-3224,3227,3234-3238,3242,3244-3250,3252-3254,3256,3259-3261,3264-3265,3268-3275,3277-3278,3280,3284-3285,3287,3289-3294,3305,3309-3310
/code/branches/core5:5768-5928,6009
/code/branches/data_cleanup:7537-7686
/code/branches/doc:7290-7400
/code/branches/dockingsystem:8101-8192
/code/branches/dockingsystem2:8196-8560
/code/branches/dynamicmatch:6584-7030
/code/branches/environment3:8887-8975
/code/branches/formation:8885-8991
/code/branches/fps:6591-7072
/code/branches/gamecontent:8893-8968
/code/branches/gameimmersion:8102-8577
/code/branches/gamestate:6430-6572,6621-6661
/code/branches/gamestates2:6594-6745
/code/branches/gametypes:2826-3031
/code/branches/gcc43:1580
/code/branches/gui:1635-1723,2795-2894
/code/branches/hud:8883-8986
/code/branches/hudelements:6584-6941
/code/branches/hudimprovements:7920-8672
/code/branches/ingamemenu:6000-6023
/code/branches/input:1629-1636
/code/branches/ipv6:7293-7458
/code/branches/kicklib:7940-8096,8098-8277
/code/branches/kicklib2:8282-8350
/code/branches/lastmanstanding:7479-7644
/code/branches/lastmanstanding3:7903-8175
/code/branches/libraries:5612-5692
/code/branches/libraries2:5703-5737
/code/branches/lod:6586-6911
/code/branches/lodfinal:2372-2411
/code/branches/mac_osx:7789-8128,8135
/code/branches/map:2801-3086,3089
/code/branches/masterserver:7502-7738
/code/branches/masterserverfix:8933-8936
/code/branches/menu:5941-6146,6148,7536-7687
/code/branches/menue:8884-8976
/code/branches/miniprojects:2754-2824
/code/branches/netp2:2835-2988
/code/branches/netp3:2988-3082
/code/branches/netp6:3214-3302
/code/branches/network:2356
/code/branches/network2:6434-6465
/code/branches/network3:7196-7344
/code/branches/network4:7497-7755
/code/branches/network5:7757-7781
/code/branches/network6:7823-8315
/code/branches/network64:2210-2355
/code/branches/newlevel2012:9033-9244
/code/branches/notifications:7314-7401
/code/branches/objecthierarchy:1911-2085,2100,2110-2169
/code/branches/objecthierarchy2:2171-2479
/code/branches/ois_update:7506-7788
/code/branches/output:8739-8857
/code/branches/overlay:2117-2385
/code/branches/particles:2829-3085
/code/branches/particles2:6050-6106,6109
/code/branches/pch:3113-3194
/code/branches/physics:1912-2055,2107-2439
/code/branches/physics_merge:2436-2457
/code/branches/pickup:8145-8555
/code/branches/pickup2:5942-6405
/code/branches/pickup2012:9029-9189
/code/branches/pickup3:6418-6523
/code/branches/pickup4:6594-6710
/code/branches/pickups:1926-2086,2127,2827-2915
/code/branches/pickups2:2107-2497,2915-3071
/code/branches/png2:7262-7263
/code/branches/portals:8087-8455
/code/branches/portals2:8460-8602
/code/branches/ppspickups1:6552-6708
/code/branches/ppspickups2:6527-6532,6554-6709
/code/branches/ppspickups3:6757-6997
/code/branches/ppspickups4:7003-7089
/code/branches/presentation:2369-2652,2654-2660,7736-7786,8500-8705
/code/branches/presentation2:6106-6416,7787-7800
/code/branches/presentation2011:8974-9015
/code/branches/presentation2012:9189-9268
/code/branches/presentation3:6913-7162
/code/branches/questsystem:1894-2088
/code/branches/questsystem2:2107-2259
/code/branches/questsystem5:2776-2905
/code/branches/releasetodo:7614-7647
/code/branches/resource:3327-3366
/code/branches/resource2:3372-5694
/code/branches/rocket:6523-6950
/code/branches/rocket2:6953-6970
/code/branches/script_trigger:1295-1953,1955
/code/branches/shipSelection:9038-9206
/code/branches/skybox2:6559-6989
/code/branches/sound:2829-3010
/code/branches/sound2012:9205-9214
/code/branches/sound3:5941-6102
/code/branches/spaceboundaries:8085-8457
/code/branches/spaceboundaries2:8460-8613
/code/branches/spacerace:8182-8630
/code/branches/spaceraceTwo:8881-8996
/code/branches/steering:5949-6091,8140-8595
/code/branches/surfaceRace:9028-9199
/code/branches/tetris:8100-8563
/code/branches/tutoriallevel:7827-8370
/code/branches/tutoriallevel2:8370-8452
/code/branches/tutoriallevel3:8453-8636
/code/branches/unity_build:8440-8716
/code/branches/usability:7915-8078
/code/branches/weapon:1925-2094
/code/branches/weapon2:2107-2488
/code/branches/weapons:2897-3051,8143-8591
/code/branches/weaponsystem:2742-2890
Copied: code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout (from rev 9268, code/branches/presentation2012/data/gui/layouts/ShipSelectionMenu.layout)
===================================================================
--- code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout (rev 0)
+++ code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<GUILayout >
+
+ <Window Type="MenuWidgets/StaticImage" Name="orxonox/ShipSelectionBackground" >
+ <Property Name="FrameEnabled" Value="False" />
+ <Property Name="InheritsAlpha" Value="False" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" />
+ <Property Name="BackgroundEnabled" Value="False" />
+ <!-- -->
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/ShipSelectionWindow" >
+ <Property Name="Text" Value="ShipSelection" />
+ <Property Name="Alpha" Value="0.8" />
+ <Property Name="InheritsAlpha" Value="False" />
+ <Property Name="HorzFormatting" Value="HorzCentred" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="VertFormatting" Value="TopAligned" />
+ <Property Name="UnifiedAreaRect" Value="{{0.2,0},{0.15,0},{0.8,0},{0.7,0}}" />
+ <Window Type="MenuWidgets/TabControl" Name="orxonox/ShipSelectionTabControl" >
+ <Property Name="TabHeight" Value="{0,26.4388}" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="TabPanePosition" Value="Top" />
+ <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.1,0},{0.95,0},{0.925,0}}" />
+
+ </Window>
+
+ <!-- TODO: Ship Description and Image
+ <Window Type="MenuWidgets/StaticImage" Name="orxonox/ShipSelectionShipImage" >
+ <Property Name="AlwaysOnTop" Value="True" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="UnifiedAreaRect" Value="{{0.55,0},{0.25,0},{0.9,0},{0.675,0}}" />
+ </Window>
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/ShipSelectionLevelDescription" >
+ <Property Name="AlwaysOnTop" Value="True" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="VertScrollbar" Value="True" />
+ <Property Name="HorzScrollbar" Value="True" />
+ <Property Name="UnifiedAreaRect" Value="{{0.1,0},{0.725,0},{0.9,0},{0.875,0}}" />
+ </Window>-->
+
+ </Window>
+ <Window Type="MenuWidgets/Button" Name="orxonox/ShipSelectionStartButton" >
+ <Property Name="Text" Value="Start" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.725,0},{0.4,0},{0.775,0}}" />
+ <Event Name="Clicked" Function="ShipSelectionMenu.ShipSelectionStartButton_clicked"/>
+ </Window>
+ <!-- TODO: set ship properties
+ <Window Type="MenuWidgets/Button" Name="orxonox/ShipSelectionConfigButton" >
+ <Property Name="Text" Value="Configure" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="UnifiedAreaRect" Value="{{0.425,0},{0.725,0},{0.575,0},{0.775,0}}" />
+ <Property Name="Disabled" Value="True" />
+ <Event Name="Clicked" Function="ShipSelectionMenu.ShipSelectionConfigButton_clicked"/>
+ </Window> -->
+ <Window Type="MenuWidgets/Button" Name="orxonox/ShipSelectionBackButton" >
+ <Property Name="Text" Value="Back" />
+ <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+ <Property Name="UnifiedAreaRect" Value="{{0.6,0},{0.725,0},{0.75,0},{0.775,0}}" />
+ <Event Name="Clicked" Function="ShipSelectionMenu.ShipSelectionBackButton_clicked"/>
+ </Window>
+ </Window>
+</GUILayout>
Modified: code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua
===================================================================
--- code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua 2012-06-03 14:33:13 UTC (rev 9269)
@@ -33,6 +33,7 @@
table.insert(themeList, "Drum n' Bass")
table.insert(themeList, "8-Bit Style")
table.insert(themeList, "Corny Jazz")
+ table.insert(themeList, "Metal")
for k,v in pairs(themeList) do
item = CEGUI.createListboxTextItem(v)
item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
@@ -44,6 +45,8 @@
listboxwindow:setItemSelectState(2,true)
elseif orxonox.getConfig("MoodManager", "mood_") == "jazzy" then
listboxwindow:setItemSelectState(3,true)
+ elseif orxonox.getConfig("MoodManager", "mood_") == "metal" then
+ listboxwindow:setItemSelectState(4,true)
else
listboxwindow:setItemSelectState(0,true)
end
@@ -177,6 +180,8 @@
orxonox.config("MoodManager", "mood_", "eightbit")
elseif listboxwindow:isItemSelected(3) then
orxonox.config("MoodManager", "mood_", "jazzy")
+ elseif listboxwindow:isItemSelected(4) then
+ orxonox.config("MoodManager", "mood_", "metal")
else
orxonox.config("MoodManager", "mood_", "default")
end
Copied: code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua (from rev 9268, code/branches/presentation2012/data/gui/scripts/ShipSelectionMenu.lua)
===================================================================
--- code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua (rev 0)
+++ code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,132 @@
+-- ShipSelectionMenu.lua
+
+local P = createMenuSheet("ShipSelectionMenu")
+P.activeTabIndexes = {}
+P.scrollbarWidth = 13
+P.shipList = {}
+function P.onLoad()
+ local dircmd = "ls -l ../levels/templates/ | awk '{print $9}' | grep \"spaceship\" | sed -e 's/\\.[a-zA-Z]*$//'" -- go to spaceships folder and generate a list of installed shipmodels.
+ os.execute(dircmd .. " > ../levels/templates/.shipmodels") --saves output in a textfile
+ --[[TODO: program a Windows Version / platform independent version here:
+ if string.sub(package.config,1,1) == '\\' then
+ -- Windows
+ dircmd = "dir /b/s"
+ end]]
+ P.createFilterTab("All Ships")
+end
+
+function P.createShipList() --generates list with tagged shipmodels
+ P.shipList = {}
+ for line in io.lines("../levels/templates/.shipmodels") do --checks if shipmodel is included in level file
+ if selectedlevel:hasShip(string.lower(line)) then
+ P.shipList[#P.shipList+1] = string.lower(line)
+ end
+ end
+end
+
+function P.update() --updates listbox with found models
+ P.createShipList()
+ listbox:resetList()
+ --orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
+ local tabIndexes = {}
+ for k,v in pairs(P.shipList) do
+ --TODO: only add ship if is in the right filter tab
+ --if tag == nil or v:hasShip(tag) then
+ local item = CEGUI.createListboxTextItem(v)
+ item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
+ listbox:addItem(item)
+ table.insert(tabIndexes, k)
+ --orxonox.GUIManager:setTooltipTextHelper(item, v:getDescription())
+ --end
+ end
+ table.insert(P.activeTabIndexes, tabIndexes)
+end
+
+function P.createFilterTab(name) -- generates filter tab and list box, sets handler for selection changes
+ tabName = "orxonox/ShipSelectionLevelTab"
+ -- create new tab window with desired name
+ listbox = CEGUI.toListbox(winMgr:createWindow("MenuWidgets/Listbox", tabName))
+ listbox:setText(name)
+ listbox:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}")
+ --[[TODO: smaller list if image and description is implemented.
+ listbox:setProperty("UnifiedAreaRect", "{{0.05,0},{0.1,0},{0.5,0},{0.675,0}}") --]]
+ listbox:setProperty("UnifiedAreaRect", "{{0,0},{0,0},{1,0},{1,0}}")
+ -- fill listbox with items
+ P.update()
+ -- listen to selection changes
+ orxonox.GUIManager:subscribeEventHelper(listbox, "ItemSelectionChanged", P.name..".ShipSelectionSelectionChanged")
+ local tabControl = winMgr:getWindow("orxonox/ShipSelectionTabControl")
+ orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".ShipSelectionSelectionChanged")
+ if listbox:getItemCount() > 0 then
+ tabControl:addChildWindow(tabName)
+ end
+end
+
+function P.ShipSelectionGetSelectedModel() --returns selected model, if available.
+ -- choose the active listbox
+ local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/ShipSelectionTabControl"))
+ local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
+ local choice = listbox:getFirstSelectedItem()
+ if choice ~= nil then
+ -- get the right tab and the right index
+ local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
+ local index = tabIndexes[listbox:getItemIndex(choice)+1]
+ return P.shipList[index]
+ else
+ return nil
+ end
+end
+
+function P.ShipSelectionSelectionChanged(e)
+ --[[ TODO: Get image and description from template file
+ local levelImage = winMgr:getWindow("orxonox/ShipSelectionLevelImage")
+ local levelDescription = winMgr:getWindow("orxonox/ShipSelectionLevelDescription")
+ local configButton = winMgr:getWindow("orxonox/ShipSelectionConfigButton")
+ local level = P.ShipSelectionGetSelectedModel()
+ if level ~= nil then
+ --local levelXMLFilename = selectedlevel:getXMLFilename()
+ --local imageName = selectedlevel:getScreenshot()
+ -- set the screenshot and the description for the selected level
+ --levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
+ --levelDescription:setText(level:getDescription())
+ -- only enable config button for "gametype" levels
+ --if level:hasTag("gametype") then
+ -- configButton:setProperty("Disabled", "False")
+ --else
+ -- configButton:setProperty("Disabled", "True")
+ --end
+ else
+ -- also take care of "no level selected"
+ levelImage:setProperty("Image", nil)
+ levelDescription:setText("")
+ end
+ --]]
+end
+
+function P.ShipSelectionStartButton_clicked(e)
+
+ if (selectedlevel ~= nil and P.ShipSelectionGetSelectedModel() ~= nil) then
+ selectedlevel:selectShip(P.ShipSelectionGetSelectedModel())
+ orxonox.execute("startGame " .. "_temp.oxw")
+ hideAllMenuSheets()
+ else
+ orxonox.execute("orxout user_warning no ship model selected or no tagged shipmodel installed")
+ end
+end
+
+--[[ TODO: function P.ShipSelectionConfigButton_clicked(e)
+
+ local level = P.ShipSelectionGetSelectedModel()
+ if level ~= nil then
+ local configMenu = showMenuSheet("ShipSelectionConfigMenu")
+ configMenu:loadConfig(level)
+ end
+end
+--]]
+
+
+function P.ShipSelectionBackButton_clicked(e)
+ orxonox.execute("keyESC")
+end
+
+return P
Modified: code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua
===================================================================
--- code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua 2012-06-03 14:33:13 UTC (rev 9269)
@@ -1,10 +1,11 @@
-- SingleplayerMenu.lua
local P = createMenuSheet("SingleplayerMenu")
-
+P.loadAlong = {"ShipSelectionMenu"}
P.levelList = {}
P.activeTabIndexes = {}
P.scrollbarWidth = 13
+selectedlevel = {} -- level for ship selection
function P.onLoad()
P.createLevelList()
@@ -45,7 +46,8 @@
local level = nil
while index < size do
level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
- if level ~= nil then
+ if (level ~= nil and level:getXMLFilename() ~= "_temp.oxw") then
+ --os.execute("echo " .. level:getXMLFilename() .." >> ~/outputorx")
local levelXMLFilename = level:getXMLFilename()
-- create an imageset for each screenshot
local imageName = level:getScreenshot()
@@ -140,10 +142,15 @@
end
function P.SingleplayerStartButton_clicked(e)
- local level = P.SingleplayerGetSelectedLevel()
- if level ~= nil then
- orxonox.execute("startGame " .. level:getXMLFilename())
- hideAllMenuSheets()
+ selectedlevel = P.SingleplayerGetSelectedLevel()
+ if selectedlevel ~= nil then
+ if selectedlevel:hasTag("shipselection") then
+ local shipSelectionMenu = showMenuSheet("ShipSelectionMenu", true)
+ shipSelectionMenu:update()
+ else
+ orxonox.execute("startGame " .. selectedlevel:getXMLFilename())
+ hideAllMenuSheets()
+ end
end
end
Copied: code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw (from rev 9268, code/branches/presentation2012/data/levels/SurfaceRacePresentation.oxw)
===================================================================
--- code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw (rev 0)
+++ code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,390 @@
+<LevelInfo
+ name = "Surface Race Presentation"
+ description = "just awesome 2.0"
+ screenshot = "surfaceRace.png"
+ tags = "gametype, shipselection"
+ startingships = "spaceshipassff, spaceshipghost, spaceshipspacecruiser, spaceshiprace"
+/>
+
+<?lua
+ include("stats.oxo")
+ include("HUDTemplates3.oxo")
+ include("templates/lodInformation.oxt")
+ include("templates/spaceshipRace.oxt")
+ include("templates/spaceshipAssff.oxt")
+ include("templates/spaceshipGhost.oxt")
+ include("templates/spaceshipSpacecruiser.oxt")
+ include("templates/pickupRepresentationTemplates.oxt")
+
+?>
+
+<Level
+gametype = SpaceRace
+>
+
+ <templates>
+ <Template link=lodtemplate_default />
+ </templates>
+ <?lua include("includes/notifications.oxi") ?>
+
+ <Scene
+ ambientlight = "2.0, 2.0, 2.0"
+ skybox = "Orxonox/skyBoxClouds"
+ gravity = "0,-75,0"
+ negativeWorldRange = "-100000, -100000, -100000"
+ positiveWorldRange = " 100000, 100000, 100000"
+ hasPhysics = true
+ >
+
+ <Template name=PortalDefault>
+ <PortalEndPoint>
+ <attached>
+ <Model mesh="Spacegate.mesh" scale="3"/>
+ </attached>
+ </PortalEndPoint>
+ </Template>
+
+ <PortalEndPoint position="6000,8050,2500" id="1" distance="40" target="MobileEntity" design="PortalDefault" reenterDelay="0"/>
+ <PortalEndPoint position="6100,8050,-4500" id="2" distance="40" target="MobileEntity" design="PortalDefault" reenterDelay="0"/>
+ <PortalLink fromID="1" toID="2" />
+ <PortalLink fromID="2" toID="1" />
+
+ <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+
+
+ <Model position="4200,8050,-1000" scale=10 mesh="debris-pile01.mesh" shadow=true />
+ <Model position="4200,8050,-1000" scale=10 mesh="debris-pile02.mesh" shadow=true />
+ <Model position="4200,8050,-1000" scale=10 mesh="debris-pile03.mesh" shadow=true />
+
+ <MovableEntity position="-700,8090,-300" velocity="80,0,0" rotationaxis="1,0,1" rotationrate=200>
+ <attached>
+ <Model position="0,0,-20" scale=10 mesh="cokebottle.mesh" />
+ </attached>
+ </MovableEntity>
+
+
+<SpaceRaceManager>
+ <checkpoints>
+ <RaceCheckPoint name="checkpoint1" position="0,8050,-1000" direction="0,1,0" collisionType="static" scale="4" distance="150" checkpointindex="0" islast="false" nextcheckpoints="1,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint2" position="1000,8050,-4000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="1" islast="false" nextcheckpoints="2,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint3" position="3000,8050,-4000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="2" islast="false" nextcheckpoints="3,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint4" position="4000,8050,-1000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="3" islast="false" nextcheckpoints="4,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint5" position="4000,8050,0" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="4" islast="false" nextcheckpoints="5,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint6" position="3000,8050,1000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="5" islast="false" nextcheckpoints="6,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint7" position="0,8050,2000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="6" islast="false" nextcheckpoints="7,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint8" position="-4000,8050,3000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="7" islast="false" nextcheckpoints="8,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint9" position="-4000,8050,5000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="8" islast="false" nextcheckpoints="9,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint10" position="-3000,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="9" islast="false" nextcheckpoints="10,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint11" position="0,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="120" checkpointindex="10" islast="false" nextcheckpoints="11,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint12" position="6000,8050,6000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="11" islast="false" nextcheckpoints="12,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint13" position="5500,8050,3000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="12" islast="false" nextcheckpoints="13,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+
+ <RaceCheckPoint name="checkpoint14" position="6000,8050,-5000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="13" islast="true" >
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+ </collisionShapes>
+ </RaceCheckPoint>
+</checkpoints>
+</SpaceRaceManager>
+
+ <SpawnPoint team=0 position="0,8050,0" lookat="0,8000,-8000" spawnclass=SpaceShip pawndesign=shipselection />
+
+
+ <!-- -----------------------Zylinder---------------------------- -->
+<StaticEntity position="2750,8050,6000" direction="1,0,0" roll="90" scale="4" collisionType=static mass=100000 friction=0.01 >
+ <attached>
+ <Model position="0,0,0" mesh="cylinder.mesh" scale3D="100,100,400" />
+ <!--
+ <Model position="0,80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+ <Model position="0,-80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+ <Model position="80,0,600" mesh="testcube.mesh" scale3D="18,90,-600" />
+ <Model position="-80,0,600" mesh="testcube.mesh" scale3D="18,09,-600" />
+ -->
+
+ </attached>
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,320,2400" halfExtents="360,72,2400" />
+ <BoxCollisionShape position="0,-320,2400" halfExtents="360,72,2400" />
+ <BoxCollisionShape position="320,0,2400" halfExtents="72,360,2400" />
+ <BoxCollisionShape position="-320,0,2400" halfExtents="72,360,2400" />
+
+
+
+ </collisionShapes>
+
+ </StaticEntity>
+
+<!-- ------------------Cube between gate 4 and 5----------------- -->
+<StaticEntity position="4465,8050,-500" direction="0,0,0" scale="1" collisionType=static mass=100000 friction=0.01 >
+ <attached>
+ <Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+ <Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+ -->
+
+ </attached>
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,0" halfExtents="450,600,50" />
+
+ </collisionShapes>
+
+ </StaticEntity>
+
+<StaticEntity position="3535,8050,-500" direction="0,0,0" scale="1" collisionType=static mass=100000 friction=0.01 >
+ <attached>
+ <Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+ <Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+ -->
+
+ </attached>
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,0" halfExtents="450,600,50" />
+
+ </collisionShapes>
+
+ </StaticEntity>
+
+
+
+
+ <!-- ------------------Boden----------------- -->
+ <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 friction=0.01>
+ <attached>
+ <Model position="0,0,0" mesh="CubeGround.mesh" scale3D="8000,8000,8000" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,50,0" halfExtents="8000,8000,8000" />um j?:P"{
+
+ </collisionShapes>
+</StaticEntity>
+
+
+<!-- ---------------------PickUp---------------------- -->
+
+
+ <PickupSpawner position="4000,8050,0" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+ <pickup>
+ <SpeedPickup template=smallspeedpickup />
+ </pickup>
+ </PickupSpawner>
+
+ <PickupSpawner position="5500,8100,2000" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+ <pickup>
+ <SpeedPickup template=mediumspeedpickup />
+ </pickup>
+ </PickupSpawner>
+
+ <PickupSpawner position="3000,8050,-4000" triggerDistance="40" respawnTime="60" maxSpawnedItems="5" scale="8">
+ <pickup>
+ <ShrinkPickup template ="mediumshrinkpickup"/>
+ </pickup>
+ </PickupSpawner>>
+
+
+
+
+ <!-- ---------------asteroid ellipse----------------- -->
+
+ <?lua
+ max = 15
+ for i = 0, max, 1
+ do
+ x=-12000
+ y=10000
+ z=-12000
+
+ ?>
+ <?lua
+ for k = 1, 15, 1
+ do
+ j = math.random()
+ ?>
+
+ <MovableEntity
+ position = "<?lua print(x + math.random() * 20000) ?>,<?lua print(y + math.random() * 5000) ?>,<?lua print(z + math.random() * 20000) ?>"
+ collisionType = "dynamic"
+ linearDamping = "0.5"
+ angularDamping = "0.5"
+ collisiondamage = "100"
+ enablecollisiondamage = "true"
+ scale="<?lua print(j * 5) ?>" >
+ <attached>
+ <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh">
+ <?lua if k == 0 then ?><attached><!-- ---------asteroid fog----- -->
+ <ParticleEmitter position="0,0,0" source="Orxonox/Steam" />
+ </attached> <?lua end ?>
+ </Model>
+ </attached>
+ <collisionShapes>
+ <SphereCollisionShape radius="<?lua print(j * 80) ?>" />
+ </collisionShapes>
+ </MovableEntity>
+ <?lua
+ end
+ ?>
+ <?lua end ?>
+
+ </Scene>
+</Level>
+
Modified: code/branches/presentation2012merge/data/levels/includes/pickups.oxi
===================================================================
--- code/branches/presentation2012merge/data/levels/includes/pickups.oxi 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/includes/pickups.oxi 2012-06-03 14:33:13 UTC (rev 9269)
@@ -209,6 +209,41 @@
</pickup>
</PickupRepresentation>
+<!-- DamageBoost Pickup -->
+
+<PickupRepresentation
+ pickupName = "Small DamageBoost Pickup"
+ pickupDescription = "Multiplies the ship damage with 2."
+ spawnerTemplate = "smalldamageboostpickupRepresentation"
+ inventoryRepresentation = "SmallDamageBoost"
+>
+ <pickup>
+ <DamageBoostPickup template=smalldamageboostpickup />
+ </pickup>
+</PickupRepresentation>
+
+<PickupRepresentation
+ pickupName = "Medium DamageBoost Pickup"
+ pickupDescription = "Multiplies the ship damage with 5."
+ spawnerTemplate = "mediumdamageboostpickupRepresentation"
+ inventoryRepresentation = "MediumDamageBoost"
+>
+ <pickup>
+ <DamageBoostPickup template=mediumdamageboostpickup />
+ </pickup>
+</PickupRepresentation>
+
+<PickupRepresentation
+ pickupName = "Large DamageBoost Pickup"
+ pickupDescription = "Multiplies the ship damage with 7."
+ spawnerTemplate = "largedamageboostpickupRepresentation"
+ inventoryRepresentation = "LargeDamageBoost"
+>
+ <pickup>
+ <DamageBoostPickup template=largedamageboostpickup />
+ </pickup>
+</PickupRepresentation>
+
<!-- Shrink Pickup -->
<PickupRepresentation
Copied: code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi (from rev 9268, code/branches/presentation2012/data/levels/includes/towerWeaponSettings.oxi)
===================================================================
--- code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi (rev 0)
+++ code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,55 @@
+ <weaponslots>
+ <WeaponSlot position="-15.0,-1.5,0" />
+ <WeaponSlot position=" 15.0,-1.5,0" />
+ <WeaponSlot position=" 0, 0,0" />
+ </weaponslots>
+ <weaponsets>
+ <WeaponSet firemode=0 />
+ <WeaponSet firemode=1 />
+ <WeaponSet firemode=2 />
+ <WeaponSet firemode=3 />
+ </weaponsets>
+ <weapons>
+ <WeaponPack>
+ <links>
+ <DefaultWeaponmodeLink firemode=0 weaponmode=0 />
+ <DefaultWeaponmodeLink firemode=1 weaponmode=1 />
+ <DefaultWeaponmodeLink firemode=2 weaponmode=2 />
+ <DefaultWeaponmodeLink firemode=3 weaponmode=3 />
+ </links>
+ <Weapon>
+ <attached>
+ <Model mesh="LightningGun.mesh" pitch="100" roll="90" yaw="90" position="0,-1.3,200" scale=1/>
+ <Model mesh="LightningGun-s.mesh" pitch="78" roll="90" yaw="90" position="0.2,-1.3,200" scale=1 />
+ <Model mesh="hs-w01_reduced.mesh" roll="45" pitch="-76" yaw="-45" position="-1.5,1,200" scale=10 />
+ </attached>
+ <HsW01 mode=0 munitionpershot=0 delay=0.005 damage=31.4159 material="Flares/point_lensflare" muzzleoffset=" 0.1, 1.6,-2" />
+ <HsW01 mode=0 munitionpershot=0 delay=0 damage=314.159 material="Flares/point_lensflare" muzzleoffset="-1.6, 1.3,-2" />
+ <LightningGun mode=1 muzzleoffset="0,0,0" damage=3.14159 shielddamage=20 />
+ </Weapon>
+
+ <Weapon>
+ <attached>
+ <Model mesh="LightningGun.mesh" pitch="103" roll="90" yaw="90" position="0,-1.35,0" />
+ <Model mesh="LightningGun-s.mesh" pitch="103" roll="90" yaw="90" position="0.2,-1.35,0" />
+ <Model mesh="hs-w01_reduced.mesh" roll="90" pitch="-104" yaw="-90" position="0,1.3,0.3" scale=0.6 />
+ </attached>
+ <HsW01 mode=0 munitionpershot=0 delay=0 damage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 1.6, 1.3, -2.0" />
+ <HsW01 mode=0 munitionpershot=0 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1, 1.6, -2.0" />
+ <LightningGun mode=1 muzzleoffset="0,0,0" damage=23 />
+ </Weapon>
+ <Weapon>
+ <SimpleRocketFire mode=2 muzzleoffset="0,0,0" damage=30 shielddamage=20 />
+ <RocketFire mode=3 muzzleoffset="0,0,0" damage=30 healthdamage=50 shielddamage=20 />
+ </Weapon>
+
+ </WeaponPack>
+ <WeaponPack>
+ <links>
+ <DefaultWeaponmodeLink firemode=1 weaponmode=0 />
+ </links>
+ <!--Weapon>
+ <EnergyDrink mode=0 munitionpershot=0 delay=0 material="Flares/point_lensflare"muzzleoffset="2,-0.2,-1" />
+ </Weapon-->
+ </WeaponPack>
+ </weapons>
\ No newline at end of file
Modified: code/branches/presentation2012merge/data/levels/pickups.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/pickups.oxw 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/pickups.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -168,6 +168,27 @@
</pickup>
</PickupSpawner>
+ <!-- DamageBoost pickup -->
+
+ <PickupSpawner position="-50,75,-125" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+ <pickup>
+ <DamageBoostPickup template=smalldamageboostpickup />
+ </pickup>
+ </PickupSpawner>
+
+ <PickupSpawner position="-50,100,-125" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+ <pickup>
+ <DamageBoostPickup template=mediumdamageboostpickup />
+ </pickup>
+ </PickupSpawner>
+
+ <PickupSpawner position="-50,125,-125" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+ <pickup>
+ <DamageBoostPickup template=largedamageboostpickup />
+ </pickup>
+ </PickupSpawner>
+
+
<!-- Other pickups -->
<!-- PickupRepresentation for the pickup below, since it is not a standard pickup provided by pickups.oxi -->
@@ -205,7 +226,64 @@
<ShrinkPickup template ="hugeshrinkpickup"/>
</pickup>
</PickupSpawner>
+
+ <!-- @Objects: 4 boxes (uncontrolled pawns) -->
+ <Pawn team=1 health=30 position="0,0,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box RVName = "Box 4" >
+ <events>
+ <visibility>
+ <EventListener event="flying4" />
+ </visibility>
+ </events>
+ <attached>
+ <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+ </collisionShapes>
+ </Pawn>
+ <Pawn team=1 health=30 position="0,100,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box RVName = "Box 3">
+ <events>
+ <visibility>
+ <EventListener event="flying4" />
+ </visibility>
+ </events>
+ <attached>
+ <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+ </collisionShapes>
+ </Pawn>
+
+ <Pawn health=30 position="0,200,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box team=1 RVName = "Box 2">
+ <events>
+ <visibility>
+ <EventListener event="flying4" />
+ </visibility>
+ </events>
+ <attached>
+ <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+ </collisionShapes>
+ </Pawn>
+
+ <Pawn health=30 position="0,300,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box team=1 RVName = "Box 1">
+ <events>
+ <visibility>
+ <EventListener event="flying4" />
+ </visibility>
+ </events>
+ <attached>
+ <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+ </collisionShapes>
+ </Pawn>
+
<!--StaticEntity position="0,-200,0" direction="0,-1,0" collisionType=static mass=500 friction=0.01 >
<attached>
<Model position="0,0,0" mesh="cube.mesh" scale3D="10,10,10" />
Modified: code/branches/presentation2012merge/data/levels/portals.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/portals.oxw 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/portals.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -28,7 +28,7 @@
<Template name=PortalDefault>
<PortalEndPoint>
<attached>
- <Billboard material="Portals/Default" />
+ <Model mesh="Spacegate.mesh" yaw="90"/>
</attached>
</PortalEndPoint>
</Template>
Copied: code/branches/presentation2012merge/data/levels/surfaceRace.oxw (from rev 9268, code/branches/presentation2012/data/levels/surfaceRace.oxw)
===================================================================
--- code/branches/presentation2012merge/data/levels/surfaceRace.oxw (rev 0)
+++ code/branches/presentation2012merge/data/levels/surfaceRace.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,455 @@
+<LevelInfo
+ name = "Surface Race"
+ description = "just awesome"
+ screenshot = "surfaceRace.png"
+ tags = "gametype"
+/>
+
+<?lua
+ include("stats.oxo")
+ include("HUDTemplates3.oxo")
+ include("templates/lodInformation.oxt")
+ include("templates/spaceshipRace.oxt")
+ include("templates/pickupRepresentationTemplates.oxt")
+
+?>
+
+
+<Level
+gametype = SpaceRace
+>
+
+ <templates>
+ <Template link=lodtemplate_default />
+ </templates>
+ <?lua include("includes/notifications.oxi") ?>
+
+ <Scene
+ ambientlight = "2.0, 2.0, 2.0"
+ skybox = "Orxonox/skyBoxClouds"
+ gravity = "0,-75,0"
+ negativeWorldRange = "-100000, -100000, -100000"
+ positiveWorldRange = " 100000, 100000, 100000"
+ hasPhysics = true
+ >
+
+ <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+
+
+
+<SpaceRaceManager>
+ <checkpoints>
+ <RaceCheckPoint name="checkpoint1" position="0,8050,-1000" direction="0,1,0" collisionType="static" scale="4" distance="150" checkpointindex="0" islast="false" nextcheckpoints="1,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+
+<!--
+ <Model position="0,0,55" mesh="testcube.mesh" scale3D="110,20,20" />
+ <Model position="0,0,-55" mesh="testcube.mesh" scale3D="110,20,20" />
+ <Model position="55,0,0" mesh="testcube.mesh" scale3D="20,20,110" />
+ <Model position="-55,0,0" mesh="testcube.mesh" scale3D="20,20,110" />
+
+-->
+
+
+ </attached>
+
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+
+
+
+ </RaceCheckPoint>
+
+<RaceCheckPoint name="checkpoint2" position="1000,8050,-4000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="1" islast="false" nextcheckpoints="2,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+
+
+ <collisionShapes>
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+ </collisionShapes>
+ </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint3" position="3000,8050,-4000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="2" islast="false" nextcheckpoints="3,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint4" position="4000,8050,-1000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="3" islast="false" nextcheckpoints="4,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint5" position="4000,8050,0" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="4" islast="false" nextcheckpoints="5,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint6" position="3000,8050,1000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="5" islast="false" nextcheckpoints="6,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+ </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint7" position="0,8050,2000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="6" islast="false" nextcheckpoints="7,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint8" position="-4000,8050,3000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="7" islast="false" nextcheckpoints="8,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+ </collisionShapes>
+ </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint9" position="-4000,8050,5000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="8" islast="false" nextcheckpoints="9,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint10" position="-3000,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="9" islast="false" nextcheckpoints="10,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+<RaceCheckPoint name="checkpoint11" position="0,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="120" checkpointindex="10" islast="false" nextcheckpoints="11,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+<RaceCheckPoint name="checkpoint12" position="6000,8050,6000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="11" islast="false" nextcheckpoints="12,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+
+ </collisionShapes>
+
+ </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint13" position="5500,8050,3000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="12" islast="false" nextcheckpoints="13,-1,-1">
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+ </collisionShapes>
+ </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint14" position="6000,8050,-5000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="13" islast="true" >
+ <attached>
+ <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+ </attached>
+ <collisionShapes>
+
+ <BoxCollisionShape position="0,0,220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="0,0,-220" halfExtents="220, 40, 40" />
+ <BoxCollisionShape position="220,0,0" halfExtents="40, 40, 220" />
+ <BoxCollisionShape position="-220,0,0" halfExtents="40, 40, 220" />
+
+ </collisionShapes>
+ </RaceCheckPoint>
+
+
+</checkpoints>
+</SpaceRaceManager>
+
+ <SpawnPoint team=0 position="0,8050,0" lookat="0,8000,-8000" spawnclass=SpaceShip pawndesign=spaceshipRace />
+
+
+ <!-- -----------------------Zylinder---------------------------- -->
+<StaticEntity position="2750,8050,6000" direction="1,0,0" roll="90" scale="4" collisionType=static mass=100000 friction=0.01 >
+ <attached>
+ <Model position="0,0,0" mesh="cylinder.mesh" scale3D="100,100,400" />
+ <!--
+ <Model position="0,80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+ <Model position="0,-80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+ <Model position="80,0,600" mesh="testcube.mesh" scale3D="18,90,-600" />
+ <Model position="-80,0,600" mesh="testcube.mesh" scale3D="18,09,-600" />
+ -->
+
+ </attached>
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,320,2400" halfExtents="360,72,2400" />
+ <BoxCollisionShape position="0,-320,2400" halfExtents="360,72,2400" />
+ <BoxCollisionShape position="320,0,2400" halfExtents="72,360,2400" />
+ <BoxCollisionShape position="-320,0,2400" halfExtents="72,360,2400" />
+
+
+
+ </collisionShapes>
+
+ </StaticEntity>
+
+<!-- ------------------Cube between gate 4 and 5----------------- -->
+<StaticEntity position="4465,8050,-500" direction="0,0,0" scale="1" collisionType=static mass=100000 friction=0.01 >
+ <attached>
+ <Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+ <Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+ -->
+
+ </attached>
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,0" halfExtents="450,600,50" />
+
+ </collisionShapes>
+
+ </StaticEntity>
+
+<StaticEntity position="3535,8050,-500" direction="0,0,0" scale="1" collisionType=static mass=100000 friction=0.01 >
+ <attached>
+ <Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+ <Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+ -->
+
+ </attached>
+
+
+ <collisionShapes>
+
+
+ <BoxCollisionShape position="0,0,0" halfExtents="450,600,50" />
+
+ </collisionShapes>
+
+ </StaticEntity>
+
+
+
+
+ <!-- ------------------Boden----------------- -->
+ <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 friction=0.01>
+ <attached>
+ <Model position="0,0,0" mesh="CubeGround.mesh" scale3D="8000,8000,8000" />
+ </attached>
+ <collisionShapes>
+ <BoxCollisionShape position="0,50,0" halfExtents="8000,8000,8000" />um j?:P"{
+
+ </collisionShapes>
+</StaticEntity>
+
+
+<!-- ---------------------PickUp---------------------- -->
+
+
+ <PickupSpawner position="4000,8050,0" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+ <pickup>
+ <SpeedPickup template=smallspeedpickup />
+ </pickup>
+ </PickupSpawner>
+
+ <PickupSpawner position="5500,8100,2000" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+ <pickup>
+ <SpeedPickup template=mediumspeedpickup />
+ </pickup>
+ </PickupSpawner>
+
+ <PickupSpawner position="3000,8050,-4000" triggerDistance="40" respawnTime="60" maxSpawnedItems="5" scale="8">
+ <pickup>
+ <ShrinkPickup template ="mediumshrinkpickup"/>
+ </pickup>
+ </PickupSpawner>>
+
+
+
+
+ <!-- ---------------asteroid ellipse----------------- -->
+
+ <?lua
+ max = 15
+ for i = 0, max, 1
+ do
+ x=-12000
+ y=10000
+ z=-12000
+
+ ?>
+ <?lua
+ for k = 1, 15, 1
+ do
+ j = math.random()
+ ?>
+
+ <MovableEntity
+ position = "<?lua print(x + math.random() * 20000) ?>,<?lua print(y + math.random() * 5000) ?>,<?lua print(z + math.random() * 20000) ?>"
+ collisionType = "dynamic"
+ linearDamping = "0.5"
+ angularDamping = "0.5"
+ collisiondamage = "100"
+ enablecollisiondamage = "true"
+ scale="<?lua print(j * 5) ?>" >
+ <attached>
+ <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh">
+ <?lua if k == 0 then ?><attached><!-- ---------asteroid fog----- -->
+ <ParticleEmitter position="0,0,0" source="Orxonox/Steam" />
+ </attached> <?lua end ?>
+ </Model>
+ </attached>
+ <collisionShapes>
+ <SphereCollisionShape radius="<?lua print(j * 80) ?>" />
+ </collisionShapes>
+ </MovableEntity>
+ <?lua
+ end
+ ?>
+ <?lua end ?>
+
+ </Scene>
+</Level>
+
Modified: code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -24,7 +24,7 @@
<Scene
ambientlight = "0.7, 0.6, 0.6"
- skybox = "Orxonox/skypanoramagen1"
+ skybox = "Orxonox/creeper1"
>
<Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0" />
Modified: code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt 2012-06-03 14:33:13 UTC (rev 9269)
@@ -215,6 +215,84 @@
</PickupRepresentation>
</Template>
+<!-- DamageBoost pickups -->
+
+<Template name=smalldamageboostpickupRepresentation>
+ <PickupRepresentation>
+ <spawner-representation>
+ <StaticEntity>
+ <attached>
+ <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+ <attached>
+ <Billboard position="0,0,0" colour="0.30,0.30,0.30" material="damageSmall" scale=0.7 />
+ </attached>
+ </Billboard>
+ </attached>
+ </StaticEntity>
+ </spawner-representation>
+ </PickupRepresentation>
+</Template>
+
+<Template name=smalldamageboostpickup>
+ <DamageBoostPickup
+ duration = 10.0
+ damageMultiplier = 2.0
+ activationType = "immediate"
+ durationType = "continuous"
+ />
+</Template>
+
+<Template name=mediumdamageboostpickupRepresentation>
+ <PickupRepresentation>
+ <spawner-representation>
+ <StaticEntity>
+ <attached>
+ <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+ <attached>
+ <Billboard position="0,0,0" colour="0.30,0.30,0.30" material="damageMedium" scale=0.7 />
+ </attached>
+ </Billboard>
+ </attached>
+ </StaticEntity>
+ </spawner-representation>
+ </PickupRepresentation>
+</Template>
+
+<Template name=mediumdamageboostpickup>
+ <DamageBoostPickup
+ duration = 10.0
+ damageMultiplier = 5.0
+ activationType = "immediate"
+ durationType = "continuous"
+ />
+</Template>
+
+<Template name=largedamageboostpickupRepresentation>
+ <PickupRepresentation>
+ <spawner-representation>
+ <StaticEntity>
+ <attached>
+ <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+ <attached>
+ <Billboard position="0,0,0" colour="0.30,0.30,0.30" material="damageLarge" scale=0.7 />
+ </attached>
+ </Billboard>
+ </attached>
+ </StaticEntity>
+ </spawner-representation>
+ </PickupRepresentation>
+</Template>
+
+<Template name=largedamageboostpickup>
+ <DamageBoostPickup
+ duration = 10.0
+ damageMultiplier = 7.0
+ activationType = "immediate"
+ durationType = "continuous"
+ />
+</Template>
+
+
<!-- Speed pickups -->
<Template name=smallspeedpickupRepresentation>
Modified: code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt 2012-06-03 14:33:13 UTC (rev 9269)
@@ -34,11 +34,12 @@
linearDamping = 0.7
angularDamping = 0.9999999
>
+
<engines>
<MultiStateEngine position=" 0, 0, 0" template=spaceshippirateengine />
</engines>
<attached>
- <Model position="0,0,0" yaw=90 pitch=-90 roll=0 scale=4 mesh="pirate.mesh" />
+ <Model position="0,0,0" yaw=90 pitch=-90 roll=0 scale=20 mesh="pirate.mesh" />
<BlinkingBillboard position=" 12.7,-3.8,0" material="Examples/Flare" colour="1.0, 1.0, 1" amplitude=0.04 frequency=1 quadratic=1 />
<BlinkingBillboard position="-12.7,-3.8,0" material="Examples/Flare" colour="1.0, 1.0, 1" amplitude=0.04 frequency=1 quadratic=1 phase="90"/>
<BlinkingBillboard position=" 8.7,-0.5,2.5" material="Examples/Flare" colour="1.0, 1.0, 1" amplitude=0.04 frequency=1 quadratic=1 phase="30"/>
Copied: code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt (from rev 9268, code/branches/presentation2012/data/levels/templates/spaceshipRace.oxt)
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt (rev 0)
+++ code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,119 @@
+<Template name=spaceshiprace>
+ <SpaceShip
+ hudtemplate = spaceshiphud
+ camerapositiontemplate = spaceshipassffcameras
+ spawnparticlesource = "Orxonox/fairytwirl"
+ spawnparticleduration = 3
+ explosionchunks = 6
+
+ health = 100
+ maxhealth = 200
+ initialhealth = 100
+
+ shieldhealth = 30
+ initialshieldhealth = 30
+ maxshieldhealth = 50
+ shieldabsorption = 0.8
+ reloadrate = 1
+ reloadwaittime = 1
+
+ primaryThrust = 100
+ auxilaryThrust = 30
+ rotationThrust = 50
+
+ lift = 1;
+ stallSpeed = 220;
+
+ boostPower = 15
+ boostPowerRate = 1
+ boostRate = 5
+ boostCooldownDuration = 10
+
+ shakeFrequency = 15
+ shakeAmplitude = 9
+
+ collisionType = "dynamic"
+ mass = 100
+ linearDamping = 0.7
+ angularDamping = 0.9999999
+ >
+ <engines>
+ <MultiStateEngine position=" 7.6, 0, 6" template=spaceshipassffengine />
+ <MultiStateEngine position="-7.6, 0, 0" template=spaceshipassffengine />
+ </engines>
+ <attached>
+ <Model position="0,0,0" yaw=90 pitch=-90 roll=0 scale=4 mesh="assff.mesh" />
+ <BlinkingBillboard position="17,-1.5,0" material="Examples/Flare" colour="1.0, 0.5, 0.3" amplitude=0.1 frequency=0.5 quadratic=1 />
+ <BlinkingBillboard position="-17,-1.5,0" material="Examples/Flare" colour="0.5, 1.0, 0.3" amplitude=0.1 frequency=0.5 phase=180 quadratic=1 />
+ </attached>
+ <collisionShapes>
+
+ <BoxCollisionShape position="0,0,0" halfExtents="10, 3, 5" />
+ <BoxCollisionShape position="13,-1.3,0" halfExtents="3, 1, 2" />
+ <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" />
+ <BoxCollisionShape position="0,0,7" halfExtents="3, 2, 2" />
+ <BoxCollisionShape position="0,0.1,-11" halfExtents="2.2, 1.8, 6" />
+ <BoxCollisionShape position="0,0.1,-19" halfExtents="1.4, 1, 2" />
+
+ </collisionShapes>
+<?lua
+ include("../includes/weaponSettingsAssff.oxi")
+?>
+ </SpaceShip>
+</Template>
+
+<Template name=spaceshipassffcameras defaults=0>
+ <SpaceShip>
+ <camerapositions>
+ <CameraPosition position="0,10, 40" drag=true mouselook=true />
+ <CameraPosition position="0,20, 80" drag=true mouselook=true />
+ <CameraPosition position="0,30,120" drag=true mouselook=true />
+ </camerapositions>
+ </SpaceShip>
+</Template>
+
+<Template name=spaceshipassffengine baseclass=MultiStateEngine>
+ <MultiStateEngine
+ boostfactor = 2
+
+ speedfront = 2500
+ speedback = 50
+ speedleftright = 50
+ speedupdown = 50
+
+ defEngineSndNormal = "sounds/Engine_low.ogg"
+ defEngineSndBoost = "sounds/Engine_high.ogg"
+
+ accelerationfront = 500
+ accelerationbrake = 500
+ accelerationback = 125
+ accelerationleftright = 125
+ accelerationupdown = 125
+ >
+ <EffectContainer condition="idle">
+ <WorldSound mainstate="activity" source="sounds/Engine_idle.ogg" looping=1 active=false/>
+ </EffectContainer>
+ <EffectContainer condition="not idle">
+ <FadingBillboard mainstate=activity active=false scale=0.1 position="7.6, 0, 9" colour="0.2, 0.65, 1.0, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+ <FadingBillboard mainstate=activity active=false scale=0.1 position="-7.6, 0, 9" colour="0.2, 0.65, 1.0, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+ </EffectContainer>
+ <EffectContainer condition="normal or brake">
+
+ </EffectContainer>
+ <EffectContainer condition="normal or boost">
+ <Backlight mainstate=activity active=false scale=0.4 name=bltest position=" 7.6, 0, 6" colour="0.2, 0.65, 1.0, 1.0" width=15 length=1500 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+ <Backlight mainstate=activity active=false scale=0.4 name=bltest position="-7.6, 0, 6" colour="0.2, 0.65, 1.0, 1.0" width=15 length=1500 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+ </EffectContainer>
+ <EffectContainer condition="boost">
+ <Backlight mainstate=activity active=false scale=0.4 name=bltest position=" 7.6, 0, 6" colour="0.6, 0.75, 0.8, 0.7" width=40 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+ <Backlight mainstate=activity active=false scale=0.4 name=bltest position="-7.6, 0, 6" colour="0.6, 0.75, 0.8, 0.7" width=40 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+ </EffectContainer>
+<!-- <EffectContainer condition="brake">
+ <FadingBillboard mainstate=activity active=false scale=0.3 position=" 8, 0, 6" colour="0.5, 0.0, 0.0, 0.3" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+ <FadingBillboard mainstate=activity active=false scale=0.3 position="-8, 0, 6" colour="0.5, 0.0, 0.0, 0.3" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+ <FadingBillboard mainstate=activity active=false scale=0.15 position=" 8, 0, 6" colour="1.0, 0.0, 0.0, 1.0" material="Flares/backlightflare" turnontime=0.5 turnofftime=0.5 />
+ <FadingBillboard mainstate=activity active=false scale=0.15 position="-8, 0, 6" colour="1.0, 0.0, 0.0, 1.0" material="Flares/backlightflare" turnontime=0.5 turnofftime=0.5 />
+ </EffectContainer>
+-->
+ </MultiStateEngine>
+</Template>
Copied: code/branches/presentation2012merge/data/levels/templates/tower.oxt (from rev 9268, code/branches/presentation2012/data/levels/templates/tower.oxt)
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/tower.oxt (rev 0)
+++ code/branches/presentation2012merge/data/levels/templates/tower.oxt 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,37 @@
+<Template name=tower>
+ <Tower
+
+
+ explosionchunks = 6
+
+ reloadrate = 3
+ reloadwaittime = 1
+
+ collisionType = "dynamic"
+ team = 2
+
+
+ >
+ <controller>
+ <WaypointPatrolController alertnessradius=1000 team=5>
+ <waypoints>
+ <Model mesh="cube.mesh" scale=0 position=" 700, 200, 100" />
+ </waypoints>
+ </WaypointPatrolController>
+ </controller>
+
+
+ <attached>
+ <Model position="0,0,0" scale=45 mesh="Tower.mesh" />
+ </attached>
+
+ <!--collisionShapes>
+
+ </collisionShapes-->
+
+<?lua
+ include("../includes/towerWeaponSettings.oxi")
+?>
+ </Tower>
+</Template>
+
Modified: code/branches/presentation2012merge/data/levels/theTimeMachine.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/theTimeMachine.oxw 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/theTimeMachine.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -58,6 +58,28 @@
</SpaceShip>
</Template>
+<Template name=spaceshipassffengine baseclass=MultiStateEngine>
+ <MultiStateEngine
+ boostfactor = 2
+
+ speedfront = 150
+ speedback = 50
+ speedleftright = 50
+ speedupdown = 50
+
+ defEngineSndNormal = "sounds/Engine_low.ogg"
+ defEngineSndBoost = "sounds/Engine_high.ogg"
+
+ accelerationfront = 500
+ accelerationbrake = 500
+ accelerationback = 125
+ accelerationleftright = 125
+ accelerationupdown = 125
+ >
+
+ </MultiStateEngine>
+</Template>
+
<!--*****************************************************************************************************************************************************************************************-->
<Level
Copied: code/branches/presentation2012merge/data/levels/towerDefense.oxw (from rev 9268, code/branches/presentation2012/data/levels/towerDefense.oxw)
===================================================================
--- code/branches/presentation2012merge/data/levels/towerDefense.oxw (rev 0)
+++ code/branches/presentation2012merge/data/levels/towerDefense.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,140 @@
+<!-- TODO: Update the level's image-->
+
+<!-- See TowerDefenseReadme.txt for Information on this file -->
+
+<LevelInfo
+ name = "Tower Defense"
+ description = "Defend your Spacestation from incoming waves."
+ tags = "gametype"
+ screenshot = "emptylevel.png"
+/>
+
+<?lua
+ include("stats.oxo")
+ include("HUDTemplates3.oxo")
+ include("towerdefenseHUD.oxo")
+ include("templates/lodInformation.oxt")
+?>
+
+<?lua
+ include("templates/spaceshipAssff.oxt")
+ include("templates/spaceshipPirate.oxt")
+ include("templates/tower.oxt")
+?>
+
+<!-- Specify the position of the camera -->
+<Template name=centerpointmarkcamera defaults=0>
+ <Pawn>
+ <camerapositions>
+ <CameraPosition position="0,0,1500"/>
+ </camerapositions>
+ </Pawn>
+</Template>
+
+<!-- Loads a mesh to mark the center-->
+<Template name=centerpointmark>
+ <Pawn camerapositiontemplate=centerpointmarkcamera>
+ <attached>
+ <Model position="0,0,0" mesh="cylinder.mesh" scale3D="1,1,1" /> <!-- the camera is attached to this -->
+ </attached>
+ </Pawn>
+</Template>
+
+
+<!-- Template for a tower EDIT: new towertemplate is included with "templates/tower" -->
+<!--Template name=towertemplate>
+ <Tower>
+ <attached>
+ <Model position="0,0,0" scale=0.25 mesh="Tower_ME.mesh" />
+ </attached>
+ </Tower>
+</Template-->
+
+
+
+
+
+<Level gametype = "TowerDefense">
+ <templates>
+ <Template link=lodtemplate_default />
+ </templates>
+
+ <?lua include("includes/notifications.oxi") ?>
+
+ <Scene
+ ambientlight = "0.8, 0.8, 0.8"
+ skybox = "Orxonox/Starbox"
+ >
+
+ <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+
+ <!-- Spawns the camera, attached to a crate -->
+ <SpawnPoint team=0 position="0,0,0" spawnclass=Pawn pawndesign=centerpointmark />
+ <!--TeamSpawnPoint team=1 position="-7,7,4" direction="-1,0,0" roll=90 yaw=0 spawnclass=SpaceShip pawndesign=spaceshipassff /-->
+
+ <!--SpawnPoint team=1 position="0,0,10" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff /-->
+ <!--SpawnPoint team=0 position="0,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff /-->
+
+ <SpaceShip position="-700,-500, 100" lookat="0,0,0" scale=3 team=1 >
+ <templates>
+ <Template link=spaceshipassff />
+ </templates>
+ <controller>
+ <WaypointController accuracy=60>
+ <waypoints>
+ <!-- 1,3 10,3 10,11, 13,11 -->
+ <Model mesh="cube.mesh" scale=0 position="-700,-500, 150" />
+ <Model mesh="cube.mesh" scale=0 position=" 200,-500, 150" />
+ <Model mesh="cube.mesh" scale=0 position=" 200, 300, 150" />
+ <Model mesh="cube.mesh" scale=0 position=" 500, 300, 150" />
+ <Model mesh="cube.mesh" scale=0 position=" 500, 700, 150" />
+ </waypoints>
+ </WaypointController>
+ </controller>
+ </SpaceShip>
+
+
+ <!--invisible entity to attach towers to, since playfield is static and towers are dynamic-->
+ <StaticEntity position=0,0,0>
+
+ <attached>
+ <Model position="-50,-50,0" mesh="Playfield_ME.mesh" scale=80 />
+ <!-- Base -->
+ <Model position="500,700,100" mesh="sphere.mesh" scale=80 />
+ <!--Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" /--> <!-- Only temporary needed to help align the collisionshape -->
+ <!-- This was used to mark the playfield, let's let it be here for now -->
+ <!--Model position="-8,8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+ <!--Model position="-8,-8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+ <!--Model position="8,-8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+ <!--Model position="8,8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+ </attached>
+ <collisionShapes> <!-- The collisionshape forbids other worldentities that have a collisionShape to fly through it.
+
+ TODO: Find correct size for the collisionshape; since a collisionShape is invisible
+ I added the crate wich currently has the same dimensions as the collisionshape.
+ You have to adjust the crate's scale3D as well as the collisionshape's halfExtens to
+ find the proper shape. -->
+ <BoxCollisionShape position="0,0,0" halfExtents="400,400,100" />
+ </collisionShapes>
+ </StaticEntity>
+
+
+
+
+ <!-- PlayField -->
+ <TowerDefenseCenterpoint
+ name=towerdefensecenter
+ width=16
+ height=16
+ tileScale=100
+ towerTemplate=tower
+ position="0,0,0"
+ direction="0,0,0"
+ collisionType=dynamic
+ mass=100000>
+
+ </TowerDefenseCenterpoint>
+
+ </Scene>
+</Level>
+
Modified: code/branches/presentation2012merge/data/levels/tutorial.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/tutorial.oxw 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/data/levels/tutorial.oxw 2012-06-03 14:33:13 UTC (rev 9269)
@@ -1,14 +1,17 @@
<LevelInfo
name = "Coding Tutorial"
description = "Level for the coding tutorial."
- tags = "tutorial"
+ tags = "tutorial, shipselection"
screenshot = "codingtutorial.png"
+ startingships = "spaceshipassff, spaceshipghost, spaceshipspacecruiser"
/>
<?lua
include("HUDTemplates3.oxo")
include("stats.oxo")
include("templates/spaceshipAssff.oxt")
+ include("templates/spaceshipGhost.oxt")
+ include("templates/spaceshipSpacecruiser.oxt")
include("templates/lodInformation.oxt")
?>
@@ -22,10 +25,6 @@
ambientlight = "0.5, 0.5, 0.5"
skybox = "Orxonox/skypanoramagen1"
>
-
-
-
-
<Drone name="meineDrohne" primarythrust="80" auxilarythrust="10" rotationthrust="10" mass= "50" linearDamping = "0.9" angularDamping = "0.7">
<attached>
<Model scale="1" mesh="drone.mesh"/>
@@ -52,7 +51,7 @@
<?lua
for i = 1, 10, 1 do
?>
- <SpawnPoint position="<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+ <SpawnPoint position="<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>" lookat="0,0,0" spawnclass=SpaceShip pawndesign=shipselection />
<?lua end ?>
<GlobalShader compositor="Bloom" visible=false>
Copied: code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo (from rev 9268, code/branches/presentation2012/data/overlays/towerdefenseHUD.oxo)
===================================================================
--- code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo (rev 0)
+++ code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,16 @@
+<Template name="TowerDefenseHUD">
+ <OverlayGroup name="TowerDefenseHUD" scale = "1, 1">
+ <OverlayText
+ position = "0.05, 0.05"
+ pickpoint = "0.0, 0.0"
+ font = "ShareTechMono"
+ textsize = 0.05
+ colour = "1.0, 1.0, 1.0, 1.0"
+ align = "left"
+
+ caption = "Hello World"
+ />
+
+
+ </OverlayGroup>
+</Template>
Modified: code/branches/presentation2012merge/src/modules/CMakeLists.txt
===================================================================
--- code/branches/presentation2012merge/src/modules/CMakeLists.txt 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/modules/CMakeLists.txt 2012-06-03 14:33:13 UTC (rev 9269)
@@ -37,3 +37,4 @@
ADD_SUBDIRECTORY(tetris)
ADD_SUBDIRECTORY(weapons)
ADD_SUBDIRECTORY(docking)
+ADD_SUBDIRECTORY(towerdefense)
Modified: code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h 2012-06-03 14:33:13 UTC (rev 9269)
@@ -85,7 +85,7 @@
class SpeedPickup;
class ShieldPickup;
class ShrinkPickup;
-
+ class DamageBoostPickup;
}
#endif /* _PickupPrereqs_H__ */
Modified: code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt 2012-06-03 14:33:13 UTC (rev 9269)
@@ -6,4 +6,5 @@
SpeedPickup.cc
ShieldPickup.cc
ShrinkPickup.cc
+ DamageBoostPickup.cc
)
Copied: code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc (from rev 9268, code/branches/presentation2012/src/modules/pickup/items/DamageBoostPickup.cc)
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc (rev 0)
+++ code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,240 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Kevin Lengauer
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file DamageBoostPickup.cc
+ @brief Implementation of the DamageBoostPickup class.
+*/
+
+#include "DamageBoostPickup.h"
+
+#include <sstream>
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+#include "pickup/PickupIdentifier.h"
+#include "worldentities/pawns/SpaceShip.h"
+
+namespace orxonox
+{
+ CreateFactory(DamageBoostPickup);
+
+ /**
+ @brief
+ Constructor. Registers the object and initializes the member variables.
+ */
+ DamageBoostPickup::DamageBoostPickup(BaseObject* creator) : Pickup(creator)
+ {
+ RegisterObject(DamageBoostPickup);
+
+ this->initialize();
+ }
+
+ /**
+ @brief
+ Destructor.
+ */
+ DamageBoostPickup::~DamageBoostPickup()
+ {
+ }
+
+ /**
+ @brief
+ Initializes the member variables.
+ */
+ void DamageBoostPickup::initialize(void)
+ {
+ this->duration_ = 0.0f;
+ this->damageMultiplier_ = 1.0f; //The default damage multiplier.
+ //Defines who is allowed to pick up the pickup.
+ this->addTarget(ClassIdentifier<SpaceShip>::getIdentifier());
+ }
+
+ /**
+ @brief
+ Initializes the PickupIdentifier of this pickup.
+ */
+ void DamageBoostPickup::initializeIdentifier(void)
+ {
+ std::stringstream stream;
+ stream << this->getDuration();
+ std::string type1 = "duration";
+ std::string val1 = stream.str();
+ this->pickupIdentifier_->addParameter(type1, val1);
+
+ stream.clear();
+ stream << this->getDamageMultiplier();
+ std::string type2 = "damageMultiplier";
+ std::string val2 = stream.str();
+ this->pickupIdentifier_->addParameter(type2, val2);
+
+ }
+
+ /**
+ @brief
+ Method for creating a DamageBoostPickup object through XML.
+ */
+ void DamageBoostPickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode)
+ {
+ SUPER(DamageBoostPickup, XMLPort, xmlelement, mode);
+
+ XMLPortParam(DamageBoostPickup, "duration", setDuration, getDuration, xmlelement, mode);
+ XMLPortParam(DamageBoostPickup, "damageMultiplier", setDamageMultiplier, getDamageMultiplier, xmlelement, mode);
+
+ this->initializeIdentifier();
+ }
+
+ // Work in Progress setDamage Function
+ void DamageBoostPickup::setDamageMultiplier(float damageMultiplier)
+ {
+ if(damageMultiplier >= 1.0f)
+ {
+ this->damageMultiplier_ = damageMultiplier;
+ }
+ }
+
+
+ /**
+ @brief
+ Is called when the pickup has transisted from used to unused or the other way around.
+ */
+ void DamageBoostPickup::changedUsed(void)
+ {
+ SUPER(DamageBoostPickup, changedUsed);
+
+ SpaceShip* ship = this->carrierToSpaceShipHelper();
+ if(ship == NULL) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
+ this->Pickupable::destroy();
+
+
+ // If the pickup has transited to used.
+ if(this->isUsed())
+ {
+ // If its durationType is continuous, we set a Timer to be reminded, when the time has run out.
+ if(this->isContinuous())
+ {
+ if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() > 0.0f)
+ {
+ this->durationTimer_.unpauseTimer();
+ }
+ else
+ {
+ this->durationTimer_.setTimer(this->getDuration(), false, createExecutor(createFunctor(&DamageBoostPickup::pickupTimerCallback, this)));
+ }
+ }
+
+ // Saves the old default Damage that is needed to restore the original damage
+ this->olddamageMultiplier_ = 1.0f;
+ // Sets the new Damage with the damage multiplier
+ ship->setDamageMultiplier(this->getDamageMultiplier());
+ }
+ else
+ {
+
+ // We destroy the pickup if either, the pickup has activationType immediate and durationType once or it has durationType continuous and the duration was exceeded.
+ if((!this->isContinuous() && this->isImmediate()) || (this->isContinuous() && !this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() == this->getDuration()))
+ {
+ this->Pickupable::destroy();
+ ship->setDamageMultiplier ( this->olddamageMultiplier_);
+ }
+ // We pause the Timer if the pickup is continuous and the duration is not yet exceeded,
+ else if(this->isContinuous() && this->durationTimer_.isActive())
+ {
+ this->durationTimer_.pauseTimer();
+ }
+ }
+ }
+
+ /**
+ @brief
+ Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
+ @return
+ A pointer to the SpaceShip, or NULL if the conversion failed.
+ */
+ SpaceShip* DamageBoostPickup::carrierToSpaceShipHelper(void)
+ {
+ PickupCarrier* carrier = this->getCarrier();
+ SpaceShip* ship = dynamic_cast<SpaceShip*>(carrier);
+
+ if(ship == NULL)
+ {
+ orxout(internal_error, context::pickups) << "Invalid PickupCarrier in DamageBoostPickup." << endl;
+ }
+
+ return ship;
+ }
+
+ /**
+ @brief
+ Creates a duplicate of the input OrxonoxClass.
+ @param item
+ A pointer to the Orxonox class.
+ */
+ void DamageBoostPickup::clone(OrxonoxClass*& item)
+ {
+ if(item == NULL)
+ item = new DamageBoostPickup(this);
+
+ SUPER(DamageBoostPickup, clone, item);
+
+ DamageBoostPickup* pickup = dynamic_cast<DamageBoostPickup*>(item);
+ pickup->setDuration(this->getDuration());
+ pickup->setDamageMultiplier(this->getDamageMultiplier());
+ pickup->initializeIdentifier();
+ }
+
+ /**
+ @brief
+ Sets the duration for which the DamageBoostPickup stays active.
+ @param duration
+ The duration in seconds.
+ */
+ void DamageBoostPickup::setDuration(float duration)
+ {
+ if(duration >= 0.0f)
+ {
+ this->duration_ = duration;
+ }
+ else
+ {
+ orxout(internal_error, context::pickups) << "Invalid duration in DamagePickup." << endl;
+ this->duration_ = 0.0f;
+ }
+ }
+
+ /**
+ @brief
+ Helper method. Is called by the Timer as soon as it expires.
+ */
+ void DamageBoostPickup::pickupTimerCallback(void)
+ {
+ this->setUsed(false);
+ }
+
+}
+
Copied: code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h (from rev 9268, code/branches/presentation2012/src/modules/pickup/items/DamageBoostPickup.h)
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h (rev 0)
+++ code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,102 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Kevin Lengauer
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file DamageBoostPickup.h
+ @brief Declaration of the DamageBoostPickup class.
+ @ingroup PickupItems
+*/
+
+#ifndef _DamageBoostPickup_H__
+#define _DamageBoostPickup_H__
+
+#include "pickup/PickupPrereqs.h"
+
+#include <string>
+
+#include "pickup/Pickup.h"
+#include "tools/interfaces/Tickable.h"
+
+namespace orxonox {
+
+ class _PickupExport DamageBoostPickup : public Pickup, public Tickable
+ {
+ public:
+
+ DamageBoostPickup(BaseObject* creator); //!< Constructor.
+ virtual ~DamageBoostPickup(); //!< Destructor.
+
+ virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a DamageBoostPickup object through XML.
+
+ virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
+ virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
+
+ /**
+ @brief Get the time the DamagePickup lasts.
+ @return Returns the time in seconds the DamagePickup lasts.
+ */
+ inline float getDuration(void) const
+ { return this->duration_; }
+
+ inline void setDuration( float duration );
+
+
+
+ /**
+ @brief set Damage multiplier
+ @param multiplier The default damage multiplier to set
+ */
+ inline float getDamageMultiplier()
+ { return this->damageMultiplier_; }
+
+
+
+
+ protected:
+ void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup.
+ void setDamageMultiplier(float damageMultiplier); //!< Sets the DamageMultiplier according to the XML.
+
+
+ private:
+ void initialize(void); //!< Initializes the member variables.
+ Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
+ SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
+ void pickupTimerCallback(void);
+
+
+
+ float damageMultiplier_; //!< The damage boost that is transferred to the Pawn.
+ float olddamageMultiplier_; //!< Helper to remember what the actual damage of the Pawn was before we changed it.
+
+ Timer durationTimer_; //!< Timer.
+ float duration_; //! Duration of damage boost.
+
+ };
+}
+
+#endif // _DamageBoostPickup_H__
Modified: code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h 2012-06-03 14:33:13 UTC (rev 9269)
@@ -111,7 +111,7 @@
private:
void initialize(void); //!< Initializes the member variables.
- SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceSHip, and throw an error message if the conversion fails.
+ SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
Timer durationTimer_; //!< Timer.
Modified: code/branches/presentation2012merge/src/orxonox/LevelInfo.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/LevelInfo.cc 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/orxonox/LevelInfo.cc 2012-06-03 14:33:13 UTC (rev 9269)
@@ -92,6 +92,7 @@
LevelInfoItem::possibleTags_s.insert("mission");
LevelInfoItem::possibleTags_s.insert("gametype");
LevelInfoItem::possibleTags_s.insert("minigame");
+ LevelInfoItem::possibleTags_s.insert("shipselection");
}
}
@@ -110,7 +111,22 @@
this->tagsUpdated();
}
+ /**
+ @brief
+ Set the starting ship models of the level
+ @param tags
+ A comma-seperated string of all the allowed ship models for the shipselection.
+ */
+ void LevelInfoItem::setShips(const std::string& ships)
+ {
+ SubString substr = SubString(ships, ",", " "); // Split the string into tags.
+ const std::vector<std::string>& strings = substr.getAllStrings();
+ for(std::vector<std::string>::const_iterator it = strings.begin(); it != strings.end(); it++)
+ this->addShip(*it, false);
+ this->shipsUpdated();
+ }
+
/**
@brief
Add a tag to the set of tags the Level is tagged with.
@@ -136,6 +152,26 @@
/**
@brief
+ Add a ship model to allowed models for the shipselection
+ @param ship
+ The ship model to be added.
+ @param update
+ Whether the comma-seperated string of all ship models should be updated. Default is true.
+ @return
+ Returns true if the ship was successfully added, if the ship was already present it returns false.
+ */
+ bool LevelInfoItem::addShip(const std::string& ship, bool update)
+ {
+ bool success = this->ships_.insert(ship).second;
+ if(update && success)
+ this->shipsUpdated();
+
+ return success;
+ }
+
+
+ /**
+ @brief
Updates the comma-seperated string of all tags, if the set of tags has changed.
*/
void LevelInfoItem::tagsUpdated(void)
@@ -154,6 +190,25 @@
this->tagsString_ = std::string(stream.str());
}
+ /**
+ @brief
+ Updates the comma-seperated string of all ships, if the set of tags has changed.
+ */
+ void LevelInfoItem::shipsUpdated(void)
+ {
+ std::stringstream stream;
+ std::set<std::string>::iterator temp;
+ for(std::set<std::string>::iterator it = this->ships_.begin(); it != this->ships_.end(); )
+ {
+ temp = it;
+ if(++it == this->ships_.end()) // If this is the last ship we don't add a comma.
+ stream << *temp;
+ else
+ stream << *temp << ", ";
+ }
+
+ this->startingShipsString_ = std::string(stream.str());
+ }
// LevelInfo
CreateFactory(LevelInfo);
@@ -191,6 +246,7 @@
XMLPortParam(LevelInfo, "description", setDescription, getDescription, xmlelement, mode);
XMLPortParam(LevelInfo, "screenshot", setScreenshot, getScreenshot, xmlelement, mode);
XMLPortParam(LevelInfo, "tags", setTags, getTags, xmlelement, mode);
+ XMLPortParam(LevelInfo, "startingships", setShips, getShips, xmlelement, mode);
}
/**
@@ -206,6 +262,7 @@
info->setDescription(this->getDescription());
info->setScreenshot(this->getScreenshot());
info->setTags(this->getTags());
+ info->setShips(this->getShips());
return info;
}
Modified: code/branches/presentation2012merge/src/orxonox/LevelInfo.h
===================================================================
--- code/branches/presentation2012merge/src/orxonox/LevelInfo.h 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/orxonox/LevelInfo.h 2012-06-03 14:33:13 UTC (rev 9269)
@@ -23,7 +23,7 @@
* Damian 'Mozork' Frick
* Co-authors:
* ...
- *
+ *
*/
/**
@@ -42,6 +42,8 @@
#include "util/StringUtils.h"
#include "core/BaseObject.h"
+#include <iostream>
+#include <fstream>
#include "core/OrxonoxClass.h"
namespace orxonox // tolua_export
@@ -114,13 +116,30 @@
@return Returns true if the Level is tagged with the input tag.
*/
inline bool hasTag(const std::string& tag) const { return this->tags_.find(tag) != this->tags_.end(); } // tolua_export
-
+
+ void setShips(const std::string& ships); //!< Set the starting ship models of the level
+ bool addShip(const std::string& ship, bool update = true); //!< Add a model to shipselection
/**
+ @brief Get the set of starting ship models the Level allows
+ @return Returns a comma-seperated string of all the allowed ship models for the shipselection.
+ */
+ inline const std::string& getShips(void) const
+ { return this->startingShipsString_; }
+ /**
+ @brief Get whether the Level allows a specific starting ship model
+ @param ship The ship model for which is checked.
+ @return Returns true if the Level allows the input ship model
+ */
+ inline bool hasShip(const std::string& ship) const { return this->ships_.find(ship) != this->ships_.end(); } // tolua_export
+ /**
@brief Get the XML-filename of the Level.
@return Returns the XML-filename (including *.oxw extension) of the Level.
*/
+
inline const std::string& getXMLFilename(void) const { return this->xmlfilename_; } // tolua_export
+ inline void selectShip (const std::string& ship) { this->changeShip(ship); } // tolua_export
+
protected:
/**
@brief Set the XML-filename of the Level.
@@ -132,8 +151,35 @@
std::string xmlfilename_; //!< The XML-filename of the Level.
private:
+
+ inline void changeShip (const std::string& model) {
+ static std::string shipSelectionTag = "shipselection";
+ //HACK: Read Level XML File, find "shipselection", replace with ship model
+ std::string levelPath = "../levels/";
+ levelPath.append(this->getXMLFilename());
+ std::string tempPath = "../levels/";
+ tempPath.append("_temp.oxw");
+ orxout(user_status) << levelPath << endl;
+ orxout(user_status) << tempPath << endl;
+ std::ifstream myLevel (levelPath.c_str());
+ std::ofstream tempLevel (tempPath.c_str());
+ while(!myLevel.eof())
+ {
+ std::string buff;
+ std::getline(myLevel, buff);
+ std::string pawndesignString = "pawndesign=";
+ size_t found = buff.find(pawndesignString.append(shipSelectionTag));
+ if (found!= std::string::npos)
+ buff = buff.substr(0, found + 11) + model + buff.substr(found+11+shipSelectionTag.length(), std::string::npos);
+ tempLevel.write(buff.c_str(), buff.length());
+ tempLevel << std::endl;
+ }
+ myLevel.close();
+ tempLevel.close();
+ orxout(user_status) << "done" << endl;
+ }
void tagsUpdated(void); //!< Updates the comma-seperated string of all tags, if the set of tags has changed.
-
+ void shipsUpdated(void); //!< Updates the comma-seperated string of all tags, if the set of tags has changed.
static void initializeTags(void); //!< Initialize the set of allowed tags.
/**
@brief Check whether an input tag is allowed.
@@ -151,6 +197,8 @@
std::string screenshot_; //!< The screenshot of the Level.
std::set<std::string> tags_; //!< The set of tags the Level is tagged with.
std::string tagsString_; //!< The comma-seperated string of all the tags the Level is tagged with.
+ std::set<std::string> ships_; //!< The set of starting ship models the Level allows.
+ std::string startingShipsString_; //!< The comma-seperated string of all the allowed ship models for the shipselection.
}; // tolua_export
/**
@@ -160,8 +208,8 @@
- @b name The name of the level.
- @b description The description of the level.
- @b screenshot The screenshot of the level.
- - @b tags A comma-seperated string of tags. Allowed tags are: <em>test</em>, <em>singleplayer</em>, <em>multiplayer</em>, <em>showcase</em>, <em>tutorial</em>, <em>presentation</em>.
-
+ - @b tags A comma-seperated string of tags. Allowed tags are: <em>test</em>, <em>singleplayer</em>, <em>multiplayer</em>, <em>showcase</em>, <em>tutorial</em>, <em>presentation</em>, <em>shipselection</em>.
+ - @b (optional) startingships The comma-seperated string of starting ship models
An example would be:
@code
<LevelInfo
@@ -175,7 +223,8 @@
@author
Damian 'Mozork' Frick
-
+ @edit
+ Matthias Hutter
@ingroup Orxonox
*/
class _OrxonoxExport LevelInfo : public BaseObject, public LevelInfoItem
@@ -222,9 +271,19 @@
*/
inline const std::string& getTags(void) const
{ return this->LevelInfoItem::getTags(); }
-
+ /**
+ @brief Set the starting ship models of the level
+ @param A comma-seperated string of all the allowed ship models for the shipselection.
+ */
+ inline void setShips(const std::string& ships)
+ { this->LevelInfoItem::setShips(ships); }
+ /**
+ @brief Get the starting ship models of the level
+ @return Returns a comma-seperated string of all the allowed ship models for the shipselection.
+ */
+ inline const std::string& getShips(void) const
+ { return this->LevelInfoItem::getShips(); }
LevelInfoItem* copy(void); //!< Copies the contents of this LevelInfo object to a new LevelInfoItem object.
-
};
/**
Copied: code/branches/presentation2012merge/src/orxonox/ShipManager.cc (from rev 9268, code/branches/presentation2012/src/orxonox/ShipManager.cc)
===================================================================
--- code/branches/presentation2012merge/src/orxonox/ShipManager.cc (rev 0)
+++ code/branches/presentation2012merge/src/orxonox/ShipManager.cc 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,201 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Matthias Hutter
+ *
+ */
+
+/**
+ @file ShipManager.cc
+ @brief Work-in Progress: Implementation of the ShipManager singleton.
+ Should make SpaceShip info available to lua handlers.
+*/
+
+#include "LevelManager.h"
+
+#include <map>
+
+#include "util/ScopedSingletonManager.h"
+#include "core/ClassTreeMask.h"
+#include "core/CommandLineParser.h"
+#include "core/ConfigValueIncludes.h"
+#include "core/CoreIncludes.h"
+#include "core/Loader.h"
+#include "core/Resource.h"
+#include "core/XMLFile.h"
+#include "Level.h"
+#include "PlayerManager.h"
+
+namespace orxonox
+{
+ SetCommandLineArgument(level, "").shortcut("l").information("Default level file (overrides LevelManager::defaultLevelName_ configValue)");
+
+ ManageScopedSingleton(LevelManager, ScopeID::Root, false);
+
+ /**
+ @brief
+ Constructor.
+ */
+ ShipManager::ShipManager()
+ {
+ RegisterRootObject(LevelManager);
+ this->compileAvailableLevelList();
+ this->nextIndex_ = 0;
+ this->nextLevel_ = this->availableLevels_.begin();
+ }
+
+ ShipManager::~ShipManager()
+ {
+ // Delete all the Ship objects because the LevelManager created them
+ std::set<SpaceShip*, LevelInfoCompare>::iterator it = availableLevels_.begin();
+ for (; it != availableLevels_.end(); ++it)
+ delete *it;
+ }
+
+
+ /**
+ @brief
+ Get the number of available Ships.
+ @return
+ Returns the number of available Ships.
+ */
+ unsigned int LevelManager::getNumberOfLevels(){ return this->availableLevels_.size(); }
+
+ /**
+ @brief
+ Get the SpaceShip at the given index in the list of available Ships.
+ The SpaceShips are sorted in alphabetical order accoridng to the name of the Ship.
+ This method is most efficiently called with consecutive indices (or at least ascending indices).
+ @param index
+ The index of the item that should be returned.
+ @return
+ Returns a pointer to the SpaceShip at the given index.
+ */
+ SpaceShip* ShipManager::getAvailableShipListItem(unsigned int index)
+ {
+ if(index >= this->availableShips_.size())
+ return NULL;
+
+ // If this index directly follows the last we can optimize a lot.
+ if(index == this->nextIndex_)
+ {
+ this->nextIndex_++;
+ std::set<SpaceShip*, SpaceShipCompare>::iterator it = this->nextShip_;
+ this->nextLevel_++;
+ return *it;
+ }
+ else
+ {
+ // If this index is bigger than the last, we can optimize a little.
+ if(index < this->nextIndex_)
+ {
+ this->nextIndex_ = 0;
+ this->nextShip_ = this->availableShips_.begin();
+ }
+
+ while(this->nextIndex_ != index)
+ {
+ this->nextIndex_++;
+ this->nextShip_++;
+ }
+ this->nextIndex_++;
+ std::set<SpaceShip*, SpaceShipCompare>::iterator it = this->nextLevel_;
+ this->nextLevel_++;
+ return *it;
+ }
+ }
+
+ /**
+ @brief
+ Compile the list of available Levels.
+ Iterates over all *.oxw files, loads the LevelInfo objects in them and from that it creates the LevelInfoItems which are inserted in a list.
+ */
+ void ShipManager::compileAvailableShipList()
+ {
+ /*
+ // We only want to load as little as possible
+ ClassTreeMask mask;
+ mask.exclude(Class(BaseObject));
+ mask.include(Class(SpaceShip));
+ SpaceShip* info = NULL;
+ XMLFile file = XMLFile(ship);
+ Loader::load(&file, mask, false, true);
+ for(ObjectList<SpaceShip>::iterator item = ObjectList<SpaceShip>::begin(); item != ObjectList<SpaceShip>::end(); ++item)
+ if(item->getXMLFilename() == *it)
+ info = item->copy();
+ Loader::unload(&file);
+ */
+
+ // Get all files matching the level criteria
+ Ogre::StringVectorPtr levels = Resource::findResourceNames("*.oxw");
+
+ // We only want to load as little as possible
+ ClassTreeMask mask;
+ mask.exclude(Class(BaseObject));
+ mask.include(Class(LevelInfo));
+
+ // Iterate over all the found *.oxw files
+ orxout(internal_info) << "Loading LevelInfos..." << endl;
+ std::set<std::string> names;
+ for (Ogre::StringVector::const_iterator it = levels->begin(); it != levels->end(); ++it)
+ {
+ // TODO: Replace with tag?
+ if (it->find("old/") != 0 )
+ {
+ LevelInfoItem* info = NULL;
+
+ // Load the LevelInfo object from the level file.
+ XMLFile file = XMLFile(*it);
+ Loader::load(&file, mask, false, true);
+
+ // Find the LevelInfo object we've just loaded (if there was one)
+ for(ObjectList<LevelInfo>::iterator item = ObjectList<LevelInfo>::begin(); item != ObjectList<LevelInfo>::end(); ++item)
+ if(item->getXMLFilename() == *it)
+ info = item->copy();
+
+ // We don't need the loaded stuff anymore
+ Loader::unload(&file);
+
+ if(info == NULL)
+ {
+ // Create a default LevelInfoItem object that merely contains the name
+ std::string filenameWOExtension = it->substr(0, it->find(".oxw"));
+ info = new LevelInfoItem(filenameWOExtension, *it);
+ }
+
+ // Warn about levels with the same name.
+ if(!names.insert(info->getName()).second)
+ orxout(internal_warning) << "Multiple levels (" << info->getXMLFilename() << ") with name '" << info->getName() << "' found!" << endl;
+
+ // Warn about multiple items so that it gets fixed quickly
+ if(availableLevels_.find(info) != availableLevels_.end())
+ {
+ orxout(internal_warning) << "Multiple levels (" << info->getXMLFilename() << ") with same name '" << info->getName() << "' and filename found! Exluding..." << endl;
+ // Delete LevelInfoItem to avoid a dangling pointer
+ delete info;
+ }
+ else
+ this->availableLevels_.insert(info);
+ }
+ }
+ }
+}
Copied: code/branches/presentation2012merge/src/orxonox/ShipManager.h (from rev 9268, code/branches/presentation2012/src/orxonox/ShipManager.h)
===================================================================
--- code/branches/presentation2012merge/src/orxonox/ShipManager.h (rev 0)
+++ code/branches/presentation2012merge/src/orxonox/ShipManager.h 2012-06-03 14:33:13 UTC (rev 9269)
@@ -0,0 +1,93 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Matthias Hutter
+ */
+
+/**
+ @file ShipManager.h
+ @brief Definition of the ShipManager singleton.
+ @ingroup Orxonox
+*/
+
+#ifndef _ShipManager_H__
+#define _ShipManager_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <cassert>
+#include <list>
+#include <map>
+#include <string>
+#include "worldentities/pawns/SpaceShip.h"
+
+#include "util/Singleton.h"
+#include "core/OrxonoxClass.h"
+
+// tolua_begin
+namespace orxonox
+{
+
+ /**
+ @author
+ Matthias Hutter
+
+ @ingroup Orxonox
+ */
+ class _OrxonoxExport ShipManager
+ // tolua_end
+ : public Singleton<ShipManager>, public OrxonoxClass
+ { // tolua_export
+ friend class Singleton<LevelManager>;
+ public:
+ ShipManager();
+ virtual ~ShipManager();
+
+ void setConfigValues(); //!< Set the config values for this object.
+ // tolua_begin
+ /**
+ @brief Get the instance of the LevelManager.
+ @return Returns the instance of the LevelManager.
+ */
+ static ShipManager& getInstance()
+ { return Singleton<ShipManager>::getInstance(); }
+ // tolua_end
+
+ private:
+ ShipManager(const ShipManager&);
+
+
+ void compileAvailableLevelList(void); //!< Compile the list of available Levels.
+ void updateAvailableLevelList(void); //!< Update the list of available Levels.
+
+ std::list<Level*> levels_; //!< A list of all the Levels whose activity has been requested, in the order in which they will become active.
+ std::set<LevelInfoItem*, LevelInfoCompare> availableLevels_; //!< The set of available Levels sorted alphabetically according to the name of the Level.
+
+ // Helpers to allow fast access to the availableLevels list.
+ unsigned int nextIndex_; //! The next expected index to be accessed.
+ std::set<LevelInfoItem*, LevelInfoCompare>::iterator nextLevel_; //! The next expected Level to be accessed.
+
+ static LevelManager* singletonPtr_s;
+ }; // tolua_export
+} // tolua_export
+
+#endif /* _LevelManager_H__ */
Modified: code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc 2012-06-03 14:33:13 UTC (rev 9269)
@@ -279,20 +279,26 @@
// return;
}
- Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
+ Vector2 coord = get2DViewcoordinates(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
float distance = (target - this->getControllableEntity()->getPosition()).length();
+ if(coord.x < 0.0001 && coord.y < 0.0001)
+ {
+ // if the ship reaches a direction very close to the direct one, set it to the direct one
+ Vector3 v_temp = this->getControllableEntity()->getPosition();
+ Quaternion quat = v_temp.getRotationTo(target);
+ this->getControllableEntity()->rotate(quat);
+ }
-
if(this->state_ == FREE)
{
if (this->target_ || distance > 10)
{
// Multiply with ROTATEFACTOR_FREE to make them a bit slower
- this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_FREE * sgn(coord.x) * coord.x*coord.x);
- this->getControllableEntity()->rotatePitch(ROTATEFACTOR_FREE * sgn(coord.y) * coord.y*coord.y);
+ this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_FREE * coord.x * 2);
+ this->getControllableEntity()->rotatePitch(ROTATEFACTOR_FREE * coord.y * 2);
}
- if (this->target_ && distance < 200 && this->getControllableEntity()->getVelocity().squaredLength() > this->target_->getVelocity().squaredLength())
+ if (this->target_ && distance < 200 && this->getControllableEntity()->getVelocity().squaredLength() > this->target_->getVelocity().squaredLength())
{
this->getControllableEntity()->moveFrontBack(-0.05f); // They don't brake with full power to give the player a chance
} else this->getControllableEntity()->moveFrontBack(SPEED_FREE);
@@ -304,8 +310,8 @@
{
if (this->target_ || distance > 10)
{
- this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_MASTER * sgn(coord.x) * coord.x*coord.x);
- this->getControllableEntity()->rotatePitch(ROTATEFACTOR_MASTER * sgn(coord.y) * coord.y*coord.y);
+ this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_MASTER * coord.x * 2);
+ this->getControllableEntity()->rotatePitch(ROTATEFACTOR_MASTER * coord.y * 2);
}
if (this->target_ && distance < 200 && this->getControllableEntity()->getVelocity().squaredLength() > this->target_->getVelocity().squaredLength())
@@ -317,27 +323,27 @@
if(this->state_ == SLAVE)
- {
+ {
- this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR_MASTER * sgn(coord.x) * coord.x*coord.x);
- this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR_MASTER * sgn(coord.y) * coord.y*coord.y);
+ this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR_MASTER * coord.x * 2);
+ this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR_MASTER * coord.y * 2);
- if (distance < 300)
- {
- if (bHasTargetOrientation_)
- {
- copyTargetOrientation();
- }
- if (distance < 100)
- { //linear speed reduction
- this->getControllableEntity()->moveFrontBack(distance/100.0f*0.4f*SPEED_MASTER);
+ if (distance < 300)
+ {
+ if (bHasTargetOrientation_)
+ {
+ copyTargetOrientation();
+ }
+ if (distance < 100)
+ { //linear speed reduction
+ this->getControllableEntity()->moveFrontBack(distance/100.0f*0.4f*SPEED_MASTER);
- } else this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER);
+ } else this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER);
- } else {
- this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER + distance/300.0f);
- }
- }
+ } else {
+ this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER + distance/300.0f);
+ }
+ }
if (distance < 10)
{
Modified: code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc 2012-06-03 14:33:13 UTC (rev 9269)
@@ -74,6 +74,9 @@
this->lastHitOriginator_ = 0;
+ // set damage multiplier to default value 1, meaning nominal damage
+ this->damageMultiplier_ = 1;
+
this->spawnparticleduration_ = 3.0f;
this->aimPosition_ = Vector3::ZERO;
@@ -227,7 +230,14 @@
void Pawn::damage(float damage, float healthdamage, float shielddamage, Pawn* originator)
{
- if (this->getGametype() && this->getGametype()->allowPawnDamage(this, originator))
+ //Applies multiplier given by the DamageBoost Pickup.
+ Pawn *test = dynamic_cast<Pawn *>(originator);
+ if( test != NULL )
+ {
+ damage *= originator->getDamageMultiplier();
+ }
+
+ if (this->getGametype() && this->getGametype()->allowPawnDamage(this, originator))
{
if (shielddamage >= this->getShieldHealth())
{
Modified: code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h 2012-06-03 13:51:50 UTC (rev 9268)
+++ code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h 2012-06-03 14:33:13 UTC (rev 9269)
@@ -161,6 +161,13 @@
inline unsigned int getExplosionChunks() const
{ return this->numexplosionchunks_; }
+ // These are used with the Damage Boost Pickup to use the damage multiplier.
+ inline void setDamageMultiplier(float multiplier)
+ { this->damageMultiplier_ = multiplier; }
+ inline float getDamageMultiplier()
+ { return this->damageMultiplier_; }
+
+
virtual void startLocalHumanControl();
void setAimPosition( Vector3 position )
@@ -207,6 +214,9 @@
float reloadWaitTime_;
float reloadWaitCountdown_;
+ // Modifier
+ float damageMultiplier_; // Used by the Damage Boost Pickup.
+
WeakPtr<Pawn> lastHitOriginator_;
WeaponSystem* weaponSystem_;
More information about the Orxonox-commit
mailing list