[Orxonox-commit 7579] r12184 - in code/branches/Merge_HS18: . data/levels data/levels/templates data/overlays src/libraries/tools src/modules src/modules/weapons/projectiles src/modules/weapons/weaponmodes

merholzl at orxonox.net merholzl at orxonox.net
Tue Dec 11 18:53:27 CET 2018


Author: merholzl
Date: 2018-12-11 18:53:27 +0100 (Tue, 11 Dec 2018)
New Revision: 12184

Added:
   code/branches/Merge_HS18/data/levels/Wagnis.oxw
   code/branches/Merge_HS18/data/levels/templates/wagnisCursor.oxt
   code/branches/Merge_HS18/data/overlays/WagnisHUD.oxo
   code/branches/Merge_HS18/src/modules/wagnis/
   code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.cc
   code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.h
   code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.cc
   code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.h
Modified:
   code/branches/Merge_HS18/
   code/branches/Merge_HS18/src/libraries/tools/Timer.cc
   code/branches/Merge_HS18/src/modules/CMakeLists.txt
   code/branches/Merge_HS18/src/modules/weapons/projectiles/CMakeLists.txt
   code/branches/Merge_HS18/src/modules/weapons/weaponmodes/CMakeLists.txt
Log:
Wagnis Merge

Index: code/branches/Merge_HS18
===================================================================
--- code/branches/Merge_HS18	2018-12-11 17:33:26 UTC (rev 12183)
+++ code/branches/Merge_HS18	2018-12-11 17:53:27 UTC (rev 12184)

Property changes on: code/branches/Merge_HS18
___________________________________________________________________
Modified: svn:mergeinfo
## -202,6 +202,7 ##
 /code/branches/tutoriallevel3:8453-8636
 /code/branches/unity_build:8440-8716
 /code/branches/usability:7915-8078
+/code/branches/wagnis_HS18:12035-12183
 /code/branches/weapon:1925-2094
 /code/branches/weapon2:2107-2488
 /code/branches/weaponFS15:10302-10615
