diff --git a/Assets/Animations/UI/MessageUI.anim b/Assets/Animations/UI/MessageUI.anim new file mode 100644 index 00000000..0612508e --- /dev/null +++ b/Assets/Animations/UI/MessageUI.anim @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MessageUI + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Animations/UI/MessageUI.anim.meta b/Assets/Animations/UI/MessageUI.anim.meta new file mode 100644 index 00000000..21ba48d9 --- /dev/null +++ b/Assets/Animations/UI/MessageUI.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 497c88b4b0ba684459d775829ffceaaa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Player/Characters/Player_Dahl.prefab b/Assets/Prefabs/Player/Characters/Player_Dahl.prefab index fb7072b2..79f9f46d 100644 --- a/Assets/Prefabs/Player/Characters/Player_Dahl.prefab +++ b/Assets/Prefabs/Player/Characters/Player_Dahl.prefab @@ -1415,6 +1415,7 @@ GameObject: - component: {fileID: 4548851910134379976} - component: {fileID: 4071846026879171964} - component: {fileID: 4071846026879171967} + - component: {fileID: 3761819511940449729} m_Layer: 9 m_Name: Player_Dahl m_TagString: Player @@ -1603,6 +1604,22 @@ Rigidbody: m_Interpolate: 1 m_Constraints: 112 m_CollisionDetection: 0 +--- !u!114 &3761819511940449729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4071846026879171966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b034a9373fc7a27498edfc794863ec1c, type: 3} + m_Name: + m_EditorClassIdentifier: + messagePrefab: {fileID: 6402128102586948173, guid: 3dd95c6d5eac8454aa924ac546df1e4e, type: 3} + colors: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 0, g: 0.7169812, b: 0.07178865, a: 1} --- !u!1 &4138943945869748027 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Player/Characters/Player_Pirate.prefab b/Assets/Prefabs/Player/Characters/Player_Pirate.prefab index 1149d27d..17dd913e 100644 --- a/Assets/Prefabs/Player/Characters/Player_Pirate.prefab +++ b/Assets/Prefabs/Player/Characters/Player_Pirate.prefab @@ -1366,6 +1366,7 @@ GameObject: - component: {fileID: 1334833252313079424} - component: {fileID: 4071846026879171964} - component: {fileID: 4071846026879171967} + - component: {fileID: 8476718979267706415} m_Layer: 9 m_Name: Player_Pirate m_TagString: Player @@ -1554,6 +1555,22 @@ Rigidbody: m_Interpolate: 1 m_Constraints: 112 m_CollisionDetection: 0 +--- !u!114 &8476718979267706415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4071846026879171966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b034a9373fc7a27498edfc794863ec1c, type: 3} + m_Name: + m_EditorClassIdentifier: + messagePrefab: {fileID: 6402128102586948173, guid: 3dd95c6d5eac8454aa924ac546df1e4e, type: 3} + colors: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 0, g: 0.7169812, b: 0.07178865, a: 1} --- !u!1 &4086062940647090856 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Player/Characters/Player_Strongman.prefab b/Assets/Prefabs/Player/Characters/Player_Strongman.prefab index e3848c09..5cfefc21 100644 --- a/Assets/Prefabs/Player/Characters/Player_Strongman.prefab +++ b/Assets/Prefabs/Player/Characters/Player_Strongman.prefab @@ -1441,6 +1441,7 @@ GameObject: - component: {fileID: 6226741701120917524} - component: {fileID: 4315586048534869637} - component: {fileID: 4315586048534869638} + - component: {fileID: 6574620329045622771} m_Layer: 9 m_Name: Player_Strongman m_TagString: Player @@ -1629,6 +1630,22 @@ Rigidbody: m_Interpolate: 1 m_Constraints: 112 m_CollisionDetection: 0 +--- !u!114 &6574620329045622771 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4315586048534869639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b034a9373fc7a27498edfc794863ec1c, type: 3} + m_Name: + m_EditorClassIdentifier: + messagePrefab: {fileID: 6402128102586948173, guid: 3dd95c6d5eac8454aa924ac546df1e4e, type: 3} + colors: + - {r: 1, g: 0, b: 0, a: 1} + - {r: 0, g: 0.7169812, b: 0.07178865, a: 1} --- !u!1 &4406181753404703009 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/UI/MessageCanvas.prefab b/Assets/Prefabs/UI/MessageCanvas.prefab new file mode 100644 index 00000000..c3315337 --- /dev/null +++ b/Assets/Prefabs/UI/MessageCanvas.prefab @@ -0,0 +1,251 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2897029751987262836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1547153204496928400} + - component: {fileID: 5979690354407254423} + - component: {fileID: 8591951812034777636} + - component: {fileID: 5800029683659499210} + - component: {fileID: 2917643475042159001} + m_Layer: 5 + m_Name: Message + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1547153204496928400 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2897029751987262836} + 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: 6999161368675694603} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5979690354407254423 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2897029751987262836} + m_CullTransparentMesh: 0 +--- !u!114 &8591951812034777636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2897029751987262836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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: -10 + 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: 0.75 + m_fontSizeBase: 0.75 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0.5 + m_fontSizeMax: 1 + m_fontStyle: 0 + 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: 1 + 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 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!111 &5800029683659499210 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2897029751987262836} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: 497c88b4b0ba684459d775829ffceaaa, type: 2} + m_Animations: + - {fileID: 7400000, guid: 497c88b4b0ba684459d775829ffceaaa, type: 2} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 0 +--- !u!54 &2917643475042159001 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2897029751987262836} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!1 &6402128102586948173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6999161368675694603} + - component: {fileID: 3494390538452183284} + - component: {fileID: 7045749864773426069} + m_Layer: 5 + m_Name: MessageCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6999161368675694603 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6402128102586948173} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1547153204496928400} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 3.61} + m_SizeDelta: {x: 10, y: 10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &3494390538452183284 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6402128102586948173} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &7045749864773426069 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6402128102586948173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 diff --git a/Assets/Prefabs/UI/MessageCanvas.prefab.meta b/Assets/Prefabs/UI/MessageCanvas.prefab.meta new file mode 100644 index 00000000..b003c8e8 --- /dev/null +++ b/Assets/Prefabs/UI/MessageCanvas.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3dd95c6d5eac8454aa924ac546df1e4e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerStateController.cs b/Assets/Scripts/Player/PlayerStateController.cs index 0bee223c..1a2d2ba9 100644 --- a/Assets/Scripts/Player/PlayerStateController.cs +++ b/Assets/Scripts/Player/PlayerStateController.cs @@ -53,6 +53,8 @@ public partial class PlayerStateController : MonoBehaviour public Transform enemyViewFocus; + private MessageUI messageUI; + public PlayerStates CurrentState { get => _currentState; private set => _currentState = value; } public HexCell TargetCell => targetCell; @@ -71,6 +73,7 @@ void Awake() health.onDeath += Die; ui = GetComponent(); + messageUI = GetComponent(); } void OnDestroy() @@ -242,6 +245,7 @@ private void OnInteract() { // Build the turret we are holding focusedInteractable.GetComponent().Construct(targetCell); + messageUI.DisplayMessage("-" + focusedInteractable.GetComponent().TowerScriptableObject.Cost.ToString(), MessageUI.TextColors.red); Drop(focusedInteractable.gameObject); RemoveInteractable(focusedInteractable); SetState(PlayerStates.FREE); @@ -337,6 +341,7 @@ private void SellTower() return; inventoryManager.ResourceAmount += tower.TowerScriptableObject.Cost; + messageUI.DisplayMessage("+" + tower.TowerScriptableObject.Cost.ToString(), MessageUI.TextColors.green); RemoveInteractable(tower); Destroy(tower.gameObject); diff --git a/Assets/Scripts/Player/PlayerUi.cs b/Assets/Scripts/Player/PlayerUi.cs index 361b505e..cb964200 100644 --- a/Assets/Scripts/Player/PlayerUi.cs +++ b/Assets/Scripts/Player/PlayerUi.cs @@ -17,6 +17,7 @@ public class PlayerUi : MonoBehaviour private Transform mainCameraTransform; private InventoryManager inventory; private UIControllerWheel controllerWheel; + private MessageUI messageUI; public UIControllerWheel ControllerWheel => controllerWheel; @@ -30,6 +31,7 @@ void Start() { mainCameraTransform = Camera.main.transform; inventory = InventoryManager.Singleton; + messageUI = GetComponent(); } void LateUpdate() @@ -59,8 +61,15 @@ public void Select() inventory.ResourceAmount -= selectedSegment.Cost; selectedSegment.InstantiateConstructionTower(playerStateController); playerStateController.SetState(PlayerStates.BUILDING); - } else + } + else + { playerStateController.SetState(PlayerStates.FREE); + if(inventory.ResourceAmount - selectedSegment.Cost < 0) + messageUI.DisplayMessage("Missing crystals", MessageUI.TextColors.red); + } + + ui.gameObject.SetActive(false); } diff --git a/Assets/Scripts/UI/MessageUI.cs b/Assets/Scripts/UI/MessageUI.cs new file mode 100644 index 00000000..047a7f4b --- /dev/null +++ b/Assets/Scripts/UI/MessageUI.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using TMPro; + +public class MessageUI : MonoBehaviour +{ + [SerializeField] + private GameObject messagePrefab; + + public Color[] colors; + + public enum TextColors + { + red, + green + } + + public void DisplayMessage(string message, TextColors color) + { + TextMeshProUGUI text = Instantiate(messagePrefab, transform.position, messagePrefab.transform.rotation).GetComponentInChildren(); + text.text = message; + text.color = colors[(int)color]; + + Destroy(text, 2.5f); + } +} diff --git a/Assets/Scripts/UI/MessageUI.cs.meta b/Assets/Scripts/UI/MessageUI.cs.meta new file mode 100644 index 00000000..7138f271 --- /dev/null +++ b/Assets/Scripts/UI/MessageUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b034a9373fc7a27498edfc794863ec1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - messagePrefab: {fileID: 6402128102586948173, guid: 3dd95c6d5eac8454aa924ac546df1e4e, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: