From f9a35336aa6b453eed4ca36bdf1b828dd38cc2cf Mon Sep 17 00:00:00 2001 From: Laurids Jeppe Date: Sat, 10 Apr 2021 17:44:44 +0200 Subject: [PATCH] Movement Cooldown + Icon --- .../Animations/FleetIcon.controller | 159 ++++++ .../Animations/FleetIcon.controller.meta | 8 + .../Animations/FormationIconCooldown.anim | 485 ++++++++++++++++++ .../FormationIconCooldown.anim.meta | 8 + .../Animations/FormationIconIdle.anim | 53 ++ .../Animations/FormationIconIdle.anim.meta | 8 + Assets/GWConquest/Prefabs/UI/FleetIcon.prefab | 284 +++++++++- Assets/GWConquest/Scenes/GalaxyMap.unity | 2 + Assets/GWConquest/Scripts/Formation.cs | 143 ++++-- Assets/GWConquest/Scripts/GameManager.cs | 2 + Assets/GWConquest/Scripts/ServerCallbacks.cs | 12 +- Assets/GWConquest/Scripts/UI/FormationIcon.cs | 26 +- .../GWConquest/Scripts/UI/StickToFormation.cs | 2 +- .../Textures/Icons/Transitpfeil.png | Bin 0 -> 756 bytes .../Textures/Icons/Transitpfeil.png.meta | 128 +++++ .../Textures/Icons/Transitpfeil2.png | Bin 0 -> 1613 bytes .../Textures/Icons/Transitpfeil2.png.meta | 128 +++++ Assets/GWConquest/Textures/Icons/X_Pfeil2.png | Bin 0 -> 324 bytes .../Textures/Icons/X_Pfeil2.png.meta | 128 +++++ .../PhotonBolt/assemblies/bolt.user.dll | Bin 83968 -> 84992 bytes .../PhotonBolt/assemblies/bolt.user.dll.mdb | Bin 37648 -> 38065 bytes Assets/Photon/PhotonBolt/project.json | 87 +++- 22 files changed, 1587 insertions(+), 76 deletions(-) create mode 100644 Assets/GWConquest/Animations/FleetIcon.controller create mode 100644 Assets/GWConquest/Animations/FleetIcon.controller.meta create mode 100644 Assets/GWConquest/Animations/FormationIconCooldown.anim create mode 100644 Assets/GWConquest/Animations/FormationIconCooldown.anim.meta create mode 100644 Assets/GWConquest/Animations/FormationIconIdle.anim create mode 100644 Assets/GWConquest/Animations/FormationIconIdle.anim.meta create mode 100644 Assets/GWConquest/Textures/Icons/Transitpfeil.png create mode 100644 Assets/GWConquest/Textures/Icons/Transitpfeil.png.meta create mode 100644 Assets/GWConquest/Textures/Icons/Transitpfeil2.png create mode 100644 Assets/GWConquest/Textures/Icons/Transitpfeil2.png.meta create mode 100644 Assets/GWConquest/Textures/Icons/X_Pfeil2.png create mode 100644 Assets/GWConquest/Textures/Icons/X_Pfeil2.png.meta diff --git a/Assets/GWConquest/Animations/FleetIcon.controller b/Assets/GWConquest/Animations/FleetIcon.controller new file mode 100644 index 0000000..b2e4e5b --- /dev/null +++ b/Assets/GWConquest/Animations/FleetIcon.controller @@ -0,0 +1,159 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-7549341647043909749 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 432087809510585664} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &-4945115439738441631 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 5455739953621634429} + m_Position: {x: 380, y: -40, z: 0} + - serializedVersion: 1 + m_State: {fileID: -7549341647043909749} + m_Position: {x: 376.59326, y: 95.48514, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -7549341647043909749} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FleetIcon + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Cooldown + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -4945115439738441631} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1101 &432087809510585664 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Cooldown + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 5455739953621634429} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1716441036608713572 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Cooldown + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -7549341647043909749} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0.9166667 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &5455739953621634429 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FormationIconCooldown + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1716441036608713572} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: c76c05908b5b595469de539a4d604e57, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/GWConquest/Animations/FleetIcon.controller.meta b/Assets/GWConquest/Animations/FleetIcon.controller.meta new file mode 100644 index 0000000..c81a3f9 --- /dev/null +++ b/Assets/GWConquest/Animations/FleetIcon.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f46367ddbbe72047ac9bc32922f3cf1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GWConquest/Animations/FormationIconCooldown.anim b/Assets/GWConquest/Animations/FormationIconCooldown.anim new file mode 100644 index 0000000..c22bd8b --- /dev/null +++ b/Assets/GWConquest/Animations/FormationIconCooldown.anim @@ -0,0 +1,485 @@ +%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: FormationIconCooldown + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 3 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_IsActive + path: MovementArrow + classID: 1 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8333333 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.25 + value: 0.5 + inSlope: 0.011764975 + outSlope: 0.011764975 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 0.5019608 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.75 + value: 0.5 + inSlope: -0.011764883 + outSlope: -0.011764883 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2.1666667 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: MovementArrow + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 3 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_IsActive + path: Coloured/CooldownCircle + classID: 1 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.0333333 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.9666667 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2.5 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Alpha + path: Coloured/Kreis/Icons + classID: 225 + script: {fileID: 0} + 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: + - serializedVersion: 2 + path: 797152718 + attribute: 2086281974 + script: {fileID: 0} + typeID: 1 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 797152718 + attribute: 304273561 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 4105417334 + attribute: 2086281974 + script: {fileID: 0} + typeID: 1 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 2898329170 + attribute: 1574349066 + script: {fileID: 0} + typeID: 225 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 3 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 3 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_IsActive + path: MovementArrow + classID: 1 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8333333 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.25 + value: 0.5 + inSlope: 0.011764975 + outSlope: 0.011764975 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 0.5019608 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.75 + value: 0.5 + inSlope: -0.011764883 + outSlope: -0.011764883 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2.1666667 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: MovementArrow + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 3 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_IsActive + path: Coloured/CooldownCircle + classID: 1 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.0333333 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.9666667 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2.5 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Alpha + path: Coloured/Kreis/Icons + classID: 225 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/GWConquest/Animations/FormationIconCooldown.anim.meta b/Assets/GWConquest/Animations/FormationIconCooldown.anim.meta new file mode 100644 index 0000000..f5eb9a9 --- /dev/null +++ b/Assets/GWConquest/Animations/FormationIconCooldown.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c76c05908b5b595469de539a4d604e57 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GWConquest/Animations/FormationIconIdle.anim b/Assets/GWConquest/Animations/FormationIconIdle.anim new file mode 100644 index 0000000..a2648a8 --- /dev/null +++ b/Assets/GWConquest/Animations/FormationIconIdle.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: FormationIconIdle + 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/GWConquest/Animations/FormationIconIdle.anim.meta b/Assets/GWConquest/Animations/FormationIconIdle.anim.meta new file mode 100644 index 0000000..e0feca1 --- /dev/null +++ b/Assets/GWConquest/Animations/FormationIconIdle.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c30eba957edfd140b5722883c43d407 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GWConquest/Prefabs/UI/FleetIcon.prefab b/Assets/GWConquest/Prefabs/UI/FleetIcon.prefab index ec3f680..125c576 100644 --- a/Assets/GWConquest/Prefabs/UI/FleetIcon.prefab +++ b/Assets/GWConquest/Prefabs/UI/FleetIcon.prefab @@ -1,5 +1,241 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &200793009239835511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1011144588136270061} + - component: {fileID: 39369087303823972} + - component: {fileID: 2580901629958794348} + m_Layer: 5 + m_Name: MovementArrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1011144588136270061 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200793009239835511} + 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: 6934264676097734671} + 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: -10, y: -10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &39369087303823972 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200793009239835511} + m_CullTransparentMesh: 0 +--- !u!114 &2580901629958794348 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200793009239835511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 318cb5a21fce1e0408e517d97f036ecc, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 2 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2758084404895688604 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5513503267205880076} + m_Layer: 5 + m_Name: Coloured + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5513503267205880076 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2758084404895688604} + 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: 3734323249960474404} + - {fileID: 6934264676081351464} + - {fileID: 6934264676898299648} + m_Father: {fileID: 6934264676097734671} + m_RootOrder: 2 + 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!1 &4163070485896984538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3734323249960474404} + - component: {fileID: 7978772388553462428} + - component: {fileID: 8053513206510809148} + m_Layer: 5 + m_Name: CooldownCircle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3734323249960474404 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4163070485896984538} + 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: 5513503267205880076} + 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 &7978772388553462428 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4163070485896984538} + m_CullTransparentMesh: 0 +--- !u!114 &8053513206510809148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4163070485896984538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.05882353} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: c5c5d1f6b8fa0404ca44f3ea7c937909, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 2 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4913662200996644821 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4038486383170554002} + - component: {fileID: 489359260588898854} + m_Layer: 5 + m_Name: Icons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4038486383170554002 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4913662200996644821} + 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: 6934264675066306908} + - {fileID: 6934264676539302133} + m_Father: {fileID: 6934264676081351464} + 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!225 &489359260588898854 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4913662200996644821} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 --- !u!1 &6934264674832292904 GameObject: m_ObjectHideFlags: 0 @@ -440,7 +676,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 6934264676830680019} - m_Father: {fileID: 6934264676081351464} + m_Father: {fileID: 4038486383170554002} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.1, y: 0.1} @@ -1284,13 +1520,12 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6934264676081351463} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 6934264675066306908} - - {fileID: 6934264676539302133} - m_Father: {fileID: 6934264676097734671} + - {fileID: 4038486383170554002} + m_Father: {fileID: 5513503267205880076} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1346,6 +1581,7 @@ GameObject: - component: {fileID: 6934264676097734671} - component: {fileID: 6934264676097735664} - component: {fileID: 1863735512916864897} + - component: {fileID: 7712165444298038481} m_Layer: 5 m_Name: FleetIcon m_TagString: Untagged @@ -1364,9 +1600,9 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: + - {fileID: 1011144588136270061} - {fileID: 9087990028491932013} - - {fileID: 6934264676081351464} - - {fileID: 6934264676898299648} + - {fileID: 5513503267205880076} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1406,6 +1642,32 @@ MonoBehaviour: - {fileID: 6934264674992649802} - {fileID: 6934264676736199429} - {fileID: 6934264676736199429} + CooldownCircle: {fileID: 8053513206510809148} + MovementArrow: {fileID: 2580901629958794348} + ColouredTransform: {fileID: 5513503267205880076} + MovementStartingArrow: {fileID: 21300000, guid: 318cb5a21fce1e0408e517d97f036ecc, + type: 3} + MovementFinishedArrow: {fileID: 21300000, guid: 884e7f442980edb45b847b7ae7ef30e4, + type: 3} +--- !u!95 &7712165444298038481 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6934264676097734670} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 5f46367ddbbe72047ac9bc32922f3cf1, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 --- !u!1 &6934264676128576589 GameObject: m_ObjectHideFlags: 0 @@ -1583,7 +1845,7 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 6934264676081351464} + m_Father: {fileID: 4038486383170554002} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.1, y: 0.1} @@ -1783,7 +2045,7 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6934264676898299679} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: @@ -1793,7 +2055,7 @@ RectTransform: - {fileID: 6934264674992649803} - {fileID: 6934264675173919768} - {fileID: 6934264676736199430} - m_Father: {fileID: 6934264676097734671} + m_Father: {fileID: 5513503267205880076} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1831,7 +2093,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6934264676097734671} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} diff --git a/Assets/GWConquest/Scenes/GalaxyMap.unity b/Assets/GWConquest/Scenes/GalaxyMap.unity index d98574d..d1cdd3e 100644 --- a/Assets/GWConquest/Scenes/GalaxyMap.unity +++ b/Assets/GWConquest/Scenes/GalaxyMap.unity @@ -27723,6 +27723,8 @@ MonoBehaviour: MoveToReserveCooldown: 15 UnitDeathCooldown: 60 ArtilleryCooldown: 20 + MovementStartingCooldown: 10 + MovementFinishedCooldown: 10 DefaultStorageCapacity: 10000 MaxStackSize: 500 DefaultProductionCooldown: 1 diff --git a/Assets/GWConquest/Scripts/Formation.cs b/Assets/GWConquest/Scripts/Formation.cs index c65d693..5483bd6 100644 --- a/Assets/GWConquest/Scripts/Formation.cs +++ b/Assets/GWConquest/Scripts/Formation.cs @@ -124,7 +124,7 @@ namespace GWConquest public bool IsOnSpaceGroundTransition { - get => State.IsInTransit && Zone.GetFromId(State.CurrentTransition.OriginZone).zoneType != Zone.GetFromId(State.CurrentTransition.TargetZone).zoneType; + get => MovementState == FormationMovementState.Moving && Zone.GetFromId(State.CurrentTransition.OriginZone).zoneType != Zone.GetFromId(State.CurrentTransition.TargetZone).zoneType; } public bool IsEmbarked { @@ -148,6 +148,25 @@ namespace GWConquest set => State.StartingMorale = value; } + public FormationMovementState MovementState { + get => (FormationMovementState) State.MovementState; + set => State.MovementState = (int) value; + } + + public float ActionCooldown { + get => State.ActionCooldown; + } + + public float ActionCooldownPercent { + get => State.ActionCooldown / State.ActionCooldownMax; + } + + public void SetActionCooldown(float value) + { + State.ActionCooldown = value; + State.ActionCooldownMax = value; + } + public GameObject fleetIcon; @@ -168,7 +187,7 @@ namespace GWConquest public bool CanMove { - get => !State.IsInTransit; + get => MovementState == FormationMovementState.Idle; } public void TryMoveToPlanet(Planet planet) @@ -192,15 +211,15 @@ namespace GWConquest public void StartMovingOnPath(List path, Formation targetFormation=null) { - if (path.Count > 1 && entity.IsControlled && !State.IsInTransit) + if (path.Count > 1 && entity.IsControlled && MovementState == FormationMovementState.Idle) { MoveFormationEvent evnt = MoveFormationEvent.Create(Bolt.GlobalTargets.OnlyServer); evnt.Formation = entity; - evnt.TargetZone = Zone.GetZoneId(path[1]); - if(path.Count > 2) + //evnt.TargetZone = Zone.GetZoneId(path[1]); + if(path.Count > 1) { var zoneListToken = new ZoneListToken().SetEntries( - path.GetRange(2, path.Count-2).ToArray()); + path.GetRange(1, path.Count-1).ToArray()); evnt.PathQueue = zoneListToken; } @@ -212,24 +231,44 @@ namespace GWConquest } else { - BoltLog.Info("Could not move formation {0} (controlled: {1}, in transit: {2})", - this, entity.IsControlled, State.IsInTransit); + BoltLog.Info("Could not move formation {0} (controlled: {1}, movement state: {2})", + this, entity.IsControlled, MovementState); } } - public void MoveToZone(Zone target) + public void HandleMovementEvent(MoveFormationEvent evnt) { - if(entity.IsOwner && !State.IsInTransit) + //var targetZone = Zone.GetFromId(evnt.TargetZone); + + if(IsEmbarked) { - if(IsEmbarked) + if(ParentFormation != null && ParentFormation.entity.IsAttached) { - if(ParentFormation != null && ParentFormation.entity.IsAttached) - { - MovementOriginFormation = ParentFormation; - ParentFormation.RemoveSubFormation(this); - } + MovementOriginFormation = ParentFormation; + ParentFormation.RemoveSubFormation(this); } + } + + //formation.MoveToZone(targetZone); + if(evnt.PathQueue != null) + { + var queueToken = evnt.PathQueue as ZoneListToken; + PathQueue.FromToken(queueToken); + } + if(evnt.TargetFormation != null) + { + State.MovementTargetFormation = evnt.TargetFormation; + } + + SetActionCooldown(GameManager.Instance.MovementStartingCooldown); + MovementState = FormationMovementState.PreparingMovement; + } + public void MoveToZone(Zone target) + { + if(entity.IsOwner && MovementState == FormationMovementState.PreparingMovement) + { + State.CurrentTransition.OriginZone = Zone.GetZoneId(currentZone); State.CurrentTransition.TargetZone = Zone.GetZoneId(target); bool isGroundTransition = target.zoneType == ZoneType.Ground || currentZone.zoneType == ZoneType.Ground; @@ -260,18 +299,18 @@ namespace GWConquest CoveredDistance = 0; currentZone = null; - State.IsInTransit = true; + MovementState = FormationMovementState.Moving; } else { - BoltLog.Warn("Ignoring MoveFormationEvent on {0} (in transit: {1})", this, State.IsInTransit); + BoltLog.Warn("Ignoring MoveToZone on {0} (movement state: {1})", this, MovementState); } } private void OnTransitStateChanged() { animDistanceCovered = 0; - if(State.IsInTransit) + if(MovementState == FormationMovementState.Moving) { var originZone = Zone.GetFromId(State.CurrentTransition.OriginZone); var targetZone = Zone.GetFromId(State.CurrentTransition.TargetZone); @@ -344,7 +383,7 @@ namespace GWConquest IsEmbarked = false; } } - if(State.IsInTransit) + if(MovementState == FormationMovementState.Moving) { CoveredDistance += movementSpeed * BoltNetwork.FrameDeltaTime; if (CoveredDistance >= State.CurrentTransition.TransitionLength) @@ -355,8 +394,10 @@ namespace GWConquest State.CurrentTransition.TargetZone = -1; State.CurrentTransition.TransitionLength = 0; CoveredDistance = 0; - State.IsInTransit = false; + MovementState = FormationMovementState.FinishingMovement; + SetActionCooldown(GameManager.Instance.MovementFinishedCooldown); + /* if(PathQueue.Count > 0) { StartCoroutine(ContinueMovingOnPath()); @@ -376,20 +417,52 @@ namespace GWConquest { MovementOriginFormation = null; } - } + }*/ } } - } + if(ActionCooldown <= 0) + { + State.ActionCooldown = 0; - private IEnumerator ContinueMovingOnPath() - { - yield return new WaitForSeconds(0.1f); - Zone z = PathQueue.First(); - PathQueue.RemoveAt(0); - MoveToZone(z); + if(MovementState == FormationMovementState.PreparingMovement) + { + Zone z = PathQueue.First(); + PathQueue.RemoveAt(0); + MoveToZone(z); + } + else if(MovementState == FormationMovementState.FinishingMovement) + { + if(PathQueue.Count > 0) + { + SetActionCooldown(GameManager.Instance.MovementStartingCooldown); + MovementState = FormationMovementState.PreparingMovement; + } + else + { + if(MovementTargetFormation != null) + { + if(MovementTargetFormation.entity.IsAttached && MovementTargetFormation.currentZone == currentZone) + { + MovementTargetFormation.AddSubFormation(this); + } + MovementTargetFormation = null; + } + if(MovementOriginFormation != null) + { + MovementOriginFormation = null; + } + + MovementState = FormationMovementState.Idle; + } + } + } + else { + State.ActionCooldown -= BoltNetwork.FrameDeltaTime; + } } + private void OnEnable() { /* @@ -413,7 +486,7 @@ namespace GWConquest //Debug.LogFormat("Current state: IsInTransit {0}; CurrentZone {1}; CoveredDistance {2}", State.IsInTransit, State.CurrentZone, CoveredDistance); - if (State.IsInTransit) + if (MovementState == FormationMovementState.Moving) { animDistanceCovered += movementSpeed * Time.deltaTime; Zone originZone = Zone.GetFromId(State.CurrentTransition.OriginZone); @@ -424,13 +497,14 @@ namespace GWConquest //if(State.CurrentTransition.IsCurved) //{ - Vector3 planetPos = targetZone.planet.transform.position; + /*Vector3 planetPos = targetZone.planet.transform.position; Vector3 originPos = originZone.transform.position - planetPos; Vector3 targetPos = targetZone.transform.position - planetPos; newPos = Vector3.Slerp(originPos, targetPos, animDistanceCovered / State.CurrentTransition.TransitionLength); newPos += planetPos; newRot = Quaternion.LookRotation(newPos - oldPos, newPos - planetPos); + */ //} //else //{ @@ -463,13 +537,13 @@ namespace GWConquest if(entity.IsOwner) { State.CurrentZone = -1; - State.IsInTransit = false; + MovementState = FormationMovementState.Idle; CoveredDistance = 0; FormationNumber = UnityEngine.Random.Range(1, 100); } - State.AddCallback("IsInTransit", OnTransitStateChanged); + State.AddCallback("MovementState", OnTransitStateChanged); State.AddCallback("CurrentZone", OnZoneChanged); } @@ -551,7 +625,6 @@ namespace GWConquest { return 1f; } - public bool CanMoveTo(Zone origin, Zone target) { return true; @@ -666,7 +739,7 @@ namespace GWConquest } - public enum FormationState { + public enum FormationMovementState { Idle, PreparingMovement, FinishingMovement, Moving } diff --git a/Assets/GWConquest/Scripts/GameManager.cs b/Assets/GWConquest/Scripts/GameManager.cs index bbacb08..5898b39 100644 --- a/Assets/GWConquest/Scripts/GameManager.cs +++ b/Assets/GWConquest/Scripts/GameManager.cs @@ -27,6 +27,8 @@ namespace GWConquest public float MoveToReserveCooldown; public float UnitDeathCooldown; public float ArtilleryCooldown; + public float MovementStartingCooldown; + public float MovementFinishedCooldown; public int DefaultStorageCapacity; public int MaxStackSize; diff --git a/Assets/GWConquest/Scripts/ServerCallbacks.cs b/Assets/GWConquest/Scripts/ServerCallbacks.cs index 37af965..a9e9e30 100644 --- a/Assets/GWConquest/Scripts/ServerCallbacks.cs +++ b/Assets/GWConquest/Scripts/ServerCallbacks.cs @@ -70,17 +70,7 @@ namespace GWConquest public override void OnEvent(MoveFormationEvent evnt) { Formation formation = evnt.Formation.GetComponent(); - var targetZone = Zone.GetFromId(evnt.TargetZone); - formation.MoveToZone(targetZone); - if(evnt.PathQueue != null) - { - var queueToken = evnt.PathQueue as ZoneListToken; - formation.PathQueue.FromToken(queueToken); - } - if(evnt.TargetFormation != null) - { - formation.State.MovementTargetFormation = evnt.TargetFormation; - } + formation.HandleMovementEvent(evnt); } public override void OnEvent(AddProductionEvent evnt) diff --git a/Assets/GWConquest/Scripts/UI/FormationIcon.cs b/Assets/GWConquest/Scripts/UI/FormationIcon.cs index b5fb487..284e739 100644 --- a/Assets/GWConquest/Scripts/UI/FormationIcon.cs +++ b/Assets/GWConquest/Scripts/UI/FormationIcon.cs @@ -15,6 +15,13 @@ namespace GWConquest { public GameObject[] StrengthGameObjects; + public Image CooldownCircle; + public Image MovementArrow; + public RectTransform ColouredTransform; + + public Sprite MovementStartingArrow; + public Sprite MovementFinishedArrow; + [System.NonSerialized] public Formation CurrentFormation; @@ -53,6 +60,23 @@ namespace GWConquest { var color = f.Player.Faction.FactionColor; SetColor(color); + + if(CurrentFormation.ActionCooldown > 0) + { + GetComponent().SetBool("Cooldown", true); + CooldownCircle.fillAmount = CurrentFormation.ActionCooldownPercent; + if(CurrentFormation.MovementState == FormationMovementState.PreparingMovement) + { + MovementArrow.sprite = MovementStartingArrow; + } + else if(CurrentFormation.MovementState == FormationMovementState.FinishingMovement) + { + MovementArrow.sprite = MovementFinishedArrow; + } + } + else { + GetComponent().SetBool("Cooldown", false); + } } } @@ -82,7 +106,7 @@ namespace GWConquest { } private void SetColor(Color color) { - foreach(Graphic g in GetComponentsInChildren()) + foreach(Graphic g in ColouredTransform.GetComponentsInChildren()) { g.color = Util.UpdateColorRGB(g.color, color); } diff --git a/Assets/GWConquest/Scripts/UI/StickToFormation.cs b/Assets/GWConquest/Scripts/UI/StickToFormation.cs index 50bf4bf..956af9b 100644 --- a/Assets/GWConquest/Scripts/UI/StickToFormation.cs +++ b/Assets/GWConquest/Scripts/UI/StickToFormation.cs @@ -10,7 +10,7 @@ namespace GWConquest public Formation formation; private void Update() { - if(formation.State.IsInTransit) + if(formation.MovementState == FormationMovementState.Moving) { var originZone = Zone.GetFromId(formation.State.CurrentTransition.OriginZone); var targetZone = Zone.GetFromId(formation.State.CurrentTransition.TargetZone); diff --git a/Assets/GWConquest/Textures/Icons/Transitpfeil.png b/Assets/GWConquest/Textures/Icons/Transitpfeil.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3972357fe0b56ba07fde12b2d37408bd554af5 GIT binary patch literal 756 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%0AhB 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 DdgI)4 delta 25470 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 Uqemm)PeIdq?4$pq#Xs=>0eF`PWdHyG diff --git a/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll.mdb b/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll.mdb index d745e76dc6d8a8088dba6c018de834941fb072ca..c0162ed11453427b33bb6499b8a62dad214cca50 100644 GIT binary patch literal 38065 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