Copied: code/branches/Merge_HS18/data/levels/Wagnis.oxw (from rev 12183, code/branches/wagnis_HS18/data/levels/Wagnis.oxw)
===================================================================
--- code/branches/Merge_HS18/data/levels/Wagnis.oxw	                        (rev 0)
+++ code/branches/Merge_HS18/data/levels/Wagnis.oxw	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,522 @@
+<LevelInfo
+ name = "Wagnis"
+ description = "A clone of the iconic Risk."
+ tags = ""
+ screenshot = "emptylevel.png"
+/>
+
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("WagnisHUD.oxo")
+  include("templates/lodInformation.oxt")
+  include("templates/wagnisCursor.oxt")
+  include("includes/notifications.oxi")
+?>
+
+<Level plugins="wagnis" gametype="Wagnis">
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+
+  <Scene
+    ambientlight = "0.8, 0.8, 0.8"
+    skybox       = "Orxonox/skyBoxBasic"
+  >
+
+    <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"/>
+    <SpawnPoint position="-100, 45, 75" lookat="0,45,75" spawnclass=SpaceShip pawndesign=wagnisCursor />
+
+<WagnisGameboard position="20,20,20" connections_string="1=2+3, 2=1+3+4, 3=1+2+4+21, 4=2+3+5, 5=4+6+7, 6=5+7+8+12, 7=5+6+9+8, 8=6+7+9+10+11+12, 9=7+8+10, 10=8+9+11+14, 11=8+10+12+13, 12=6+8+11+13, 13=11+12+27, 14=10+15+16, 15=14+16+17+19, 16=14+15+17+18, 17=15+16+18+19+20, 18=16+17+20+33+35+36, 19=15+17+20+21, 20=17+18+19+36+22, 21=3+19+20+22+23+24, 22=21+20+36+23, 23=21+22+24+36+26+25, 24=21+23+25, 25=24+26+23, 26=25+23, 27=13+28+29+30+31, 28=27+29, 29=27+28+30+32+34, 30=27+29+31+32, 31=27+30+32, 32=31+30+29+34+33, 33=18+32+34+35, 34=29+32+33+35+37+38, 35=18+33+34+37+36, 36=18+20+22+23+37+35, 37=34+35+36+38, 38=34+37+39, 39=38+40+41, 40=39+41+42, 41=39+40+42, 42=40+41">
+
+
+  <Provinces>
+    <!-- SA -->
+    <WagnisProvince ID="1" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" position="0,28,8" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.293, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="2" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" position="0,39,4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.293, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="3" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" position="0,34,17" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.293, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="4" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" position="0,46,14" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.293, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+
+
+
+    <!-- NA -->
+    <WagnisProvince ID="5" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" position="0,61,8" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="6" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" position="0,73,9" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="7" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" position="0,65,20" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="8" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" position="0,70,29" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="9" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" position="0,60,32" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="10" position="0,66,41" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="11" position="0,76,38" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="12" position="0,80,25" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="13" position="0,82,52" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="1" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+
+
+
+
+    <!-- EU -->
+    <WagnisProvince ID="14" position="0,58,62" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="15" position="0,50,57" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="16" position="0,53,74" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="17" position="0,40,72" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="18" position="0,45,86" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="19" position="0,39,58" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="20" position="0,32,81" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="4" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+
+
+
+
+    <!-- AF -->
+    <WagnisProvince ID="21" position="0,20,45" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="22" position="0,23,62" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="23" position="0,16,73" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="24" position="0,10,50" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="25" position="0,4,61" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="26" position="0,5,76" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="2" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+
+
+
+
+
+    <!-- AS -->
+    <WagnisProvince ID="27" position="0,81,76" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="28" position="0,82,103" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="29" position="0,69,112" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="30" position="0,72,95" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="31" position="0,70,79" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="32" position="0,60,93" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="33" position="0,52,105" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="34" position="0,50,121" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="35" position="0,41,105" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="36" position="0,30,101" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="37" position="0,33,116" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="38" position="0,35,127" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="5" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+
+
+
+
+    <!-- AU -->
+    <WagnisProvince ID="39" position="0,22,131" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="6" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.695,0.085,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="40" position="0,13,121" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="6" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.695,0.085,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="41" position="0,13,141" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="6" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.695,0.085,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="42" position="0,5,130" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="6" rotationrate="<?lua print(math.random() * 50) ?>" rotationaxis="<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>,<?lua print((math.random()-1)*5)?>">
+      <attached>
+        <Model position="0,0,0" mesh="ast1.mesh" scale3D="1.4,1.4,1.4" />
+        <Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.695,0.085,0.804"/>
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+
+    <WagnisProvince ID="1000" radarname="continue" health = 10000000 maxhealth = 10000000 initialhealth = 10000000 collisionType=kinematic mass=100 continent="0" position="0,75,137" pitch=90 rotationrate="0" rotationaxis="0,0,0">
+      <attached>
+        <Model position="0,0,0" mesh="broke-satellite.mesh" scale3D="3,3,3" />
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,0,0" halfExtents="3,3,3" /> 
+      </collisionShapes>
+    </WagnisProvince>
+  
+
+  </Provinces>
+</WagnisGameboard>
+
+<Billboard position="0,27,32" amplitude=1 material="Wagnis/Arrow" rotation="0.4" colour="1,1,1"/> <!--3,21-->
+<Billboard position="0,53.5,11" amplitude=1 material="Wagnis/Arrow" rotation="1.1" colour="1,1,1"/> <!--4,5-->
+<Billboard position="0,29.5,52" amplitude=1 material="Wagnis/Arrow" rotation="2.2" colour="1,1,1"/> <!--19,21-->
+<Billboard position="0,28,62" amplitude=1 material="Wagnis/Arrow" rotation="2.8" colour="1,1,1"/> <!--20,21-->
+<Billboard position="0,27.5,71.5" amplitude=1 material="Wagnis/Arrow" rotation="2.7" colour="1,1,1"/> <!--20,22-->
+<Billboard position="0,26.5,81.5" amplitude=1 material="Wagnis/Arrow" rotation="3" colour="1,1,1"/> <!--22,36-->
+<Billboard position="0,23,87" amplitude=1 material="Wagnis/Arrow" rotation="2.7" colour="1,1,1"/> <!--23,36-->
+<Billboard position="0,81.5,64" amplitude=1 material="Wagnis/Arrow" rotation="0" colour="1,1,1"/> <!--13,27-->
+<Billboard position="0,81.5,38.5" amplitude=1 material="Wagnis/Arrow" rotation="-0.1" colour="1,1,1"/> <!--12,13-->
+<Billboard position="0,76,96" amplitude=1 material="Wagnis/Arrow" rotation="0.3" colour="1,1,1"/> <!--27,29-->
+<Billboard position="0,62,51.5" amplitude=1 material="Wagnis/Arrow" rotation="0.2" colour="1,1,1"/> <!--10,14-->
+<Billboard position="0,31,91" amplitude=1 material="Wagnis/Arrow" rotation="0.1" colour="1,1,1"/> <!--20,36-->
+<Billboard position="0,43,95.5" amplitude=1 material="Wagnis/Arrow" rotation="0.1" colour="1,1,1"/> <!--18,35-->
+<Billboard position="0,37.5,93.5" amplitude=1 material="Wagnis/Arrow" rotation="0.7" colour="1,1,1"/> <!--18,36-->
+<Billboard position="0,48.5,95.5" amplitude=1 material="Wagnis/Arrow" rotation="-0.5" colour="1,1,1"/> <!--18,33-->
+
+
+
+<!--
+<Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.8125, 0.082"/>
+<Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.926, 0.293, 0.082"/>
+<Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.515,0.199,0.054"/>
+<Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.085,0.457,0.804"/>
+<Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.256,0.804,0.085"/>
+<Billboard position="0,0,0" amplitude=1 material="Wagnis/Background" colour="0.695,0.085,0.804"/>
+-->
+    
+  </Scene>
+</Level>
+

