gg.easy.airship 0.1.2129 → 0.1.2131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/Editor/Packages/AirshipPackagesWindow.cs +1 -1
  2. package/Runtime/Code/Bundles/SystemRoot.cs +12 -0
  3. package/Runtime/Code/Luau/LuauCoreCallbacks.cs +2 -0
  4. package/Runtime/Code/Luau/ReflectionList.cs +1 -0
  5. package/Runtime/Code/LuauAPI/WheelFrictionCurveAPI.cs +9 -0
  6. package/Runtime/Code/LuauAPI/WheelFrictionCurveAPI.cs.meta +3 -0
  7. package/Runtime/Code/MainMenu/MainMenuSceneManager.cs +5 -1
  8. package/Runtime/Code/Network/Simulation/AirshipSimulationManager.cs +6 -0
  9. package/Runtime/Code/Network/StateSystem/AirshipNetworkedStateManager.cs +1 -1
  10. package/Runtime/Code/Player/Character/MovementSystems/Character/CharacterMovement.cs +41 -9
  11. package/Runtime/Code/TSCodeGen/TypeGenerator.cs +1 -0
  12. package/Runtime/Code/VoxelWorld/Editor/VoxelBuilderEditorWindow.cs +4 -2
  13. package/Runtime/Code/VoxelWorld/Editor/VoxelWorldEditor.cs +27 -4
  14. package/Runtime/Code/VoxelWorld/Resources/{VoxelWorldURP.shadergraph → VoxelWorldAtlasURP.shadergraph} +129 -141
  15. package/Runtime/Code/VoxelWorld/Resources/{VoxelWorldURP.mat → VoxelWorldMatURP.mat} +2 -2
  16. package/Runtime/Code/VoxelWorld/TexturePacker.cs +14 -18
  17. package/Runtime/Code/VoxelWorld/VoxelBlockDefinition.cs +1 -1
  18. package/Runtime/Code/VoxelWorld/VoxelBlocks.cs +1 -1
  19. package/Runtime/Code/VoxelWorld/VoxelMeshProcessor.cs +8 -2
  20. package/Runtime/Code/VoxelWorld/VoxelWorld.cs +5 -1
  21. package/Runtime/Code/VoxelWorld/VoxelWorldChunk.cs +9 -3
  22. package/ThirdParty/Graphy - Ultimate Stats Monitor/Editor/GraphyManagerEditor.cs +4 -4
  23. package/ThirdParty/Graphy - Ultimate Stats Monitor/Materials/RAM_Reserved_Graph.mat +12 -67
  24. package/{Runtime/Code/VoxelWorld/Resources/WireFrame.mat → ThirdParty/Graphy - Ultimate Stats Monitor/Materials/Resim_Graph.mat } +21 -50
  25. package/{Runtime/Code/VoxelWorld/Resources/WireFrame.mat.meta → ThirdParty/Graphy - Ultimate Stats Monitor/Materials/Resim_Graph.mat.meta } +1 -1
  26. package/ThirdParty/Graphy - Ultimate Stats Monitor/Prefab/[Graphy].prefab +1669 -78
  27. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Fps/G_FpsGraph.cs +52 -73
  28. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/GraphyDebugger.cs +110 -187
  29. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/GraphyManager.cs +448 -328
  30. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim/G_ResimGraph.cs +188 -0
  31. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim/G_ResimGraph.cs.meta +3 -0
  32. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim/G_ResimManager.cs +226 -0
  33. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim/G_ResimManager.cs.meta +3 -0
  34. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim/G_ResimMonitor.cs +141 -0
  35. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim/G_ResimMonitor.cs.meta +3 -0
  36. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Resim.meta +3 -0
  37. package/ThirdParty/Graphy - Ultimate Stats Monitor/Runtime/Tayx.Graphy.asmdef +4 -1
  38. package/ThirdParty/Mirror/Components/NetworkStatistics.cs +49 -49
  39. package/URP/AirshipURPAsset.asset +3 -3
  40. package/package.json +1 -1
  41. /package/Runtime/Code/VoxelWorld/Resources/{VoxelWorldURP.shadergraph.meta → VoxelWorldAtlasURP.shadergraph.meta} +0 -0
  42. /package/Runtime/Code/VoxelWorld/Resources/{VoxelWorldURP.mat.meta → VoxelWorldMatURP.mat.meta} +0 -0
