diff --git a/Assets/Items/testItem/StackSizeText.cs b/Assets/Items/testItem/StackSizeText.cs new file mode 100644 index 0000000..57fb505 --- /dev/null +++ b/Assets/Items/testItem/StackSizeText.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +//! DEBUG TEXT +public class StackSizeText : MonoBehaviour +{ + public ItemObject itemObject; + void Update() + { + gameObject.GetComponent().text = itemObject.stackSize.ToString(); + } +} diff --git a/Assets/Items/testItem/StackSizeText.cs.meta b/Assets/Items/testItem/StackSizeText.cs.meta new file mode 100644 index 0000000..e3e23d2 --- /dev/null +++ b/Assets/Items/testItem/StackSizeText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 113a94b344e135249a6f9928d9617df2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Items/testItem/TestItemPrefab.prefab b/Assets/Items/testItem/TestItemPrefab.prefab index 9fe7de8..5c8b732 100644 --- a/Assets/Items/testItem/TestItemPrefab.prefab +++ b/Assets/Items/testItem/TestItemPrefab.prefab @@ -1,5 +1,200 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &7598110288018339969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7235504030812167489} + - component: {fileID: 8792484635333935822} + - component: {fileID: 776590918211704844} + - component: {fileID: 2839967651599440056} + - component: {fileID: 7272902474709330505} + m_Layer: 0 + m_Name: stackSizeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7235504030812167489 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7598110288018339969} + m_LocalRotation: {x: 0.000017120734, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8936059402275091559} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0.002, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.51, y: 1.26} + m_SizeDelta: {x: 0.8314, y: 0.8685} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8792484635333935822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7598110288018339969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 113a94b344e135249a6f9928d9617df2, type: 3} + m_Name: + m_EditorClassIdentifier: + itemObject: {fileID: 8936059402275091553} +--- !u!222 &776590918211704844 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7598110288018339969} + m_CullTransparentMesh: 1 +--- !u!23 &2839967651599440056 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7598110288018339969} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, 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: 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 &7272902474709330505 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7598110288018339969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 1 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 5.1 + m_fontSizeBase: 5.1 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 2839967651599440056} + m_maskType: 0 --- !u!1 &8936059402275091554 GameObject: m_ObjectHideFlags: 0 @@ -31,7 +226,8 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 7235504030812167489} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -75,7 +271,7 @@ SpriteRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 0 + m_SortingOrder: 1 m_Sprite: {fileID: 21300000, guid: f703c137a9648eb4bbffb1f6b1aed05e, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 @@ -103,7 +299,9 @@ MonoBehaviour: stackSize: 1 itemSO: {fileID: 0} timeAlive: 0 - maxTimeAlive: 60 + maxTimeAlive: 600 + maxTimeWithoutConveyor: 10 + timeWithoutConveyor: 0 --- !u!61 &3180622400512972912 BoxCollider2D: m_ObjectHideFlags: 0 diff --git a/Assets/PlacedObjects/Conveyor/Conveyor.prefab b/Assets/PlacedObjects/Conveyor/Conveyor.prefab index 00ff34c..df27909 100644 --- a/Assets/PlacedObjects/Conveyor/Conveyor.prefab +++ b/Assets/PlacedObjects/Conveyor/Conveyor.prefab @@ -100,7 +100,7 @@ MonoBehaviour: placedObjectTypeSO: {fileID: 11400000, guid: fbec66c9ae95b954d994cc26105f0302, type: 2} origin: {x: 0, y: 0} isBlueprint: 1 - speed: 0.3 + speed: 1 previousConveyor: {fileID: 0} nextConveyor: {fileID: 0} sprites: diff --git a/Assets/PlacedObjects/Conveyor/ConveyorPO.cs b/Assets/PlacedObjects/Conveyor/ConveyorPO.cs index 4fdfb47..980ac9e 100644 --- a/Assets/PlacedObjects/Conveyor/ConveyorPO.cs +++ b/Assets/PlacedObjects/Conveyor/ConveyorPO.cs @@ -3,7 +3,7 @@ using UnityEngine; public class ConveyorPO : PlacedObject { - public float speed = 0.3f; + [SerializeField] private float speed = 0.3f; public ConveyorPO previousConveyor; public ConveyorPO nextConveyor; @@ -11,6 +11,17 @@ public class ConveyorPO : PlacedObject public List sprites = new List(); // 0 = Up, 1 = Right, 2 = Down, 3 = Left + public float GetSpeed() + { + if (nextConveyor != null) + { + return speed; + } + else + { + return 0; + } + } private List GetConveyorsAround() { @@ -36,35 +47,70 @@ public class ConveyorPO : PlacedObject private void SetConveyorChain() { - ConveyorPO lastChoiceConveyor = null; + // TODO Last conveyor does not connect to first conveyor (circle) + List possibleNextConveyors = GetConveyorsAround(); + List possiblePreviousConveyors = GetConveyorsAround(); + + if (previousConveyor != null && nextConveyor != null) + { + return; + } + foreach (ConveyorPO c in GetConveyorsAround()) { if (c == nextConveyor || c == previousConveyor || c == this || c.previousConveyor == this || c.nextConveyor == this) { continue; } - - if (c.nextConveyor == null) + else { + if (c.nextConveyor == null) + { + if (nextConveyor != c) + { + possiblePreviousConveyors.Add(c); + } + } + if (c.previousConveyor == null) { - lastChoiceConveyor = c; - } - else - { - c.nextConveyor = this; - c.UpdateChain(); - previousConveyor = c; - return; + if (previousConveyor != c) + { + possibleNextConveyors.Add(c); + } } } } - if (lastChoiceConveyor != null) + if (possiblePreviousConveyors.Count > 0 && previousConveyor == null) { - lastChoiceConveyor.nextConveyor = this; - lastChoiceConveyor.UpdateChain(); - previousConveyor = lastChoiceConveyor; + Debug.Log("PREV " + possiblePreviousConveyors.Count); + foreach (ConveyorPO c in possiblePreviousConveyors) + { + if (c.previousConveyor != this && c.nextConveyor == null) + { + previousConveyor = c; // Maybe prioritize Conveyor which is already in a chain? + previousConveyor.nextConveyor = this; + previousConveyor.UpdateChain(); + break; + } + + } + } + + if (possibleNextConveyors.Count > 0 && nextConveyor == null) + { + Debug.Log("Next " + possibleNextConveyors.Count); + foreach (ConveyorPO c in possibleNextConveyors) + { + if (c.nextConveyor != this && c.previousConveyor == null) + { + nextConveyor = c; // Maybe prioritize Conveyor which is already in a chain? + nextConveyor.previousConveyor = this; + nextConveyor.UpdateChain(); + break; + } + } } } diff --git a/Assets/Scripts/GridSystem/Grid.cs b/Assets/Scripts/GridSystem/Grid.cs index 421f31b..59859ca 100644 --- a/Assets/Scripts/GridSystem/Grid.cs +++ b/Assets/Scripts/GridSystem/Grid.cs @@ -38,12 +38,12 @@ public class Grid { for (int y = 0; y < gridArray.GetLength(1); y++) { - Debug.DrawLine(GetWorldPosition(x, y), GetWorldPosition(x, y + 1), Color.white, 100f); - Debug.DrawLine(GetWorldPosition(x, y), GetWorldPosition(x + 1, y), Color.white, 100f); + Debug.DrawLine(GetWorldPosition(x, y), GetWorldPosition(x, y + 1), Color.white, 1000f); + Debug.DrawLine(GetWorldPosition(x, y), GetWorldPosition(x + 1, y), Color.white, 1000f); } } - Debug.DrawLine(GetWorldPosition(0, height), GetWorldPosition(width, height), Color.white, 100f); - Debug.DrawLine(GetWorldPosition(width, 0), GetWorldPosition(width, height), Color.white, 100f); + Debug.DrawLine(GetWorldPosition(0, height), GetWorldPosition(width, height), Color.white, 1000f); + Debug.DrawLine(GetWorldPosition(width, 0), GetWorldPosition(width, height), Color.white, 1000f); } } diff --git a/Assets/Scripts/Items/ItemObject.cs b/Assets/Scripts/Items/ItemObject.cs index 8e3cdb5..343f69f 100644 --- a/Assets/Scripts/Items/ItemObject.cs +++ b/Assets/Scripts/Items/ItemObject.cs @@ -6,9 +6,18 @@ public abstract class ItemObject : MonoBehaviour public int stackSize = 1; public ItemSO itemSO; public float timeAlive = 0.0f; - public float maxTimeAlive = 60.0f; + public float maxTimeAlive = 600.0f; + public float maxTimeWithoutConveyor = 10.0f; + public float timeWithoutConveyor = 0.0f; + + private ConveyorPO lastTouchedConveyor; // current conveyor but not set to null + private float conveyorSpeed = 0.0f; + private Vector2 conveyorDirection = Vector2.zero; + public abstract void OnSpawn(); + private ConveyorPO currentConveyor; + private Rigidbody2D rb; void Awake() @@ -51,13 +60,100 @@ public abstract class ItemObject : MonoBehaviour { Despawn(); } + + // Problem: Pivot point of an item is bottom-left, so its not proberly aligned with the conveyor + GridBuildingSystem gridBuildingSystem = GridBuildingSystem.instance; + + //* Position has to change depending on which direction the item is heading, in order to stay on the conveyor + Vector3 tempPivotPosition = transform.position; + + if (currentConveyor != null) + { + // TODO Freeze rigibody rotations based on direction + //* KEEP IN MIND -> PIVOT POINT IS BOTTOM-LEFT + + // If direction changes + if (conveyorDirection != currentConveyor.GetDirection()) + { + // Realign + gridBuildingSystem.buildingGrid.GetXY(lastTouchedConveyor.gameObject.transform.position, out int x, out int y); + transform.position = gridBuildingSystem.buildingGrid.GetWorldPosition(x, y); + conveyorDirection = currentConveyor.GetDirection(); + } + + if (conveyorDirection.y > 0) // Top + { + Debug.Log("Heading top"); + tempPivotPosition = transform.position + new Vector3(transform.localScale.x / 2, 0, 0); + } + + if (conveyorDirection.x > 0) // Right + { + Debug.Log("Heading right"); + tempPivotPosition = transform.position + new Vector3(0, transform.localScale.y / 2, 0); + } + + if (conveyorDirection.y < 0) // Bottom + { + Debug.Log("Heading bottom"); + tempPivotPosition = transform.position + new Vector3(transform.localScale.x / 2, transform.localScale.y, 0); + } + + if (conveyorDirection.x < 0) // Left + { + Debug.Log("Heading left"); + tempPivotPosition = transform.position + new Vector3(transform.localScale.x, transform.localScale.y / 2, 0); + } + Debug.DrawLine(tempPivotPosition, Vector3.zero, Color.red); + } + + + gridBuildingSystem.buildingGrid.GetXY(tempPivotPosition, out int tempPivotX, out int tempPivotY); + + GridBuildingSystem.GridObject gridObject = gridBuildingSystem.buildingGrid.GetGridObject(tempPivotX, tempPivotY); + + if (gridObject.GetPlacedObject() != null) + { + if (gridObject.GetPlacedObject().gameObject.GetComponent()) + { + timeWithoutConveyor = 0.0f; + currentConveyor = gridObject.GetPlacedObject().gameObject.GetComponent(); + lastTouchedConveyor = currentConveyor; + conveyorSpeed = currentConveyor.GetSpeed(); + + } + else + { + UpdateWithoutConveyor(); + } + } + else + { + UpdateWithoutConveyor(); + } + } + + private void UpdateWithoutConveyor() + { + currentConveyor = null; + timeWithoutConveyor += Time.deltaTime; + if (timeWithoutConveyor > maxTimeWithoutConveyor) + { + Debug.Log("Not on conveyor -> DESPAWN"); + Despawn(); + } } void FixedUpdate() { - float speed = 0.3f; // TODO Get speed from ConveyorBelt - Vector2 direction = new Vector2(1f, 0f); // TODO Get direction from ConveyorBelt + if (currentConveyor != null) + { + rb.MovePosition(rb.position + (conveyorDirection * conveyorSpeed) * Time.fixedDeltaTime); + } + else + { + // TODO Interrupt all movement + } - rb.MovePosition(rb.position + (direction * speed) * Time.fixedDeltaTime); } }