Copied: code/branches/Merge_HS18/data/levels/templates/wagnisCursor.oxt (from rev 12183, code/branches/wagnis_HS18/data/levels/templates/wagnisCursor.oxt)
===================================================================
--- code/branches/Merge_HS18/data/levels/templates/wagnisCursor.oxt	                        (rev 0)
+++ code/branches/Merge_HS18/data/levels/templates/wagnisCursor.oxt	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,42 @@
+<Template name=wagnisCursor>
+  <SpaceShip
+   hudtemplate            = WagnisHUD
+  >
+
+
+<weaponslots>
+      <WeaponSlot position="0,0,0" />
+      <WeaponSlot position="0,0,0" />
+</weaponslots>
+<weaponsets>
+      <WeaponSet firemode=0 />
+      <WeaponSet firemode=1 />
+</weaponsets>
+<weaponpacks>
+      <WeaponPack>
+        <links>
+          <DefaultWeaponmodeLink firemode=0 weaponmode=0 />
+          <DefaultWeaponmodeLink firemode=1 weaponmode=1 />
+        </links>
+        <Weapon>
+            <WagnisGun mode=0 munitionpershot=0 delay=0     damage=1      muzzleoffset="0, 0, 0" />
+            <WagnisGun mode=1 munitionpershot=0 delay=0     damage=1000   muzzleoffset="0, 0, 0" />
+        </Weapon>
+      </WeaponPack>
+</weaponpacks>
+<munition>
+      <LaserMunition initialmagazines=2 maxmagazines=4 munitionpermagazine=1 replenishamount=2 replenishinterval=7.5/>
+</munition>
+
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipassffcameras defaults=0>
+  <SpaceShip>
+    <camerapositions>
+      <CameraPosition position="0,0, 0" drag=true mouselook=true />
+      <CameraPosition position="0,0, 0" drag=true mouselook=true />
+    </camerapositions>
+  </SpaceShip>
+</Template>
+

Copied: code/branches/Merge_HS18/data/overlays/WagnisHUD.oxo (from rev 12183, code/branches/wagnis_HS18/data/overlays/WagnisHUD.oxo)
===================================================================
--- code/branches/Merge_HS18/data/overlays/WagnisHUD.oxo	                        (rev 0)
+++ code/branches/Merge_HS18/data/overlays/WagnisHUD.oxo	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,26 @@
+<Template name="WagnisHUD">
+  <OverlayGroup name = "WagnisHuD" scale = "100, 100">  
+    
+    <WagnisHUD
+     name          = "Navigation"
+     correctaspect = true
+     font          = "Monofur"
+     textsize      = 0.02
+     navMarkerSize = 0.05
+     aimMarkerSize = 0.02
+     healthMarkerSize = 0
+     healthLevelMarkerSize = 0
+    />
+
+      <WagnisHUDinfo
+       name      = "descr1"
+       position  = "0.2, 0.08"
+       pickpoint = "0, 1"
+       font      = "Monofur"
+       caption   = "player name"
+       colour    = "1, 1, 1, 1"
+       textsize  = 0.06
+      />
+
+  </OverlayGroup>
+</Template>
\ No newline at end of file