@@ -395,7 +395,7 @@ namespace Editor.Packages {
395
395
 
396
396
  // Uncomment to just build iOS
397
397
  if (isCoreMaterials) {
398
- // platforms.Clear();
398
+ platforms.Clear();
399
399
  // platforms.Add(AirshipPlatform.iOS);
400
400
  // platforms.Add(AirshipPlatform.Android);
401
401
  platforms.Add(AirshipPlatform.Windows);
@@ -36,6 +36,7 @@ public class SystemRoot : Singleton<SystemRoot> {
36
36
  public static bool startedLoadingExtraBundle = false;
37
37
  public static bool preWarmedCoreShaders = false;
38
38
  public AssetBundle coreMaterialsAssetBundle;
39
+ private bool loadInProgress = false;
39
40
 
40
41
  private void Awake() {
41
42
  DontDestroyOnLoad(this);
@@ -142,12 +143,21 @@ public class SystemRoot : Singleton<SystemRoot> {
142
143
  /// <param name="forceUnloadAll">If false, we attempt to keep packages that are already loaded in place (instead of unloading and re-loading them)</param>
143
144
  /// <returns></returns>
144
145
  public IEnumerator LoadPackages(List<AirshipPackage> packages, bool useUnityAssetBundles, bool forceUnloadAll = true, bool compileLuaOnClient = false, Action<string> onLoadingScreenStep = null) {
146
+ if (this.loadInProgress) {
147
+ Debug.LogWarning("Tried to load packages when load was already in progress. Waiting...");
148
+ while (this.loadInProgress) {
149
+ yield return null;
150
+ }
151
+ }
152
+ this.loadInProgress = true;
153
+
145
154
  #if AIRSHIP_PLAYER
146
155
  print("Packages to load:");
147
156
  for (int i = 0; i < packages.Count; i++) {
148
157
  print($" {i}. {packages[i].id} (Assets v{packages[i].assetVersion}) (Code v{packages[i].codeVersion})");
149
158
  }
150
159
  #endif
160
+
151
161
  //
152
162
  // print("Already loaded asset bundles:");
153
163
  // {
@@ -201,6 +211,7 @@ public class SystemRoot : Singleton<SystemRoot> {
201
211
  }
202
212
  if (zip == null) {
203
213
  Debug.LogError("Zip was null. This is bad.");
214
+ this.loadInProgress = false;
204
215
  yield break;
205
216
  }
206
217
 
@@ -396,6 +407,7 @@ public class SystemRoot : Singleton<SystemRoot> {
396
407
  }
397
408
  }
398
409
 
410
+ this.loadInProgress = false;
399
411
  #if AIRSHIP_PLAYER
400
412
  Debug.Log("[Airship]: Finished loading asset bundles in " + sw.ElapsedMilliseconds + " ms.");
401
413
  #endif
@@ -780,6 +780,8 @@ public partial class LuauCore : MonoBehaviour {
780
780
  return LuauError(thread, "ERROR - " + propName + " get property not found on class " + staticClassName);
781
781
  }
782
782
  else {
783
+ // Not a static class object:
784
+
783
785
  // Profiler.BeginSample("GetRef");
784
786
  System.Object objectReference = ThreadDataManager.GetObjectReference(thread, instanceId);
785
787
  // Profiler.EndSample();
@@ -148,6 +148,7 @@ namespace Luau {
148
148
  [typeof(ScrollRect)] = LuauContextAll,
149
149
  [typeof(Text)] = LuauContextAll,
150
150
  [typeof(RectMask2D)] = LuauContextAll,
151
+ [typeof(WheelFrictionCurve)] = LuauContextAll,
151
152
 
152
153
  // Particles
153
154
  [typeof(ParticleSystem)] = LuauContextAll,
@@ -0,0 +1,9 @@
1
+ using System;
2
+ using UnityEngine;
3
+
4
+ [LuauAPI]
5
+ public class WheelFrictionCurveAPI : BaseLuaAPIClass {
6
+ public override Type GetAPIType() {
7
+ return typeof(WheelFrictionCurve);
8
+ }
9
+ }
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: c28f2fd5c31d42279623c6877ebbd9cb
3
+ timeCreated: 1746810245
@@ -244,7 +244,11 @@ public class MainMenuSceneManager : MonoBehaviour {
244
244
  // Delete core packages
245
245
  var path = Path.Combine(Application.persistentDataPath, "Packages", "@Easy");
246
246
  if (Directory.Exists(path)) {
247
- Directory.Delete(path, true);
247
+ try {
248
+ Directory.Delete(path, true);
249
+ } catch (Exception e) {
250
+ Debug.LogError(e);
251
+ }
248
252
  }
249
253
 
250
254
  // yield return SceneManager.UnloadSceneAsync("MainMenu");
@@ -2,6 +2,7 @@ using System;
2
2
  using System.Collections.Generic;
3
3
  using System.Linq;
4
4
  using Mirror;
5
+ using Tayx.Graphy.Resim;
5
6
  using UnityEngine;
6
7
  using UnityEngine.Serialization;
7
8
 
@@ -144,6 +145,10 @@ namespace Code.Network.Simulation
144
145
  // and capturing snapshots of the interpolated state on its own timeline.
145
146
  var time = NetworkServer.active ? NetworkTime.time : Time.unscaledTimeAsDouble;
146
147
 
148
+ // Update debug overlay
149
+ var buffer = NetworkClient.bufferTime / Math.Min(Time.timeScale, 1);
150
+ G_ResimMonitor.FrameObserverBuffer = buffer;
151
+
147
152
  if (!isActive) return;
148
153
  if (Physics.simulationMode != SimulationMode.Script) return;
149
154
 
@@ -268,6 +273,7 @@ namespace Code.Network.Simulation
268
273
  private void PerformResimulation(double baseTime)
269
274
  {
270
275
  Debug.Log($"T:{Time.unscaledTimeAsDouble} Resimulating from {baseTime}");
276
+ G_ResimMonitor.FrameResimValue = 100;
271
277
 
272
278
  if (replaying)
273
279
  {
@@ -179,7 +179,7 @@ namespace Code.Network.StateSystem
179
179
  // in poor network conditions.
180
180
  this.serverCommandBufferTargetSize =
181
181
  Math.Min(this.serverCommandBufferMaxSize,
182
- ((int)Math.Ceiling(NetworkClient.sendInterval / Time.fixedDeltaTime)) * 3);
182
+ ((int)Math.Ceiling(NetworkClient.sendInterval / Time.fixedDeltaTime)) * 2);
183
183
  print("Command buffer max size is " + this.serverCommandBufferMaxSize + ". Target size: " + this.serverCommandBufferTargetSize);
184
184
 
185
185
  this.inputHistory = new((int)Math.Ceiling(1f / Time.fixedDeltaTime));
@@ -158,6 +158,8 @@ namespace Code.Player.Character.MovementSystems.Character
158
158
  private Vector3 lookVector;
159
159
  private BinaryBlob customInputData;
160
160
 
161
+ [SyncVar] public Vector3 startingLookVector;
162
+
161
163
  // State information
162
164
  public CharacterSnapshotData currentMoveSnapshot = new CharacterSnapshotData() {};
163
165
  public CharacterAnimationSyncData currentAnimState = new CharacterAnimationSyncData() {};
@@ -186,6 +188,16 @@ namespace Code.Player.Character.MovementSystems.Character
186
188
  _cameraTransform = Camera.main.transform;
187
189
  }
188
190
 
191
+ public override void OnStartClient() {
192
+ base.OnStartClient();
193
+ this.lookVector = this.startingLookVector;
194
+ }
195
+
196
+ public override void OnStartServer() {
197
+ base.OnStartServer();
198
+ this.lookVector = this.startingLookVector;
199
+ }
200
+
189
201
  public override void SetMode(NetworkedStateSystemMode mode)
190
202
  {
191
203
  Debug.Log("Running movement in " + mode + " mode for " + this.name + ".");
@@ -845,7 +857,7 @@ namespace Code.Player.Character.MovementSystems.Character
845
857
 
846
858
  //Instantly move at the desired speed
847
859
  var moveMagnitude = characterMoveVelocity.magnitude;
848
- var velMagnitude = flatVelocity.magnitude;
860
+ var flatVelMagnitude = flatVelocity.magnitude;
849
861
 
850
862
  //Don't move character in direction its already moveing
851
863
  //Positive dot means we are already moving in this direction. Negative dot means we are moving opposite of velocity.
@@ -863,13 +875,13 @@ namespace Code.Player.Character.MovementSystems.Character
863
875
  newVelocity.z = command.moveDir.z * currentMoveSnapshot.currentSpeed;
864
876
  }
865
877
  else if (!isImpulsing && !currentMoveSnapshot.airborneFromImpulse && //Not impulsing AND under our max speed
866
- (velMagnitude < (movementSettings.useAccelerationMovement
878
+ (flatVelMagnitude < (movementSettings.useAccelerationMovement
867
879
  ? currentMoveSnapshot.currentSpeed
868
880
  : Mathf.Max(movementSettings.sprintSpeed, currentMoveSnapshot.currentSpeed) + 1)))
869
881
  {
870
882
  if (movementSettings.useAccelerationMovement)
871
883
  {
872
- newVelocity += Vector3.ClampMagnitude(characterMoveVelocity, currentMoveSnapshot.currentSpeed - velMagnitude);
884
+ newVelocity += Vector3.ClampMagnitude(characterMoveVelocity, currentMoveSnapshot.currentSpeed - flatVelMagnitude);
873
885
  }
874
886
  else
875
887
  {
@@ -879,7 +891,7 @@ namespace Code.Player.Character.MovementSystems.Character
879
891
  // if(Mathf.Abs(characterMoveVelocity.z) > Mathf.Abs(newVelocity.z)){
880
892
  // newVelocity.z = characterMoveVelocity.z;
881
893
  // }
882
- if (moveMagnitude + .5f >= velMagnitude)
894
+ if (moveMagnitude + .5f >= flatVelMagnitude)
883
895
  {
884
896
  newVelocity.x = characterMoveVelocity.x;
885
897
  newVelocity.z = characterMoveVelocity.z;
@@ -888,11 +900,30 @@ namespace Code.Player.Character.MovementSystems.Character
888
900
  }
889
901
  else
890
902
  {
891
- //Moving faster than max speed or using acceleration mode
892
- newVelocity += normalizedMoveDir * (dirDot * dirDot / 2) *
893
- (groundedState == CharacterState.Sprinting
894
- ? this.movementSettings.sprintAccelerationForce
895
- : movementSettings.accelerationForce);
903
+ if(this.movementSettings.useAccelerationMovement){
904
+ //Using acceleration movement
905
+ newVelocity += normalizedMoveDir * (dirDot * dirDot / 2) *
906
+ (groundedState == CharacterState.Sprinting
907
+ ? this.movementSettings.sprintAccelerationForce
908
+ : movementSettings.accelerationForce);
909
+ }else{
910
+ //Impulsing
911
+ var forwardMod = Mathf.Max(0, dirDot);
912
+ var addedForce = groundedState == CharacterState.Sprinting
913
+ ? this.movementSettings.sprintAccelerationForce
914
+ : movementSettings.accelerationForce;
915
+ if(flatVelMagnitude+addedForce < currentMoveSnapshot.currentSpeed){
916
+ forwardMod = 1;
917
+ }
918
+
919
+ //Apply the force
920
+ newVelocity += normalizedMoveDir * forwardMod * addedForce;
921
+
922
+ //Never get faster than you've been impulsed
923
+ var flatVel = Vector3.ClampMagnitude(new Vector3(newVelocity.x, 0, newVelocity.z), Mathf.Max(addedForce, flatVelMagnitude));
924
+ newVelocity.x = flatVel.x;
925
+ newVelocity.z = flatVel.z;
926
+ }
896
927
  }
897
928
 
898
929
  //print("isreplay: " + replaying + " didHitForward: " + didHitForward + " moveVec: " + characterMoveVector + " colliderDot: " + colliderDot + " for: " + forwardHit.collider?.gameObject.name + " point: " + forwardHit.point);
@@ -1166,6 +1197,7 @@ namespace Code.Player.Character.MovementSystems.Character
1166
1197
  }
1167
1198
 
1168
1199
  public void SetMoveInput(Vector3 moveDir, bool jump, bool sprinting, bool crouch, int moveDirModeInt) {
1200
+ moveDir = moveDir.normalized;
1169
1201
  var moveDirMode = (MoveDirectionMode)moveDirModeInt;
1170
1202
  switch (moveDirMode) {
1171
1203
  case MoveDirectionMode.World:
@@ -221,6 +221,7 @@ public class TypeGenerator : MonoBehaviour
221
221
  typeof(QualitySettings),
222
222
  typeof(GraphicsSettings),
223
223
  typeof(UniversalRenderPipelineAsset),
224
+ typeof(WheelFrictionCurve),
224
225
 
225
226
  // Mirror
226
227
  typeof(NetworkServer),
@@ -131,15 +131,17 @@ namespace Code.Airship.Resources.VoxelRenderer.Editor {
131
131
  //Select this
132
132
  selection.gameObject.SetActive(true);
133
133
  Selection.activeGameObject = selection.gameObject;
134
+ Debug.Log("select.1");
134
135
  }
135
136
 
136
- if (VoxelWorldEditorToolBase.buttonActive == true) {
137
+ if (VoxelWorldEditorToolBase.buttonActive) {
137
138
  //If we're not in selection mode, disable the selection zone
138
139
  selection = world.GetComponentInChildren<SelectionZone>();
139
140
 
140
141
  if (selection) {
141
142
  //Select the world
142
143
  Selection.activeGameObject = world.gameObject;
144
+ Debug.Log("select.2");
143
145
  //disable it
144
146
  selection.gameObject.SetActive(false);
145
147
 
@@ -150,7 +152,7 @@ namespace Code.Airship.Resources.VoxelRenderer.Editor {
150
152
 
151
153
  //Show a foldable help box
152
154
  EditorGUILayout.HelpBox(
153
- "Left click to add\nShift+click to delete\nCtrl+click for repeat placement\nA to rotate highlighted block",
155
+ "Left click to add\nShift+click to delete\nCtrl+click for repeat placement\nG to rotate highlighted block",
154
156
  MessageType.Info);
155
157
 
156
158
  //active = EditorGUILayout.Toggle("Active", active);
@@ -233,9 +233,6 @@ public class VoxelWorldEditor : UnityEditor.Editor {
233
233
  //Add selection handler
234
234
  Selection.selectionChanged += OnSelectionChanged;
235
235
 
236
- //Add a handler for the gizmo refresh event
237
- SceneView.duringSceneGui += GizmoRefreshEvent;
238
-
239
236
  EditorApplication.update += OnEditorUpdate;
240
237
 
241
238
  //Save handler
@@ -428,6 +425,9 @@ public class VoxelWorldEditor : UnityEditor.Editor {
428
425
  }
429
426
 
430
427
  AirshipEditorGUI.HorizontalLine();
428
+
429
+ EditorGUILayout.LabelField("Quality", EditorStyles.boldLabel);
430
+ world.useSimplifiedVoxels = GUILayout.Toggle(world.useSimplifiedVoxels, new GUIContent("Simplified Voxels", "If enabled quarter blocks will be rendered as default cube voxels."));
431
431
 
432
432
  EditorGUILayout.LabelField("Editing", EditorStyles.boldLabel);
433
433
 
@@ -509,8 +509,14 @@ public class VoxelWorldEditor : UnityEditor.Editor {
509
509
  world.FullWorldUpdate();
510
510
  }
511
511
  }
512
+
513
+ private void OnEnable() {
514
+ SceneView.duringSceneGui += GizmoRefreshEvent;
515
+ }
512
516
 
513
517
  private void OnDisable() {
518
+ SceneView.duringSceneGui -= GizmoRefreshEvent;
519
+
514
520
  CleanupHandles();
515
521
  }
516
522
 
@@ -830,7 +836,7 @@ public class VoxelWorldEditor : UnityEditor.Editor {
830
836
  leftShiftDown = false;
831
837
  }
832
838
 
833
- if (currentEvent.keyCode == KeyCode.A) {
839
+ if (currentEvent.keyCode == KeyCode.G) {
834
840
  //Cycle the bits on the selected block
835
841
  if (world.selectedBlockIndex > 0) {
836
842
  var oldVoxel = world.GetVoxelAt(lastPos); // Assuming you have a method to get the voxel value
@@ -847,6 +853,7 @@ public class VoxelWorldEditor : UnityEditor.Editor {
847
853
  //newValue = (ushort)VoxelWorld.SetVoxelFlippedBits(newValue, 0x04 );
848
854
  VoxelEditManager.AddEdit(world, lastPos, oldVoxel, newVoxel, "Flip Voxel " + def.definition.name);
849
855
 
856
+ //Need to use a Key that Unity doesn't use so we don't consume it
850
857
  currentEvent.Use();
851
858
  }
852
859
 
@@ -983,6 +990,10 @@ public class VoxelWorldEditorToolBase : EditorTool {
983
990
  buttonActive = true;
984
991
  }
985
992
 
993
+ private void OnDisable() {
994
+ buttonActive = false;
995
+ }
996
+
986
997
  public override void OnWillBeDeactivated() {
987
998
  buttonActive = false;
988
999
  }
@@ -1011,6 +1022,10 @@ public class VoxelWorldSelectionToolBase : EditorTool {
1011
1022
  buttonActive = true;
1012
1023
  }
1013
1024
 
1025
+ private void OnDisable() {
1026
+ buttonActive = false;
1027
+ }
1028
+
1014
1029
  public override void OnWillBeDeactivated() {
1015
1030
  buttonActive = false;
1016
1031
  }
@@ -1038,6 +1053,10 @@ public class VoxelWorldPaintBucketToolBase : EditorTool {
1038
1053
  buttonActive = true;
1039
1054
  }
1040
1055
 
1056
+ private void OnDisable() {
1057
+ buttonActive = false;
1058
+ }
1059
+
1041
1060
  public override void OnWillBeDeactivated() {
1042
1061
  buttonActive = false;
1043
1062
  }
@@ -1065,6 +1084,10 @@ public class VoxelWorldBrushToolBase : EditorTool {
1065
1084
  buttonActive = true;
1066
1085
  }
1067
1086
 
1087
+ private void OnDisable() {
1088
+ buttonActive = false;
1089
+ }
1090
+
1068
1091
  public override void OnWillBeDeactivated() {
1069
1092
  buttonActive = false;
1070
1093
  }