diff options
| author | Anson Bridges <bridges.anson@gmail.com> | 2022-09-13 18:15:01 -0400 |
|---|---|---|
| committer | Anson Bridges <bridges.anson@gmail.com> | 2022-09-13 18:15:01 -0400 |
| commit | 4068e66756966983973ab20b68ec5382e398548b (patch) | |
| tree | c2215e65167c7f6aced272da371214985cce16f5 /godot | |
| parent | e2f3e4bd7118c8f55d20b29d76cb9a13acf72f8b (diff) | |
incomplete airplane implementation (needs addl. network sync)
Diffstat (limited to 'godot')
23 files changed, 364 insertions, 189 deletions
diff --git a/godot/bin/x11/libnetmachine.so b/godot/bin/x11/libnetmachine.so Binary files differindex c6fc078..b8cc579 100755 --- a/godot/bin/x11/libnetmachine.so +++ b/godot/bin/x11/libnetmachine.so diff --git a/godot/maps/Main.tscn b/godot/maps/Main.tscn index b70250a..4f2fbc2 100644 --- a/godot/maps/Main.tscn +++ b/godot/maps/Main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=2] +[gd_scene load_steps=20 format=2] [ext_resource path="res://scripts/World.gd" type="Script" id=1] [ext_resource path="res://scenes/machines/Cannon.tscn" type="PackedScene" id=2] @@ -12,10 +12,13 @@ [ext_resource path="res://scenes/vehicles/Gunboat.tscn" type="PackedScene" id=10] [ext_resource path="res://scenes/environment/CaptureFlag.tscn" type="PackedScene" id=11] [ext_resource path="res://scenes/environment/Ladder.tscn" type="PackedScene" id=12] +[ext_resource path="res://scenes/worldprops/Runway.tscn" type="PackedScene" id=13] +[ext_resource path="res://scenes/vehicles/Airplane.tscn" type="PackedScene" id=14] [sub_resource type="NavigationMesh" id=14] -vertices = PoolVector3Array( -6.71966, 2.08805, -14.1154, -5.71966, 2.08805, -13.6154, -5.46966, 2.08805, -14.1154, -6.96966, 1.58805, -15.1154, -8.46966, 0.588049, -15.1154, -8.46966, 0.588049, -14.6154, -6.96966, 1.58805, -15.1154, -7.46966, 0.588049, -16.8654, -4.71966, -0.411951, -20.3654, -5.46966, 0.588049, -18.3654, -5.46966, 2.08805, -14.1154, 2.53034, 2.33805, -14.1154, 2.53034, -0.161951, -22.1154, -0.219656, -0.161951, -22.3654, -1.34466, 0.0880492, -21.8654, -0.4895, 1.33805, -15.8476, -3.45952, 1.83805, -15.8695, -1.95461, 0.588049, -18.8464, -0.219656, -0.161951, -22.3654, -2.46966, -0.411951, -22.6154, -4.71966, -0.411951, -20.3654, -1.34466, 0.0880492, -21.8654, -4.71966, -0.411951, -20.3654, -5.46966, -0.161951, -19.3654, -5.46966, 0.588049, -18.3654, -0.219656, -0.161951, -22.3654, -1.71966, -0.911951, -25.3654, -2.46966, -0.411951, -22.6154, -7.46966, 0.588049, -16.8654, -6.96966, 1.58805, -15.1154, -5.46966, 2.08805, -14.1154, -5.46966, 0.588049, -18.3654, 8.03034, -0.161951, -18.6154, 9.53034, -0.911951, -18.6154, 8.03034, -0.161951, -18.8654, 5.28034, 2.08805, -14.1154, 5.53034, 2.08805, -13.6154, 8.78034, 0.838049, -16.8654, 8.03034, 0.838049, -17.3654, 5.28034, 2.08805, -14.1154, 8.03034, 0.838049, -17.3654, 8.03034, -0.161951, -18.6154, 6.03034, -0.411951, -23.1154, 2.53034, -0.161951, -22.1154, 2.53034, 2.33805, -14.1154, 5.51542, 1.08805, -17.3745, 5.52537, -0.161951, -20.3684, 4.04036, -0.161951, -20.3794, 4.03041, 1.33805, -17.3854, 8.03034, -0.161951, -18.6154, 8.03034, -0.161951, -18.8654, 6.03034, -0.411951, -23.1154, 12.7803, 0.588049, -14.6154, 13.5303, 0.0880492, -14.8654, 13.7803, -0.411951, -15.3654, 12.0303, -0.161951, -16.3654, 11.7803, 0.588049, -15.3654, 20.2803, -0.161951, -2.61539, 20.0303, -0.161951, -2.86539, 19.0303, 0.588049, -2.86539, 19.0303, 0.838049, -0.865385, 20.0303, -0.161951, -1.11539, 14.0303, 1.58805, 9.88461, 15.7803, 1.08805, 9.38461, 16.7803, 1.08805, 8.13461, 9.28034, 2.83805, 3.88461, 12.5303, 1.83805, 9.88461, 11.7803, 2.58805, 5.30128, 15.0303, 1.08805, -11.1154, 12.7803, 0.838049, -13.8654, 10.7803, 0.838049, -15.3654, 5.53034, 2.08805, -13.6154, 5.53034, 3.58805, -8.86539, 9.60177, 2.83805, -9.82967, 5.53034, 2.83805, -10.0529, 12.7803, 0.838049, -13.8654, 12.7803, 0.588049, -14.6154, 11.7803, 0.588049, -15.3654, 10.7803, 0.838049, -15.3654, 18.7803, 0.838049, 2.38461, 19.2803, 0.588049, 1.88461, 19.0303, 0.838049, -0.865385, 19.0303, 0.838049, -0.865385, 19.0303, 0.588049, -2.86539, 18.0303, 0.838049, -5.36539, 18.7803, 0.838049, 2.38461, 18.4053, 1.08805, -1.49039, 19.0303, 0.588049, -3.61539, 18.7803, 0.588049, -5.11539, 18.0303, 0.838049, -5.36539, 19.0303, 0.588049, -2.86539, 18.2803, 0.588049, -6.86539, 17.7803, 0.588049, -7.86539, 16.7803, 0.838049, -8.36539, 18.0303, 0.838049, -5.36539, 15.0303, 1.08805, -11.1154, 15.0303, 0.838049, -11.6154, 14.0303, 0.588049, -13.1154, 12.7803, 0.838049, -13.8654, 16.7803, 0.838049, -8.36539, 16.7803, 0.838049, -9.11539, 16.0303, 0.588049, -10.6154, 15.0303, 1.08805, -11.1154, 16.7803, 1.08805, 8.13461, 18.0303, 0.838049, 5.38461, 18.7803, 0.838049, 2.38461, 8.53034, 3.08805, 3.13461, 9.28034, 2.83805, 3.88461, 11.7803, 2.58805, 5.30128, 15.8518, 1.83805, 2.5989, 10.7803, 0.838049, -15.3654, 10.7803, 0.338049, -16.6154, 8.78034, 0.838049, -16.8654, 5.53034, 2.08805, -13.6154, 7.78034, 3.08805, 3.13461, 8.53034, 3.08805, 3.13461, 18.7803, 0.838049, 2.38461, 18.0303, 0.838049, -5.36539, 15.0303, 1.08805, -11.1154, 5.53034, 3.58805, -8.86539, 5.78034, 4.08805, -7.53205, 6.53034, 4.33805, -3.53205, 7.28034, 3.08805, 0.467949, 15.8518, 1.83805, 2.5989, 18.4053, 1.08805, -1.49039, 9.60177, 2.83805, -9.82967, 10.0455, 3.83805, -5.38657, 8.53065, 4.08805, -2.36571, 11.5507, 2.58805, -2.34373, 10.0257, 3.33805, -0.888798, 13.0055, 2.08805, -6.88051, 11.5104, 3.08805, -8.35742, 14.5506, 2.08805, -5.3536, 13.0155, 2.33805, -5.36459, 10.0208, 2.83805, 0.638111, 16.7803, 1.08805, 8.13461, 18.0303, 0.338049, 7.63461, 18.0303, 0.838049, 5.38461, 18.0303, 0.838049, 5.38461, 18.7803, 0.588049, 4.88461, 18.7803, 0.838049, 2.38461, 18.0303, 0.838049, -5.36539, 16.7803, 0.838049, -8.36539, 15.0303, 1.08805, -11.1154, 20.0303, -0.161951, -3.61539, 20.0303, -0.161951, -2.86539, 20.2803, -0.161951, -2.61539, 22.0303, -0.911951, -4.61539, 18.2803, 0.0880492, -8.11539, 17.7803, 0.588049, -7.86539, 18.2803, 0.588049, -6.86539, 19.2803, -0.161951, -6.61539, 13.7803, -0.411951, -15.3654, 13.5303, 0.0880492, -14.8654, 14.5303, -0.161951, -14.1154, 16.2803, -0.911951, -14.6154, 14.0303, 0.588049, -13.1154, 15.0303, 0.838049, -11.6154, 15.2803, 0.588049, -12.1154, 14.5303, 0.338049, -13.3654, 16.2803, -0.911951, -14.6154, 16.0303, 0.0880492, -12.1154, 16.5303, -0.161951, -11.6154, 16.5303, 0.338049, -10.8654, 16.0303, 0.588049, -10.6154, 16.7803, 0.838049, -9.11539, 19.2803, 0.0880492, -5.36539, 18.7803, 0.588049, -5.11539, 19.0303, 0.588049, -3.61539, 20.0303, -0.161951, -3.61539, 16.5303, -0.161951, -11.6154, 17.7803, -0.161951, -9.36539, 18.2803, -0.161951, -8.86539, 20.0303, -0.911951, -10.1154, 16.2803, -0.911951, -14.6154, 18.2803, -0.161951, -8.86539, 18.2803, 0.0880492, -8.11539, 19.2803, -0.161951, -6.61539, 22.0303, -0.911951, -5.36539, 20.0303, -0.911951, -10.1154, 20.0303, -0.161951, -3.61539, 22.0303, -0.911951, -4.61539, 22.0303, -0.911951, -5.36539, 19.2803, -0.161951, -6.61539, 19.2803, 0.0880492, -5.36539, 14.5303, 0.338049, -13.3654, 15.2803, 0.588049, -12.1154, 16.0303, 0.0880492, -12.1154, 16.2803, -0.911951, -14.6154, 14.5303, -0.161951, -14.1154, 16.5303, 0.338049, -10.8654, 16.7803, 0.838049, -9.11539, 17.7803, -0.161951, -9.36539, 16.5303, -0.161951, -11.6154, -29.9697, -1.66195, -15.1154, -28.7197, -0.661951, -6.86539, -28.4697, -1.66195, -14.3654, -29.9697, -1.66195, -15.1154, -28.4697, -1.66195, -14.3654, -26.9697, -1.91195, -14.6154, -11.4697, -0.161951, -11.3654, -10.4697, -0.161951, -11.6154, -10.4697, -0.411951, -12.3654, -12.2197, -0.911951, -12.8654, -20.9697, -0.661951, -5.86539, -17.7197, -2.41195, -13.6154, -24.4697, -2.16195, -14.3654, -24.2197, -0.411951, -2.86539, -18.2613, -2.41195, -12.3237, -19.0697, -2.66195, -13.7654, -24.2822, -0.411951, -5.74039, -20.7197, 1.08805, -2.86539, -20.4697, 0.588049, -4.61539, -21.2197, 0.0880492, -4.86539, -24.2197, -0.411951, -2.86539, -23.053, -0.411951, -2.86539, -22.2197, -0.411951, -4.19872, -11.4697, 0.0880492, -10.8654, -11.4697, -0.161951, -11.3654, -12.2197, -0.911951, -12.8654, -14.7197, -2.16195, -14.6154, -17.7197, -2.41195, -13.6154, -15.9697, -0.911951, -9.11539, -20.9697, -0.661951, -5.86539, -17.7197, -1.16195, -7.36539, -15.9697, -0.911951, -9.11539, -17.7197, -2.41195, -13.6154, -18.2613, -2.41195, -12.3237, -24.2197, -0.411951, -2.86539, -21.2197, 0.0880492, -4.86539, -20.9697, -0.661951, -5.86539, -22.2197, -0.411951, -4.19872, -21.9697, 0.338049, 2.63461, -21.4697, 0.588049, 3.38461, -20.9697, 0.588049, 3.38461, -19.9697, 1.08805, 3.13461, -20.2197, 1.33805, 1.38461, -20.4697, 0.588049, -4.61539, -20.7197, 1.08805, -2.86539, -20.2197, 1.33805, -2.86539, -16.2197, 1.58805, -5.36539, -17.7197, 1.33805, 4.13461, -16.9697, 0.588049, 5.63461, -16.7197, 0.338049, 5.63461, -16.9697, 1.58805, 3.38461, -16.2197, 1.58805, -5.36539, -20.2197, 1.33805, -2.86539, -20.2197, 1.58805, -1.86539, -15.9697, 2.08805, 3.13461, -14.4697, 2.08805, 4.88461, -15.4697, 2.33805, -0.972528, -16.2197, 1.58805, -5.36539, -14.4697, 2.08805, 4.88461, -13.4697, 1.83805, 8.63461, 0.780344, 2.83805, 8.38461, 0.780344, 2.58805, 7.13461, -3.71966, 3.58805, -7.86539, -6.49743, 2.83805, -7.30983, -9.27521, 2.83805, -6.75427, -15.4697, 2.33805, -0.972528, -10.6197, 1.83805, 8.58462, -3.49466, 3.08805, 8.45962, -0.037838, 3.33805, 4.40734, -1.6742, 3.33805, -1.0472, -2.90147, 3.83805, -5.13811, -9.46456, 3.83805, -3.85249, -1.97882, 2.58805, 6.61772, -6.48386, 3.08805, 6.63476, -1.98902, 3.33805, 3.64193, -3.49393, 2.58805, 5.11884, -4.95904, 3.33805, 3.61996, -4.95952, 3.33805, -3.86953, -0.493813, 2.33805, 6.62871, -7.98926, 3.08805, 0.622189, -9.48398, 2.83805, 5.12489, -7.94945, 3.83805, -2.3536, -10.9496, 3.08805, -3.86348, -10.9695, 3.33805, -2.37558, -4.95461, 3.58805, -5.34644, -13.9696, 2.58805, -3.88545, -9.71966, 2.33805, -9.86539, -10.4697, 2.33805, -9.86539, -11.7197, 2.08805, -8.61539, -5.71966, 3.08805, -8.11539, -19.9697, 1.08805, 3.13461, -17.7197, 1.33805, 4.13461, -16.9697, 1.58805, 3.38461, -20.2197, 1.33805, 1.38461, -25.7197, -0.661951, 1.38461, -23.2197, -0.411951, 2.88461, -21.9697, 0.338049, 2.63461, -11.7197, 2.08805, -8.61539, -15.2197, 1.58805, -8.11539, -16.2197, 1.58805, -5.36539, -3.71966, 3.58805, -7.86539, -5.71966, 3.08805, -8.11539, -9.27521, 2.83805, -6.75427, -6.49743, 2.83805, -7.30983, -5.71966, 2.08805, -13.6154, -6.71966, 2.08805, -14.1154, -9.71966, 2.33805, -9.86539, -5.71966, 3.08805, -8.11539, -5.71966, 3.08805, -10.8654, -20.2197, 1.58805, 0.384615, -20.2197, 1.33805, 1.38461, -19.9697, 1.08805, 3.13461, -19.9697, 1.08805, 3.13461, -16.9697, 1.58805, 3.38461, -15.9697, 2.08805, 3.13461, -20.2197, 1.58805, -1.86539, -20.2197, 1.58805, 0.384615, -18.4947, 1.33805, 2.10962, -27.4697, 1.58805, -6.11539, -28.2197, 1.58805, -5.86539, -28.2197, 1.58805, -3.61539, -27.4697, 1.58805, -3.36539, -27.4697, 1.58805, -6.11539, -27.4697, 1.58805, -3.36539, -25.2197, 1.58805, -2.11539, -20.2197, 1.58805, 0.384615, -20.2197, 1.58805, -1.86539, -25.2197, 1.58805, -2.11539, -27.4697, 1.58805, 0.384615, -25.2197, 1.58805, -13.6154, -27.4697, 1.58805, -13.6154, -27.4697, 1.58805, -6.11539, -25.2197, 1.58805, -2.11539, -27.4697, 1.58805, -3.36539, -27.4697, 1.58805, 0.384615, -25.2197, 1.58805, -2.11539, -3.46966, 3.83805, -8.36539, -0.469656, 3.83805, -8.36539, -0.469656, 3.83805, -8.86539, -3.46966, 3.83805, -8.86539, 5.53034, 3.58805, -8.86539, 4.53034, 3.83805, -8.61539, 3.78034, 3.58805, -7.86539, 5.28034, 3.08805, 5.13461, 7.78034, 3.08805, 3.13461, 7.28034, 3.08805, 0.467949, 6.53034, 4.33805, -3.53205, 5.78034, 4.08805, -7.53205, 4.11368, 4.33805, -4.9765, 4.61368, 3.33805, -0.643164, -4.71966, 3.83805, -13.1154, -4.71966, 3.83805, -8.86539, -3.46966, 3.83805, -8.86539, -4.71966, 3.83805, -13.1154, -3.46966, 3.83805, -8.86539, -0.469656, 3.83805, -8.86539, 4.53034, 3.83805, -13.1154, -4.71966, 3.83805, -13.1154, -0.469656, 3.83805, -8.86539, 4.03034, 3.83805, -8.86539, 4.53034, 3.83805, -8.61539, 4.03034, 3.83805, -8.86539, 3.78034, 3.58805, -7.86539, 4.53034, 3.83805, -8.61539, 4.53034, 3.83805, -13.1154, 4.03034, 3.83805, -8.86539, -27.2197, -0.411951, -6.86539, -25.4697, -0.411951, -6.86539, -25.4697, -0.411951, -7.86539, -27.2197, -0.411951, -8.61539, -0.469656, 3.33805, -7.86539, -0.469656, 3.83805, -8.36539, -3.46966, 3.83805, -8.36539, -0.469656, 3.33805, -7.86539, -3.46966, 3.83805, -8.36539, -3.71966, 3.58805, -7.86539, 0.780344, 2.58805, 7.13461, 1.03034, 2.83805, 6.63461, 0.730345, 3.33805, 3.73462, -0.0196552, 3.58805, -3.51538, -2.90147, 3.83805, -5.13811, -1.6742, 3.33805, -1.0472, -0.037838, 3.33805, 4.40734, 1.03034, 2.83805, 6.63461, 2.53034, 3.08805, 6.63461, 5.28034, 3.08805, 5.13461, 3.78034, 3.58805, -7.86539, -0.469656, 3.33805, -7.86539, -0.0196552, 3.58805, -3.51538, 0.730345, 3.33805, 3.73462, 4.61368, 3.33805, -0.643164, 4.11368, 4.33805, -4.9765, 2.36368, 3.08805, -7.86539, 1.00534, 3.08805, -6.89038, 1.04539, 3.33805, -3.84644, -27.2197, -0.411951, -5.61539, -27.2197, -0.411951, -3.86539, -26.2197, -0.161951, -3.86539, -26.2197, -0.411951, -5.61539, -23.4697, -0.161951, -0.615385, -23.4697, -0.161951, -1.61539, -24.2197, -0.161951, -1.61539, -24.4697, -0.161951, -0.365385, -23.7197, -0.161951, 0.134615, -26.2197, -0.411951, 0.134615, -23.7197, -0.161951, 0.134615, -24.4697, -0.161951, -0.365385, -26.2197, -0.411951, -0.365385, -13.7197, 1.58805, 9.63461, -14.4697, 1.08805, 9.63461, -13.9697, 1.58805, 10.3846, -20.9697, 0.338049, 4.13461, -20.9697, 0.588049, 3.38461, -21.4697, 0.588049, 3.38461, 13.5303, 1.58805, 10.3846, 14.0303, 1.58805, 9.88461, 12.5303, 1.83805, 9.88461, 12.5303, 1.33805, 11.1346, -14.7197, 0.338049, 13.3846, -16.2197, -0.911951, 11.6346, -16.9697, -0.161951, 13.1346, -12.4697, 0.0880492, 17.1346, 13.5303, 0.338049, 12.1346, 13.5303, 1.58805, 10.3846, 12.5303, 1.33805, 11.1346, 12.0303, 1.08805, 11.6346, 10.2803, 1.08805, 14.3846, -16.7197, 0.338049, 5.63461, -16.9697, 0.588049, 5.63461, -16.7197, -0.411951, 7.13461, -15.9697, -0.161951, 7.88461, -13.7197, 0.838049, 13.3846, -14.7197, 0.338049, 13.3846, -12.4697, 0.0880492, 17.1346, -0.219656, 0.838049, 18.8846, 4.53034, 1.83805, 15.1346, 0.780344, 2.83805, 8.38461, -13.4697, 1.83805, 8.63461, -12.4697, 0.0880492, 17.1346, -6.71966, 0.0880492, 19.6346, 2.03034, 2.83805, 10.6346, -3.49466, 3.08805, 8.45962, -10.6197, 1.83805, 8.58462, -6.49417, 1.58805, 15.6491, -10.9795, 1.83805, 11.1585, -7.99442, 1.33805, 12.6294, -9.46432, 1.58805, 14.1173, -6.4943, 1.33805, 14.1392, -1.98926, 2.33805, 14.1222, -4.9895, 2.58805, 11.1524, -6.47451, 1.83805, 11.1415, -6.45461, 2.58805, 9.65356, -7.95952, 1.58805, 11.1305, -9.47463, 2.08805, 9.63159, -10.9492, 0.588049, 15.6161, -10.9493, 1.33805, 14.1563, -15.9697, -0.161951, 7.88461, -16.7197, -0.411951, 7.13461, -17.7197, -0.911951, 7.38461, -19.7197, -1.41195, 8.63461, -16.9697, -0.161951, 13.1346, -16.2197, -0.911951, 11.6346, -18.3447, -1.41195, 10.8846, -16.9596, -1.16195, 9.6206, 8.78034, 0.838049, 16.1346, 10.5303, 0.338049, 15.3846, 10.2803, 1.08805, 14.3846, -0.219656, 0.838049, 18.8846, 1.78034, 0.588049, 19.3846, 2.28034, 0.838049, 18.8846, 6.03034, 0.838049, 17.8846, 7.78034, 0.588049, 17.8846, 8.78034, 0.838049, 16.1346, -13.4697, 1.83805, 8.63461, -13.7197, 1.58805, 9.63461, -13.7197, 0.838049, 13.3846, -12.4697, 0.0880492, 17.1346, -13.7197, 1.58805, 9.63461, -13.9697, 1.58805, 10.3846, -13.7197, 0.838049, 13.3846, 2.28034, 0.838049, 18.8846, 4.78034, 0.588049, 18.8846, 6.03034, 0.838049, 17.8846, 8.78034, 0.838049, 16.1346, 10.2803, 1.08805, 14.3846, 12.0303, 1.08805, 11.6346, 5.53034, 1.83805, 15.1346, 6.03034, 0.838049, 17.8846, 9.43035, 1.58805, 13.0346, -20.9697, 0.338049, 4.13461, -21.4697, 0.588049, 3.38461, -19.7197, -1.41195, 8.63461, -20.5947, -0.161951, 6.00961, -17.7197, -0.911951, 7.38461, -20.9697, 0.338049, 4.13461, -19.7197, -1.41195, 8.63461, -18.5322, -0.911951, 6.57211, 4.53034, 1.83805, 15.1346, -0.219656, 0.838049, 18.8846, 2.28034, 0.838049, 18.8846, 6.03034, 0.838049, 17.8846, 5.53034, 1.83805, 15.1346, -6.71966, 0.0880492, 19.6346, -0.969656, 0.588049, 19.3846, -0.219656, 0.838049, 18.8846, 4.53034, 6.58805, 14.3846, 12.0303, 6.33805, 10.6346, 8.53034, 6.58805, 4.13461, 1.28034, 6.33805, 7.88461, 3.23034, 9.08805, 11.7846, 10.6303, 8.83805, 8.03462, 8.53041, 8.83805, 8.11455, 7.03544, 9.08805, 9.64751, 8.54552, 7.08805, 11.1134, 8.52045, 8.33805, 9.6585, 5.03034, 2.08805, 13.3846, 11.0303, 1.83805, 10.3846, 8.28034, 2.83805, 5.38461, 2.53034, 2.83805, 8.38461, 7.43035, 1.58805, 12.1846, 5.50534, 2.33805, 8.10961, 8.53041, 2.33805, 9.61455 ) -polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 12, 17, 13 ), PoolIntArray( 13, 17, 14 ), PoolIntArray( 14, 17, 8 ), PoolIntArray( 8, 17, 9 ), PoolIntArray( 9, 16, 10 ), PoolIntArray( 10, 15, 11 ), PoolIntArray( 11, 15, 12 ), PoolIntArray( 12, 15, 17 ), PoolIntArray( 17, 16, 9 ), PoolIntArray( 16, 15, 10 ), PoolIntArray( 15, 16, 17 ), PoolIntArray( 18, 21, 19 ), PoolIntArray( 19, 21, 20 ), PoolIntArray( 24, 23, 22 ), PoolIntArray( 27, 26, 25 ), PoolIntArray( 29, 28, 30 ), PoolIntArray( 30, 28, 31 ), PoolIntArray( 34, 33, 32 ), PoolIntArray( 35, 38, 36 ), PoolIntArray( 36, 38, 37 ), PoolIntArray( 43, 48, 44 ), PoolIntArray( 44, 48, 39 ), PoolIntArray( 39, 45, 40 ), PoolIntArray( 40, 45, 41 ), PoolIntArray( 41, 46, 42 ), PoolIntArray( 42, 47, 43 ), PoolIntArray( 43, 47, 48 ), PoolIntArray( 48, 45, 39 ), PoolIntArray( 45, 46, 41 ), PoolIntArray( 46, 47, 42 ), PoolIntArray( 47, 46, 48 ), PoolIntArray( 48, 46, 45 ), PoolIntArray( 51, 50, 49 ), PoolIntArray( 53, 52, 54 ), PoolIntArray( 54, 52, 56 ), PoolIntArray( 54, 56, 55 ), PoolIntArray( 58, 57, 59 ), PoolIntArray( 59, 57, 61 ), PoolIntArray( 59, 61, 60 ), PoolIntArray( 62, 66, 63 ), PoolIntArray( 63, 66, 64 ), PoolIntArray( 64, 66, 67 ), PoolIntArray( 67, 66, 65 ), PoolIntArray( 72, 74, 73 ), PoolIntArray( 73, 74, 71 ), PoolIntArray( 73, 71, 70 ), PoolIntArray( 73, 70, 69 ), PoolIntArray( 73, 69, 68 ), PoolIntArray( 76, 75, 77 ), PoolIntArray( 77, 75, 78 ), PoolIntArray( 81, 80, 79 ), PoolIntArray( 85, 86, 82 ), PoolIntArray( 82, 86, 83 ), PoolIntArray( 83, 86, 84 ), PoolIntArray( 88, 87, 89 ), PoolIntArray( 89, 87, 90 ), PoolIntArray( 92, 91, 93 ), PoolIntArray( 93, 91, 94 ), PoolIntArray( 96, 95, 97 ), PoolIntArray( 97, 95, 98 ), PoolIntArray( 100, 99, 101 ), PoolIntArray( 101, 99, 102 ), PoolIntArray( 107, 106, 108 ), PoolIntArray( 108, 106, 109 ), PoolIntArray( 108, 109, 105 ), PoolIntArray( 108, 105, 104 ), PoolIntArray( 108, 104, 103 ), PoolIntArray( 111, 110, 112 ), PoolIntArray( 112, 110, 113 ), PoolIntArray( 125, 120, 119 ), PoolIntArray( 120, 126, 121 ), PoolIntArray( 121, 127, 122 ), PoolIntArray( 122, 115, 114 ), PoolIntArray( 115, 134, 123 ), PoolIntArray( 123, 124, 116 ), PoolIntArray( 124, 132, 117 ), PoolIntArray( 117, 132, 118 ), PoolIntArray( 118, 131, 125 ), PoolIntArray( 125, 126, 120 ), PoolIntArray( 126, 127, 121 ), PoolIntArray( 127, 129, 122 ), PoolIntArray( 122, 134, 115 ), PoolIntArray( 134, 128, 123 ), PoolIntArray( 123, 128, 124 ), PoolIntArray( 124, 128, 132 ), PoolIntArray( 132, 130, 118 ), PoolIntArray( 131, 126, 125 ), PoolIntArray( 118, 130, 131 ), PoolIntArray( 126, 128, 127 ), PoolIntArray( 129, 134, 122 ), PoolIntArray( 127, 128, 129 ), PoolIntArray( 134, 129, 128 ), PoolIntArray( 128, 133, 132 ), PoolIntArray( 132, 133, 130 ), PoolIntArray( 131, 130, 126 ), PoolIntArray( 126, 133, 128 ), PoolIntArray( 133, 126, 130 ), PoolIntArray( 137, 136, 135 ), PoolIntArray( 140, 139, 138 ), PoolIntArray( 143, 142, 141 ), PoolIntArray( 145, 144, 146 ), PoolIntArray( 146, 144, 147 ), PoolIntArray( 149, 148, 150 ), PoolIntArray( 150, 148, 151 ), PoolIntArray( 153, 152, 154 ), PoolIntArray( 154, 152, 155 ), PoolIntArray( 159, 158, 156 ), PoolIntArray( 156, 158, 157 ), PoolIntArray( 160, 162, 161 ), PoolIntArray( 163, 165, 164 ), PoolIntArray( 167, 166, 168 ), PoolIntArray( 168, 166, 169 ), PoolIntArray( 172, 171, 173 ), PoolIntArray( 173, 171, 170 ), PoolIntArray( 173, 170, 174 ), PoolIntArray( 176, 175, 177 ), PoolIntArray( 177, 175, 179 ), PoolIntArray( 177, 179, 178 ), PoolIntArray( 181, 180, 182 ), PoolIntArray( 182, 180, 184 ), PoolIntArray( 182, 184, 183 ), PoolIntArray( 186, 185, 187 ), PoolIntArray( 187, 185, 189 ), PoolIntArray( 187, 189, 188 ), PoolIntArray( 191, 190, 192 ), PoolIntArray( 192, 190, 193 ), PoolIntArray( 196, 195, 194 ), PoolIntArray( 199, 198, 197 ), PoolIntArray( 201, 200, 202 ), PoolIntArray( 202, 200, 203 ), PoolIntArray( 205, 208, 209 ), PoolIntArray( 209, 208, 206 ), PoolIntArray( 206, 208, 204 ), PoolIntArray( 206, 204, 210 ), PoolIntArray( 210, 204, 207 ), PoolIntArray( 213, 212, 216 ), PoolIntArray( 216, 212, 211 ), PoolIntArray( 216, 211, 215 ), PoolIntArray( 216, 215, 214 ), PoolIntArray( 218, 217, 219 ), PoolIntArray( 219, 217, 220 ), PoolIntArray( 220, 217, 221 ), PoolIntArray( 221, 217, 222 ), PoolIntArray( 226, 225, 227 ), PoolIntArray( 227, 225, 224 ), PoolIntArray( 227, 224, 223 ), PoolIntArray( 229, 231, 230 ), PoolIntArray( 230, 231, 228 ), PoolIntArray( 233, 232, 234 ), PoolIntArray( 234, 232, 235 ), PoolIntArray( 235, 232, 236 ), PoolIntArray( 238, 237, 239 ), PoolIntArray( 239, 237, 240 ), PoolIntArray( 242, 241, 243 ), PoolIntArray( 243, 241, 244 ), PoolIntArray( 246, 245, 247 ), PoolIntArray( 247, 245, 250 ), PoolIntArray( 247, 250, 248 ), PoolIntArray( 248, 250, 249 ), PoolIntArray( 264, 278, 256 ), PoolIntArray( 256, 278, 257 ), PoolIntArray( 257, 265, 258 ), PoolIntArray( 258, 279, 251 ), PoolIntArray( 251, 279, 259 ), PoolIntArray( 259, 277, 252 ), PoolIntArray( 252, 260, 253 ), PoolIntArray( 260, 267, 261 ), PoolIntArray( 261, 266, 254 ), PoolIntArray( 254, 272, 255 ), PoolIntArray( 255, 272, 262 ), PoolIntArray( 262, 268, 263 ), PoolIntArray( 263, 271, 264 ), PoolIntArray( 264, 271, 278 ), PoolIntArray( 278, 265, 257 ), PoolIntArray( 265, 276, 258 ), PoolIntArray( 258, 276, 279 ), PoolIntArray( 279, 277, 259 ), PoolIntArray( 277, 273, 252 ), PoolIntArray( 252, 274, 260 ), PoolIntArray( 267, 269, 261 ), PoolIntArray( 260, 274, 267 ), PoolIntArray( 266, 272, 254 ), PoolIntArray( 261, 269, 266 ), PoolIntArray( 272, 266, 262 ), PoolIntArray( 268, 270, 263 ), PoolIntArray( 262, 266, 268 ), PoolIntArray( 263, 273, 271 ), PoolIntArray( 271, 265, 278 ), PoolIntArray( 265, 277, 276 ), PoolIntArray( 276, 277, 279 ), PoolIntArray( 273, 274, 252 ), PoolIntArray( 277, 275, 273 ), PoolIntArray( 267, 270, 269 ), PoolIntArray( 274, 270, 267 ), PoolIntArray( 269, 268, 266 ), PoolIntArray( 270, 273, 263 ), PoolIntArray( 268, 269, 270 ), PoolIntArray( 273, 275, 271 ), PoolIntArray( 271, 275, 265 ), PoolIntArray( 265, 275, 277 ), PoolIntArray( 273, 270, 274 ), PoolIntArray( 281, 280, 282 ), PoolIntArray( 282, 280, 283 ), PoolIntArray( 286, 285, 284 ), PoolIntArray( 290, 289, 287 ), PoolIntArray( 287, 289, 288 ), PoolIntArray( 294, 297, 295 ), PoolIntArray( 295, 297, 296 ), PoolIntArray( 295, 296, 291 ), PoolIntArray( 291, 296, 292 ), PoolIntArray( 292, 296, 293 ), PoolIntArray( 298, 302, 299 ), PoolIntArray( 299, 302, 301 ), PoolIntArray( 299, 301, 300 ), PoolIntArray( 305, 304, 303 ), PoolIntArray( 309, 311, 310 ), PoolIntArray( 310, 311, 306 ), PoolIntArray( 306, 311, 307 ), PoolIntArray( 307, 311, 308 ), PoolIntArray( 308, 311, 309 ), PoolIntArray( 313, 312, 314 ), PoolIntArray( 314, 312, 315 ), PoolIntArray( 318, 317, 316 ), PoolIntArray( 320, 319, 321 ), PoolIntArray( 321, 319, 322 ), PoolIntArray( 324, 323, 325 ), PoolIntArray( 325, 323, 326 ), PoolIntArray( 329, 328, 327 ), PoolIntArray( 333, 332, 330 ), PoolIntArray( 330, 332, 331 ), PoolIntArray( 334, 341, 335 ), PoolIntArray( 335, 341, 336 ), PoolIntArray( 336, 341, 342 ), PoolIntArray( 342, 341, 340 ), PoolIntArray( 342, 340, 343 ), PoolIntArray( 343, 340, 339 ), PoolIntArray( 343, 339, 338 ), PoolIntArray( 343, 338, 337 ), PoolIntArray( 346, 345, 344 ), PoolIntArray( 349, 348, 347 ), PoolIntArray( 353, 352, 350 ), PoolIntArray( 350, 352, 351 ), PoolIntArray( 356, 355, 354 ), PoolIntArray( 359, 358, 357 ), PoolIntArray( 361, 360, 362 ), PoolIntArray( 362, 360, 363 ), PoolIntArray( 366, 365, 364 ), PoolIntArray( 370, 376, 371 ), PoolIntArray( 371, 376, 372 ), PoolIntArray( 372, 376, 375 ), PoolIntArray( 372, 375, 373 ), PoolIntArray( 373, 375, 374 ), PoolIntArray( 373, 374, 367 ), PoolIntArray( 367, 374, 369 ), PoolIntArray( 367, 369, 368 ), PoolIntArray( 386, 387, 381 ), PoolIntArray( 381, 387, 382 ), PoolIntArray( 382, 384, 383 ), PoolIntArray( 383, 378, 377 ), PoolIntArray( 378, 383, 379 ), PoolIntArray( 379, 383, 384 ), PoolIntArray( 384, 388, 385 ), PoolIntArray( 385, 386, 380 ), PoolIntArray( 386, 385, 387 ), PoolIntArray( 387, 388, 382 ), PoolIntArray( 382, 388, 384 ), PoolIntArray( 388, 387, 385 ), PoolIntArray( 392, 391, 389 ), PoolIntArray( 389, 391, 390 ), PoolIntArray( 397, 396, 393 ), PoolIntArray( 393, 396, 395 ), PoolIntArray( 393, 395, 394 ), PoolIntArray( 401, 400, 398 ), PoolIntArray( 398, 400, 399 ), PoolIntArray( 404, 403, 402 ), PoolIntArray( 407, 406, 405 ), PoolIntArray( 409, 408, 410 ), PoolIntArray( 410, 408, 411 ), PoolIntArray( 413, 412, 414 ), PoolIntArray( 414, 412, 415 ), PoolIntArray( 418, 417, 419 ), PoolIntArray( 419, 417, 416 ), PoolIntArray( 419, 416, 420 ), PoolIntArray( 422, 421, 423 ), PoolIntArray( 423, 421, 424 ), PoolIntArray( 427, 426, 425 ), PoolIntArray( 432, 448, 433 ), PoolIntArray( 433, 437, 428 ), PoolIntArray( 428, 442, 429 ), PoolIntArray( 429, 442, 434 ), PoolIntArray( 434, 442, 430 ), PoolIntArray( 430, 442, 435 ), PoolIntArray( 435, 445, 436 ), PoolIntArray( 436, 438, 431 ), PoolIntArray( 431, 449, 432 ), PoolIntArray( 448, 437, 433 ), PoolIntArray( 432, 449, 448 ), PoolIntArray( 437, 442, 428 ), PoolIntArray( 442, 443, 435 ), PoolIntArray( 445, 447, 436 ), PoolIntArray( 435, 443, 445 ), PoolIntArray( 438, 449, 431 ), PoolIntArray( 436, 447, 438 ), PoolIntArray( 448, 440, 437 ), PoolIntArray( 449, 440, 448 ), PoolIntArray( 437, 441, 442 ), PoolIntArray( 442, 441, 443 ), PoolIntArray( 445, 446, 447 ), PoolIntArray( 443, 444, 445 ), PoolIntArray( 438, 440, 449 ), PoolIntArray( 447, 446, 438 ), PoolIntArray( 440, 441, 437 ), PoolIntArray( 441, 444, 443 ), PoolIntArray( 445, 444, 446 ), PoolIntArray( 438, 439, 440 ), PoolIntArray( 446, 439, 438 ), PoolIntArray( 440, 439, 441 ), PoolIntArray( 441, 439, 444 ), PoolIntArray( 444, 439, 446 ), PoolIntArray( 454, 456, 455 ), PoolIntArray( 455, 457, 450 ), PoolIntArray( 450, 452, 451 ), PoolIntArray( 452, 457, 453 ), PoolIntArray( 453, 457, 456 ), PoolIntArray( 456, 457, 455 ), PoolIntArray( 457, 452, 450 ), PoolIntArray( 460, 459, 458 ), PoolIntArray( 463, 462, 461 ), PoolIntArray( 466, 465, 464 ), PoolIntArray( 468, 467, 469 ), PoolIntArray( 469, 467, 470 ), PoolIntArray( 473, 472, 471 ), PoolIntArray( 474, 476, 475 ), PoolIntArray( 479, 478, 482 ), PoolIntArray( 482, 478, 477 ), PoolIntArray( 482, 477, 480 ), PoolIntArray( 480, 477, 481 ), PoolIntArray( 484, 483, 486 ), PoolIntArray( 486, 483, 485 ), PoolIntArray( 487, 489, 490 ), PoolIntArray( 490, 489, 488 ), PoolIntArray( 495, 494, 491 ), PoolIntArray( 491, 494, 493 ), PoolIntArray( 491, 493, 492 ), PoolIntArray( 498, 497, 496 ), PoolIntArray( 501, 506, 502 ), PoolIntArray( 502, 506, 503 ), PoolIntArray( 503, 506, 499 ), PoolIntArray( 499, 507, 500 ), PoolIntArray( 500, 508, 504 ), PoolIntArray( 504, 505, 501 ), PoolIntArray( 501, 505, 506 ), PoolIntArray( 506, 507, 499 ), PoolIntArray( 507, 508, 500 ), PoolIntArray( 508, 505, 504 ), PoolIntArray( 505, 508, 506 ), PoolIntArray( 506, 508, 507 ), PoolIntArray( 511, 514, 512 ), PoolIntArray( 512, 514, 509 ), PoolIntArray( 509, 514, 513 ), PoolIntArray( 513, 515, 510 ), PoolIntArray( 510, 515, 511 ), PoolIntArray( 511, 515, 514 ), PoolIntArray( 514, 515, 513 ) ] +vertices = PoolVector3Array( -6.71966, 2.08805, -14.1154, -5.71966, 2.08805, -13.6154, -5.46966, 2.08805, -14.1154, -6.96966, 1.58805, -15.1154, -8.46966, 0.588047, -15.1154, -8.46966, 0.588047, -14.6154, -6.96966, 1.58805, -15.1154, -7.46966, 0.588047, -16.8654, -4.71966, -0.411953, -20.3654, -5.46966, 0.588047, -18.3654, -5.46966, 2.08805, -14.1154, 2.53034, 2.33805, -14.1154, 2.53034, -0.161953, -22.1154, -0.219656, -0.161953, -22.3654, -1.34466, 0.088047, -21.8654, -0.4895, 1.33805, -15.8476, -3.45952, 1.83805, -15.8695, -1.95461, 0.588047, -18.8464, -0.219656, -0.161953, -22.3654, -2.46966, -0.411953, -22.6154, -4.71966, -0.411953, -20.3654, -1.34466, 0.088047, -21.8654, -4.71966, -0.411953, -20.3654, -5.46966, -0.161953, -19.3654, -5.46966, 0.588047, -18.3654, -0.219656, -0.161953, -22.3654, -1.71966, -0.911953, -25.3654, -2.46966, -0.411953, -22.6154, -7.46966, 0.588047, -16.8654, -6.96966, 1.58805, -15.1154, -5.46966, 2.08805, -14.1154, -5.46966, 0.588047, -18.3654, 8.03034, -0.161953, -18.6154, 9.53034, -0.911953, -18.6154, 8.03034, -0.161953, -18.8654, 5.28034, 2.08805, -14.1154, 5.53034, 2.08805, -13.6154, 8.78034, 0.838047, -16.8654, 8.03034, 0.838047, -17.3654, 5.28034, 2.08805, -14.1154, 8.03034, 0.838047, -17.3654, 8.03034, -0.161953, -18.6154, 6.03034, -0.411953, -23.1154, 2.53034, -0.161953, -22.1154, 2.53034, 2.33805, -14.1154, 5.51542, 1.08805, -17.3745, 5.52537, -0.161953, -20.3684, 4.04036, -0.161953, -20.3794, 4.03041, 1.33805, -17.3854, 8.03034, -0.161953, -18.6154, 8.03034, -0.161953, -18.8654, 6.03034, -0.411953, -23.1154, 12.7803, 0.588047, -14.6154, 13.5303, 0.088047, -14.8654, 13.7803, -0.411953, -15.3654, 12.0303, -0.161953, -16.3654, 11.7803, 0.588047, -15.3654, 20.2803, -0.161953, -2.61539, 20.0303, -0.161953, -2.86539, 19.0303, 0.588047, -2.86539, 19.0303, 0.838047, -0.865385, 20.0303, -0.161953, -1.11539, 12.5303, 1.08805, 11.6346, 13.5303, 0.588047, 11.8846, 13.5303, 1.58805, 10.3846, 12.7803, 1.58805, 10.3846, 18.0303, 0.838047, -5.36539, 16.7803, 0.838047, -8.36539, 15.0303, 1.08805, -11.1154, 12.7803, 1.58805, 10.3846, 13.5303, 1.58805, 10.3846, 14.0303, 1.58805, 9.88461, 14.0303, 1.58805, 9.88461, 15.7803, 1.08805, 9.38461, 16.7803, 1.08805, 8.13461, 12.7803, 1.58805, 10.3846, 14.0303, 1.58805, 9.88461, 16.7803, 1.08805, 8.13461, 10.2803, 2.83805, 5.63461, 15.4803, 1.58805, 7.63461, 12.7803, 0.838047, -13.8654, 12.7803, 0.588047, -14.6154, 11.7803, 0.588047, -15.3654, 10.7803, 0.838047, -15.3654, 18.7803, 0.838047, 2.38461, 19.2803, 0.588047, 1.88461, 19.0303, 0.838047, -0.865385, 8.03034, 3.08805, 3.38461, 8.78034, 3.08805, 3.38461, 18.7803, 0.838047, 2.38461, 18.0303, 0.838047, -5.36539, 15.0303, 1.08805, -11.1154, 5.53034, 3.58805, -8.86539, 5.80812, 4.08805, -7.50427, 6.64145, 4.33805, -3.42094, 7.47479, 3.08805, 0.662394, 15.9232, 1.83805, 2.67033, 18.4053, 1.08805, -1.49039, 9.60177, 2.83805, -9.82967, 10.0455, 3.83805, -5.38657, 11.5507, 2.58805, -2.34373, 8.53065, 4.08805, -2.36571, 10.0257, 3.33805, -0.888798, 13.0055, 2.08805, -6.88051, 11.5104, 3.08805, -8.35742, 14.5506, 2.08805, -5.3536, 13.0155, 2.33805, -5.36459, 10.0208, 2.83805, 0.638111, 19.0303, 0.588047, -3.61539, 18.7803, 0.588047, -5.11539, 18.0303, 0.838047, -5.36539, 19.0303, 0.588047, -2.86539, 18.2803, 0.588047, -6.86539, 17.7803, 0.588047, -7.86539, 16.7803, 0.838047, -8.36539, 18.0303, 0.838047, -5.36539, 15.0303, 1.08805, -11.1154, 15.0303, 0.838047, -11.6154, 14.0303, 0.588047, -13.1154, 12.7803, 0.838047, -13.8654, 16.7803, 0.838047, -8.36539, 16.7803, 0.838047, -9.11539, 16.0303, 0.588047, -10.6154, 15.0303, 1.08805, -11.1154, 16.7803, 1.08805, 8.13461, 18.0303, 0.838047, 5.38461, 18.7803, 0.838047, 2.38461, 8.78034, 3.08805, 3.38461, 10.2803, 2.83805, 5.63461, 15.4803, 1.58805, 7.63461, 15.9232, 1.83805, 2.67033, 10.7803, 0.838047, -15.3654, 10.7803, 0.338047, -16.6154, 8.78034, 0.838047, -16.8654, 5.53034, 2.08805, -13.6154, 19.0303, 0.838047, -0.865385, 19.0303, 0.588047, -2.86539, 18.0303, 0.838047, -5.36539, 18.7803, 0.838047, 2.38461, 18.4053, 1.08805, -1.49039, 16.7803, 1.08805, 8.13461, 18.0303, 0.338047, 7.63461, 18.0303, 0.838047, 5.38461, 18.0303, 0.838047, 5.38461, 18.7803, 0.588047, 4.88461, 18.7803, 0.838047, 2.38461, 15.0303, 1.08805, -11.1154, 12.7803, 0.838047, -13.8654, 10.7803, 0.838047, -15.3654, 5.53034, 2.08805, -13.6154, 5.53034, 3.58805, -8.86539, 9.60177, 2.83805, -9.82967, 5.53034, 2.83805, -10.0529, 20.0303, -0.161953, -3.61539, 20.0303, -0.161953, -2.86539, 20.2803, -0.161953, -2.61539, 22.0303, -0.911953, -4.61539, 18.2803, 0.088047, -8.11539, 17.7803, 0.588047, -7.86539, 18.2803, 0.588047, -6.86539, 19.2803, -0.161953, -6.61539, 13.7803, -0.411953, -15.3654, 13.5303, 0.088047, -14.8654, 14.5303, -0.161953, -14.1154, 16.2803, -0.911953, -14.6154, 14.0303, 0.588047, -13.1154, 15.0303, 0.838047, -11.6154, 15.2803, 0.588047, -12.1154, 14.5303, 0.338047, -13.3654, 16.2803, -0.911953, -14.6154, 16.0303, 0.088047, -12.1154, 16.5303, -0.161953, -11.6154, 16.5303, 0.338047, -10.8654, 16.0303, 0.588047, -10.6154, 16.7803, 0.838047, -9.11539, 19.2803, 0.088047, -5.36539, 18.7803, 0.588047, -5.11539, 19.0303, 0.588047, -3.61539, 20.0303, -0.161953, -3.61539, 16.5303, -0.161953, -11.6154, 17.7803, -0.161953, -9.36539, 18.2803, -0.161953, -8.86539, 20.0303, -0.911953, -10.1154, 16.2803, -0.911953, -14.6154, 18.2803, -0.161953, -8.86539, 18.2803, 0.088047, -8.11539, 19.2803, -0.161953, -6.61539, 22.0303, -0.911953, -5.36539, 20.0303, -0.911953, -10.1154, 20.0303, -0.161953, -3.61539, 22.0303, -0.911953, -4.61539, 22.0303, -0.911953, -5.36539, 19.2803, -0.161953, -6.61539, 19.2803, 0.088047, -5.36539, 14.5303, 0.338047, -13.3654, 15.2803, 0.588047, -12.1154, 16.0303, 0.088047, -12.1154, 16.2803, -0.911953, -14.6154, 14.5303, -0.161953, -14.1154, 16.5303, 0.338047, -10.8654, 16.7803, 0.838047, -9.11539, 17.7803, -0.161953, -9.36539, 16.5303, -0.161953, -11.6154, -29.9697, -1.66195, -15.1154, -28.7197, -0.661953, -6.86539, -28.4697, -1.66195, -14.3654, -29.9697, -1.66195, -15.1154, -28.4697, -1.66195, -14.3654, -26.9697, -1.91195, -14.6154, -20.2197, 0.838047, -4.11539, -20.2197, 0.588047, -4.61539, -21.2197, 0.088047, -4.86539, -24.2197, -0.411953, -4.11539, -22.8863, -0.411953, -4.11539, -22.2197, -0.411953, -4.61539, -11.4697, -0.161953, -11.3654, -10.4697, -0.161953, -11.6154, -10.4697, -0.411953, -12.3654, -12.2197, -0.911953, -12.8654, -20.9697, -0.661953, -5.86539, -17.7197, -1.16195, -7.36539, -15.9697, -0.911953, -9.11539, -17.2197, -1.41195, -8.30289, -11.4697, 0.088047, -10.8654, -11.4697, -0.161953, -11.3654, -12.2197, -0.911953, -12.8654, -14.7197, -2.16195, -14.6154, -17.7197, -2.41195, -13.6154, -15.9697, -0.911953, -9.11539, -20.9697, -0.661953, -5.86539, -15.9697, -0.911953, -9.11539, -17.7197, -2.41195, -13.6154, -24.2197, -2.16195, -14.3654, -24.2197, -0.411953, -4.11539, -17.2197, -1.41195, -8.30289, -19.0197, -2.66195, -13.7654, -24.2197, -0.411953, -4.11539, -21.2197, 0.088047, -4.86539, -20.9697, -0.661953, -5.86539, -22.2197, -0.411953, -4.61539, -20.2197, 0.588047, -4.61539, -20.2197, 0.838047, -4.11539, -19.4697, 1.33805, -4.11539, -16.2197, 1.58805, -5.36539, -21.9697, 0.338047, 2.63461, -21.4697, 0.588047, 3.38461, -20.9697, 0.588047, 3.38461, -19.9697, 1.08805, 3.13461, -20.2197, 1.33805, 0.134615, -17.7197, 1.33805, 4.13461, -16.9697, 0.588047, 5.63461, -16.7197, 0.338047, 5.63461, -16.9697, 1.58805, 3.38461, -11.7197, 2.08805, -8.61539, -15.2197, 1.58805, -8.11539, -16.2197, 1.58805, -5.36539, -3.71966, 3.58805, -7.86539, -5.71966, 3.08805, -8.11539, -9.27521, 2.83805, -6.75427, -6.49743, 2.83805, -7.30983, -16.2197, 1.58805, -5.36539, -14.4697, 2.08805, 4.88461, -13.4697, 1.83805, 8.63461, 1.03034, 2.83805, 8.63461, 1.03034, 2.58805, 7.38461, -3.71966, 3.58805, -7.86539, -6.49743, 2.83805, -7.30983, -9.27521, 2.83805, -6.75427, -15.4697, 2.33805, -0.972528, -10.5697, 1.83805, 8.63461, -3.31966, 3.08805, 8.63461, 0.166708, 3.33805, 4.61189, -1.56056, 3.33805, -0.933567, -2.85602, 3.83805, -5.09266, -9.46456, 3.83805, -3.85249, -0.493813, 2.33805, 6.62871, -1.97882, 2.58805, 6.61772, -6.48386, 3.08805, 6.63476, -1.98902, 3.33805, 3.64193, -3.49393, 2.58805, 5.11884, -4.95904, 3.33805, 3.61996, -4.95952, 3.33805, -3.86953, -7.98926, 3.08805, 0.622189, -9.48398, 2.83805, 5.12489, -7.94945, 3.83805, -2.3536, -10.9889, 2.08805, 6.6518, -4.95461, 3.58805, -5.34644, -10.9496, 3.08805, -3.86348, -10.9695, 3.33805, -2.37558, -13.9696, 2.58805, -3.88545, -9.71966, 2.33805, -9.86539, -10.4697, 2.33805, -9.86539, -11.7197, 2.08805, -8.61539, -5.71966, 3.08805, -8.11539, -19.9697, 1.08805, 3.13461, -17.7197, 1.33805, 4.13461, -16.9697, 1.58805, 3.38461, -19.7197, 1.58805, -3.11539, -20.2197, 1.58805, -0.615385, -20.2197, 1.33805, 0.134615, -20.2197, 1.33805, 0.134615, -27.9697, -0.911953, 0.134615, -27.9697, -0.911953, 0.634615, -23.2197, -0.411953, 2.88461, -21.9697, 0.338047, 2.63461, -24.0947, -0.411953, 0.134615, -19.9697, 1.08805, 3.13461, -16.9697, 1.58805, 3.38461, -15.9697, 2.08805, 3.13461, -16.2197, 1.58805, -5.36539, -19.4697, 1.33805, -4.11539, -19.7197, 1.58805, -3.11539, -20.2197, 1.33805, 0.134615, -19.9697, 1.08805, 3.13461, -15.9697, 2.08805, 3.13461, -16.0947, 2.33805, -1.11539, -18.4896, 1.83805, 0.642576, -18.4696, 1.33805, 2.11455, -5.71966, 2.08805, -13.6154, -6.71966, 2.08805, -14.1154, -9.71966, 2.33805, -9.86539, -5.71966, 3.08805, -8.11539, -5.71966, 3.08805, -10.8654, -16.2197, 1.58805, -5.36539, -15.9697, 2.08805, 3.13461, -14.4697, 2.08805, 4.88461, -15.4697, 2.33805, -0.972528, -16.0947, 2.33805, -1.11539, -27.4697, 1.58805, -6.11539, -28.2197, 1.58805, -5.86539, -28.2197, 1.58805, -3.61539, -27.4697, 1.58805, -3.36539, -25.2197, 1.58805, -3.36539, -25.2197, 1.58805, -13.6154, -27.4697, 1.58805, -13.6154, -27.4697, 1.58805, -6.11539, -25.2197, 1.58805, -3.36539, -27.4697, 1.58805, -0.865385, -20.2197, 1.58805, -0.615385, -19.7197, 1.58805, -3.11539, -25.2197, 1.58805, -3.36539, -27.4697, 1.58805, -3.36539, -3.46966, 3.83805, -8.36539, -0.469656, 3.83805, -8.36539, -0.469656, 3.83805, -8.86539, -3.46966, 3.83805, -8.86539, -4.71966, 3.83805, -13.1154, -3.46966, 3.83805, -8.86539, -0.469656, 3.83805, -8.86539, -4.71966, 3.83805, -13.1154, -4.71966, 3.83805, -8.86539, -3.46966, 3.83805, -8.86539, 4.03034, 3.83805, -8.61539, 4.53034, 3.83805, -8.86539, 4.53034, 3.83805, -13.1154, -4.71966, 3.83805, -13.1154, -0.469656, 3.83805, -8.86539, 4.53034, 3.83805, -8.86539, 4.03034, 3.83805, -8.61539, 3.78034, 3.58805, -7.86539, 6.28034, 3.08805, 4.63461, 8.03034, 3.08805, 3.38461, 5.53034, 3.58805, -8.86539, 4.3359, 4.33805, -5.08761, 5.44701, 3.33805, 0.467949, 7.47479, 3.08805, 0.662394, 6.64145, 4.33805, -3.42094, 5.80812, 4.08805, -7.50427, 5.03034, 3.08805, 5.63461, 6.28034, 3.08805, 5.13461, 6.28034, 3.08805, 4.63461, 3.78034, 3.58805, -7.86539, 4.03034, 4.33805, -5.16538, 4.40534, 3.33805, -1.11539, 5.44701, 3.33805, 0.467949, 4.3359, 4.33805, -5.08761, -27.2197, -0.411953, -6.86539, -25.4697, -0.411953, -6.86539, -25.4697, -0.411953, -7.86539, -27.2197, -0.411953, -8.61539, -0.469656, 3.33805, -7.86539, -0.469656, 3.83805, -8.36539, -3.46966, 3.83805, -8.36539, -0.469656, 3.33805, -7.86539, -3.46966, 3.83805, -8.36539, -3.71966, 3.58805, -7.86539, 1.03034, 2.58805, 7.38461, 1.28034, 2.83805, 6.88461, 0.930344, 3.33805, 3.93461, -2.85602, 3.83805, -5.09266, -1.56056, 3.33805, -0.933567, 0.166708, 3.33805, 4.61189, 1.28034, 2.83805, 6.88461, 2.78034, 2.83805, 6.88461, 5.03034, 3.08805, 5.63461, 3.78034, 3.58805, -7.86539, -0.469656, 3.33805, -7.86539, 0.930344, 3.33805, 3.93461, 4.40534, 3.33805, -1.11539, 4.03034, 4.33805, -5.16538, 2.36368, 3.08805, -7.86539, 1.00534, 3.08805, -6.89038, 2.53041, 3.58805, -3.88545, -27.2197, -0.411953, -5.61539, -27.2197, -0.411953, -4.11539, -26.2197, -0.411953, -4.86539, -26.2197, -0.411953, -5.61539, -24.2197, -0.411953, -2.86539, -24.2197, -0.411953, -2.11539, -23.4697, -0.411953, -2.61539, -26.9697, -0.411953, -2.61539, -26.2197, -0.411953, -1.86539, -26.4697, -0.411953, -2.61539, -13.7197, 1.58805, 9.63461, -14.4697, 1.08805, 9.63461, -13.9697, 1.58805, 10.3846, -20.9697, 0.338047, 4.13461, -20.9697, 0.588047, 3.38461, -21.4697, 0.588047, 3.38461, -16.7197, 0.338047, 5.63461, -16.9697, 0.588047, 5.63461, -16.7197, -0.411953, 7.13461, -15.9697, -0.161953, 7.88461, -13.4697, 1.83805, 8.63461, -13.7197, 1.58805, 9.63461, -13.7197, 0.838047, 13.3846, -12.4697, 0.088047, 17.1346, -15.9697, -0.161953, 7.88461, -16.7197, -0.411953, 7.13461, -17.7197, -0.911953, 7.38461, -19.7197, -1.41195, 8.63461, -16.9697, -0.161953, 13.1346, -16.2197, -0.911953, 11.6346, -18.3447, -1.41195, 10.8846, -16.9596, -1.16195, 9.6206, 8.78034, 0.838047, 16.1346, 10.5303, 0.338047, 15.3846, 10.2803, 1.08805, 14.3846, -0.219656, 0.838047, 18.8846, 1.78034, 0.588047, 19.3846, 2.28034, 0.838047, 18.8846, 6.03034, 0.838047, 17.8846, 7.78034, 0.588047, 17.8846, 8.78034, 0.838047, 16.1346, 5.78034, 1.83805, 15.3846, 10.2803, 1.08805, 14.3846, 13.5303, 0.588047, 11.8846, 12.5303, 1.08805, 11.6346, -13.7197, 1.58805, 9.63461, -13.9697, 1.58805, 10.3846, -13.7197, 0.838047, 13.3846, 2.28034, 0.838047, 18.8846, 4.78034, 0.588047, 18.8846, 6.03034, 0.838047, 17.8846, -6.71966, 0.088047, 19.6346, -0.969656, 0.588047, 19.3846, -0.219656, 0.838047, 18.8846, 10.2803, 1.08805, 14.3846, 12.5303, 1.08805, 11.6346, 5.78034, 1.83805, 15.3846, 8.78034, 0.838047, 16.1346, 9.15534, 1.58805, 13.5096, -0.219656, 0.838047, 18.8846, 4.53034, 1.83805, 15.3846, 1.03034, 2.83805, 8.63461, -13.4697, 1.83805, 8.63461, -12.4697, 0.088047, 17.1346, -6.71966, 0.088047, 19.6346, 2.19701, 2.83805, 10.8846, -3.31966, 3.08805, 8.63461, -10.5697, 1.83805, 8.63461, -6.49417, 1.58805, 15.6491, -10.9795, 1.83805, 11.1585, -7.95952, 1.58805, 11.1305, -6.4943, 1.33805, 14.1392, -1.98926, 2.33805, 14.1222, -9.46432, 1.58805, 14.1173, -4.9895, 2.58805, 11.1524, -9.47463, 2.08805, 9.63159, -4.96959, 2.83805, 9.61455, -10.9492, 0.588047, 15.6161, -10.9493, 1.33805, 14.1563, -13.7197, 0.838047, 13.3846, -14.7197, 0.338047, 13.3846, -12.4697, 0.088047, 17.1346, 6.03034, 0.838047, 17.8846, 5.78034, 1.83805, 15.3846, 4.53034, 1.83805, 15.3846, -0.219656, 0.838047, 18.8846, 2.28034, 0.838047, 18.8846, -16.9697, -0.161953, 13.1346, -12.4697, 0.088047, 17.1346, -14.7197, 0.338047, 13.3846, -16.2197, -0.911953, 11.6346, -20.9697, 0.338047, 4.13461, -21.4697, 0.588047, 3.38461, -19.7197, -1.41195, 8.63461, -20.5947, -0.161953, 6.00961, -17.7197, -0.911953, 7.38461, -20.9697, 0.338047, 4.13461, -19.7197, -1.41195, 8.63461, -18.5322, -0.911953, 6.57211, 1.53034, 6.33805, 8.13461, 1.53034, 6.83805, 8.88461, 4.78034, 6.58805, 14.6346, 12.0303, 6.33805, 10.8846, 8.78034, 6.58805, 4.38461, 3.48034, 9.08805, 12.3346, 5.98868, 6.58805, 14.0096, 10.7303, 9.08805, 8.28462, 7.03544, 8.83805, 9.64751, 8.52045, 8.83805, 9.6585, 8.53041, 8.58805, 8.11455, 5.28034, 2.08805, 13.6346, 11.0303, 1.83805, 10.6346, 8.53034, 2.83805, 5.63461, 2.53034, 2.83805, 8.63461, 5.51038, 2.08805, 9.64258, 8.53041, 2.33805, 9.61455, 7.05043, 1.83805, 11.1365 ) +polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 12, 17, 13 ), PoolIntArray( 13, 17, 14 ), PoolIntArray( 14, 17, 8 ), PoolIntArray( 8, 17, 9 ), PoolIntArray( 9, 16, 10 ), PoolIntArray( 10, 15, 11 ), PoolIntArray( 11, 15, 12 ), PoolIntArray( 12, 15, 17 ), PoolIntArray( 17, 16, 9 ), PoolIntArray( 16, 15, 10 ), PoolIntArray( 15, 16, 17 ), PoolIntArray( 18, 21, 19 ), PoolIntArray( 19, 21, 20 ), PoolIntArray( 24, 23, 22 ), PoolIntArray( 27, 26, 25 ), PoolIntArray( 29, 28, 30 ), PoolIntArray( 30, 28, 31 ), PoolIntArray( 34, 33, 32 ), PoolIntArray( 35, 38, 36 ), PoolIntArray( 36, 38, 37 ), PoolIntArray( 43, 48, 44 ), PoolIntArray( 44, 48, 39 ), PoolIntArray( 39, 45, 40 ), PoolIntArray( 40, 45, 41 ), PoolIntArray( 41, 46, 42 ), PoolIntArray( 42, 47, 43 ), PoolIntArray( 43, 47, 48 ), PoolIntArray( 48, 45, 39 ), PoolIntArray( 45, 46, 41 ), PoolIntArray( 46, 47, 42 ), PoolIntArray( 47, 46, 48 ), PoolIntArray( 48, 46, 45 ), PoolIntArray( 51, 50, 49 ), PoolIntArray( 53, 52, 54 ), PoolIntArray( 54, 52, 56 ), PoolIntArray( 54, 56, 55 ), PoolIntArray( 58, 57, 59 ), PoolIntArray( 59, 57, 61 ), PoolIntArray( 59, 61, 60 ), PoolIntArray( 65, 64, 62 ), PoolIntArray( 62, 64, 63 ), PoolIntArray( 68, 67, 66 ), PoolIntArray( 71, 70, 69 ), PoolIntArray( 74, 73, 72 ), PoolIntArray( 77, 76, 79 ), PoolIntArray( 79, 76, 75 ), PoolIntArray( 79, 75, 78 ), PoolIntArray( 81, 80, 82 ), PoolIntArray( 82, 80, 83 ), PoolIntArray( 86, 85, 84 ), PoolIntArray( 98, 93, 92 ), PoolIntArray( 93, 99, 94 ), PoolIntArray( 94, 101, 95 ), PoolIntArray( 95, 88, 87 ), PoolIntArray( 88, 107, 96 ), PoolIntArray( 96, 97, 89 ), PoolIntArray( 97, 105, 90 ), PoolIntArray( 90, 105, 91 ), PoolIntArray( 91, 104, 98 ), PoolIntArray( 98, 99, 93 ), PoolIntArray( 99, 101, 94 ), PoolIntArray( 101, 102, 95 ), PoolIntArray( 95, 107, 88 ), PoolIntArray( 107, 100, 96 ), PoolIntArray( 96, 100, 97 ), PoolIntArray( 97, 100, 105 ), PoolIntArray( 105, 103, 91 ), PoolIntArray( 104, 99, 98 ), PoolIntArray( 91, 103, 104 ), PoolIntArray( 99, 100, 101 ), PoolIntArray( 102, 107, 95 ), PoolIntArray( 101, 100, 102 ), PoolIntArray( 107, 102, 100 ), PoolIntArray( 100, 106, 105 ), PoolIntArray( 105, 106, 103 ), PoolIntArray( 104, 103, 99 ), PoolIntArray( 99, 106, 100 ), PoolIntArray( 106, 99, 103 ), PoolIntArray( 109, 108, 110 ), PoolIntArray( 110, 108, 111 ), PoolIntArray( 113, 112, 114 ), PoolIntArray( 114, 112, 115 ), PoolIntArray( 117, 116, 118 ), PoolIntArray( 118, 116, 119 ), PoolIntArray( 121, 120, 122 ), PoolIntArray( 122, 120, 123 ), PoolIntArray( 124, 129, 125 ), PoolIntArray( 125, 129, 126 ), PoolIntArray( 126, 129, 130 ), PoolIntArray( 130, 129, 128 ), PoolIntArray( 130, 128, 127 ), PoolIntArray( 132, 131, 133 ), PoolIntArray( 133, 131, 134 ), PoolIntArray( 138, 139, 135 ), PoolIntArray( 135, 139, 136 ), PoolIntArray( 136, 139, 137 ), PoolIntArray( 142, 141, 140 ), PoolIntArray( 145, 144, 143 ), PoolIntArray( 150, 152, 151 ), PoolIntArray( 151, 152, 149 ), PoolIntArray( 151, 149, 148 ), PoolIntArray( 151, 148, 147 ), PoolIntArray( 151, 147, 146 ), PoolIntArray( 154, 153, 155 ), PoolIntArray( 155, 153, 156 ), PoolIntArray( 158, 157, 159 ), PoolIntArray( 159, 157, 160 ), PoolIntArray( 162, 161, 163 ), PoolIntArray( 163, 161, 164 ), PoolIntArray( 168, 167, 165 ), PoolIntArray( 165, 167, 166 ), PoolIntArray( 169, 171, 170 ), PoolIntArray( 172, 174, 173 ), PoolIntArray( 176, 175, 177 ), PoolIntArray( 177, 175, 178 ), PoolIntArray( 181, 180, 182 ), PoolIntArray( 182, 180, 179 ), PoolIntArray( 182, 179, 183 ), PoolIntArray( 185, 184, 186 ), PoolIntArray( 186, 184, 188 ), PoolIntArray( 186, 188, 187 ), PoolIntArray( 190, 189, 191 ), PoolIntArray( 191, 189, 193 ), PoolIntArray( 191, 193, 192 ), PoolIntArray( 195, 194, 196 ), PoolIntArray( 196, 194, 198 ), PoolIntArray( 196, 198, 197 ), PoolIntArray( 200, 199, 201 ), PoolIntArray( 201, 199, 202 ), PoolIntArray( 205, 204, 203 ), PoolIntArray( 208, 207, 206 ), PoolIntArray( 210, 209, 211 ), PoolIntArray( 211, 209, 214 ), PoolIntArray( 214, 209, 213 ), PoolIntArray( 214, 213, 212 ), PoolIntArray( 216, 215, 217 ), PoolIntArray( 217, 215, 218 ), PoolIntArray( 221, 220, 222 ), PoolIntArray( 222, 220, 219 ), PoolIntArray( 224, 223, 225 ), PoolIntArray( 225, 223, 226 ), PoolIntArray( 226, 223, 227 ), PoolIntArray( 227, 223, 228 ), PoolIntArray( 230, 234, 231 ), PoolIntArray( 231, 234, 235 ), PoolIntArray( 235, 234, 229 ), PoolIntArray( 235, 229, 232 ), PoolIntArray( 232, 229, 233 ), PoolIntArray( 237, 239, 238 ), PoolIntArray( 238, 239, 236 ), PoolIntArray( 241, 240, 242 ), PoolIntArray( 242, 240, 243 ), PoolIntArray( 245, 244, 246 ), PoolIntArray( 246, 244, 247 ), PoolIntArray( 247, 244, 248 ), PoolIntArray( 250, 249, 251 ), PoolIntArray( 251, 249, 252 ), PoolIntArray( 256, 259, 257 ), PoolIntArray( 257, 259, 258 ), PoolIntArray( 257, 258, 253 ), PoolIntArray( 253, 258, 254 ), PoolIntArray( 254, 258, 255 ), PoolIntArray( 273, 286, 265 ), PoolIntArray( 265, 286, 266 ), PoolIntArray( 266, 274, 267 ), PoolIntArray( 267, 289, 260 ), PoolIntArray( 260, 289, 268 ), PoolIntArray( 268, 288, 261 ), PoolIntArray( 261, 285, 262 ), PoolIntArray( 262, 285, 269 ), PoolIntArray( 269, 277, 270 ), PoolIntArray( 270, 275, 263 ), PoolIntArray( 263, 275, 264 ), PoolIntArray( 264, 275, 271 ), PoolIntArray( 271, 278, 272 ), PoolIntArray( 272, 281, 273 ), PoolIntArray( 273, 281, 286 ), PoolIntArray( 286, 274, 266 ), PoolIntArray( 274, 287, 267 ), PoolIntArray( 267, 287, 289 ), PoolIntArray( 289, 288, 268 ), PoolIntArray( 288, 282, 261 ), PoolIntArray( 261, 283, 285 ), PoolIntArray( 285, 283, 269 ), PoolIntArray( 277, 279, 270 ), PoolIntArray( 269, 283, 277 ), PoolIntArray( 270, 276, 275 ), PoolIntArray( 275, 276, 271 ), PoolIntArray( 278, 280, 272 ), PoolIntArray( 271, 276, 278 ), PoolIntArray( 272, 282, 281 ), PoolIntArray( 281, 274, 286 ), PoolIntArray( 274, 288, 287 ), PoolIntArray( 287, 288, 289 ), PoolIntArray( 282, 283, 261 ), PoolIntArray( 288, 284, 282 ), PoolIntArray( 279, 276, 270 ), PoolIntArray( 277, 280, 279 ), PoolIntArray( 283, 280, 277 ), PoolIntArray( 280, 282, 272 ), PoolIntArray( 278, 279, 280 ), PoolIntArray( 276, 279, 278 ), PoolIntArray( 282, 284, 281 ), PoolIntArray( 281, 284, 274 ), PoolIntArray( 274, 284, 288 ), PoolIntArray( 282, 280, 283 ), PoolIntArray( 291, 290, 292 ), PoolIntArray( 292, 290, 293 ), PoolIntArray( 296, 295, 294 ), PoolIntArray( 299, 298, 297 ), PoolIntArray( 301, 305, 302 ), PoolIntArray( 302, 305, 303 ), PoolIntArray( 303, 305, 304 ), PoolIntArray( 304, 305, 300 ), PoolIntArray( 308, 307, 306 ), PoolIntArray( 313, 317, 314 ), PoolIntArray( 314, 316, 315 ), PoolIntArray( 315, 310, 309 ), PoolIntArray( 310, 315, 311 ), PoolIntArray( 311, 316, 312 ), PoolIntArray( 312, 317, 313 ), PoolIntArray( 317, 316, 314 ), PoolIntArray( 316, 311, 315 ), PoolIntArray( 316, 317, 312 ), PoolIntArray( 318, 322, 319 ), PoolIntArray( 319, 322, 321 ), PoolIntArray( 319, 321, 320 ), PoolIntArray( 323, 326, 327 ), PoolIntArray( 327, 326, 324 ), PoolIntArray( 324, 326, 325 ), PoolIntArray( 329, 328, 330 ), PoolIntArray( 330, 328, 331 ), PoolIntArray( 331, 328, 332 ), PoolIntArray( 334, 333, 335 ), PoolIntArray( 335, 333, 336 ), PoolIntArray( 341, 340, 337 ), PoolIntArray( 337, 340, 338 ), PoolIntArray( 338, 340, 339 ), PoolIntArray( 345, 344, 342 ), PoolIntArray( 342, 344, 343 ), PoolIntArray( 348, 347, 346 ), PoolIntArray( 351, 350, 349 ), PoolIntArray( 353, 352, 354 ), PoolIntArray( 354, 352, 356 ), PoolIntArray( 354, 356, 355 ), PoolIntArray( 358, 357, 359 ), PoolIntArray( 359, 357, 362 ), PoolIntArray( 359, 362, 367 ), PoolIntArray( 359, 367, 363 ), PoolIntArray( 363, 367, 366 ), PoolIntArray( 363, 366, 364 ), PoolIntArray( 364, 366, 365 ), PoolIntArray( 364, 365, 361 ), PoolIntArray( 364, 361, 360 ), PoolIntArray( 369, 368, 370 ), PoolIntArray( 370, 368, 374 ), PoolIntArray( 374, 368, 373 ), PoolIntArray( 374, 373, 375 ), PoolIntArray( 375, 373, 372 ), PoolIntArray( 375, 372, 371 ), PoolIntArray( 377, 376, 378 ), PoolIntArray( 378, 376, 379 ), PoolIntArray( 382, 381, 380 ), PoolIntArray( 386, 391, 387 ), PoolIntArray( 387, 391, 388 ), PoolIntArray( 388, 391, 390 ), PoolIntArray( 388, 390, 389 ), PoolIntArray( 388, 389, 383 ), PoolIntArray( 383, 389, 385 ), PoolIntArray( 383, 385, 384 ), PoolIntArray( 400, 401, 396 ), PoolIntArray( 396, 402, 397 ), PoolIntArray( 397, 393, 392 ), PoolIntArray( 393, 397, 394 ), PoolIntArray( 394, 397, 398 ), PoolIntArray( 398, 402, 399 ), PoolIntArray( 399, 400, 395 ), PoolIntArray( 401, 402, 396 ), PoolIntArray( 400, 399, 401 ), PoolIntArray( 402, 398, 397 ), PoolIntArray( 402, 401, 399 ), PoolIntArray( 406, 405, 403 ), PoolIntArray( 403, 405, 404 ), PoolIntArray( 409, 408, 407 ), PoolIntArray( 412, 411, 410 ), PoolIntArray( 415, 414, 413 ), PoolIntArray( 418, 417, 416 ), PoolIntArray( 420, 419, 421 ), PoolIntArray( 421, 419, 422 ), PoolIntArray( 424, 423, 425 ), PoolIntArray( 425, 423, 426 ), PoolIntArray( 431, 433, 432 ), PoolIntArray( 432, 434, 427 ), PoolIntArray( 427, 429, 428 ), PoolIntArray( 429, 434, 430 ), PoolIntArray( 430, 434, 433 ), PoolIntArray( 433, 434, 432 ), PoolIntArray( 434, 429, 427 ), PoolIntArray( 437, 436, 435 ), PoolIntArray( 440, 439, 438 ), PoolIntArray( 442, 441, 443 ), PoolIntArray( 443, 441, 444 ), PoolIntArray( 447, 446, 445 ), PoolIntArray( 450, 449, 448 ), PoolIntArray( 451, 453, 452 ), PoolIntArray( 456, 455, 454 ), PoolIntArray( 458, 457, 461 ), PoolIntArray( 461, 457, 460 ), PoolIntArray( 461, 460, 459 ), PoolIntArray( 466, 480, 467 ), PoolIntArray( 467, 471, 462 ), PoolIntArray( 462, 475, 463 ), PoolIntArray( 463, 475, 468 ), PoolIntArray( 468, 475, 464 ), PoolIntArray( 464, 475, 469 ), PoolIntArray( 469, 479, 470 ), PoolIntArray( 470, 472, 465 ), PoolIntArray( 465, 481, 466 ), PoolIntArray( 480, 471, 467 ), PoolIntArray( 466, 481, 480 ), PoolIntArray( 471, 475, 462 ), PoolIntArray( 475, 477, 469 ), PoolIntArray( 479, 478, 470 ), PoolIntArray( 469, 477, 479 ), PoolIntArray( 472, 481, 465 ), PoolIntArray( 470, 478, 472 ), PoolIntArray( 480, 476, 471 ), PoolIntArray( 481, 476, 480 ), PoolIntArray( 471, 474, 475 ), PoolIntArray( 475, 474, 477 ), PoolIntArray( 479, 473, 478 ), PoolIntArray( 477, 473, 479 ), PoolIntArray( 472, 476, 481 ), PoolIntArray( 478, 473, 472 ), PoolIntArray( 476, 474, 471 ), PoolIntArray( 474, 473, 477 ), PoolIntArray( 472, 473, 476 ), PoolIntArray( 476, 473, 474 ), PoolIntArray( 484, 483, 482 ), PoolIntArray( 486, 485, 487 ), PoolIntArray( 487, 485, 489 ), PoolIntArray( 487, 489, 488 ), PoolIntArray( 493, 492, 490 ), PoolIntArray( 490, 492, 491 ), PoolIntArray( 495, 494, 497 ), PoolIntArray( 497, 494, 496 ), PoolIntArray( 498, 500, 501 ), PoolIntArray( 501, 500, 499 ), PoolIntArray( 509, 512, 506 ), PoolIntArray( 506, 512, 502 ), PoolIntArray( 502, 510, 503 ), PoolIntArray( 503, 510, 507 ), PoolIntArray( 507, 508, 504 ), PoolIntArray( 508, 511, 505 ), PoolIntArray( 505, 511, 509 ), PoolIntArray( 509, 511, 512 ), PoolIntArray( 512, 510, 502 ), PoolIntArray( 510, 508, 507 ), PoolIntArray( 508, 510, 511 ), PoolIntArray( 511, 510, 512 ), PoolIntArray( 515, 517, 516 ), PoolIntArray( 516, 517, 513 ), PoolIntArray( 513, 519, 514 ), PoolIntArray( 514, 518, 515 ), PoolIntArray( 515, 518, 517 ), PoolIntArray( 517, 519, 513 ), PoolIntArray( 519, 518, 514 ), PoolIntArray( 518, 519, 517 ) ] +filter_walkable_low_height_spans = true [sub_resource type="SpatialMaterial" id=10] albedo_texture = ExtResource( 3 ) @@ -35,12 +38,6 @@ script = ExtResource( 1 ) [node name="Draw" type="ImmediateGeometry" parent="."] -[node name="DirectionalLight" type="DirectionalLight" parent="."] -transform = Transform( 0.162328, 0.903359, 0.396979, 0.342289, -0.428885, 0.836, 0.925467, 0.000175375, -0.378829, 0, 10.8967, 0 ) -shadow_enabled = true -directional_shadow_depth_range = 1 -directional_shadow_max_distance = 8192.0 - [node name="Water" parent="." instance=ExtResource( 7 )] transform = Transform( 10000, 0, 0, 0, 100, 0, 0, 0, 10000, 0, 0, 0 ) @@ -49,7 +46,7 @@ transform = Transform( 10000, 0, 0, 0, 100, 0, 0, 0, 10000, 0, 0, 0 ) [node name="island" parent="WORLDGEO" instance=ExtResource( 6 )] [node name="dock_prop" parent="WORLDGEO" instance=ExtResource( 8 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 0.794522, -23.7914, 4.93151, -6.93803 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 0.794522, -23.7914, 4.93151, -6.78761 ) [node name="house" parent="WORLDGEO" instance=ExtResource( 9 )] transform = Transform( 0.479394, 0.044261, -0.876483, -0.0919361, 0.995765, 2.73991e-09, 0.872771, 0.0805805, 0.481432, 6.69452, -0.752387, 9.33614 ) @@ -57,34 +54,40 @@ transform = Transform( 0.479394, 0.044261, -0.876483, -0.0919361, 0.995765, 2.73 [node name="battery" parent="WORLDGEO" instance=ExtResource( 4 )] [node name="Ladder" parent="WORLDGEO" instance=ExtResource( 12 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.47917, 4.03772, 1.65595 ) +transform = Transform( -4.37114e-08, 0, -1, 0, 5, 0, 1, 0, -4.37114e-08, 27.2981, 0.114466, -0.737169 ) [node name="Ladder2" parent="WORLDGEO" instance=ExtResource( 12 )] -transform = Transform( 1, 0, 0, 0, 6.25774, -0.780005, 0, 7.80005, 0.625774, 5.21365, 8.18254, 1.65595 ) +transform = Transform( -0.866025, 0, -0.5, 0, 3.5, 0, 0.5, 0, -0.866025, 6.42983, 4.82559, 4.9338 ) + +[node name="Runway" parent="WORLDGEO" instance=ExtResource( 13 )] +transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 32.5651, 0, 36.5712 ) [node name="MACHINES" type="Spatial" parent="."] [node name="Gunboat" parent="MACHINES" instance=ExtResource( 10 )] -transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -31.3856, 0.295246, -9.61152 ) +transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -30.9834, 0.444645, -9.61152 ) [node name="Gunboat2" parent="MACHINES" instance=ExtResource( 10 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 6.23753, 0.911655, -35.0974 ) +transform = Transform( 0.575476, 0, 0.817818, 0, 1, 0, -0.817818, 0, 0.575476, -5.00988, 0.911655, -27.3661 ) [node name="Cannon" parent="MACHINES" instance=ExtResource( 2 )] transform = Transform( 2.98023e-08, 0, 1, 0, 1, 0, -1, 0, 2.98023e-08, -3.28944, 3.51975, -13.2337 ) [node name="Cannon2" parent="MACHINES" instance=ExtResource( 2 )] -transform = Transform( 2.98023e-08, 0, 1, 0, 1, 0, -1, 0, 2.98023e-08, 1.99678, 3.51975, -13.0005 ) +transform = Transform( -0.186575, 0, -0.982441, 0, 1, 0, 0.982441, 0, -0.186575, 2.83363, 3.51975, -10.6698 ) [node name="CaptureFlag" parent="MACHINES" instance=ExtResource( 11 )] transform = Transform( -0.854422, 0, 0.519579, 0, 1, 0, -0.519579, 0, -0.854422, -2.70943, 2.59075, 8.79298 ) +[node name="Airplane" parent="MACHINES" instance=ExtResource( 14 )] +transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 30.8999, 5.13129, -8.23008 ) + [node name="BALLISTICS" type="Spatial" parent="."] [node name="PLAYERS" type="Spatial" parent="."] [node name="Player" parent="PLAYERS" instance=ExtResource( 5 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.66215, 0 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 28.8794, 2.55194, 2.65124 ) [node name="Player2" parent="PLAYERS" instance=ExtResource( 5 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -10.1844, 3.62129, 0.930942 ) @@ -100,7 +103,7 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.71668, 5.22026, -2.44181 ) navmesh = SubResource( 14 ) [node name="house2" parent="worldnavmesh" instance=ExtResource( 9 )] -transform = Transform( 0.479393, 0.044261, -0.876483, -0.0919361, 0.995765, 2.73991e-09, 0.872771, 0.0805805, 0.481432, 6.69449, 2.69972, 9.33616 ) +transform = Transform( 0.479393, 0.044261, -0.876483, -0.0919361, 0.995765, 2.73991e-09, 0.872771, 0.0805805, 0.481432, 6.69449, -0.773598, 9.33616 ) visible = false [node name="MeshInstance2" type="MeshInstance" parent="worldnavmesh"] @@ -113,7 +116,7 @@ skeleton = NodePath("../../WORLDGEO/battery") visible = false [node name="dockfake" type="MeshInstance" parent="worldnavmesh"] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -21.4142, 0.192101, -0.834306 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -21.4142, 0.192101, -1.88659 ) visible = false mesh = SubResource( 15 ) @@ -128,6 +131,12 @@ visible = false mesh = SubResource( 16 ) [node name="DEFAULTCAM" type="Camera" parent="."] -transform = Transform( -0.503125, -0.271213, 0.820554, 0, 0.94948, 0.313827, -0.864213, 0.157894, -0.477708, 33.419, 22.3952, -35.2718 ) +transform = Transform( -0.507541, -0.600446, 0.617953, -0.0365804, 0.731562, 0.680792, -0.860851, 0.322925, -0.393262, 12.1857, 17.0183, -13.3083 ) current = true far = 8192.0 + +[node name="START" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -31.246, 1.53391, -8.93427 ) + +[node name="END" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 6.78024, 7.54454, 7.34734 ) diff --git a/godot/materials/housetexture.material b/godot/materials/housetexture.material Binary files differindex 188f3c5..a0988f5 100644 --- a/godot/materials/housetexture.material +++ b/godot/materials/housetexture.material diff --git a/godot/project.godot b/godot/project.godot index 9366827..2dd3f76 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -194,10 +194,16 @@ chat={ "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":89,"unicode":0,"echo":false,"script":null) ] } +move_walk={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777237,"unicode":0,"echo":false,"script":null) + ] +} [physics] common/enable_pause_aware_picking=true +3d/active_soft_world=false [rendering] diff --git a/godot/scenes/GameBase.tscn b/godot/scenes/GameBase.tscn index eaa6c86..6764b81 100644 --- a/godot/scenes/GameBase.tscn +++ b/godot/scenes/GameBase.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://scenes/environment/Water.tscn" type="PackedScene" id=1] [ext_resource path="res://ui/HUD.tscn" type="PackedScene" id=2] [ext_resource path="res://scripts/GameBase.gd" type="Script" id=3] +[ext_resource path="res://scripts/cameras/PlayerCamGDS.gd" type="Script" id=4] [node name="GAMEWORLD" type="Spatial"] script = ExtResource( 3 ) @@ -23,3 +24,7 @@ transform = Transform( 6000, 0, 0, 0, 100, 0, 0, 0, 6000, 0, 0, 0 ) [node name="DEFAULTCAM" type="Camera" parent="."] current = true far = 8192.0 + +[node name="PLAYERCAM" type="ClippedCamera" parent="."] +far = 8192.0 +script = ExtResource( 4 ) diff --git a/godot/scenes/characters/PlayerRigid.tscn b/godot/scenes/characters/PlayerRigid.tscn index 8f61532..89c9df0 100644 --- a/godot/scenes/characters/PlayerRigid.tscn +++ b/godot/scenes/characters/PlayerRigid.tscn @@ -1,13 +1,14 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=11 format=2] [ext_resource path="res://scripts/characters/player_controller_new.gd" type="Script" id=1] [ext_resource path="res://theming/FreeMono.otf" type="DynamicFontData" id=2] [ext_resource path="res://scenes/characters/PlayerAreaDetect.gd" type="Script" id=3] [sub_resource type="PhysicsMaterial" id=3] +resource_local_to_scene = true rough = true -[sub_resource type="BoxShape" id=1] +[sub_resource type="BoxShape" id=6] extents = Vector3( 0.325, 0.9, 0.325 ) [sub_resource type="CubeMesh" id=2] @@ -22,67 +23,78 @@ outline_size = 3 use_filter = true font_data = ExtResource( 2 ) +[sub_resource type="BoxShape" id=1] +extents = Vector3( 0.325, 0.9, 0.325 ) + +[sub_resource type="CylinderMesh" id=7] +top_radius = 0.01 +bottom_radius = 0.01 +height = 0.3 +radial_segments = 6 + [node name="Soldier" type="RigidBody" groups=["playable", "player"]] collision_layer = 32769 collision_mask = 32769 mode = 2 mass = 80.0 physics_material_override = SubResource( 3 ) -contacts_reported = 5 +continuous_cd = true +contacts_reported = 3 contact_monitor = true can_sleep = false -axis_lock_angular_x = true -axis_lock_angular_y = true -axis_lock_angular_z = true linear_damp = 0.0 angular_damp = 0.0 script = ExtResource( 1 ) [node name="Collision" type="CollisionShape" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0 ) -shape = SubResource( 1 ) +shape = SubResource( 6 ) -[node name="Head" type="Spatial" parent="."] +[node name="Neck" type="Spatial" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.44, 0 ) -[node name="Camera" type="Camera" parent="Head"] -keep_aspect = 0 -cull_mask = 524287 -fov = 90.0 -near = 0.2 -far = 1449.4 +[node name="Head" type="Spatial" parent="Neck"] -[node name="UseRay" type="RayCast" parent="Head/Camera"] +[node name="UseRay" type="RayCast" parent="Neck/Head"] +unique_name_in_owner = true enabled = true cast_to = Vector3( 0, 0, -2.5 ) collision_mask = 131075 collide_with_areas = true -[node name="MeleeRay" type="RayCast" parent="Head/Camera"] +[node name="MeleeRay" type="RayCast" parent="Neck/Head"] +unique_name_in_owner = true enabled = true cast_to = Vector3( 0, 0, -2.5 ) collision_mask = 262145 collide_with_areas = true -[node name="viewmodel_c" type="ViewportContainer" parent="Head"] +[node name="Camera" type="Camera" parent="Neck/Head"] +keep_aspect = 0 +cull_mask = 524287 +fov = 90.0 +near = 0.2 +far = 1449.4 + +[node name="viewmodel_c" type="ViewportContainer" parent="Neck"] visible = false margin_right = 1024.0 margin_bottom = 600.0 -[node name="viewmodel" type="Viewport" parent="Head/viewmodel_c"] +[node name="viewmodel" type="Viewport" parent="Neck/viewmodel_c"] size = Vector2( 1024, 600 ) transparent_bg = true handle_input_locally = false render_target_update_mode = 0 -[node name="vm_camera" type="Camera" parent="Head/viewmodel_c/viewmodel"] +[node name="vm_camera" type="Camera" parent="Neck/viewmodel_c/viewmodel"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.539779, 0 ) cull_mask = 524288 current = true fov = 90.0 far = 75.9 -[node name="MeshInstance" type="MeshInstance" parent="Head/viewmodel_c/viewmodel"] +[node name="MeshInstance" type="MeshInstance" parent="Neck/viewmodel_c/viewmodel"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0266792, -0.813922 ) layers = 524288 mesh = SubResource( 2 ) @@ -114,5 +126,9 @@ script = ExtResource( 3 ) [node name="Collision" type="CollisionShape" parent="AreaDetect"] shape = SubResource( 1 ) +[node name="normal_vis" type="MeshInstance" parent="."] +mesh = SubResource( 7 ) +skeleton = NodePath("../Feet") + [connection signal="area_entered" from="AreaDetect" to="AreaDetect" method="_on_AreaDetect_area_entered"] [connection signal="area_exited" from="AreaDetect" to="AreaDetect" method="_on_AreaDetect_area_exited"] diff --git a/godot/scenes/environment/Ladder.tscn b/godot/scenes/environment/Ladder.tscn index ee99c68..96c5e36 100644 --- a/godot/scenes/environment/Ladder.tscn +++ b/godot/scenes/environment/Ladder.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://scenes/environment/Ladder.gd" type="Script" id=1] @@ -24,6 +24,11 @@ func _ready(): transform.origin.y += 0.2 / get_parent().scale.y " +[sub_resource type="NavigationMesh" id=6] +vertices = PoolVector3Array( -0.5, 0.425, -0.5, -0.5, 0.425, 0.5, 0.5, 0.425, 0.5, 0.5, 0.425, -0.5 ) +polygons = [ PoolIntArray( 3, 2, 0 ), PoolIntArray( 0, 2, 1 ) ] +agent_radius = 0.0 + [node name="Ladder" type="Spatial"] script = ExtResource( 1 ) @@ -46,3 +51,11 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0.5 ) [node name="Top" type="Spatial" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.5 ) script = SubResource( 3 ) + +[node name="NavigationMeshInstance" type="NavigationMeshInstance" parent="."] +transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 ) +navmesh = SubResource( 6 ) + +[node name="DebugVisMesh" type="MeshInstance" parent="NavigationMeshInstance"] +transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0 ) +mesh = SubResource( 1 ) diff --git a/godot/scenes/machines/Cannon.tscn b/godot/scenes/machines/Cannon.tscn index e84f74a..20627fc 100644 --- a/godot/scenes/machines/Cannon.tscn +++ b/godot/scenes/machines/Cannon.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=11 format=2] -[ext_resource path="res://bin/networked_machine.gdns" type="Script" id=1] +[ext_resource path="res://scripts/machines/Cannon.gd" type="Script" id=1] [ext_resource path="res://sounds/explode.wav" type="AudioStream" id=2] [sub_resource type="PhysicsMaterial" id=8] @@ -62,10 +62,8 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.13452, 0, 0 ) stream = ExtResource( 2 ) unit_db = 9.0 -[node name="Camera" type="Camera" parent="YawJoint/PitchJoint"] +[node name="CameraPoint" type="Spatial" parent="YawJoint/PitchJoint"] transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -0.513577, 0.363402, 0 ) -fov = 44.6 -far = 8192.0 [node name="SteerArea" type="Area" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.935472, 0.123637, 0 ) diff --git a/godot/scenes/vehicles/Airplane.tscn b/godot/scenes/vehicles/Airplane.tscn index 2b46297..ec79c66 100644 --- a/godot/scenes/vehicles/Airplane.tscn +++ b/godot/scenes/vehicles/Airplane.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=14 format=2] [ext_resource path="res://scripts/vehicles/Airplane.gd" type="Script" id=1] -[ext_resource path="res://scripts/cameras/plane_armcam.gd" type="Script" id=2] +[ext_resource path="res://particles/RocketTrail.tscn" type="PackedScene" id=2] [sub_resource type="PhysicsMaterial" id=1] rough = true [sub_resource type="Curve" id=10] -_data = [ Vector2( 0, 0.119632 ), 0.0, 0.0, 0, 0, Vector2( 0.172819, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.823825, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ] +_data = [ Vector2( 0, 0.509091 ), 0.0, 0.0, 0, 0, Vector2( 0.172819, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.823825, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.463636 ), 0.0, 0.0, 0, 0 ] [sub_resource type="CurveTexture" id=11] width = 1024 @@ -125,10 +125,8 @@ mesh = SubResource( 8 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.22602, 0.452069, 0 ) spring_length = 15.0 margin = 0.03 -script = ExtResource( 2 ) [node name="ClippedCamera" type="ClippedCamera" parent="armcam"] -current = true fov = 79.2 near = 0.12 far = 8192.0 @@ -143,13 +141,24 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.02202, 0.828033, 0 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.02201, 0.827813, -5.21093 ) [node name="tail" type="Spatial" parent="."] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.3164, 0.456713, 0 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.47682, 0.456713, 0 ) -[node name="TugArea" type="Area" parent="."] +[node name="RocketTrail" parent="tail" instance=ExtResource( 2 )] +unique_name_in_owner = true +transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0 ) +emitting = false + +[node name="SteerArea" type="Area" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 4.58015, -0.728266, 0 ) collision_layer = 131072 collision_mask = 0 -[node name="CollisionShape" type="CollisionShape" parent="TugArea"] +[node name="CollisionShape" type="CollisionShape" parent="SteerArea"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.47757, 0 ) shape = SubResource( 9 ) + +[node name="Cockpit" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.72698, -0.196514, 0 ) + +[node name="PilotExit" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 6.1653, -0.196514, 0 ) diff --git a/godot/scenes/vehicles/Gunboat.tscn b/godot/scenes/vehicles/Gunboat.tscn index 5719cff..6b447d6 100644 --- a/godot/scenes/vehicles/Gunboat.tscn +++ b/godot/scenes/vehicles/Gunboat.tscn @@ -91,11 +91,12 @@ extents = Vector3( 0.115313, 0.934506, 1.68658 ) extents = Vector3( 2.14672, 0.239365, 1.59078 ) [sub_resource type="NavigationMesh" id=26] -vertices = PoolVector3Array( 11.5, 0.12649, -2.25, 14.75, 0.12649, -1.25, 14.75, 0.12649, -2.25, 13, 1.12649, 0.75, 13, 1.12649, -0.5, 12, 0.12649, -1, 8, 0.62649, -1.5, 8.5, 0.62649, 1.5, 9.625, 0.12649, 1.3125, 11.875, 0.12649, 0.9375, 8.33333, 0.12649, 0.5, -6, 0.62649, 1, -6.25, 1.37649, 2.25, -4, 1.37649, 2.25, -4.25, 0.62649, 1, -1.75, 0.12649, -1.75, -11.75, 0.62649, -1.75, -6.5, 0.12649, 1, -6, 0.62649, 1, -4.9375, 0.12649, 0.3125, -3.75, 0.12649, 1, -3.75, 0.12649, 1.75, 0, 0.62649, 1.75, 8.5, 0.62649, 1.5, 8, 0.62649, -1.5, -1.75, 0.12649, -1.75, 1.41667, 0.12649, 1.70833, 7.08333, 0.12649, 1.54167, 8.33333, 0.12649, 0.5, 1.99502, 0.12649, 0.496974, -1.025, 0.12649, 0.475, -1.75, 0.12649, -1.75, -4.25, 0.62649, 1, -3.75, 0.12649, 1, -3.41667, 0.12649, 0.0833333, -1.75, 0.12649, -1.75, -6, 0.62649, 1, -4.25, 0.62649, 1, -3.41667, 0.12649, 0.0833333, -4.9375, 0.12649, 0.3125, -11.75, 0.62649, -1.75, -15.25, 0.12649, -1.25, -15.25, -0.12351, 1.25, -6.5, 0.12649, 1.75, -6.5, 0.12649, 1, 15.5, 1.87649, -0.75, 12, 1.62649, -1.5, 13.5, 1.87649, -0.75, 13.5, 1.87649, 0.75, 13, 1.87649, 1.25, 15.75, 1.87649, 0.75, 13.5, 1.87649, 0.75, 15.75, 1.87649, 0.75, 15.5, 1.87649, -0.75, 13.5, 1.87649, -0.75, 11.5, 0.12649, 2, 14.75, 0.12649, 2.25, 14.75, 0.12649, 1.5 ) -polygons = [ PoolIntArray( 2, 1, 0 ), PoolIntArray( 7, 10, 8 ), PoolIntArray( 8, 10, 6 ), PoolIntArray( 8, 6, 9 ), PoolIntArray( 9, 6, 5 ), PoolIntArray( 9, 5, 4 ), PoolIntArray( 9, 4, 3 ), PoolIntArray( 14, 13, 11 ), PoolIntArray( 11, 13, 12 ), PoolIntArray( 18, 17, 19 ), PoolIntArray( 19, 17, 15 ), PoolIntArray( 15, 17, 16 ), PoolIntArray( 24, 29, 25 ), PoolIntArray( 25, 30, 20 ), PoolIntArray( 20, 30, 21 ), PoolIntArray( 21, 30, 22 ), PoolIntArray( 22, 29, 26 ), PoolIntArray( 26, 29, 27 ), PoolIntArray( 27, 28, 23 ), PoolIntArray( 28, 27, 24 ), PoolIntArray( 29, 30, 25 ), PoolIntArray( 24, 27, 29 ), PoolIntArray( 30, 29, 22 ), PoolIntArray( 32, 34, 33 ), PoolIntArray( 33, 34, 31 ), PoolIntArray( 36, 39, 37 ), PoolIntArray( 37, 39, 38 ), PoolIntArray( 38, 39, 35 ), PoolIntArray( 41, 40, 42 ), PoolIntArray( 42, 40, 44 ), PoolIntArray( 42, 44, 43 ), PoolIntArray( 47, 46, 45 ), PoolIntArray( 50, 49, 48 ), PoolIntArray( 54, 53, 51 ), PoolIntArray( 51, 53, 52 ), PoolIntArray( 57, 56, 55 ) ] +vertices = PoolVector3Array( 4.5, 1.37649, -2.25, 4.5, 1.37649, -2, 6.25, 1.37649, -2, 6.25, 1.37649, -2.25, 14.5, 0.12649, -1.5, 14.5, 0.12649, -1.25, 14.75, 0.12649, -1.25, 14.75, 0.12649, -2.25, 13.75, 0.12649, -1.75, 13.75, 0.12649, -1.5, 14.5, 0.12649, -1.5, 14.75, 0.12649, -2.25, 11.5, 0.12649, -2.25, 11.5, 0.12649, -2, 12.75, 0.12649, -2, 14.75, 0.12649, -2.25, 12.75, 0.12649, -2, 12.75, 0.12649, -1.75, 13.75, 0.12649, -1.75, 14.75, 0.12649, -2.25, -6, 1.37649, 2, -6.25, 1.37649, 2, -6.25, 1.37649, 2.25, -4, 1.37649, 2.25, -4, 1.37649, 2, -4.25, 1.37649, 2, 13, 1.12649, 0.75, 13, 1.12649, -0.5, 12, 0.12649, -0.75, 11, 0.12649, 1, 12, 0.12649, 0.875, -6, 1.37649, 2, -6.25, 1.37649, 2.25, -4, 1.37649, 2.25, -4.25, 1.37649, 2, 8, 0.12649, -1.25, 8, 0.62649, -1.5, 3.5, 0.12649, -1.5, -6, 0.62649, 1, -6, 1.37649, 2, -4.25, 1.37649, 2, -4.25, 0.62649, 1, -11.75, 0.12649, -1.5, -14.25, 0.12649, 1.25, -14.25, 0.62649, 1.5, -6.5, 0.12649, 1.75, -6.5, 0.12649, 1, -4.25, 0.62649, 1, -3.75, 0.12649, 1, -4.25, 0.12649, -1.75, 11, 0.12649, 1, 12, 0.12649, -0.75, 12, 0.12649, -1, 8, 0.12649, -1.25, 8.5, 0.12649, 1.25, 8.5, 0.12649, 1.25, 11, 0.12649, 1.25, 11, 0.12649, 1, -11.75, 0.12649, -1.5, -14.25, 0.12649, -1.5, -14.25, 0.12649, -1.25, -15.25, 0.12649, -1.25, -15.25, -0.12351, 1.25, -14.25, 0.12649, 1.25, -14.25, 0.12649, -1.25, -6, 0.62649, 1, -4.25, 0.62649, 1, -4.25, 0.12649, -1.75, -5.41667, 0.12649, 0.0833333, -11.75, 0.12649, -1.5, -14.25, 0.12649, -1.25, -14.25, 0.12649, 1.25, 0, 0.12649, 1.5, 3.5, 0.12649, -1.5, 3.5, 0.62649, -1.75, -4.25, 0.12649, -1.75, -3.75, 0.12649, 1, -4.25, 0.12649, -1.75, -11.75, 0.62649, -1.75, -11.75, 0.12649, -1.5, -6.5, 0.12649, 1, -6, 0.62649, 1, -5.41667, 0.12649, 0.0833333, 8.5, 0.62649, 1.5, 8.5, 0.12649, 1.25, 8, 0.12649, -1.25, 3.5, 0.12649, -1.5, 0, 0.12649, 1.5, 7.08333, 0.12649, 1.5, -3.75, 0.12649, 1.75, 0, 0.62649, 1.75, 0, 0.12649, 1.5, -3.75, 0.12649, 1, 10.25, 1.37649, -1.75, 10.25, 1.37649, -1.5, 11.5, 1.62649, -1.5, 11.5, 1.62649, -1.75, 13.5, 1.87649, 0.75, 13, 1.87649, 1, 13, 1.87649, 1.25, 14.75, 1.87649, 1, 14.75, 1.87649, 0.75, 14.5, 1.87649, -0.75, 14.5, 1.62649, -1, 13.75, 1.87649, -1, 13.5, 1.87649, -0.75, 15.5, 1.87649, -0.5, 15.5, 1.87649, -0.75, 14.5, 1.87649, -0.75, 14.75, 1.87649, 0.75, 15.5, 1.87649, -0.5, 14.5, 1.87649, -0.75, 13.5, 1.87649, -0.75, 13.5, 1.87649, 0.75, 13.5, 1.87649, -0.75, 13.75, 1.87649, -1, 13.75, 1.62649, -1.25, 12, 1.62649, -1.5, 12, 1.62649, -1.25, 15.75, 1.87649, 0.75, 15.75, 1.87649, -0.5, 15.5, 1.87649, -0.5, 14.75, 1.87649, 0.75, 12.75, 0.12649, 2, 11.5, 0.12649, 2, 11.5, 0.12649, 2.25, 14.75, 0.12649, 2.25, 14.75, 0.12649, 2.25, 14.75, 0.12649, 1.5, 12.75, 0.12649, 1.75, 12.75, 0.12649, 2, -13, 1.37649, 2, -13, 1.37649, 2.25, -11.75, 1.37649, 2.25, -11.75, 1.37649, 2, 2.25, 1.37649, 2, 2.25, 1.37649, 2.25, 6.25, 1.37649, 2.25, 6.25, 1.37649, 2 ) +polygons = [ PoolIntArray( 3, 2, 0 ), PoolIntArray( 0, 2, 1 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 9, 8, 10 ), PoolIntArray( 10, 8, 11 ), PoolIntArray( 13, 12, 14 ), PoolIntArray( 14, 12, 15 ), PoolIntArray( 17, 16, 18 ), PoolIntArray( 18, 16, 19 ), PoolIntArray( 22, 21, 20 ), PoolIntArray( 25, 24, 23 ), PoolIntArray( 26, 30, 27 ), PoolIntArray( 27, 30, 28 ), PoolIntArray( 28, 30, 29 ), PoolIntArray( 34, 33, 31 ), PoolIntArray( 31, 33, 32 ), PoolIntArray( 37, 36, 35 ), PoolIntArray( 41, 40, 38 ), PoolIntArray( 38, 40, 39 ), PoolIntArray( 43, 42, 44 ), PoolIntArray( 44, 42, 46 ), PoolIntArray( 44, 46, 45 ), PoolIntArray( 49, 48, 47 ), PoolIntArray( 51, 50, 52 ), PoolIntArray( 52, 50, 54 ), PoolIntArray( 52, 54, 53 ), PoolIntArray( 57, 56, 55 ), PoolIntArray( 60, 59, 58 ), PoolIntArray( 64, 63, 61 ), PoolIntArray( 61, 63, 62 ), PoolIntArray( 65, 68, 66 ), PoolIntArray( 66, 68, 67 ), PoolIntArray( 69, 71, 70 ), PoolIntArray( 73, 72, 74 ), PoolIntArray( 74, 72, 76 ), PoolIntArray( 74, 76, 75 ), PoolIntArray( 81, 80, 82 ), PoolIntArray( 82, 80, 77 ), PoolIntArray( 77, 80, 79 ), PoolIntArray( 77, 79, 78 ), PoolIntArray( 83, 88, 84 ), PoolIntArray( 84, 88, 85 ), PoolIntArray( 85, 88, 86 ), PoolIntArray( 86, 88, 87 ), PoolIntArray( 90, 89, 91 ), PoolIntArray( 91, 89, 92 ), PoolIntArray( 96, 95, 93 ), PoolIntArray( 93, 95, 94 ), PoolIntArray( 98, 97, 99 ), PoolIntArray( 99, 97, 100 ), PoolIntArray( 100, 97, 101 ), PoolIntArray( 103, 102, 104 ), PoolIntArray( 104, 102, 105 ), PoolIntArray( 108, 107, 106 ), PoolIntArray( 110, 109, 111 ), PoolIntArray( 111, 109, 112 ), PoolIntArray( 112, 109, 113 ), PoolIntArray( 115, 114, 116 ), PoolIntArray( 116, 114, 118 ), PoolIntArray( 116, 118, 117 ), PoolIntArray( 120, 119, 121 ), PoolIntArray( 121, 119, 122 ), PoolIntArray( 124, 123, 125 ), PoolIntArray( 125, 123, 126 ), PoolIntArray( 130, 129, 127 ), PoolIntArray( 127, 129, 128 ), PoolIntArray( 134, 133, 131 ), PoolIntArray( 131, 133, 132 ), PoolIntArray( 138, 137, 135 ), PoolIntArray( 135, 137, 136 ) ] agent_height = 1.8 agent_radius = 0.18 agent_max_slope = 46.0 +edge_max_error = 0.68 [sub_resource type="CubeMesh" id=27] size = Vector3( 30, 0.1, 5 ) @@ -274,7 +275,7 @@ transform = Transform( 1, 0, 0, 0, 0.771436, 0.636307, 0, -0.636307, 0.771436, - mesh = SubResource( 29 ) [node name="CollisionShape9" type="CollisionShape" parent="."] -transform = Transform( 1, 0, 0, 0, 0.771436, 0.636307, 0, -0.636307, 0.771436, -5.03993, 0.255733, 1.26566 ) +transform = Transform( 1, 0, 0, 0, 0.855174, 0.51834, 0, -0.51834, 0.855174, -5.03993, 0.255733, 1.26566 ) shape = SubResource( 30 ) [node name="Ladder" parent="." instance=ExtResource( 5 )] diff --git a/godot/scenes/weapons/rockets.gd b/godot/scenes/weapons/rockets.gd index 56282e1..c519fd6 100644 --- a/godot/scenes/weapons/rockets.gd +++ b/godot/scenes/weapons/rockets.gd @@ -22,14 +22,14 @@ func attack1(): if cooldown_time <= 0.0 and ammo >= 1: ammo -= 1 cooldown_time = reload_time - rpc("add_rocket_to_scene", player.cam.global_transform.basis, get_tree().get_network_unique_id()) + rpc("add_rocket_to_scene", player.head.global_transform.basis, get_tree().get_network_unique_id()) remotesync func add_rocket_to_scene(dir, id): var rocket = preload("res://scenes/ballistics/Rocket.tscn").instance() world.get_node("BALLISTICS").add_child(rocket, true) rocket.shooter = player.name + " (" + world.players_info[player.get_network_master()][0] + ")" rocket.shooter_id = id - rocket.global_transform.origin = player.cam.global_transform.origin + rocket.global_transform.origin = player.head.global_transform.origin rocket.global_transform.basis = Basis(-1*dir.z, dir.y, dir.x) rocket.add_collision_exception_with(player) diff --git a/godot/scenes/worldprops/Runway.tscn b/godot/scenes/worldprops/Runway.tscn new file mode 100644 index 0000000..e827cd2 --- /dev/null +++ b/godot/scenes/worldprops/Runway.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://textures/conc_slabs01_c.png" type="Texture" id=1] + +[sub_resource type="SpatialMaterial" id=1] +albedo_texture = ExtResource( 1 ) +uv1_scale = Vector3( 0.1, 0.1, 0.1 ) +uv1_triplanar = true + +[sub_resource type="CubeMesh" id=2] +material = SubResource( 1 ) +size = Vector3( 100, 5, 10 ) + +[sub_resource type="ConvexPolygonShape" id=3] +points = PoolVector3Array( -50, -2.5, -5, -50, 2.5, -5, 50, -2.5, -5, -50, -2.5, 5, -50, 2.5, 5, 50, 2.5, -5, 50, -2.5, 5, 50, 2.5, 5 ) + +[node name="Runway" type="StaticBody"] + +[node name="MeshInstance" type="MeshInstance" parent="."] +mesh = SubResource( 2 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +shape = SubResource( 3 ) diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd index 0df53dd..be430d4 100644 --- a/godot/scripts/GameBase.gd +++ b/godot/scripts/GameBase.gd @@ -8,6 +8,7 @@ var local_server_tree = null var player_name : String var player_team : String var player_char = null +onready var cam = $PLAYERCAM var players_info = {} #dictionary of id : name, team, ping, etc. @@ -28,6 +29,7 @@ remote func set_up_server_info(info): $HUD/ServerJoinMenu/MOTD.text = info["MOTD"] $HUD/ServerJoinMenu/ServerName.text = info["server_name"] $DEFAULTCAM.transform = info["cam_pos"] + cam.attach($DEFAULTCAM, "STATIC") rpc_id(1, "_call_on_server", "_client_connection_confirmed", {"id" : client_id, "username" : player_name}) diff --git a/godot/scripts/World.gd b/godot/scripts/World.gd index fa5a306..7e60423 100644 --- a/godot/scripts/World.gd +++ b/godot/scripts/World.gd @@ -5,19 +5,25 @@ var m = SpatialMaterial.new() var winddir = Vector3(1,0,0) onready var pathfinder = get_node("PLAYERS/Player2") var path = [] -var map_rid +var map_rids var client_id var player_char var players_info = {} +var WORLD_MAP_RID : RID # Called when the node enters the scene tree for the first time. func _ready(): - map_rid = NavigationServer.get_maps() - for rid in map_rid: - NavigationServer.map_set_edge_connection_margin(rid,1) + map_rids = NavigationServer.get_maps() + for rid in map_rids: + NavigationServer.map_set_edge_connection_margin(rid,1.5) m.flags_unshaded = true m.flags_use_point_size = true m.albedo_color = Color.white + + #merge all nav meshes onto the main map + yield(get_tree().create_timer(1.0), "timeout") + WORLD_MAP_RID = get_world().get_navigation_map() + find_path() remotesync func update_players_info(info): players_info = info @@ -26,13 +32,22 @@ remote func _call_on_server(function, arguments): print('Remote server call: ' + function) $Server.call(function, arguments) -func find_path(to): - pathfinder.nav.set_target_location(to) - var t_path = pathfinder.nav.get_next_location() - pathfinder.should_move = true - t_path = pathfinder.nav.get_nav_path() - print(to) - print(t_path) +func find_path(): + var start_pos = $START.global_transform.origin + var end_pos = $END.global_transform.origin + var t_path = NavigationServer.map_get_path(WORLD_MAP_RID, start_pos, end_pos, true) + var path_end = t_path[len(t_path)-1] + #is path end near desired end + #if not, is the end point in an unreachable region? + for rid in map_rids: + print("map " + str(rid.get_id())) + for region_rid in NavigationServer.map_get_regions(rid): + print("region " + str(region_rid.get_id())) + if NavigationServer.region_owns_point(region_rid, end_pos): + print("owns target point") + if NavigationServer.region_owns_point(region_rid, path_end): + print("owns end point") + print( (end_pos - t_path[len(t_path)-1]).length() ) draw_path(t_path) pass diff --git a/godot/scripts/ballistics/Cannonball.gd b/godot/scripts/ballistics/Cannonball.gd index 14de00c..d1937f4 100644 --- a/godot/scripts/ballistics/Cannonball.gd +++ b/godot/scripts/ballistics/Cannonball.gd @@ -13,5 +13,5 @@ func get_init_info(): func _on_collision(body): if oldvel.length() > 20 and !damage_exceptions.has(body) and body.has_method("damage"): - body.rpc("damage", oldvel.length(), "blunt", shooter, "using 'cannon'") + body.rpc("damage", oldvel.length(), "blunt", [shooter_id, shooter], "using 'cannon'") damage_exceptions.append(body) diff --git a/godot/scripts/cameras/PlayerCamGDS.gd b/godot/scripts/cameras/PlayerCamGDS.gd new file mode 100644 index 0000000..ec46cf8 --- /dev/null +++ b/godot/scripts/cameras/PlayerCamGDS.gd @@ -0,0 +1,79 @@ +extends ClippedCamera + +var _modes = ["STATIC", "FIRSTPERSON", "THIRDPERSON", "ARM", "FREECAM"] +var mode = "STATIC" #STATIC, FIRSTPERSON, THIRDPERSON, ARM, FREECAM + +#first/third person variables +var head : Spatial = null +var neck : Spatial = null +var player : RigidBody = null + +#third person/arm variables +var arm : SpringArm = null + +var mouse_axis := Vector2() +var mouse_sensitivity = 12.0 + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + current = true + +func _input(event): + if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: + mouse_axis = event.relative + match mode: + "FIRSTPERSON": + mouse_firstperson() + "THIRDPERSON": + mouse_thirdperson() + "STATIC": + pass + "ARM": + mouse_arm() + "FREECAM": + mouse_freecam() + _: + pass + +func attach(new_parent: Node, c_mode, extra_path = "."): + if get_parent(): + get_parent().remove_child(self) + if c_mode in _modes: + mode = c_mode + if mode == "FIRSTPERSON": + head = new_parent.head; neck = new_parent.neck; + arm = null; + elif mode == "THIRDPERSON": + head = new_parent.head; neck = new_parent.neck; + arm = new_parent.arm + elif mode == "ARM": + head = null; neck = null; + arm = new_parent.arm + else: + head = null; neck = null; arm = null; + new_parent.get_node(extra_path).add_child(self) + transform = Transform.IDENTITY + +func mouse_firstperson() -> void: + if mouse_axis.length_squared() > 0: + var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100) + var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100) + + neck.rotate_y(deg2rad(horizontal)) + head.rotate_x(deg2rad(vertical)) + + #vertical clamp + head.rotation_degrees.x = clamp(head.rotation_degrees.x, -90, 90) + +func mouse_thirdperson() -> void: + arm.rotation_degrees.x = clamp(rotation_degrees.x-mouse_axis.y*(mouse_sensitivity / 100),-90,90) + arm.rotation_degrees.y -= mouse_axis.x*(mouse_sensitivity / 100) + head.rotation_degrees.x = arm.rotation_degrees.x + neck.rotation_degrees.y = arm.rotation_degrees.y + +func mouse_arm() -> void: + arm.rotation_degrees.x = clamp(rotation_degrees.x-mouse_axis.y*(mouse_sensitivity / 100),-70,70) + arm.rotation_degrees.y -= mouse_axis.x*(mouse_sensitivity / 100) + +func mouse_freecam() -> void: + pass diff --git a/godot/scripts/cameras/plane_armcam.gd b/godot/scripts/cameras/plane_armcam.gd index edb0284..68b4852 100644 --- a/godot/scripts/cameras/plane_armcam.gd +++ b/godot/scripts/cameras/plane_armcam.gd @@ -14,12 +14,6 @@ func _ready(): func _input(event): if $ClippedCamera.current: - if Input.is_action_just_pressed("menu"): #toggle mouse capture on esc - if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE: - Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - else: - Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: rotation_degrees.x = clamp(rotation_degrees.x-event.relative.y*0.1,-70,70) diff --git a/godot/scripts/cameras/player_firstperson.gd b/godot/scripts/cameras/player_firstperson.gd deleted file mode 100644 index ace49e6..0000000 --- a/godot/scripts/cameras/player_firstperson.gd +++ /dev/null @@ -1,33 +0,0 @@ -extends Camera - - -var mouse_axis := Vector2() -var mouse_sensitivity = 12.0 - -func _ready(): - Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - current = false - - -func _input(event): - if current: - if Input.is_action_just_pressed("menu"): #toggle mouse capture on esc - if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE: - Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - else: - Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: - mouse_axis = event.relative - if mouse_axis.length() > 0: - var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100) - var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100) - - mouse_axis = Vector2() - - get_parent().rotate_y(deg2rad(horizontal)) - rotate_x(deg2rad(vertical)) - - var temp_rot: Vector3 = rotation_degrees - temp_rot.x = clamp(temp_rot.x, -90, 90) - get_parent().animationcontroller.rpc("lean",-1*temp_rot.x/90) - rotation_degrees = temp_rot diff --git a/godot/scripts/characters/player_controller_new.gd b/godot/scripts/characters/player_controller_new.gd index 6df88f0..deaea79 100644 --- a/godot/scripts/characters/player_controller_new.gd +++ b/godot/scripts/characters/player_controller_new.gd @@ -10,8 +10,8 @@ var world export(float) var mouse_sensitivity = 12.0 export(float) var FOV = 90.0 var mouse_axis := Vector2() -onready var head: Spatial = $Head -onready var cam: Camera = $Head/Camera +onready var head: Spatial = $Neck/Head +onready var neck: Spatial = $Neck # Move var velocity := Vector3() @@ -38,6 +38,7 @@ var ladder_m = null #physics var player_state : PhysicsDirectBodyState var is_on_floor:bool +var floor_normal : Vector3 = Vector3.UP var acceleration = 80.0 export(int) var walk_speed = 5 var c_friction = 4.0 @@ -48,15 +49,11 @@ func _ready() -> void: weapon = preload("res://scenes/weapons/w_Rockets.tscn").instance() add_child(weapon) world = get_tree().get_root().get_node("GAMEWORLD") - if is_player: - cam.current = true - $Head/Camera/UseRay.add_exception(self) - $Head/Camera/MeleeRay.add_exception(self) - $Head/Camera/UseRay.add_exception($AreaDetect) - $Head/Camera/MeleeRay.add_exception($AreaDetect) - Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - cam.fov = FOV + $"%UseRay".add_exception(self) + $"%MeleeRay".add_exception(self) + $"%UseRay".add_exception($AreaDetect) + $"%MeleeRay".add_exception($AreaDetect) func get_init_info(): return {"linear_velocity" : linear_velocity, "angular_velocity" : angular_velocity, "controlling_machine" : controlling_machine, "team" : team, "health" : health, "nametag" : $Nametag.text} @@ -82,6 +79,8 @@ func _process(_delta: float) -> void: if Input.is_action_just_pressed("fire2"): machine.attack2() machine.direction_input(Input.get_action_strength("move_forward"),Input.get_action_strength("move_backward"), Input.get_action_strength("move_right"),Input.get_action_strength("move_left"), Input.get_action_strength("alt_right"),Input.get_action_strength("alt_left")) + machine.misc_input(Input.get_action_strength("move_duck"),Input.get_action_strength("move_jump"),Input.get_action_strength("move_walk")) + machine.mouse_input(Input.get_action_strength("fire"), Input.get_action_strength("fire3"),Input.get_action_strength("fire2")) else: jumping = Input.get_action_strength("move_jump") if Input.is_action_just_pressed("fire"): @@ -97,8 +96,8 @@ func initiate_use(): if ladder_m != null: leave_ladder() return - if $Head/Camera/UseRay.is_colliding(): - var area_c = $Head/Camera/UseRay.get_collider() + if $"%UseRay".is_colliding(): + var area_c = $"%UseRay".get_collider() match area_c.name: "SteerArea": world.rpc_id(1, "_call_on_server", "_client_request_control_vehicle", {"id" : world.client_id, "machine_path" : area_c.get_parent().get_path(), "char_name" : name}) @@ -121,17 +120,16 @@ remotesync func set_net_owner(owner_id): $Nametag.visible = false world.player_char = self is_player = true - cam.current = true + world.cam.attach(self, "FIRSTPERSON", "./Neck/Head") else: $Nametag.visible = true - cam.current = false is_player = false world.get_node("HUD").update_characters() func deselect_character(): if is_network_master(): world.player_char = null - world.get_node("DEFAULTCAM").current = true + if world.client_id != 1: world.cam.attach(world, "STATIC", "./DEFAULTCAM") rpc("set_net_owner", 1) func take_control_of_machine(slave_machine): @@ -139,8 +137,7 @@ func take_control_of_machine(slave_machine): controlling_machine = true func lose_machine(): - if is_player: - cam.current = true + if is_network_master(): world.cam.attach(self, "FIRSTPERSON", "./Neck/Head") controlling_machine = false machine = null @@ -153,19 +150,20 @@ func _physics_process(delta: float) -> void: swim(delta) else: walk(delta) - rpc("set_phys_transform", transform, linear_velocity) is_on_floor = false #reset whether is on floor in between frames # called each physics frame func on_floor_test() -> bool: if $Feet.is_colliding(): is_on_floor = true + floor_normal = Vector3.UP floorspeed = $Feet.get_collider().get_linear_velocity() if $Feet.get_collider().has_method("get_linear_velocity") else Vector3.ZERO return true if player_state: for i in range(player_state.get_contact_count()): var contact_angle_from_up : float = Vector3.UP.angle_to(player_state.get_contact_local_normal(i)) if contact_angle_from_up < FLOOR_MAX_ANGLE: + floor_normal = player_state.get_contact_local_normal(i) is_on_floor = true return true return false @@ -174,6 +172,7 @@ func on_floor_test() -> bool: func _integrate_forces(state) -> void: player_state = state velocity = state.get_linear_velocity() + $normal_vis.look_at($normal_vis.global_transform.origin + global_transform.basis.z, floor_normal) for i in range(player_state.get_contact_count()): var contact_angle_from_up : float = Vector3.UP.angle_to(player_state.get_contact_local_normal(i)) if contact_angle_from_up > FLOOR_MAX_ANGLE and !is_on_floor: @@ -181,13 +180,8 @@ func _integrate_forces(state) -> void: break if i == player_state.get_contact_count() - 1: friction = 1 - -# on input event -func _input(event: InputEvent) -> void: - if is_player: - if event is InputEventMouseMotion: - mouse_axis = event.relative - camera_rotation() + if is_network_master(): + rpc("set_phys_transform", transform, linear_velocity) func walk(_delta:float) -> void: # Input @@ -197,6 +191,8 @@ func walk(_delta:float) -> void: direction.y = 0 direction = direction.normalized() + if floor_normal != Vector3.UP: direction = direction.rotated(floor_normal.cross(Vector3.UP).normalized(), Vector3.UP.angle_to(floor_normal)) + # Jump if is_player and jumping and is_on_floor and can_jump: jump() @@ -212,7 +208,7 @@ func walk(_delta:float) -> void: var projVel = Vector2(velocity.x-floorspeed.x,velocity.z-floorspeed.z).dot(Vector2(direction.x,direction.z)) if is_on_floor: - add_central_force(-mass*linear_velocity.normalized()*c_friction)#friction + add_central_force(-mass*_cspeed*linear_velocity.normalized()*c_friction)#friction if _speed - _cspeed > 0: add_central_force (mass*Vector3(direction.x*_temp_accel, 0, direction.z*_temp_accel))#velocity.x += direction.x*_temp_accel else: @@ -231,7 +227,7 @@ func swim(_delta): add_central_force(Vector3.UP*weight*1.0) add_central_force(-1*linear_velocity*75) #controls - var dir: Basis = cam.get_global_transform().basis + var dir: Basis = head.get_global_transform().basis var m_dir: Vector3 = -move_axis.x * dir.z + move_axis.y * dir.x m_dir = m_dir.normalized() add_central_force(swim_speed*m_dir) @@ -293,22 +289,5 @@ remotesync func remove_dead_character(): deselect_character() queue_free() -func camera_rotation() -> void: - if Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED: - return - if mouse_axis.length() > 0: - var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100) - var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100) - - mouse_axis = Vector2() - - head.rotate_y(deg2rad(horizontal)) - cam.rotate_x(deg2rad(vertical)) - - # Clamp mouse rotation - var temp_rot: Vector3 = cam.rotation_degrees - temp_rot.x = clamp(temp_rot.x, -90, 90) - cam.rotation_degrees = temp_rot - remotesync func net_apply_impulse(impulse_v): apply_central_impulse(impulse_v) diff --git a/godot/scripts/machines/Cannon.gd b/godot/scripts/machines/Cannon.gd index 15807bf..437a20b 100644 --- a/godot/scripts/machines/Cannon.gd +++ b/godot/scripts/machines/Cannon.gd @@ -1,4 +1,4 @@ -extends "res://bin/networked_machine.gdns" +extends "res://scripts/machines/NetworkedMachineGDS.gd" var world_ballistics = null @@ -33,13 +33,13 @@ func mp_init(init_info): # Called when the node enters the scene tree for the first time. func _ready(): - if get_parent().name != "MACHINES": + if get_parent().name != "MACHINES": #if cannon is aboard ship add_collision_exception_with(get_parent()) mode = RigidBody.MODE_STATIC world_ballistics = world.get_node("BALLISTICS") func on_new_control(): - $YawJoint/PitchJoint/Camera.current = true + if is_network_master(): world.cam.attach(self, "STATIC", "./YawJoint/PitchJoint/CameraPoint") func _physics_process(delta): if cooldown > 0: @@ -72,8 +72,10 @@ remotesync func fire(): add_collision_exception_with(cball) cball.global_transform.origin = muzzle.global_transform.origin cball.linear_velocity = muzzle.global_transform.basis.x*ball_speed + cball.shooter = user.name + " (" + world.players_info[user.get_network_master()][0] + ")" + cball.shooter_id = user.get_network_master() cooldown = fire_rate if mode == RigidBody.MODE_STATIC: get_parent().apply_impulse($YawJoint/PitchJoint.global_transform.origin - get_parent().global_transform.origin, -5*cball.mass*ball_speed*muzzle.global_transform.basis.x) else: - apply_impulse($YawJoint/PitchJoint.global_transform.origin - global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x) + if is_network_master(): apply_impulse($YawJoint/PitchJoint.global_transform.origin - global_transform.origin, -1*cball.mass*ball_speed*muzzle.global_transform.basis.x) diff --git a/godot/scripts/machines/NetworkedMachineGDS.gd b/godot/scripts/machines/NetworkedMachineGDS.gd index 5ce5cbe..3f2d420 100644 --- a/godot/scripts/machines/NetworkedMachineGDS.gd +++ b/godot/scripts/machines/NetworkedMachineGDS.gd @@ -5,6 +5,7 @@ var user = null var world = null func _ready(): + print("net machine loads world") world = get_tree().get_root().find_node("GAMEWORLD", true, false) remote func update_phys_transform(t, lv, av): @@ -52,3 +53,9 @@ func attack2(): func direction_input(_fwd,_bwd,_left,_right,_left2,_right2): pass + +func misc_input(_ctrl,_space,_shift): + pass + +func mouse_input(_m1,_m3,_m2): #used for long-press actions + pass diff --git a/godot/scripts/vehicles/Airplane.gd b/godot/scripts/vehicles/Airplane.gd index cf3c21a..aa1f492 100644 --- a/godot/scripts/vehicles/Airplane.gd +++ b/godot/scripts/vehicles/Airplane.gd @@ -2,8 +2,10 @@ extends VehicleBody var countdown var boosting = false +var boost_pressed = false const booster_force = 2500 const brake_force = 50 +var brake_control : float = 0.0 const boost_length = 8 const turn_constant = 0.45 const roll_constant = 0.5 @@ -20,35 +22,94 @@ var vel_slow var parentvel = [Vector3.ZERO, Vector3.ZERO] export var roll_curve : CurveTexture +#net machine variables +var in_use : bool = false +var user = null +var world = null +func get_init_info(): + return {"." : 0} + +func mp_init(init_info): + pass + +remote func update_phys_transform(t, lv, av): + transform = t + linear_velocity = lv + angular_velocity = av + +remotesync func net_apply_impulse(impulse_v): + apply_central_impulse(impulse_v) + +remotesync func set_net_owner(id, char_name): + set_network_master(id) + if id == 1 and char_name == "NONE": #not under control + on_no_control() + if user != null: + user.lose_machine() + user = null + in_use = false + else: + in_use = true + user = world.get_node("PLAYERS/"+char_name) + user.take_control_of_machine(self) + if is_network_master(): + on_new_control() + +func relinquish_control(): + rpc("set_net_owner", 1, "NONE") + +#TO BE OVERRIDDEN BY CHILDREN +func on_new_control(): + pass#user.add_collision_exception_with(self) + #user.global_transform.origin = $Cockpit.global_transform.origin + +func on_no_control(): + pass#user.remove_collision_exception_with(self) + #user.global_transform.origin = $PilotExit.global_transform.origin + +func attack1(): + pass + +func attack2(): + pass + +func direction_input(fwd,bwd,left,right,_left2,_right2): + roll_dir = left - right + pitch_dir = bwd - fwd + +func misc_input(_ctrl,space,shift): + brake_control = shift + if space > 0.1 and !boosting: #if boost is pressed + trigger_boost() + +func mouse_input(_m1,_m3,_m2): #used for long-press actions + pass func _ready(): + world = get_tree().get_root().find_node("GAMEWORLD", true, false) countdown = boost_length brake = 5 - set_network_master(-1) - set_physics_process(true) - #mode = RigidBody.MODE_STATIC func trigger_boost(): - if not boosting: - print("boosting") - boosting = true + print("boosting") + boosting = true + $"%RocketTrail".emitting = true func _process(delta): if is_network_master(): if boosting and countdown <= 0: + $"%RocketTrail".emitting = false print("stopped boosting") boosting = false countdown = boost_length - if Input.is_action_just_pressed("boost"): - trigger_boost() - roll_dir = Input.get_action_strength("roll_left") - Input.get_action_strength("roll_right") - pitch_dir = Input.get_action_strength("pitch_up") - Input.get_action_strength("pitch_down") - $rearwheel.brake = lerp($rearwheel.brake, Input.get_action_strength("brake")*brake_force, 0.05) - func _physics_process(delta): + if in_use and user.get_network_master() == world.client_id: + user.global_transform.origin = $Cockpit.global_transform.origin + user.global_transform.basis = $Cockpit.global_transform.basis.orthonormalized() if is_network_master(): + $rearwheel.brake = lerp($rearwheel.brake, brake_force*brake_control, 0.05) v_angle = atan2(global_transform.basis.x.y,sqrt(global_transform.basis.x.z*global_transform.basis.x.z + global_transform.basis.x.x*global_transform.basis.x.x)) roll_angle = global_transform.basis.x.cross(Vector3.UP).angle_to($rightaileron.global_transform.origin-$wingcenter.global_transform.origin) if $rightaileron.global_transform.origin.y < $leftaileron.global_transform.origin.y: @@ -61,25 +122,11 @@ func _physics_process(delta): #slow plane by drag and gravity if linear_velocity.length() > 16 and linear_velocity.angle_to(global_transform.basis.x) < 0.25: var v_dir = 1 if linear_velocity.y > 0 else -1 - vel_slow = v_dir*sqrt(abs(2*9.8*linear_velocity.y*delta)) + drag_constant + Input.get_action_strength("brake")*5 + vel_slow = v_dir*sqrt(abs(2*9.8*linear_velocity.y*delta)) + drag_constant + brake_control*5 add_force(-1*linear_velocity.normalized()*vel_slow*mass,Vector3.ZERO) - - - #pass #"inherit" linear and angular velocity of what plane is landed on - func _integrate_forces(state): if is_network_master(): - #linear_velocity -= parentvel[0]; angular_velocity -= parentvel[1] -# if $rightwheel.get_rpm() < 60 and $rightwheel.is_in_contact(): -# if $rightwheel/Area.get_overlapping_bodies()[0].has_method("get_linear_velocity"): -# var ulv = $rightwheel/Area.get_overlapping_bodies()[0].linear_velocity -# var uav = $rightwheel/Area.get_overlapping_bodies()[0].angular_velocity -# var upos = $rightwheel/Area.get_overlapping_bodies()[0].global_transform.origin -# ulv += (global_transform.origin - upos).rotated(uav.normalized(),uav.length()*state.get_step()) + global_transform.origin -# parentvel = [ulv,uav] -# else: -# parentvel = [Vector3.ZERO, Vector3.ZERO] if linear_velocity.length() > 25: #linear_velocity = linear_velocity.normalized()*(linear_velocity.length()-vel_slow) var ang_vel_target = Vector3.ZERO @@ -91,7 +138,8 @@ func _integrate_forces(state): #roll (rotate around lengthwise axis) var is_returning = 3 if roll_dir == 0 else 1 #return to flat quicker - ang_vel_target -= roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-roll_angle))*global_transform.basis.x + print(roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate((roll_angle_max-roll_angle)/roll_angle_max))*global_transform.basis.x) + ang_vel_target += roll_constant*is_returning*(roll_dir*roll_curve.curve.interpolate(roll_angle_max-roll_angle))*global_transform.basis.x #turn (based on how much the plane is rolled (need to add ang_vel_target += turn_constant*Vector3.UP*roll_angle @@ -101,6 +149,5 @@ func _integrate_forces(state): if linear_velocity.angle_to(global_transform.basis.x) < 0.25: set_linear_velocity(get_linear_velocity().slerp(transform.basis.x*linear_velocity.length(),0.1)) #linear_velocity += parentvel[0]; angular_velocity += parentvel[1] - rpc("_set_position", global_transform, linear_velocity) - elif get_network_master() == -1 and get_tree().get_network_unique_id() == 1: - rpc("_set_position", global_transform, linear_velocity) + rpc("update_phys_transform", transform, linear_velocity, angular_velocity) + diff --git a/godot/scripts/vehicles/Gunboat.gd b/godot/scripts/vehicles/Gunboat.gd index e1a61c5..8c3f54e 100644 --- a/godot/scripts/vehicles/Gunboat.gd +++ b/godot/scripts/vehicles/Gunboat.gd @@ -1,4 +1,4 @@ -extends "res://scripts/machines/NetworkedMachine.gd" +extends "res://scripts/machines/NetworkedMachineGDS.gd" export var team = 0 @@ -16,11 +16,14 @@ export var rudder_speed = 25 export var rudder_constant = 1800 const RUDDER_MAX = 60 -const health_max = 1000 +const health_max = 3000 var health = health_max const damage_threshold = 20 const max_depth = 2 +#boat ids +onready var nav_rid = $NavigationMeshInstance.get_region_rid() + #controls var throttle: float = 0.0 var rudder: float = 0.0 |