Modified: code/branches/Merge_HS18/src/libraries/tools/Timer.cc
===================================================================
--- code/branches/Merge_HS18/src/libraries/tools/Timer.cc	2018-12-11 17:33:26 UTC (rev 12183)
+++ code/branches/Merge_HS18/src/libraries/tools/Timer.cc	2018-12-11 17:53:27 UTC (rev 12184)
@@ -36,6 +36,7 @@
 #include <set>
 
 #include <boost/bimap.hpp>
+#include <functional>
 
 #include "util/Clock.h"
 #include "core/CoreIncludes.h"

Modified: code/branches/Merge_HS18/src/modules/CMakeLists.txt
===================================================================
--- code/branches/Merge_HS18/src/modules/CMakeLists.txt	2018-12-11 17:33:26 UTC (rev 12183)
+++ code/branches/Merge_HS18/src/modules/CMakeLists.txt	2018-12-11 17:53:27 UTC (rev 12184)
@@ -50,4 +50,5 @@
 ADD_SUBDIRECTORY(flappyorx)
 ADD_SUBDIRECTORY(pacman)
 ADD_SUBDIRECTORY(orxyroad)
+ADD_SUBDIRECTORY(wagnis)
 ADD_SUBDIRECTORY(TixyTaxyTorxy)

Modified: code/branches/Merge_HS18/src/modules/weapons/projectiles/CMakeLists.txt
===================================================================
--- code/branches/Merge_HS18/src/modules/weapons/projectiles/CMakeLists.txt	2018-12-11 17:33:26 UTC (rev 12183)
+++ code/branches/Merge_HS18/src/modules/weapons/projectiles/CMakeLists.txt	2018-12-11 17:53:27 UTC (rev 12184)
@@ -13,4 +13,5 @@
   GravityBomb.cc
   GravityBombField.cc
   MineProjectile.cc
+  WagnisProjectile.cc
 )

Copied: code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.cc (from rev 12183, code/branches/wagnis_HS18/src/modules/weapons/projectiles/WagnisProjectile.cc)
===================================================================
--- code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.cc	                        (rev 0)
+++ code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.cc	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,90 @@
+/*
+ *   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.
+*/
+
+#include "WagnisProjectile.h"
+
+#include "core/config/ConfigValueIncludes.h"
+#include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "core/command/Executor.h"
+
+#include "worldentities/pawns/Pawn.h"
+
+namespace orxonox
+{
+    RegisterClass(WagnisProjectile);
+
+    WagnisProjectile::WagnisProjectile(Context* context) : MovableEntity(context), BasicProjectile()
+    {
+        RegisterObject(WagnisProjectile);
+
+        this->setConfigValues();
+
+        // Get notification about collisions
+        if (GameMode::isMaster())
+        {
+            this->setMass(0.1f);
+            this->enableCollisionCallback();
+            this->setCollisionResponse(false);
+            this->setCollisionType(CollisionType::Dynamic);
+
+            // Create a sphere collision shape and attach it to the projectile.
+            collisionShape_ = new SphereCollisionShape(this->getContext());
+            setCollisionShapeRadius(3.0f);
+            this->attachCollisionShape(collisionShape_);
+
+            this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&BasicProjectile::destroyObject, this)));
+        }
+    }
+
+    WagnisProjectile::~WagnisProjectile()
+    {
+    }
+
+    void WagnisProjectile::setConfigValues()
+    {
+        SetConfigValue(lifetime_, 4.0f).description("The time in seconds a projectile stays alive");
+    }
+
+    void WagnisProjectile::tick(float dt)
+    {
+        SUPER(WagnisProjectile, tick, dt);
+
+        if (!this->isActive())
+            return;
+
+        this->destroyCheck();
+    }
+
+    bool WagnisProjectile::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint)
+    {
+        return this->processCollision(otherObject, contactPoint, cs);
+    }
+
+    void WagnisProjectile::setCollisionShapeRadius(float radius)
+    {
+        if (collisionShape_ != nullptr && radius > 0)
+        {
+            collisionShape_->setRadius(radius);
+        }        
+    }
+}

