diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
index 7348999ad..2050c8808 100644
--- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
+++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
@@ -223,6 +223,7 @@
+
@@ -1444,7 +1445,6 @@
-
@@ -1488,6 +1488,7 @@
+
diff --git a/.idea/.idea.Aetheria-Economy/.idea/indexLayout.xml b/.idea/.idea.Aetheria-Economy/.idea/indexLayout.xml
index c5d005208..66d8cf5e2 100644
--- a/.idea/.idea.Aetheria-Economy/.idea/indexLayout.xml
+++ b/.idea/.idea.Aetheria-Economy/.idea/indexLayout.xml
@@ -37,7 +37,6 @@
Logs
Recordings
Server
- Temp
UserSettings
obj
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index 8f89983d7..87339e51d 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -196,11 +196,13 @@
+
+
@@ -330,6 +332,7 @@
+
@@ -342,6 +345,7 @@
+
@@ -399,6 +403,7 @@
+
@@ -448,6 +453,7 @@
+
@@ -460,13 +466,17 @@
+
+
+
+
@@ -529,6 +539,7 @@
+
@@ -695,16 +706,6 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/Assets/ArticulationPoint.cs b/Assets/ArticulationPoint.cs
index 328ca42b3..944541d5f 100644
--- a/Assets/ArticulationPoint.cs
+++ b/Assets/ArticulationPoint.cs
@@ -14,14 +14,32 @@ public class ArticulationPoint : MonoBehaviour
public float PitchMin;
public float PitchMax;
+ public float Speed;
+
+ private float _yaw;
+ private float _pitch;
+
void Update()
{
if (Target)
{
var targetLocal = transform.parent.InverseTransformPoint(Target.position);
+
var yaw = Vector2.SignedAngle(new Vector2(0, 1), new Vector2(targetLocal.x, targetLocal.z));
var pitch = Vector2.SignedAngle(new Vector2(1, 0), new Vector2(targetLocal.z, targetLocal.y));
- transform.localRotation = Quaternion.Euler(clamp(-pitch, -PitchMin, -PitchMax), clamp(yaw, YawMin, YawMax), 0);
+
+ var targetYaw = clamp(-yaw, YawMin, YawMax);
+ var targetPitch = clamp(-pitch, PitchMin, PitchMax);
+
+ if (abs(targetYaw - _yaw) < Speed * Time.deltaTime)
+ _yaw = targetYaw;
+ else _yaw = _yaw + sign(targetYaw - _yaw) * Speed * Time.deltaTime;
+
+ if (abs(targetPitch - _pitch) < Speed * Time.deltaTime)
+ _pitch = targetPitch;
+ else _pitch = _pitch + sign(targetPitch - _pitch) * Speed * Time.deltaTime;
+
+ transform.localRotation = Quaternion.Euler(_pitch, _yaw, 0);
}
}
}
diff --git a/Assets/InventoryMenu.cs b/Assets/InventoryMenu.cs
index 73423a236..2ba83fc2d 100644
--- a/Assets/InventoryMenu.cs
+++ b/Assets/InventoryMenu.cs
@@ -18,6 +18,7 @@ public class InventoryMenu : MonoBehaviour
public PropertiesPanel PropertiesPanel;
public ActionGameManager GameManager;
public RectTransform DragParent;
+ public ConfirmationDialog Dialog;
private int _currentPanel = -1;
@@ -126,12 +127,23 @@ public class InventoryMenu : MonoBehaviour
if (data is InventoryCargoEventData cargoEvent)
{
cargoEvent.CargoBay.Remove(_dragItem);
+ _dragTargetPanel.DropItem(_dragItem, _dragTargetPosition);
}
else if (data is InventoryEntityEventData entityEvent)
{
- entityEvent.Entity.Unequip(_originalEquippedItem);
+ if (entityEvent.Entity.Unequip(_originalEquippedItem) != null)
+ {
+ _dragTargetPanel.DropItem(_dragItem, _dragTargetPosition);
+ }
+ else
+ {
+ Dialog.Clear();
+ Dialog.Title.text = "Unable to move item!";
+ Dialog.AddProperty("Verify that cargo bays are empty before un-equipping them.");
+ Dialog.Show();
+ }
}
- _dragTargetPanel.DropItem(_dragItem, _dragTargetPosition);
+
_dragTargetPanel.FakeOccupancy = null;
}
else
diff --git a/Assets/Materials/Radiators 1.mat b/Assets/Materials/Radiators 1.mat
new file mode 100644
index 000000000..a6219fe9d
--- /dev/null
+++ b/Assets/Materials/Radiators 1.mat
@@ -0,0 +1,87 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Radiators 1
+ m_Shader: {fileID: 4800000, guid: d69ef48273708ef4680762f5cdcfc860, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: -812895718602229137, guid: b7e648471e9dfc44490bd41973711541,
+ type: 3}
+ m_Scale: {x: 8, y: 8}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: -6057190860509678031, guid: 2b42584452fe0cc4fa4e8a115230b156,
+ type: 3}
+ m_Scale: {x: 8, y: 8}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: -894214952450941493, guid: 2b42584452fe0cc4fa4e8a115230b156,
+ type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpPower: 2
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _Emission: 15
+ - _EmissionFresnel: 4
+ - _EmissionRoughnessFresnelPower: 0.5
+ - _GlossMapScale: 1
+ - _Glossiness: 1
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _ReverseRim: 0
+ - _Rotation: 0
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 1, g: 0.40135294, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/Assets/Materials/Radiators 1.mat.meta b/Assets/Materials/Radiators 1.mat.meta
new file mode 100644
index 000000000..c562a84de
--- /dev/null
+++ b/Assets/Materials/Radiators 1.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f396635dc77c59c44ac85ae278a2e909
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/Substance/Metal/metal_car_paint.sbsar b/Assets/Materials/Substance/Metal/metal_car_paint red.sbsar
similarity index 100%
rename from Assets/Materials/Substance/Metal/metal_car_paint.sbsar
rename to Assets/Materials/Substance/Metal/metal_car_paint red.sbsar
diff --git a/Assets/Materials/Substance/Metal/metal_car_paint red.sbsar.meta b/Assets/Materials/Substance/Metal/metal_car_paint red.sbsar.meta
new file mode 100644
index 000000000..90d42c83c
--- /dev/null
+++ b/Assets/Materials/Substance/Metal/metal_car_paint red.sbsar.meta
@@ -0,0 +1,381 @@
+fileFormatVersion: 2
+guid: 504c7bfe0d50ff64a88b8eac2ceb46f8
+ScriptedImporter:
+ internalIDToNameTable:
+ - first:
+ 1: 100000
+ second: metal_car_paint/metal_car_paint
+ - first:
+ 4: 400000
+ second: metal_car_paint/metal_car_paint/Transform
+ - first:
+ 21: 2100000
+ second: mat.Car paint
+ - first:
+ 23: 2300000
+ second: metal_car_paint/metal_car_paint/MeshRenderer
+ - first:
+ 28: 2800000
+ second: Car paint_baseColor
+ - first:
+ 28: 2800002
+ second: Car paint_normal
+ - first:
+ 28: 2800004
+ second: Car paint_metallic
+ - first:
+ 28: 2800006
+ second: Car paint_ambientOcclusion
+ - first:
+ 28: 2800008
+ second: Car paint_height
+ - first:
+ 33: 3300000
+ second: metal_car_paint/metal_car_paint/MeshFilter
+ - first:
+ 114: 11400000
+ second: sbsar
+ - first:
+ 114: 11400002
+ second: graph0
+ - first:
+ 135: 13500000
+ second: metal_car_paint/metal_car_paint/SphereCollider
+ - first:
+ 1001: 100100000
+ second: metal_car_paint
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 232528478, guid: 43a8bbf65be290d44ba52b94476242b9, type: 3}
+ version: 29
+ projectContext: 0
+ mGraphInstanceData:
+ - graphLabel: Car paint
+ prototypeName: Car paint
+ graphDescIndex: 0
+ generateAllOutputs: 0
+ generateMipMaps: 1
+ preset: " \n \n
+ \n \n \n \n \n \n \n \n \n \n \n"
+ shaderName: Standard
+ materialProperties:
+ shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
+ shaderKeywords: _MAINTEX _METALLICGLOSSMAP _NORMALMAP _OCCLUSIONMAP _PARALLAXMAP
+ lightmapFlags: 4
+ enableInstancingVariants: 0
+ doubleSidedGI: 0
+ customRenderQueue: -1
+ texEnvs:
+ - name: _BumpMap
+ texture: {fileID: 3068890721646206586, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8,
+ type: 3}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ - name: _DetailAlbedoMap
+ texture: {instanceID: 0}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ - name: _DetailMask
+ texture: {instanceID: 0}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ - name: _DetailNormalMap
+ texture: {instanceID: 0}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ - name: _EmissionMap
+ texture: {instanceID: 0}
+ scale: {x: 2, y: 2}
+ offset: {x: 0, y: 0}
+ - name: _MainTex
+ texture: {fileID: 5917659159057834157, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8,
+ type: 3}
+ scale: {x: 2, y: 2}
+ offset: {x: 0, y: 0}
+ - name: _MetallicGlossMap
+ texture: {fileID: -3552914696322007609, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8,
+ type: 3}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ - name: _OcclusionMap
+ texture: {fileID: -1242281561028671816, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8,
+ type: 3}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ - name: _ParallaxMap
+ texture: {fileID: -1652887728991447519, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8,
+ type: 3}
+ scale: {x: 1, y: 1}
+ offset: {x: 0, y: 0}
+ floats:
+ - name: _BumpScale
+ float: 1
+ - name: _Cutoff
+ float: 0.5
+ - name: _DetailNormalMapScale
+ float: 1
+ - name: _DstBlend
+ float: 0
+ - name: _GlossMapScale
+ float: 1
+ - name: _Glossiness
+ float: 0.5
+ - name: _GlossyReflections
+ float: 1
+ - name: _Metallic
+ float: 0
+ - name: _Mode
+ float: 0
+ - name: _OcclusionStrength
+ float: 1
+ - name: _Parallax
+ float: 0.005
+ - name: _SmoothnessTextureChannel
+ float: 0
+ - name: _SpecularHighlights
+ float: 1
+ - name: _SrcBlend
+ float: 1
+ - name: _UVSec
+ float: 0
+ - name: _ZWrite
+ float: 1
+ colors:
+ - name: _Color
+ color: {r: 1, g: 1, b: 1, a: 1}
+ - name: _EmissionColor
+ color: {r: 0, g: 0, b: 0, a: 1}
+ outputDescList:
+ - outputName: diffuse
+ identifier: diffuse
+ usageName: diffuse
+ channelStr: diffuse
+ label: Diffuse
+ usage: 0
+ bImage: 1
+ bNumerical: 0
+ bLinear: 0
+ - outputName: baseColor
+ identifier: basecolor
+ usageName: baseColor
+ channelStr: baseColor
+ label: Base Color
+ usage: 1
+ bImage: 1
+ bNumerical: 0
+ bLinear: 0
+ - outputName: normal
+ identifier: normal
+ usageName: normal
+ channelStr: normal
+ label: Normal
+ usage: 7
+ bImage: 1
+ bNumerical: 0
+ bLinear: 1
+ - outputName: specular
+ identifier: specular
+ usageName: specular
+ channelStr: specular
+ label: Specular
+ usage: 11
+ bImage: 1
+ bNumerical: 0
+ bLinear: 0
+ - outputName: glossiness
+ identifier: glossiness
+ usageName: glossiness
+ channelStr: glossiness
+ label: Glossiness
+ usage: 14
+ bImage: 1
+ bNumerical: 0
+ bLinear: 1
+ - outputName: roughness
+ identifier: roughness
+ usageName: roughness
+ channelStr: roughness
+ label: Roughness
+ usage: 15
+ bImage: 1
+ bNumerical: 0
+ bLinear: 1
+ - outputName: metallic
+ identifier: metallic
+ usageName: metallic
+ channelStr: metallic
+ label: Metallic
+ usage: 34
+ bImage: 1
+ bNumerical: 0
+ bLinear: 1
+ - outputName: ambientOcclusion
+ identifier: ambient_occlusion
+ usageName: ambientOcclusion
+ channelStr: ambientOcclusion
+ label: Ambient Occlusion
+ usage: 5
+ bImage: 1
+ bNumerical: 0
+ bLinear: 1
+ - outputName: height
+ identifier: height
+ usageName: height
+ channelStr: height
+ label: Height
+ usage: 9
+ bImage: 1
+ bNumerical: 0
+ bLinear: 1
+ texturePackingList:
+ - targetName: diffuse
+ components:
+ - sourceName: diffuse
+ from: 0
+ to: 3
+ - targetName: baseColor
+ components:
+ - sourceName: baseColor
+ from: 0
+ to: 3
+ - targetName: normal
+ components:
+ - sourceName: normal
+ from: 0
+ to: 3
+ - targetName: specular
+ components:
+ - sourceName: specular
+ from: 0
+ to: 3
+ - targetName: glossiness
+ components:
+ - sourceName: glossiness
+ from: 0
+ to: 3
+ - targetName: roughness
+ components:
+ - sourceName: roughness
+ from: 0
+ to: 3
+ - targetName: metallic
+ components:
+ - sourceName: smoothness
+ from: 0
+ to: 3
+ - targetName: ambientOcclusion
+ components:
+ - sourceName: ambientOcclusion
+ from: 0
+ to: 3
+ - targetName: height
+ components:
+ - sourceName: height
+ from: 0
+ to: 3
+ textureParameters:
+ - textureName: Car paint_glossiness
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_diffuse
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_baseColor
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_normal
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_specular
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_roughness
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_metallic
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_ambientOcclusion
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint_height
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - diffuse
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - baseColor
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - normal
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - specular
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - glossiness
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - roughness
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - metallic
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - ambientOcclusion
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ - textureName: Car paint - height
+ wrapMode: 0
+ filterMode: 1
+ aniso: 1
+ colorSpaceList: []
+ inputTextureMap: []
+ targetSettingList:
+ - label: Default
+ bOverride: 0
+ bLockRatio: 1
+ textureWidth: 2048
+ textureHeight: 2048
+ textureFormatMode: 0
+ normalCompressed: 0
+ bGenerateOnLoad: 1
+ material: {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8,
+ type: 3}
+ generatedTextures:
+ - {fileID: 5917659159057834157, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: 3068890721646206586, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: -3552914696322007609, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: -1242281561028671816, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: -1652887728991447519, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
diff --git a/Assets/Materials/Substance/Metal/metal_car_paint white.sbsar b/Assets/Materials/Substance/Metal/metal_car_paint white.sbsar
new file mode 100644
index 000000000..963310406
--- /dev/null
+++ b/Assets/Materials/Substance/Metal/metal_car_paint white.sbsar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dbee14b278a03ed59e1df8ecd6ba2b07ab7c2b2089e5e2bc3fad5673694a9f03
+size 14971
diff --git a/Assets/Materials/Substance/Metal/metal_car_paint.sbsar.meta b/Assets/Materials/Substance/Metal/metal_car_paint white.sbsar.meta
similarity index 100%
rename from Assets/Materials/Substance/Metal/metal_car_paint.sbsar.meta
rename to Assets/Materials/Substance/Metal/metal_car_paint white.sbsar.meta
diff --git a/Assets/Materials/UI/Map Gravity Lines.mat b/Assets/Materials/UI/Map Gravity Lines.mat
index 093c4cf46..9a0d02de9 100644
--- a/Assets/Materials/UI/Map Gravity Lines.mat
+++ b/Assets/Materials/UI/Map Gravity Lines.mat
@@ -86,7 +86,7 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- - _Scale: 2.7152557
+ - _Scale: 1.6680267
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
diff --git a/Assets/Materials/UI/Turret.mat b/Assets/Materials/UI/Turret.mat
new file mode 100644
index 000000000..47e3459f4
--- /dev/null
+++ b/Assets/Materials/UI/Turret.mat
@@ -0,0 +1,101 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Turret
+ m_Shader: {fileID: 4800000, guid: f69be63d97f3ffe499bc8ad9f5a104c6, type: 3}
+ m_ShaderKeywords: _ALPHAPREMULTIPLY_ON
+ m_LightmapFlags: 0
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: 3000
+ stringTagMap:
+ RenderType: Transparent
+ disabledShaderPasses:
+ - ALWAYS
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 2800000, guid: f1647736355d8a14aa3444e46a012714, type: 3}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BlendOp: 0
+ - _BumpScale: 1
+ - _CameraFadingEnabled: 0
+ - _CameraFarFadeDistance: 2
+ - _CameraNearFadeDistance: 1
+ - _ColorMode: 0
+ - _Cull: 2
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DistortionBlend: 0.5
+ - _DistortionEnabled: 0
+ - _DistortionStrength: 1
+ - _DistortionStrengthScaled: 0
+ - _DstBlend: 10
+ - _EmissionEnabled: 0
+ - _FlipbookMode: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _InvFade: 1
+ - _LightingEnabled: 0
+ - _Metallic: 0
+ - _Mode: 3
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SoftParticlesEnabled: 0
+ - _SoftParticlesFarFadeDistance: 1
+ - _SoftParticlesNearFadeDistance: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 0
+ m_Colors:
+ - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _ColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
+ - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
+ m_BuildTextureStacks: []
diff --git a/Assets/Materials/UI/Turret.mat.meta b/Assets/Materials/UI/Turret.mat.meta
new file mode 100644
index 000000000..c8f98152e
--- /dev/null
+++ b/Assets/Materials/UI/Turret.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 397fd6d1d65c2c84bbd629fd9d4bc19a
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Models/Turret.blend b/Assets/Models/Turret.blend
index c5dd724c2..5100c2620 100644
--- a/Assets/Models/Turret.blend
+++ b/Assets/Models/Turret.blend
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8de92b173431ec653b3e0aadaf758dff9aeb0b3586dcd43b641e138decd08006
-size 1903384
+oid sha256:1d64f60540ea577695ca50e6d4746d6dd7ac72db02d6f7d8b8e8e8f005f45959
+size 2015992
diff --git a/Assets/Models/Turret.blend.meta b/Assets/Models/Turret.blend.meta
index 67f6a9894..449040393 100644
--- a/Assets/Models/Turret.blend.meta
+++ b/Assets/Models/Turret.blend.meta
@@ -69,7 +69,7 @@ ModelImporter:
useFileScale: 1
tangentSpace:
normalSmoothAngle: 60
- normalImportMode: 0
+ normalImportMode: 1
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
diff --git a/Assets/Models/Turret.blend1 b/Assets/Models/Turret.blend1
index 37be8f911..e01cdb7d6 100644
Binary files a/Assets/Models/Turret.blend1 and b/Assets/Models/Turret.blend1 differ
diff --git a/Assets/Models/Turret.fbx b/Assets/Models/Turret.fbx
new file mode 100644
index 000000000..40a22de04
--- /dev/null
+++ b/Assets/Models/Turret.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:343e2dc17751e3be2dbb490e418b5262c0912f31d49a30bff8066d20d9c8eb64
+size 364012
diff --git a/Assets/Models/Turret.fbx.meta b/Assets/Models/Turret.fbx.meta
new file mode 100644
index 000000000..093eabaaf
--- /dev/null
+++ b/Assets/Models/Turret.fbx.meta
@@ -0,0 +1,113 @@
+fileFormatVersion: 2
+guid: 33ad68f41d4b2fe4c9801f449debd3b6
+ModelImporter:
+ serializedVersion: 20101
+ internalIDToNameTable:
+ - first:
+ 74: -5395469358196396232
+ second: LD12_Scanner|LD12_Scanner2Action
+ - first:
+ 74: -339793421420189680
+ second: LD12_Scanner|LD12_ScannerAction
+ - first:
+ 74: -1060864838660959178
+ second: LD12_Scanner2|LD12_Scanner2Action
+ - first:
+ 74: 2014324191034718849
+ second: LD12_Scanner2|LD12_ScannerAction
+ externalObjects: {}
+ materials:
+ materialImportMode: 1
+ materialName: 0
+ materialSearch: 1
+ materialLocation: 1
+ animations:
+ legacyGenerateAnimations: 4
+ bakeSimulation: 0
+ resampleCurves: 1
+ optimizeGameObjects: 0
+ motionNodeName:
+ rigImportErrors:
+ rigImportWarnings:
+ animationImportErrors:
+ animationImportWarnings:
+ animationRetargetingWarnings:
+ animationDoRetargetingWarnings: 0
+ importAnimatedCustomProperties: 0
+ importConstraints: 0
+ animationCompression: 1
+ animationRotationError: 0.5
+ animationPositionError: 0.5
+ animationScaleError: 0.5
+ animationWrapMode: 0
+ extraExposedTransformPaths: []
+ extraUserProperties: []
+ clipAnimations: []
+ isReadable: 0
+ meshes:
+ lODScreenPercentages: []
+ globalScale: 1
+ meshCompression: 0
+ addColliders: 0
+ useSRGBMaterialColor: 1
+ sortHierarchyByName: 1
+ importVisibility: 1
+ importBlendShapes: 1
+ importCameras: 1
+ importLights: 1
+ fileIdsGeneration: 2
+ swapUVChannels: 0
+ generateSecondaryUV: 0
+ useFileUnits: 1
+ keepQuads: 0
+ weldVertices: 1
+ bakeAxisConversion: 0
+ preserveHierarchy: 0
+ skinWeightsMode: 0
+ maxBonesPerVertex: 4
+ minBoneWeight: 0.001
+ meshOptimizationFlags: -1
+ indexFormat: 0
+ secondaryUVAngleDistortion: 8
+ secondaryUVAreaDistortion: 15.000001
+ secondaryUVHardAngle: 88
+ secondaryUVMarginMethod: 1
+ secondaryUVMinLightmapResolution: 40
+ secondaryUVMinObjectScale: 1
+ secondaryUVPackMargin: 4
+ useFileScale: 1
+ tangentSpace:
+ normalSmoothAngle: 60
+ normalImportMode: 0
+ tangentImportMode: 3
+ normalCalculationMode: 4
+ legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
+ blendShapeNormalImportMode: 1
+ normalSmoothingSource: 0
+ referencedClips: []
+ importAnimation: 1
+ humanDescription:
+ serializedVersion: 3
+ human: []
+ skeleton: []
+ armTwist: 0.5
+ foreArmTwist: 0.5
+ upperLegTwist: 0.5
+ legTwist: 0.5
+ armStretch: 0.05
+ legStretch: 0.05
+ feetSpacing: 0
+ globalScale: 1
+ rootMotionBoneName:
+ hasTranslationDoF: 0
+ hasExtraRoot: 0
+ skeletonHasParents: 1
+ lastHumanDescriptionAvatarSource: {instanceID: 0}
+ autoGenerateAvatarMappingIfUnspecified: 1
+ animationType: 2
+ humanoidOversampling: 1
+ avatarSetup: 0
+ additionalBone: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Projectile.cs b/Assets/Projectile.cs
index 7fd18a09d..f1a0e2141 100644
--- a/Assets/Projectile.cs
+++ b/Assets/Projectile.cs
@@ -11,13 +11,16 @@ public class Projectile : MonoBehaviour
public float Gravity;
private bool _alive;
+
public Zone Zone { get; set; }
+ public Vector3 StartPosition { get; set; }
public Vector3 Velocity { get; set; }
public float Damage { get; set; }
public DamageType DamageType { get; set; }
public Entity SourceEntity { get; set; }
-
+ public float Range { get; set; }
+
// Start is called before the first frame update
void Start()
{
@@ -34,20 +37,25 @@ public class Projectile : MonoBehaviour
{
if (SourceEntity == null) return;
- var position = transform.position;
- Velocity += Vector3.up * (sign(Zone.GetHeight(float2(position.x,position.z)) - position.y) * Gravity * Time.deltaTime);
- var ray = new Ray(position, Velocity);
- if (Physics.Raycast(ray, out var hit, Velocity.magnitude, LayerMask.NameToLayer("Combat")))
- {
- var hull = hit.collider.GetComponent();
- if (hull)
- {
- hull.SendHit(Damage, DamageType, SourceEntity, hit);
- }
- StartCoroutine(Kill());
- }
if(_alive)
+ {
+ var position = transform.position;
+ Velocity += Vector3.up * (sign(Zone.GetHeight(float2(position.x,position.z)) - position.y) * Gravity * Time.deltaTime);
+ var ray = new Ray(position, Velocity);
+ if (Physics.Raycast(ray, out var hit, Velocity.magnitude, LayerMask.NameToLayer("Combat")))
+ {
+ var hull = hit.collider.GetComponent();
+ if (hull)
+ {
+ hull.SendHit(Damage, DamageType, SourceEntity, hit);
+ }
+ StartCoroutine(Kill());
+ }
+
transform.position += Velocity;
+ if((transform.position - StartPosition).magnitude > Range)
+ StartCoroutine(Kill());
+ }
}
IEnumerator Kill()
diff --git a/Assets/ProjectileManager.cs b/Assets/ProjectileManager.cs
index 83bc2ef61..da70e93cc 100644
--- a/Assets/ProjectileManager.cs
+++ b/Assets/ProjectileManager.cs
@@ -12,7 +12,8 @@ public class ProjectileManager : MonoBehaviour
p.SourceEntity = source.Entity;
var hp = source.Entity.Hardpoints[item.Position.x, item.Position.y];
var barrel = source.GetBarrel(hp);
- p.transform.position = barrel.position;
+ p.Range = source.Entity.ItemManager.Evaluate(data.Range, item.EquippableItem, source.Entity);
+ p.StartPosition = p.transform.position = barrel.position;
p.Velocity = barrel.forward * source.Entity.ItemManager.Evaluate(data.Velocity, item.EquippableItem, source.Entity);
p.Damage = source.Entity.ItemManager.Evaluate(data.Damage, item.EquippableItem, source.Entity);
p.DamageType = data.DamageType;
diff --git a/Assets/Resources/Prefabs/Ships/Djinni.prefab b/Assets/Resources/Prefabs/Ships/Djinni.prefab
index aee0d2819..b3f6f1fcf 100644
--- a/Assets/Resources/Prefabs/Ships/Djinni.prefab
+++ b/Assets/Resources/Prefabs/Ships/Djinni.prefab
@@ -7196,5 +7196,6 @@ MonoBehaviour:
Target: {fileID: 0}
YawMin: 0
YawMax: 0
- PitchMin: 15
- PitchMax: -45
+ PitchMin: -45
+ PitchMax: 15
+ Speed: 15
diff --git a/Assets/Resources/Prefabs/Turrets/Turret.prefab b/Assets/Resources/Prefabs/Turrets/Turret.prefab
new file mode 100644
index 000000000..95d6b4a97
--- /dev/null
+++ b/Assets/Resources/Prefabs/Turrets/Turret.prefab
@@ -0,0 +1,1266 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &252092834766144829
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8377448638104583804}
+ - component: {fileID: 7612603927487076180}
+ - component: {fileID: 3483230693202533876}
+ - component: {fileID: 667483273640189963}
+ - component: {fileID: 4456774205701546612}
+ m_Layer: 14
+ m_Name: Icon
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8377448638104583804
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 252092834766144829}
+ m_LocalRotation: {x: 1, y: -0, z: -0, w: -0.00000008940697}
+ m_LocalPosition: {x: 0, y: 0, z: 7.23}
+ m_LocalScale: {x: 50, y: 50.000034, z: 50.000034}
+ m_Children: []
+ m_Father: {fileID: 7279045006683137756}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &7612603927487076180
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 252092834766144829}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &3483230693202533876
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 252092834766144829}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 397fd6d1d65c2c84bbd629fd9d4bc19a, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!64 &667483273640189963
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 252092834766144829}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!114 &4456774205701546612
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 252092834766144829}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &1540544894083512783
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8392758469276633946}
+ - component: {fileID: 6403286589338250947}
+ - component: {fileID: 2973799556959900949}
+ m_Layer: 0
+ m_Name: LD12_Main.001
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8392758469276633946
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1540544894083512783}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: -1.9, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314640455870929}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &6403286589338250947
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1540544894083512783}
+ m_Mesh: {fileID: 2804577904970917418, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!23 &2973799556959900949
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1540544894083512783}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ - {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &1727314640455870928
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314640455870929}
+ - component: {fileID: 1727314640455870930}
+ m_Layer: 0
+ m_Name: Articulation Point
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314640455870929
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314640455870928}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 7671155440789524956}
+ - {fileID: 8392758469276633946}
+ - {fileID: 1727314641413589630}
+ - {fileID: 1727314641367161992}
+ m_Father: {fileID: 1727314642013213443}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1727314640455870930
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314640455870928}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4a2c831a00e255547b4261897f5c0b81, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Target: {fileID: 0}
+ YawMin: 0
+ YawMax: 0
+ PitchMin: -45
+ PitchMax: 28
+ Speed: 15
+--- !u!1 &1727314640817046611
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314640817046620}
+ m_Layer: 0
+ m_Name: Hardpoints
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314640817046620
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314640817046611}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1727314640956741321}
+ - {fileID: 1727314642268200747}
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1727314640956741320
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314640956741321}
+ - component: {fileID: 1727314640956741322}
+ m_Layer: 0
+ m_Name: Left Gun
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314640956741321
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314640956741320}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314640817046620}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1727314640956741322
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314640956741320}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2b6f57d9fe9e78c438112332511e7b07, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ FiringPoint:
+ - {fileID: 1727314641413589630}
+--- !u!1 &1727314641367161999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314641367161992}
+ m_Layer: 0
+ m_Name: Right Barrel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314641367161992
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314641367161999}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0.43, y: 0.096, z: 1.245}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314640455870929}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1727314641413589629
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314641413589630}
+ m_Layer: 0
+ m_Name: Left Barrel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314641413589630
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314641413589629}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -0.415, y: 0.126, z: 1.265}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314640455870929}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1727314641991746687
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314641991746680}
+ - component: {fileID: 1727314641991746681}
+ m_Layer: 0
+ m_Name: Radiator Pivot
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314641991746680
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314641991746687}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1107077262217616032}
+ - {fileID: 1400495860060317977}
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1727314641991746681
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314641991746687}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cd72410ad11370d478bf52dc4afddc0c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Axis: {x: 0, y: 1, z: 0}
+ Speed: 7.5
+--- !u!1 &1727314642013213442
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314642013213443}
+ m_Layer: 0
+ m_Name: Pitch Pivot
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314642013213443
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314642013213442}
+ m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: 0, z: 1.8999999}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1727314640455870929}
+ m_Father: {fileID: 7279045006683137756}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1727314642051522539
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314642051522548}
+ - component: {fileID: 1042551328614064086}
+ m_Layer: 0
+ m_Name: Turret Yaw Pivot
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314642051522548
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314642051522539}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 7279045006683137756}
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1042551328614064086
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314642051522539}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4a2c831a00e255547b4261897f5c0b81, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Target: {fileID: 0}
+ YawMin: -720
+ YawMax: 720
+ PitchMin: 0
+ PitchMax: 0
+ Speed: 15
+--- !u!1 &1727314642268200746
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1727314642268200747}
+ - component: {fileID: 1727314642268200756}
+ m_Layer: 0
+ m_Name: Right Gun
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1727314642268200747
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314642268200746}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314640817046620}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1727314642268200756
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1727314642268200746}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2b6f57d9fe9e78c438112332511e7b07, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ FiringPoint:
+ - {fileID: 1727314641367161992}
+--- !u!1 &1796972107386253351
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3103618512529724952}
+ - component: {fileID: 5495307182897004020}
+ - component: {fileID: 587740871002326469}
+ - component: {fileID: 1796972107386253344}
+ m_Layer: 0
+ m_Name: LD12_Scanner2
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &3103618512529724952
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796972107386253351}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &5495307182897004020
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796972107386253351}
+ m_Mesh: {fileID: 5313178652037130226, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!23 &587740871002326469
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796972107386253351}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ - {fileID: 3954565982357225544, guid: 53adf8e53222e6f4791d7bf2110fb70c, type: 3}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &1796972107386253344
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1796972107386253351}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cd72410ad11370d478bf52dc4afddc0c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Axis: {x: 0, y: 0, z: 1}
+ Speed: -25
+--- !u!1 &2664341253667465538
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1107077262217616032}
+ - component: {fileID: 2664341253667465548}
+ - component: {fileID: 2664341253667465539}
+ m_Layer: 0
+ m_Name: Cylinder.001
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1107077262217616032
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2664341253667465538}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0.000017106533, y: 0.9793335, z: 0.00001692772}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314641991746680}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &2664341253667465548
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2664341253667465538}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eff043e6f0a5f834ebfbc7f750260ae0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!64 &2664341253667465539
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2664341253667465538}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: -7387706064836869012, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!1 &3028840165937219681
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7671155440789524956}
+ - component: {fileID: 3028840165937219682}
+ - component: {fileID: 3028840165937219683}
+ m_Layer: 0
+ m_Name: Cube.001
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &7671155440789524956
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3028840165937219681}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: -1.9, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314640455870929}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!64 &3028840165937219682
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3028840165937219681}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 4493585093827132993, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!114 &3028840165937219683
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3028840165937219681}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eff043e6f0a5f834ebfbc7f750260ae0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &3495863821383666329
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4055558357782281998}
+ - component: {fileID: 8944161893655398130}
+ - component: {fileID: 4818779000612417220}
+ m_Layer: 0
+ m_Name: LD12_Main
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4055558357782281998
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3495863821383666329}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &8944161893655398130
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3495863821383666329}
+ m_Mesh: {fileID: 8015487029495216440, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!23 &4818779000612417220
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3495863821383666329}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ - {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: -741235592913766832, guid: 885e680924fc12c439a842a2142d4b78, type: 3}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &3679721456505528735
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1400495860060317977}
+ - component: {fileID: 3724182920659359263}
+ - component: {fileID: 8504342740407631773}
+ m_Layer: 0
+ m_Name: LD12_Main.005
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1400495860060317977
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3679721456505528735}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1727314641991746680}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &3724182920659359263
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3679721456505528735}
+ m_Mesh: {fileID: -7350775625961525960, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!23 &8504342740407631773
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3679721456505528735}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: f396635dc77c59c44ac85ae278a2e909, type: 2}
+ - {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ - {fileID: -741235592913766832, guid: 885e680924fc12c439a842a2142d4b78, type: 3}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &5831785441666828417
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7279045006683137756}
+ - component: {fileID: 1365312991715299536}
+ - component: {fileID: 3686731686777660051}
+ m_Layer: 0
+ m_Name: LD12_Main.004
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &7279045006683137756
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5831785441666828417}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 8377448638104583804}
+ - {fileID: 1727314642013213443}
+ m_Father: {fileID: 1727314642051522548}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &1365312991715299536
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5831785441666828417}
+ m_Mesh: {fileID: -2334529448091913569, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!23 &3686731686777660051
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5831785441666828417}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 3720744386649352057, guid: 504c7bfe0d50ff64a88b8eac2ceb46f8, type: 3}
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &6782280586133632288
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6148628377977073562}
+ - component: {fileID: 6782280586133632289}
+ m_Layer: 0
+ m_Name: Turret
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &6148628377977073562
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6782280586133632288}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 5, y: 5, z: 5}
+ m_Children:
+ - {fileID: 1073083876358738496}
+ - {fileID: 4055558357782281998}
+ - {fileID: 4698243474491765904}
+ - {fileID: 3103618512529724952}
+ - {fileID: 1727314642051522548}
+ - {fileID: 1727314641991746680}
+ - {fileID: 1727314640817046620}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &6782280586133632289
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6782280586133632288}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 170aefb3b5cd0e444826f3561d38a962, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ HullColliders:
+ - {fileID: 6946734302097032818}
+ - {fileID: 2664341253667465548}
+ - {fileID: 3028840165937219683}
+ ThrusterHardpoints: []
+ WeaponHardpoints:
+ - {fileID: 1727314640956741322}
+ - {fileID: 1727314642268200756}
+ ArticulationPoints:
+ - {fileID: 1042551328614064086}
+ - {fileID: 1727314640455870930}
+--- !u!1 &6946734302097032817
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1073083876358738496}
+ - component: {fileID: 6946734302097032819}
+ - component: {fileID: 6946734302097032818}
+ m_Layer: 0
+ m_Name: Body Collider
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1073083876358738496
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6946734302097032817}
+ m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 1.4210855e-14, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!64 &6946734302097032819
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6946734302097032817}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 4
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 2534964839176971238, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!114 &6946734302097032818
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6946734302097032817}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eff043e6f0a5f834ebfbc7f750260ae0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &8304154918997209427
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4698243474491765904}
+ - component: {fileID: 645052713255078889}
+ - component: {fileID: 628898948874959010}
+ - component: {fileID: 8304154918997209438}
+ - component: {fileID: 8304154918997209437}
+ - component: {fileID: 8304154918997209436}
+ m_Layer: 0
+ m_Name: LD12_Scanner
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &4698243474491765904
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8304154918997209427}
+ m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 6148628377977073562}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &645052713255078889
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8304154918997209427}
+ m_Mesh: {fileID: 3950215576658255144, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+--- !u!23 &628898948874959010
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8304154918997209427}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 3954565982357225544, guid: 53adf8e53222e6f4791d7bf2110fb70c, type: 3}
+ - {fileID: 3720744386649352057, guid: b2bec4b400153d745b2915f1c43e5c96, type: 3}
+ - {fileID: 381320166465554420, guid: f143db2fec0aefa45b3255990a395382, type: 3}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!114 &8304154918997209438
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8304154918997209427}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cd72410ad11370d478bf52dc4afddc0c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ Axis: {x: 0, y: 0, z: 1}
+ Speed: 15
+--- !u!65 &8304154918997209437
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8304154918997209427}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 2
+ m_Size: {x: 0.16, y: 2.273619, z: 0.32}
+ m_Center: {x: 0, y: 0, z: 0.08}
+--- !u!114 &8304154918997209436
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8304154918997209427}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eff043e6f0a5f834ebfbc7f750260ae0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
diff --git a/Assets/Resources/Prefabs/Turrets/Turret.prefab.meta b/Assets/Resources/Prefabs/Turrets/Turret.prefab.meta
new file mode 100644
index 000000000..c520a9c25
--- /dev/null
+++ b/Assets/Resources/Prefabs/Turrets/Turret.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8ffa1560728d1e848b6553d85057a511
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Prefabs/Weapons/Bullet Manager.prefab b/Assets/Resources/Prefabs/Weapons/Bullet Manager.prefab
index 31fc23e99..0f258972d 100644
--- a/Assets/Resources/Prefabs/Weapons/Bullet Manager.prefab
+++ b/Assets/Resources/Prefabs/Weapons/Bullet Manager.prefab
@@ -86,7 +86,7 @@ TrailRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
- m_Time: 2
+ m_Time: 0.1
m_Parameters:
serializedVersion: 3
widthMultiplier: 1
diff --git a/Assets/Resources/Sprites/Attribution.txt b/Assets/Resources/Sprites/Attribution.txt
index 9b440cd9a..6d2664025 100644
--- a/Assets/Resources/Sprites/Attribution.txt
+++ b/Assets/Resources/Sprites/Attribution.txt
@@ -49,6 +49,7 @@ Infinity By ProSymbols
Box by Rajive
storage by Gajah Mada Studio
Tank by Creative Stall
+Satellite by Amelia
Other
diff --git a/Assets/Resources/Sprites/Icons/Stroked/Satellite.png b/Assets/Resources/Sprites/Icons/Stroked/Satellite.png
new file mode 100644
index 000000000..a3f490b97
--- /dev/null
+++ b/Assets/Resources/Sprites/Icons/Stroked/Satellite.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c7935515e57b3f23ca33e878f656146ae9b069cd4cb37976e06b12d7eb40102
+size 18647
diff --git a/Assets/Resources/Sprites/Icons/Stroked/Satellite.png.meta b/Assets/Resources/Sprites/Icons/Stroked/Satellite.png.meta
new file mode 100644
index 000000000..63f070459
--- /dev/null
+++ b/Assets/Resources/Sprites/Icons/Stroked/Satellite.png.meta
@@ -0,0 +1,118 @@
+fileFormatVersion: 2
+guid: f1647736355d8a14aa3444e46a012714
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: WebGL
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Rotate.cs b/Assets/Rotate.cs
new file mode 100644
index 000000000..1e821a792
--- /dev/null
+++ b/Assets/Rotate.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Rotate : MonoBehaviour
+{
+ public Vector3 Axis;
+
+ public float Speed;
+
+ void Update()
+ {
+ transform.localRotation *= Quaternion.AngleAxis(Speed * Time.deltaTime, Axis);
+ }
+}
diff --git a/Assets/Scripts/ServerShared/Agents/Aim.cs.meta b/Assets/Rotate.cs.meta
similarity index 83%
rename from Assets/Scripts/ServerShared/Agents/Aim.cs.meta
rename to Assets/Rotate.cs.meta
index ed9441448..8cac01e3a 100644
--- a/Assets/Scripts/ServerShared/Agents/Aim.cs.meta
+++ b/Assets/Rotate.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 4daff8784b3444a4ab5466da3368cd7a
+guid: cd72410ad11370d478bf52dc4afddc0c
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/Scenes/ARPG.unity b/Assets/Scenes/ARPG.unity
index 34cc2566c..b2f70b04e 100644
--- a/Assets/Scenes/ARPG.unity
+++ b/Assets/Scenes/ARPG.unity
@@ -4586,10 +4586,10 @@ RectTransform:
m_Father: {fileID: 947321578}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 129.725, y: 0}
- m_SizeDelta: {x: 36.930023, y: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &608624600
MonoBehaviour:
@@ -4629,7 +4629,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
+ m_IsActive: 1
--- !u!224 &620555923
RectTransform:
m_ObjectHideFlags: 0
@@ -4650,7 +4650,7 @@ RectTransform:
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -35.87}
- m_SizeDelta: {x: 285.7, y: 90.91}
+ m_SizeDelta: {x: 285.7, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &620555924
MonoBehaviour:
@@ -4690,9 +4690,10 @@ MonoBehaviour:
type: 3}
IncrementField: {fileID: 5486709585343280439, guid: 9c14c92a1a08b0a4fb4f6aa6f8504082,
type: 3}
- Content: {fileID: 0}
+ Content: {fileID: 620555923}
SelectedChild: {fileID: 0}
CancelClickCatcher: {fileID: 1420548305}
+ ButtonGroup: {fileID: 947321577}
Cancel: {fileID: 1176624628}
Confirm: {fileID: 843760693}
--- !u!114 &620555925
@@ -5691,10 +5692,10 @@ RectTransform:
m_Father: {fileID: 620555923}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 142.85, y: -21.455}
- m_SizeDelta: {x: 269.7, y: 26.91}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &738229278
MonoBehaviour:
@@ -7798,10 +7799,10 @@ RectTransform:
m_Father: {fileID: 620555923}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 142.85, y: -66.91}
- m_SizeDelta: {x: 269.7, y: 32}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &947321579
MonoBehaviour:
@@ -10975,27 +10976,27 @@ PrefabInstance:
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.x
- value: 55.629997
+ value: 55.675
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMin.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMax.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.y
- value: -16
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_SizeDelta.x
- value: 47.259995
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11100,17 +11101,17 @@ PrefabInstance:
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.x
- value: 55.629997
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.y
- value: -16
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_SizeDelta.x
- value: 111.259995
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11125,7 +11126,7 @@ PrefabInstance:
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMin.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11135,7 +11136,7 @@ PrefabInstance:
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMax.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11150,22 +11151,22 @@ PrefabInstance:
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMin.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMax.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.y
- value: -16
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_SizeDelta.x
- value: 111.259995
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11175,7 +11176,7 @@ PrefabInstance:
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.x
- value: 55.629997
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 4710256612221957410, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11532,27 +11533,27 @@ PrefabInstance:
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.x
- value: 60.754997
+ value: 60.98
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMin.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMax.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.y
- value: -16
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_SizeDelta.x
- value: 57.509995
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11652,17 +11653,17 @@ PrefabInstance:
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.x
- value: 208.945
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.y
- value: -16
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_SizeDelta.x
- value: 121.509995
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11677,7 +11678,7 @@ PrefabInstance:
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMin.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11687,7 +11688,7 @@ PrefabInstance:
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMax.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 2297648055057363568, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11702,22 +11703,22 @@ PrefabInstance:
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMin.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchorMax.y
- value: 1
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.y
- value: -16
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_SizeDelta.x
- value: 121.509995
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -11727,7 +11728,7 @@ PrefabInstance:
- target: {fileID: 3873577224371502733, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
propertyPath: m_AnchoredPosition.x
- value: 60.754997
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 4710256612221957410, guid: 2758dfa2744d7ad4d8877545189d116e,
type: 3}
@@ -13721,6 +13722,7 @@ MonoBehaviour:
PropertiesPanel: {fileID: 7399108074413661592}
GameManager: {fileID: 1009503729}
DragParent: {fileID: 245842385}
+ Dialog: {fileID: 620555924}
--- !u!1 &2011788088
GameObject:
m_ObjectHideFlags: 0
@@ -15804,7 +15806,8 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_Sprite: {fileID: 21300000, guid: 45f0e5e2648ab8a40ba0d8e384188776, type: 3}
+ m_Sprite: {fileID: -134468233401069099, guid: ef4a863cd35ba454cb1d7e37e6388abe,
+ type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
@@ -15813,7 +15816,7 @@ MonoBehaviour:
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
+ m_PixelsPerUnitMultiplier: 1.5
--- !u!222 &1605725322975872061
CanvasRenderer:
m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/ARPG_Profiles/Postprocessing Profile.asset b/Assets/Scenes/ARPG_Profiles/Postprocessing Profile.asset
index 77ed0213c..22e7dcabd 100644
--- a/Assets/Scenes/ARPG_Profiles/Postprocessing Profile.asset
+++ b/Assets/Scenes/ARPG_Profiles/Postprocessing Profile.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b083972fbaaaf785869935ee1fc820ca87e08d4c99263118f85d49bd31c8d387
-size 25032
+oid sha256:1b1e1a6045f2efed30105595997508ab05361970e976edc40f3db6a1f93b7cd2
+size 25029
diff --git a/Assets/Scripts/ActionGameManager.cs b/Assets/Scripts/ActionGameManager.cs
index 80783f68b..9a9e4a471 100644
--- a/Assets/Scripts/ActionGameManager.cs
+++ b/Assets/Scripts/ActionGameManager.cs
@@ -110,7 +110,7 @@ public class ActionGameManager : MonoBehaviour
_input.Player.Disable();
GameplayUI.SetActive(false);
Menu.ShowTab(MenuTab.Map);
- MenuMap.Position = _currentShip.Position;
+ MenuMap.Position = _currentShip.Position.xz;
};
_input.Global.Inventory.performed += context =>
@@ -354,10 +354,10 @@ public class ActionGameManager : MonoBehaviour
var stationType = ItemData.GetAll().First(x=>x.HullType==HullType.Station);
var stationHull = ItemManager.CreateInstance(stationType, 0, 1) as EquippableItem;
var stationParent = Zone.PlanetInstances.Values.OrderByDescending(p => p.BodyData.Mass.Value).ElementAt(3);
- var parentOrbit = stationParent.Orbit.Data.ID;
- var parentPos = Zone.GetOrbitPosition(parentOrbit);
- var stationPos = parentPos + ItemManager.Random.NextFloat2Direction() * stationParent.GravityWellRadius.Value * .1f;
- var stationOrbit = Zone.CreateOrbit(parentOrbit, stationPos);
+ var stationParentOrbit = stationParent.Orbit.Data.ID;
+ var stationParentPos = Zone.GetOrbitPosition(stationParentOrbit);
+ var stationPos = stationParentPos + ItemManager.Random.NextFloat2Direction() * stationParent.GravityWellRadius.Value * .1f;
+ var stationOrbit = Zone.CreateOrbit(stationParentOrbit, stationPos);
var station = new OrbitalEntity(ItemManager, Zone, stationHull, stationOrbit.ID);
Zone.Entities.Add(station);
var dockingBayData = ItemData.GetAll().First();
@@ -365,6 +365,34 @@ public class ActionGameManager : MonoBehaviour
station.TryEquip(dockingBay);
station.Active = true;
+ var reactorData = ItemData.GetAll().First(x => x.HardpointType == HardpointType.Reactor && x.Shape.Height == 2);
+ var autocannonData = ItemData.GetAll().First(x => x.Name == "Autocannon");
+ var ammoData = ItemData.GetAll().First(x => x.Name == "AC2 Ammo");
+
+ var turretType = ItemData.GetAll().First(x=>x.HullType==HullType.Turret);
+ var turretHull = ItemManager.CreateInstance(turretType, 0, 1) as EquippableItem;
+ var turretParent = Zone.PlanetInstances.Values.OrderByDescending(p => p.BodyData.Mass.Value).ElementAt(5);
+ var turretParentOrbit = turretParent.Orbit.Data.ID;
+ var turretParentPos = Zone.GetOrbitPosition(turretParentOrbit);
+ var turretPos = turretParentPos + ItemManager.Random.NextFloat2Direction() * turretParent.GravityWellRadius.Value * .05f;
+ var turretOrbit = Zone.CreateOrbit(turretParentOrbit, turretPos);
+ var turret = new OrbitalEntity(ItemManager, Zone, turretHull, turretOrbit.ID);
+ turret.TryEquip(ItemManager.CreateInstance(reactorData, .5f, 1) as EquippableItem);
+
+ var controlModuleData = ItemData.GetAll().First(x => x.Name == "Murder Module");
+ turret.TryEquip(ItemManager.CreateInstance(controlModuleData, .5f, 1) as EquippableItem);
+
+ turret.TryEquip(ItemManager.CreateInstance(autocannonData, .5f, 1) as EquippableItem);
+ turret.TryEquip(ItemManager.CreateInstance(autocannonData, .5f, 1) as EquippableItem);
+
+ var cargo1Data = ItemData.GetAll().First(x => x.Name == "Cargo Bay 1x1");
+ var cargo1 = ItemManager.CreateInstance(cargo1Data, .5f, 1);
+ turret.TryEquip(cargo1 as EquippableItem);
+
+ turret.CargoBays.First().TryStore(ItemManager.CreateInstance(ammoData, 400));
+ turret.Active = true;
+ Zone.Entities.Add(turret);
+
var hullType = ItemData.GetAll().First(x=>x.HullType==HullType.Ship);
var shipHull = ItemManager.CreateInstance(hullType, 0, 1) as EquippableItem;
var ship = new Ship(ItemManager, Zone, shipHull);
@@ -378,21 +406,18 @@ public class ActionGameManager : MonoBehaviour
//dockingCargo.TryStore(ItemManager.CreateInstance(thrusterData, .5f, 1));
}
- var reactorData = ItemData.GetAll().First(x => x.HardpointType == HardpointType.Reactor && x.Shape.Height == 2);
ship.TryEquip(ItemManager.CreateInstance(reactorData, .5f, 1) as EquippableItem);
var cockpitData = ItemData.GetAll().First(x => x.Behaviors.Any(b=>b is CockpitData));
ship.TryEquip(ItemManager.CreateInstance(cockpitData, .5f, 1) as EquippableItem);
- var autocannonData = ItemData.GetAll().First(x => x.Name == "Autocannon");
ship.TryEquip(ItemManager.CreateInstance(autocannonData, .5f, 1) as EquippableItem);
ship.TryEquip(ItemManager.CreateInstance(autocannonData, .5f, 1) as EquippableItem);
var cargoData = ItemData.GetAll().First(x => x.Name == "Cargo Bay 4x4");
ship.TryEquip(ItemManager.CreateInstance(cargoData, .5f, 1) as EquippableItem);
- var ammoData = ItemData.GetAll().First(x => x.Name == "AC2 Ammo");
- ship.CargoBays.First().TryStore(ItemManager.CreateInstance(ammoData, 100));
+ ship.CargoBays.First().TryStore(ItemManager.CreateInstance(ammoData, 200));
//dockingCargo.TryStore(ItemManager.CreateInstance(reactorData, .5f, 1));
Dock();
@@ -413,7 +438,7 @@ public class ActionGameManager : MonoBehaviour
if (_currentShip.Parent != null) return;
foreach (var entity in Zone.Entities.ToArray())
{
- if (lengthsq(entity.Position - _currentShip.Position) <
+ if (lengthsq(entity.Position.xz - _currentShip.Position.xz) <
Settings.GameplaySettings.DockingDistance * Settings.GameplaySettings.DockingDistance)
{
var bay = entity.TryDock(_currentShip);
diff --git a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableBeginDragTrigger.cs b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableBeginDragTrigger.cs
index fefc213b2..4f3d3e624 100644
--- a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableBeginDragTrigger.cs
+++ b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableBeginDragTrigger.cs
@@ -22,6 +22,11 @@ namespace UniRx.Triggers
return onBeginDrag ?? (onBeginDrag = new Subject());
}
+ private void OnDisable()
+ {
+ onBeginDrag = null;
+ }
+
protected override void RaiseOnCompletedOnDestroy()
{
if (onBeginDrag != null)
diff --git a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableDragTrigger.cs b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableDragTrigger.cs
index 6dff39f2a..c1f4e1d59 100644
--- a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableDragTrigger.cs
+++ b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableDragTrigger.cs
@@ -22,6 +22,11 @@ namespace UniRx.Triggers
return onDrag ?? (onDrag = new Subject());
}
+ private void OnDisable()
+ {
+ onDrag = null;
+ }
+
protected override void RaiseOnCompletedOnDestroy()
{
if (onDrag != null)
diff --git a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableEndDragTrigger.cs b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableEndDragTrigger.cs
index 8d68135fb..202ce365c 100644
--- a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableEndDragTrigger.cs
+++ b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservableEndDragTrigger.cs
@@ -22,6 +22,11 @@ namespace UniRx.Triggers
return onEndDrag ?? (onEndDrag = new Subject());
}
+ private void OnDisable()
+ {
+ onEndDrag = null;
+ }
+
protected override void RaiseOnCompletedOnDestroy()
{
if (onEndDrag != null)
diff --git a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerClickTrigger.cs b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerClickTrigger.cs
index ae4c685f2..e5236e927 100644
--- a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerClickTrigger.cs
+++ b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerClickTrigger.cs
@@ -22,6 +22,11 @@ namespace UniRx.Triggers
return onPointerClick ?? (onPointerClick = new Subject());
}
+ private void OnDisable()
+ {
+ onPointerClick = null;
+ }
+
protected override void RaiseOnCompletedOnDestroy()
{
if (onPointerClick != null)
diff --git a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerEnterTrigger.cs b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerEnterTrigger.cs
index 615a83c17..31b390523 100644
--- a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerEnterTrigger.cs
+++ b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerEnterTrigger.cs
@@ -22,6 +22,11 @@ namespace UniRx.Triggers
return onPointerEnter ?? (onPointerEnter = new Subject());
}
+ private void OnDisable()
+ {
+ onPointerEnter = null;
+ }
+
protected override void RaiseOnCompletedOnDestroy()
{
if (onPointerEnter != null)
diff --git a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerExitTrigger.cs b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerExitTrigger.cs
index 90d904576..0d3536665 100644
--- a/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerExitTrigger.cs
+++ b/Assets/Scripts/NIH/UniRx/Scripts/UnityEngineBridge/Triggers/ObservablePointerExitTrigger.cs
@@ -22,6 +22,11 @@ namespace UniRx.Triggers
return onPointerExit ?? (onPointerExit = new Subject());
}
+ private void OnDisable()
+ {
+ onPointerExit = null;
+ }
+
protected override void RaiseOnCompletedOnDestroy()
{
if (onPointerExit != null)
diff --git a/Assets/Scripts/Sector Display/SectorRenderer.cs b/Assets/Scripts/Sector Display/SectorRenderer.cs
index c9cd72399..1eaca05db 100644
--- a/Assets/Scripts/Sector Display/SectorRenderer.cs
+++ b/Assets/Scripts/Sector Display/SectorRenderer.cs
@@ -426,34 +426,25 @@ public class SectorRenderer : MonoBehaviour
foreach (var entity in EntityInstances)
{
- var hullData = ItemManager.GetData(entity.Key.Hull) as HullData;
- if(entity.Key is Ship ship)
+ if(entity.Value is ShipInstance shipInstance)
{
- var shipInstance = entity.Value as ShipInstance;
- var normal = _zone.GetNormal(ship.Position);
- var f = new float2(normal.x, normal.z);
- var fl = lengthsq(f);
- if (fl > .001)
- {
- var fa = 1 / (1 - fl) - 1;
- entity.Key.Velocity += normalize(f) * Settings.PlanetSettings.GravityStrength * fa;
- }
-
- //Debug.Log($"Normal: {normal}");
- var shipRight = ship.Direction.Rotate(ItemRotation.Clockwise);
- var forward = Vector3.Cross(new Vector3(shipRight.x, 0, shipRight.y), normal);
- entity.Value.Transform.rotation = Quaternion.LookRotation(forward, normal);
for (int i = 0; i < shipInstance.Thrusters.Length; i++)
{
var emissionModule = shipInstance.ThrusterParticles[i].emission;
emissionModule.rateOverTimeMultiplier = shipInstance.ThrusterBaseEmission[i] * shipInstance.Thrusters[i].Axis;
}
+
+ entity.Value.Transform.rotation = ((Ship) entity.Key).Rotation;
+ }
+
+ foreach (var x in entity.Value.Barrels)
+ {
+ entity.Key.HardpointTransforms[x.Key] = (x.Value[0].position, x.Value[0].forward);
}
entity.Value.LookAtPoint.position = entity.Value.Transform.position + (Vector3) entity.Key.LookDirection * (entity.Key.Target != null
? (EntityInstances[entity.Key.Target].Transform.position - entity.Value.Transform.position).magnitude : 100);
- var h = _zone.GetHeight(entity.Key.Position);
- entity.Value.Transform.position = new Vector3(entity.Key.Position.x, h + hullData.GridOffset, entity.Key.Position.y);
+ entity.Value.Transform.position = entity.Key.Position;
}
var fogPos = FogCameraParent.position;
diff --git a/Assets/Scripts/ServerShared/Agents/Aim.cs b/Assets/Scripts/ServerShared/Agents/Aim.cs
deleted file mode 100644
index 42b5d9b3a..000000000
--- a/Assets/Scripts/ServerShared/Agents/Aim.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using Unity.Mathematics;
-using static Unity.Mathematics.math;
-
-public class Aim : AgentBehavior
-{
- public float2 Objective;
-
- private Thruster _thrust;
- private Turning _turning;
- private VelocityLimit _velocityLimit;
-
- public Aim(ItemManager context, Entity entity, ControllerData controllerData) : base(context, entity, controllerData)
- {
- _velocityLimit = Entity.GetBehaviors().FirstOrDefault();
- _thrust = Entity.GetBehavior();
- _turning = Entity.GetBehavior();
- }
- public override void Update(float delta)
- {
- if (_thrust != null && _turning != null)
- {
- float2 diff = Objective - Entity.Position;
- _turning.Axis = TurningInput(diff);
- _thrust.Axis = 0;
- }
- }
-}
diff --git a/Assets/Scripts/ServerShared/Agents/Locomotion.cs b/Assets/Scripts/ServerShared/Agents/Locomotion.cs
index a90f26717..7387a0299 100644
--- a/Assets/Scripts/ServerShared/Agents/Locomotion.cs
+++ b/Assets/Scripts/ServerShared/Agents/Locomotion.cs
@@ -14,45 +14,45 @@ public class Locomotion : AgentBehavior
public float2 Objective;
private const float TangentSensitivity = 2;
- private Thruster _thrust;
- private Turning _turning;
private VelocityLimit _velocityLimit;
+ private Thruster[] _thrusters;
+ private float _thrust;
public Locomotion(ItemManager context, Entity entity, ControllerData controllerData) : base(context, entity, controllerData)
{
- _velocityLimit = Entity.GetBehaviors().FirstOrDefault();
- _thrust = Entity.GetBehavior();
- _turning = Entity.GetBehavior();
+ _velocityLimit = Entity.GetBehavior();
+ _thrusters = entity.GetBehaviors()
+ .Where(t => t.Item.EquippableItem.Rotation == ItemRotation.Reversed)
+ .ToArray();
+ _thrust = _thrusters.Sum(t => t.Thrust);
}
public override void Update(float delta)
{
- if (_thrust != null && _turning != null)
- {
- float2 diff = Objective - Entity.Position;
-
- // We want to go top speed in the direction of our target
- var topSpeed = _velocityLimit?.Limit ?? 1000;
- float2 desiredVelocity = normalize(diff) * topSpeed;
-
- var accelerationTime = length(desiredVelocity - Entity.Velocity) / (_thrust.Thrust / Entity.Mass);
- var accelerationDistance = accelerationTime * length((desiredVelocity + Entity.Velocity) / 2);
+ var diff = Objective - Entity.Position.xz;
+
+ // We want to go top speed in the direction of our target
+ var topSpeed = _velocityLimit?.Limit ?? 1000;
+ float2 desiredVelocity = normalize(diff) * topSpeed;
+
+ var accelerationTime = length(desiredVelocity - Entity.Velocity) / (_thrust / Entity.Mass);
+ var accelerationDistance = accelerationTime * length((desiredVelocity + Entity.Velocity) / 2);
- // We do not have enough space to get to full speed, use approximate maneuvering
- if (accelerationDistance > length(diff))
- {
- float2 tangential = Entity.Velocity - dot(normalize(diff), normalize(Entity.Velocity)) * Entity.Velocity;
- float2 adjustedDirection = normalize(diff) - tangential * TangentSensitivity;
- _turning.Axis = TurningInput(adjustedDirection);
- _thrust.Axis = 1;
- }
- // We have plenty of space, use exact maneuvering
- else
- {
- var deltaV = desiredVelocity - Entity.Velocity;
- _turning.Axis = TurningInput(deltaV);
- _thrust.Axis = ThrustInput(deltaV);
- }
- }
+ // We do not have enough space to get to full speed, use approximate maneuvering
+ // if (accelerationDistance > length(diff))
+ // {
+ // float2 tangential = Entity.Velocity - dot(normalize(diff), normalize(Entity.Velocity)) * Entity.Velocity;
+ // float2 adjustedDirection = normalize(diff) - tangential * TangentSensitivity;
+ //
+ // _turning.Axis = TurningInput(adjustedDirection);
+ // _thrust.Axis = 1;
+ // }
+ // // We have plenty of space, use exact maneuvering
+ // else
+ // {
+ // var deltaV = desiredVelocity - Entity.Velocity;
+ // _turning.Axis = TurningInput(deltaV);
+ // _thrust.Axis = ThrustInput(deltaV);
+ // }
}
}
diff --git a/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs b/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs
index 348e93080..7b7c95179 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs
@@ -117,6 +117,7 @@ public abstract class PersistentBehaviorData
Union(31, typeof(CapacitorData)),
Union(32, typeof(CockpitData)),
Union(33, typeof(HeatsinkData)),
+ Union(34, typeof(TurretControllerData)),
JsonConverter(typeof(JsonKnownTypesConverter)), JsonObject(MemberSerialization.OptIn)]
public abstract class BehaviorData
{
diff --git a/Assets/Scripts/ServerShared/Behaviors/Controller.cs b/Assets/Scripts/ServerShared/Behaviors/Controller.cs
index 554362222..b425c870d 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Controller.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Controller.cs
@@ -44,7 +44,6 @@ public abstract class ControllerBase : IBehavior, IController, IInitializa
protected Locomotion Locomotion;
protected VelocityMatch VelocityMatch;
- protected Aim Aim;
protected Func TargetPosition;
protected Func TargetVelocity;
protected bool MatchVelocity;
@@ -80,7 +79,6 @@ public abstract class ControllerBase : IBehavior, IController, IInitializa
{
Locomotion = new Locomotion(ItemManager, Entity, _controllerData);
VelocityMatch = new VelocityMatch(ItemManager, Entity, _controllerData);
- Aim = new Aim(ItemManager, Entity, _controllerData);
}
public void Initialize()
@@ -128,7 +126,7 @@ public abstract class ControllerBase : IBehavior, IController, IInitializa
Entity.RemoveParent();
var targetPosition = TargetPosition();
- var distance = length(targetPosition - Entity.Position);
+ var distance = length(targetPosition - Entity.Position.xz);
if (MatchVelocity)
{
var targetVelocity = TargetVelocity();
@@ -203,7 +201,7 @@ public abstract class ControllerBase : IBehavior, IController, IInitializa
public void MoveTo(Entity entity, bool matchVelocity = true, Action onFinish = null)
{
- TargetPosition = () => entity.Position;
+ TargetPosition = () => entity.Position.xz;
TargetVelocity = () => entity.Velocity;
MatchVelocity = matchVelocity;
_movementPhase = MovementPhase.Locomotion;
diff --git a/Assets/Scripts/ServerShared/Behaviors/MiningController.cs b/Assets/Scripts/ServerShared/Behaviors/MiningController.cs
index be4af8b81..95af4a3d8 100644
--- a/Assets/Scripts/ServerShared/Behaviors/MiningController.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/MiningController.cs
@@ -116,7 +116,7 @@ public class MiningController : ControllerBase, IBehavior, IPersistentBe
private void NextAsteroid()
{
- _asteroid = Zone.NearestAsteroid(Task.Asteroids, Entity.Position);
+ _asteroid = Zone.NearestAsteroid(Task.Asteroids, Entity.Position.xz);
Entity.SetMessage("Selecting new asteroid.");
}
diff --git a/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs b/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs
index 36f031b8f..b82a605b7 100644
--- a/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs
@@ -58,7 +58,7 @@ public class MiningTool : IBehavior
var asteroidTransform = Entity.Zone.GetAsteroidTransform(AsteroidBelt, Asteroid);
if (AsteroidBelt != Guid.Empty &&
Entity.Zone.AsteroidExists(AsteroidBelt, Asteroid) &&
- length(Entity.Position - asteroidTransform.xy) - asteroidTransform.w < Range)
+ length(Entity.Position.xz - asteroidTransform.xz) - asteroidTransform.w < Range)
{
Entity.Zone.MineAsteroid(
Entity,
diff --git a/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs b/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs
index f7b04af1a..d91457e89 100644
--- a/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs
@@ -50,7 +50,7 @@ public class PatrolController : IBehavior, IInitializableBehavior
_locomotion.Objective = Entity.Zone.GetOrbitPosition(_targetOrbit);
_locomotion.Update(delta);
- if(length(Entity.Position - _locomotion.Objective) < _data.TargetDistance)
+ if(length(Entity.Position.xz - _locomotion.Objective) < _data.TargetDistance)
RandomTarget();
return true;
diff --git a/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs b/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs
index 657bd14a0..bf668bab0 100644
--- a/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs
@@ -74,7 +74,7 @@ public class ResourceScanner : IBehavior, IAlwaysUpdatedBehavior
{
if(Asteroid > -1 &&
Asteroid < beltData.Asteroids.Length &&
- length(Entity.Position - Entity.Zone.GetAsteroidTransform(ScanTarget, Asteroid).xy) < Range)
+ length(Entity.Position.xz - Entity.Zone.GetAsteroidTransform(ScanTarget, Asteroid).xy) < Range)
{
_scanTime += delta;
if (_scanTime > ScanDuration)
@@ -88,7 +88,7 @@ public class ResourceScanner : IBehavior, IAlwaysUpdatedBehavior
}
else
{
- if(length(Entity.Position - Entity.Zone.GetOrbitPosition(planetData.Orbit)) < Range)
+ if(length(Entity.Position.xz - Entity.Zone.GetOrbitPosition(planetData.Orbit)) < Range)
{
_scanTime += delta;
if (_scanTime > ScanDuration)
diff --git a/Assets/Scripts/ServerShared/Behaviors/SurveyController.cs b/Assets/Scripts/ServerShared/Behaviors/SurveyController.cs
index b6e413391..235525d4a 100644
--- a/Assets/Scripts/ServerShared/Behaviors/SurveyController.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/SurveyController.cs
@@ -109,8 +109,8 @@ public class SurveyController : ControllerBase, IBehavior, IPersistentBe
private void NextPlanet()
{
var planets = Task.Planets.Select(id => Zone.Planets[id]);
- var nearestPlanet = planets.MinBy(p => lengthsq(Entity.Position - GetPosition(p)));
- _asteroid = nearestPlanet is AsteroidBeltData ? Zone.NearestAsteroid(nearestPlanet.ID, Entity.Position) : -1;
+ var nearestPlanet = planets.MinBy(p => lengthsq(Entity.Position.xz - GetPosition(p)));
+ _asteroid = nearestPlanet is AsteroidBeltData ? Zone.NearestAsteroid(nearestPlanet.ID, Entity.Position.xz) : -1;
_targetPlanet = nearestPlanet.ID;
}
@@ -118,7 +118,7 @@ public class SurveyController : ControllerBase, IBehavior, IPersistentBe
{
if (planet is AsteroidBeltData)
{
- if(asteroid == -1) asteroid = Zone.NearestAsteroid(planet.ID, Entity.Position);
+ if(asteroid == -1) asteroid = Zone.NearestAsteroid(planet.ID, Entity.Position.xz);
return Zone.GetAsteroidTransform(planet.ID, asteroid).xy;
}
return Zone.GetOrbitPosition(planet.Orbit);
@@ -128,7 +128,7 @@ public class SurveyController : ControllerBase, IBehavior, IPersistentBe
{
if (planet is AsteroidBeltData)
{
- if(asteroid == -1) asteroid = Zone.NearestAsteroid(planet.ID, Entity.Position);
+ if(asteroid == -1) asteroid = Zone.NearestAsteroid(planet.ID, Entity.Position.xz);
return Zone.GetAsteroidVelocity(planet.ID, asteroid);
}
return Zone.GetOrbitVelocity(planet.Orbit);
diff --git a/Assets/Scripts/ServerShared/Behaviors/TowingController.cs b/Assets/Scripts/ServerShared/Behaviors/TowingController.cs
index 07e9e4b02..0738c4cd4 100644
--- a/Assets/Scripts/ServerShared/Behaviors/TowingController.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/TowingController.cs
@@ -65,7 +65,7 @@ public class TowingController : ControllerBase, IBehavior, IPersi
MoveTo(() =>
{
var orbitParent = Zone.GetOrbitPosition(Task.OrbitParent);
- var parentToUs = Entity.Position - orbitParent;
+ var parentToUs = Entity.Position.xz - orbitParent;
return orbitParent + normalize(parentToUs) * Task.OrbitDistance;
}, () => Zone.GetOrbitVelocity(Task.OrbitParent), OnDelivery);
}
@@ -76,7 +76,7 @@ public class TowingController : ControllerBase, IBehavior, IPersi
Entity.SetMessage("Target delivered. Returning Home.");
- var orbit = Zone.CreateOrbit(Task.OrbitParent, Entity.Position);
+ var orbit = Zone.CreateOrbit(Task.OrbitParent, Entity.Position.xz);
Task.Station.OrbitData = orbit.ID;
FinishTask();
diff --git a/Assets/Scripts/ServerShared/Behaviors/Trigger.cs b/Assets/Scripts/ServerShared/Behaviors/Trigger.cs
index 66e04a2a2..defce8ff4 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Trigger.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Trigger.cs
@@ -20,9 +20,9 @@ public class Trigger : IBehavior
{
private TriggerData _data;
- private Entity Entity { get; }
- private EquippedItem Item { get; }
- private ItemManager Context { get; }
+ public Entity Entity { get; }
+ public EquippedItem Item { get; }
+ public ItemManager Context { get; }
public BehaviorData Data => _data;
diff --git a/Assets/Scripts/ServerShared/Behaviors/TurretController.cs b/Assets/Scripts/ServerShared/Behaviors/TurretController.cs
new file mode 100644
index 000000000..44b44a6b8
--- /dev/null
+++ b/Assets/Scripts/ServerShared/Behaviors/TurretController.cs
@@ -0,0 +1,93 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+using System.Collections.Generic;
+using System.Linq;
+using MessagePack;
+using Newtonsoft.Json;
+using UniRx;
+using Unity.Mathematics;
+using static Unity.Mathematics.math;
+
+[MessagePackObject, JsonObject(MemberSerialization.OptIn), RuntimeInspectable]
+public class TurretControllerData : BehaviorData
+{
+ public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
+ {
+ return new TurretController(context, this, entity, item);
+ }
+}
+
+public class TurretController : IBehavior
+{
+ private TurretControllerData _data;
+ private Dictionary _triggers = new Dictionary();
+
+ public Entity EquippedEntity { get; }
+ public EquippedItem Item { get; }
+ public ItemManager Context { get; }
+
+ public BehaviorData Data => _data;
+
+ public TurretController(ItemManager context, TurretControllerData data, Entity equippedEntity, EquippedItem item)
+ {
+ Context = context;
+ _data = data;
+ EquippedEntity = equippedEntity;
+ Item = item;
+ var weapons = equippedEntity.Equipment.Where(e => e.Behaviors.Any(b => b.Data is WeaponData));
+ foreach (var weapon in weapons)
+ {
+ CheckWeapon(item);
+ }
+
+ equippedEntity.Equipment.ObserveAdd().Subscribe(add => CheckWeapon(add.Value));
+ equippedEntity.Equipment.ObserveRemove().Subscribe(remove =>
+ {
+ foreach (var bg in remove.Value.BehaviorGroups)
+ if (_triggers.ContainsKey(bg.Trigger))
+ _triggers.Remove(bg.Trigger);
+ });
+ }
+
+ private void CheckWeapon(EquippedItem item)
+ {
+ foreach (var bg in item.BehaviorGroups)
+ {
+ if (bg.Trigger != null)
+ {
+ foreach (var b in bg.Behaviors)
+ {
+ if(b.Data is WeaponData weaponData)
+ _triggers.Add(bg.Trigger, weaponData);
+ }
+ }
+ }
+ }
+
+ public bool Update(float delta)
+ {
+ if (EquippedEntity.Target != null)
+ {
+ var diff = EquippedEntity.Target.Position - EquippedEntity.Position;
+ EquippedEntity.LookDirection = normalize(diff);
+ var dist = length(diff);
+
+ foreach (var x in _triggers)
+ {
+ if (Context.Evaluate(x.Value.Range, x.Key.Item.EquippableItem, EquippedEntity) > dist &&
+ dot(EquippedEntity.HardpointTransforms[EquippedEntity.Hardpoints[x.Key.Item.Position.x, x.Key.Item.Position.y]].direction,
+ EquippedEntity.LookDirection) > .9f)
+ {
+ x.Key.Pull();
+ }
+ }
+ }
+ else
+ {
+ EquippedEntity.Target = EquippedEntity.Zone.Entities.FirstOrDefault(e => e is Ship);
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/ServerShared/Behaviors/TurretController.cs.meta b/Assets/Scripts/ServerShared/Behaviors/TurretController.cs.meta
new file mode 100644
index 000000000..a126a7fde
--- /dev/null
+++ b/Assets/Scripts/ServerShared/Behaviors/TurretController.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c19f106bac321f34bab3c83bf64e7e77
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/ServerShared/Entity.cs b/Assets/Scripts/ServerShared/Entity.cs
index fc8650b14..4ddbb8075 100644
--- a/Assets/Scripts/ServerShared/Entity.cs
+++ b/Assets/Scripts/ServerShared/Entity.cs
@@ -23,7 +23,7 @@ public abstract class Entity
public Zone Zone;
public EquippableItem Hull;
- public float2 Position;
+ public float3 Position;
public float2 Direction = float2(0,1);
public float2 Velocity;
@@ -49,6 +49,7 @@ public abstract class Entity
public readonly Dictionary Messages = new Dictionary();
public readonly Dictionary