Copied: code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.h (from rev 12183, code/branches/wagnis_HS18/src/modules/weapons/projectiles/WagnisProjectile.h)
===================================================================
--- code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.h	                        (rev 0)
+++ code/branches/Merge_HS18/src/modules/weapons/projectiles/WagnisProjectile.h	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,68 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      simonmie
+ *
+ */
+
+/**
+    @file Projectile.h
+    @brief Definition of the Projectile class.
+*/
+
+#ifndef _WagnisProjectile__
+#define _WagnisProjectile__
+
+#include "weapons/WeaponsPrereqs.h"
+
+#include "tools/Timer.h"
+#include "worldentities/MovableEntity.h"
+#include "objects/collisionshapes/SphereCollisionShape.h"
+
+#include "BasicProjectile.h"
+
+namespace orxonox
+{
+    class _WeaponsExport WagnisProjectile : public MovableEntity, public BasicProjectile
+    {
+        public:
+            WagnisProjectile(Context* context);
+            virtual ~WagnisProjectile();
+
+            void setConfigValues();
+
+            virtual void tick(float dt) override;
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
+
+        protected:
+            virtual void setCollisionShapeRadius(float radius);
+            float lifetime_; //!< The time the projectile exists.
+
+        private:
+            Timer destroyTimer_; //!< Timer to destroy the projectile after its lifetime has run out.
+            WeakPtr<SphereCollisionShape> collisionShape_; // The collision shape of the projectile.
+    };
+}
+
+#endif /* _WagnisProjectile__ */

Modified: code/branches/Merge_HS18/src/modules/weapons/weaponmodes/CMakeLists.txt
===================================================================
--- code/branches/Merge_HS18/src/modules/weapons/weaponmodes/CMakeLists.txt	2018-12-11 17:33:26 UTC (rev 12183)
+++ code/branches/Merge_HS18/src/modules/weapons/weaponmodes/CMakeLists.txt	2018-12-11 17:53:27 UTC (rev 12184)
@@ -12,4 +12,5 @@
   SimpleRocketFire.cc
   GravityBombFire.cc
   MineGun.cc
+  WagnisGun.cc
 )

Copied: code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.cc (from rev 12183, code/branches/wagnis_HS18/src/modules/weapons/weaponmodes/WagnisGun.cc)
===================================================================
--- code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.cc	                        (rev 0)
+++ code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.cc	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,116 @@
+/*
+ *   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.
+
+
+ *   The WagnisGun, WagnisProjectile and WagnisCursor was made to be used as a "cursor", by fireing invisible projectiles at an object.
+ *   You can then monitor the Objects HP in order to know which one has been hit (=clicked). And yes, it isn't a very beautiful solution.
+*/
+
+#include "WagnisGun.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "core/command/Executor.h"
+
+#include "graphics/Model.h"
+#include "weaponsystem/Weapon.h"
+#include "weaponsystem/WeaponPack.h"
+#include "weaponsystem/WeaponSystem.h"
+#include "worldentities/WorldEntity.h"
+#include "worldentities/pawns/Pawn.h"
+
+#include "weapons/projectiles/WagnisProjectile.h"
+#include "weapons/MuzzleFlash.h"
+
+namespace orxonox
+{
+    RegisterClass(WagnisGun);
+
+    WagnisGun::WagnisGun(Context* context) : WeaponMode(context)
+    {
+        RegisterObject(WagnisGun);
+
+        this->reloadTime_ = 0.5f;
+        this->damage_ = 0.0f; //default 15
+        this->speed_ = 800.0f;
+        this->delay_ = 0.0f;
+        this->setMunitionName("LaserMunition");
+
+
+
+        this->delayTimer_.setTimer(this->delay_, false, createExecutor(createFunctor(&WagnisGun::shot, this)));
+        this->delayTimer_.stopTimer();
+        hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
+    }
+
+    WagnisGun::~WagnisGun()
+    {
+    }
+
+    void WagnisGun::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(WagnisGun, XMLPort, xmlelement, mode);
+
+        XMLPortParam(WagnisGun, "delay", setDelay, getDelay, xmlelement, mode);
+        XMLPortParam(WagnisGun, "material", setMaterial, getMaterial, xmlelement, mode);
+        XMLPortParam(WagnisGun, "projectileMesh", setMesh, getMesh, xmlelement, mode);
+        XMLPortParam(WagnisGun, "sound", setSound, getSound, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Set the firing delay.
+    @param delay
+        The firing delay in seconds.
+    */
+    void WagnisGun::setDelay(float delay)
+    {
+        this->delay_ = delay;
+        this->delayTimer_.setInterval(this->delay_);
+    }
+
+    void WagnisGun::fire()
+    {
+        this->delayTimer_.startTimer();
+    }
+
+    /**
+    @brief
+        Fires the weapon. Creates a projectile and fires it.
+    */
+    void WagnisGun::shot()
+    {
+        assert( this->getWeapon() && this->getWeapon()->getWeaponPack() && this->getWeapon()->getWeaponPack()->getWeaponSystem() && this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn() );
+
+        // Create the projectile.
+        WagnisProjectile* projectile = new WagnisProjectile(this->getContext());
+
+        this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
+        projectile->setOrientation(this->getMuzzleOrientation());
+        projectile->setPosition(this->getMuzzlePosition());
+        projectile->setVelocity(this->getMuzzleDirection() * this->speed_);
+
+        projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+        projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
+    }
+}

Copied: code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.h (from rev 12183, code/branches/wagnis_HS18/src/modules/weapons/weaponmodes/WagnisGun.h)
===================================================================
--- code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.h	                        (rev 0)
+++ code/branches/Merge_HS18/src/modules/weapons/weaponmodes/WagnisGun.h	2018-12-11 17:53:27 UTC (rev 12184)
@@ -0,0 +1,93 @@
+#ifndef _WagnisGun__
+#define _WagnisGun__
+
+#include "weapons/WeaponsPrereqs.h"
+
+#include "tools/Timer.h"
+#include "weaponsystem/WeaponMode.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        Shoots laser beams.
+    @author
+        Hagen Seifert
+    @ingroup WeaponsWeaponModes
+    */
+    class _WeaponsExport WagnisGun : public WeaponMode
+    {
+        public:
+            WagnisGun(Context* context);
+            virtual ~WagnisGun();
+
+            virtual void fire() override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+
+        protected:
+            /**
+            @brief Set the mesh.
+            @param mesh The mesh name.
+            */
+            void setMesh(const std::string& mesh)
+                { this->mesh_ = mesh; }
+
+            /**
+            @brief Get the mesh.
+            @return Returns the mesh name.
+            */
+            const std::string& getMesh() const
+                { return this->mesh_; }
+
+            /**
+            @brief Set the sound.
+            @param sound The Sound name.
+            */
+            void setSound(const std::string& sound)
+                { this->sound_ = sound; }
+
+            /**
+            @brief Get the sound.
+            @return Returns the sound name.
+            */
+            const std::string& getSound() const
+                { return this->sound_; }
+
+            /**
+            @brief Set the material.
+            @param material The material name.
+            */
+            void setMaterial(const std::string& material)
+                { this->material_ = material; }
+            /**
+            @brief Get the material.
+            @return Returns the material name.
+            */
+            const std::string& getMaterial() const
+                { return this->material_; }
+
+            void setDelay(float delay);
+            /**
+            @brief Get the firing delay.
+            @return Returns the firing delay in seconds.
+            */
+            float getDelay() const
+                { return this->delay_; }
+
+            virtual void shot();
+            void muzzleflash();
+
+            std::string material_; //!< The material.
+            std::string mesh_; //!< The mesh.
+            std::string sound_; //!< The sound.
+
+
+
+            float speed_; //!< The speed of the fired projectile.
+            float delay_; //!< The firing delay.
+            Timer delayTimer_; //!< A timer to delay the firing.
+    };
+}
+
+#endif /* _WagnisGun__ */



More information about the Orxonox-commit mailing list