代码提交-20240627-0949
This commit is contained in:
parent
abfd4822c5
commit
f3fe5787eb
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 36e2bd3e8c7c05748941200f14273f61
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 37017c8e38e58dd4cb8644f2f6466e65
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5045b4877a5eb420da0cffa31b71daab
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,129 @@
|
|||
UNITY ASSET
|
||||
|
||||
DATE RANGE PICKER
|
||||
|
||||
Table of contents
|
||||
|
||||
Table of contents
|
||||
Overview
|
||||
RATE
|
||||
QUICK SETUP VIDEO
|
||||
TYPES OF DATE RANGE PICKERS [PREFABS]
|
||||
SCENES
|
||||
DATE RANGE PICKER INITIAL SETUP
|
||||
THINGS TO NOTE
|
||||
|
||||
Date range picker main scripts
|
||||
Button color - Update the look of the calenders
|
||||
Border color
|
||||
Headings color
|
||||
Show days in other months
|
||||
Update the first day of the week
|
||||
Close on last selection
|
||||
Calendar updated callbacks
|
||||
UITweenManager
|
||||
Changing calender dates
|
||||
|
||||
Overview
|
||||
|
||||
Allows your users to visually select between two dates with this easy to use
|
||||
Unity Asset.
|
||||
|
||||
RATE
|
||||
|
||||
If you enjoyed this asset, please rate it! It will help alot! Furthermore if
|
||||
your having issues or need improvements reach out to h unter.glen@gmail.com
|
||||
QUICK SETUP VIDEO
|
||||
|
||||
- https://youtu.be/X0FE6mdnz64
|
||||
|
||||
TYPES OF DATE RANGE PICKERS [PREFABS]
|
||||
|
||||
- Single Date Range Picker - D ate picker with single calender, w ith
|
||||
highlighting for the inbetween, selected dates.
|
||||
|
||||
- Dual Date Range Picker - D ate picker with two calenders, with
|
||||
highlighting for the inbetween, selected dates.
|
||||
|
||||
- NH Single Date Range Picker - D ate picker with single calender, w ithout
|
||||
highlighting for the inbetween, selected dates.
|
||||
|
||||
- NH Dual Date Range Picker - D ate picker with two calenders, without
|
||||
highlighting for the inbetween, selected dates.
|
||||
|
||||
SCENES
|
||||
|
||||
- H Single Date Range Picker
|
||||
- H Dual Date Range Picker
|
||||
- NH Single Date Range Picker
|
||||
- NH Dual Date Range Picker
|
||||
|
||||
DATE RANGE PICKER INITIAL SETUP
|
||||
|
||||
1. Create a new scene
|
||||
2. Add a canvas object, doing so by right clicking in the hierarchy > UI >
|
||||
|
||||
Canvas
|
||||
3. Setup canvas to your liking, in this case asset was developed using the
|
||||
following values (see picture below)
|
||||
|
||||
4. Drag and drop one of the date range pickers as a child object of the canvas
|
||||
5.Hit play and see it working! :)
|
||||
|
||||
THINGS TO NOTE
|
||||
|
||||
Date range picker main scripts
|
||||
Single_DateRangePicker.cs, Dual_DateRangePicker.cs,
|
||||
nh_Single_DateRangePicker.cs, nh_Dual_DateRangePicker.cs these d ate range
|
||||
picker scripts, define the differences between one another.
|
||||
Button color - Update the look of the calenders
|
||||
Calendar buttons: Select the CalenderButton Prefab within the project window,
|
||||
here you can change the default color, depending upon the state. Once you do
|
||||
this you will then have to update your calendars.
|
||||
|
||||
- To do this locate your Date Range Picker gameobject within your scene,
|
||||
attached you should find SpawnCalenderButtons.cs - e nsure your date
|
||||
range picker is complete unpacked from a prefab and hit spawn. D on’t
|
||||
forget to save the scene after!
|
||||
Border color
|
||||
Border color - this can be done manually, by selecting the bottom outline
|
||||
within the prefabs and changing the image component color.
|
||||
|
||||
Headings color
|
||||
This can be done manually, by selecting the text component and setting the
|
||||
color to the desired.
|
||||
Show days in other months
|
||||
You can show days in other months by locating a date range picker game object
|
||||
and it’s ‘main’ retrospective script for example Dual_Date_RangePicker.cs.
|
||||
Here you will be able to choose whether or not you want to show days in other
|
||||
months.
|
||||
Update the first day of the week
|
||||
This can be done by locating your date range picker gameobject and it’s
|
||||
retrospective ‘main’ script within the hierarchy. Here you will be able to
|
||||
choose the first day of the week the calendar will start with.
|
||||
Close on last selection
|
||||
Attach to a date picker, you can toggle ‘Close On Last Selection’. If enabled,
|
||||
this option will close the datepicker/calender when the second date of the
|
||||
date picker has been selected.
|
||||
|
||||
For example...
|
||||
|
||||
Calendar updated callbacks
|
||||
Attached to the date picker main gameobject, within your hierarchy. You will
|
||||
find DateText.cs a ttached. This script has an example of how to plug into the
|
||||
date range picker calendar update events - mainly used to display the chosen
|
||||
date range.
|
||||
UITweenManager
|
||||
Simple tween manager, that is used for transitioning from different colours.
|
||||
The tween manager is mainly used in conjunction with the Calendar buttons and
|
||||
it’s display states for example transitioning/highlighting a button when a
|
||||
mouse hovers over a button.
|
||||
Changing calendar dates
|
||||
All of the examples have buttons that either increase or decrease a calendar
|
||||
year by 1 month or 1 year. If you want to change this value. Locate the date
|
||||
range picker gameobject and it’s main retrospective script.
|
||||
|
||||
Opening it up you will find methods such as OnClick_NextCalenderMonth and
|
||||
OnClick_PreviousCalenderYear that call either .AddMonths(1) or .AddYears(1).
|
||||
Then change the values within the parameters (1) , to the desired.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9f322b4d879b6470fb45dcd842be2def
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3ed0cfe6ba8e24ed79016ec29e3a71bb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 57ffa77aa6eca44fe878123a3fe12f05
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,26 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2f8936487aae64535a6e0723aec461a7
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontName: Montserrat
|
||||
fontNames:
|
||||
- Montserrat
|
||||
fallbackFontReferences:
|
||||
- {fileID: 12800000, guid: 11513ca76287048beaf2984d45165b57, type: 3}
|
||||
- {fileID: 12800000, guid: 0581b15bc62764aeeb546de57a2114a1, type: 3}
|
||||
- {fileID: 12800000, guid: 152f823d446ca423b89cd6d2feef9c2f, type: 3}
|
||||
- {fileID: 12800000, guid: 02ed79fe659d34482a5fec3fede15d27, type: 3}
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,25 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 152f823d446ca423b89cd6d2feef9c2f
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontName: Montserrat
|
||||
fontNames:
|
||||
- Montserrat
|
||||
fallbackFontReferences:
|
||||
- {fileID: 12800000, guid: 11513ca76287048beaf2984d45165b57, type: 3}
|
||||
- {fileID: 12800000, guid: 0581b15bc62764aeeb546de57a2114a1, type: 3}
|
||||
- {fileID: 12800000, guid: 02ed79fe659d34482a5fec3fede15d27, type: 3}
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2011 The Montserrat Project Authors (https://github.com/JulietaUla/Montserrat)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cb2669def561d43fb902a9ff0d098418
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 40df41bbe49bb406bbdae4d0d0783fee
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,466 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1840375564978184210
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3244997764918590192}
|
||||
- component: {fileID: 664120096248191345}
|
||||
- component: {fileID: 1157848042937354081}
|
||||
m_Layer: 5
|
||||
m_Name: Secondary
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3244997764918590192
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1840375564978184210}
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 3965394324223510559}
|
||||
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 &664120096248191345
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1840375564978184210}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &1157848042937354081
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1840375564978184210}
|
||||
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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: dc94ab512ebec45028d7b49b74dd6c87, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &2684456491627517692
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5979605283862889698}
|
||||
- component: {fileID: 2596722772224466705}
|
||||
- component: {fileID: 9112606524210455842}
|
||||
m_Layer: 5
|
||||
m_Name: Primary
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5979605283862889698
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2684456491627517692}
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 3965394324223510559}
|
||||
m_RootOrder: 1
|
||||
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 &2596722772224466705
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2684456491627517692}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &9112606524210455842
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2684456491627517692}
|
||||
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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 4aeefb11e15b4471798b5b76eca3d4e8, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &3965394324223510556
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3965394324223510559}
|
||||
- component: {fileID: 3965394324223510552}
|
||||
- component: {fileID: 3965394324223510558}
|
||||
- component: {fileID: 114418215014950898}
|
||||
- component: {fileID: 114877752753692514}
|
||||
- component: {fileID: 114023816492044268}
|
||||
- component: {fileID: 114867715374746712}
|
||||
- component: {fileID: 114319046893274842}
|
||||
m_Layer: 5
|
||||
m_Name: CalenderButton
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3965394324223510559
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 3244997764918590192}
|
||||
- {fileID: 5979605283862889698}
|
||||
- {fileID: 3965394324698099412}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3965394324223510552
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &3965394324223510558
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6367b2a9e388249eaa7ad70209051527, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_ButtonText: {fileID: 2148684627228542155}
|
||||
m_ButtonPrimaryImage: {fileID: 9112606524210455842}
|
||||
m_ButtonSecondaryImage: {fileID: 1157848042937354081}
|
||||
m_NormalState: {fileID: 114418215014950898}
|
||||
m_SelectedState: {fileID: 114023816492044268}
|
||||
m_HoverState: {fileID: 114877752753692514}
|
||||
m_HighlightedState: {fileID: 114867715374746712}
|
||||
m_DisabledState: {fileID: 114319046893274842}
|
||||
--- !u!114 &114418215014950898
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e456cc388e88a4371be4c3688e8fa6fe, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_BtnImageColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_BtnTextColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4281874488
|
||||
m_Btn_ImageColor_NotInMonth:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_Btn_TextColor_NotInMonth:
|
||||
serializedVersion: 2
|
||||
rgba: 842545208
|
||||
--- !u!114 &114877752753692514
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 488e8e5ffe36649a4bea689cce6afa2d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_BtnImageColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4287221021
|
||||
m_BtnTextColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
--- !u!114 &114023816492044268
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: eeafa67c690664539bc6b9ecc446523f, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_BtnImageColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4287221021
|
||||
m_BtnTextColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
--- !u!114 &114867715374746712
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 97bc0f2fe435e4363ae1d19951bfbc46, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_FirstSelectionDate_HighlightSprite: {fileID: 21300000, guid: 51bcd696195bd457cb17aaf20b0f2ee3, type: 3}
|
||||
m_InBetween_Dates_HighlightSprite: {fileID: 21300000, guid: 7ae9bf0f40b8645789df112f2576400a, type: 3}
|
||||
m_LastSelectionDate_HighlightSprite: {fileID: 21300000, guid: efcdc93ca6c2a485cbd892c3e4941922, type: 3}
|
||||
m_Highlight_Image_Color:
|
||||
serializedVersion: 2
|
||||
rgba: 847891741
|
||||
--- !u!114 &114319046893274842
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324223510556}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 00d95f725a9bc4909a37a5325ddc40f8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &3965394324698099413
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3965394324698099412}
|
||||
- component: {fileID: 3965394324698099414}
|
||||
- component: {fileID: 2861965092648538287}
|
||||
- component: {fileID: 2148684627228542155}
|
||||
m_Layer: 5
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3965394324698099412
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324698099413}
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 3965394324223510559}
|
||||
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: -4.4}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3965394324698099414
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324698099413}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!114 &2861965092648538287
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324698099413}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5ecf0704b4a60fa43a8d6fbee03f1c5d, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &2148684627228542155
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3965394324698099413}
|
||||
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: 27
|
||||
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: 4281874488
|
||||
m_fontColor: {r: 0.21960786, g: 0.21960786, b: 0.21960786, 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: 12
|
||||
m_fontSizeBase: 12
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
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}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3532de14aa3d944789e9dd237f4946eb
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1ceca557817634736a573c095f2b2e4d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 319b3274983304476b141f3a80b70d47
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5589e92101a854ecb9aad2815097817d
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fa61da735eed248d49bb5817ed91f20a
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ecb6ee7528fc3420481cfda349e87f7c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 41b94a664ddfe2648b03f82112d7422e
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b4b96a1e703bb41c8b887f1e16913fe8
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c83657a7decbe45c18fe6bdf9daa370c
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1be9216cab2ec4a72a45f0a2957dd188
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2a3e2fd96e9ed4aa698a7ea5ab9dfa00
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 863b5a8f4ace14ed7bea67941e0e0463
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6750c470d4f8a4e1b8ff2c4d059e28c4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cd54ba8d589f74f35a94243a49c7eb94
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,138 @@
|
|||
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.UI;
|
||||
using System.Globalization;
|
||||
using TMPro;
|
||||
|
||||
public delegate void OnPointerEnter(CalenderButton button, Calender calender);
|
||||
public delegate void OnPointerDown(CalenderButton button, DateTime calenderDate, Calender calender);
|
||||
public delegate void OnPointerExit(CalenderButton button, Calender calender);
|
||||
/// <summary>
|
||||
/// Called when setup was called() and is in the process of updating/iterating over each button state, good for highlighting selected dates
|
||||
/// of a calender button - Setup is generally called when a calender has changed month or year and needs to be refreshed,
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="calenderButton"></param>
|
||||
/// <param name="calenderButton"></param>
|
||||
public delegate void OnCalenderRefreshed(DateTime calenderDate, CalenderButton calenderButton, DateTime buttonDate);
|
||||
|
||||
public class Calender : MonoBehaviour
|
||||
{
|
||||
public DateTime Date;
|
||||
private DayOfWeek m_FirstDayOfWeek;
|
||||
|
||||
[Header("References")]
|
||||
public List<CalenderButton> CalenderButtons;
|
||||
[SerializeField] TextMeshProUGUI m_DateLabel;
|
||||
[SerializeField] List<TextMeshProUGUI> m_DaysOfWeekLabels;
|
||||
private bool m_ShowDatesInOtherMonths = false;
|
||||
|
||||
public OnPointerEnter PointerEnter;
|
||||
public OnPointerDown PointerDown;
|
||||
public OnPointerExit PointerExit;
|
||||
public OnCalenderRefreshed CalenderRefreshed;
|
||||
|
||||
public void Setup(int year, int month, DayOfWeek firstDayOfWeek, bool showDaysInOtherMonths, DateTime? startDate, DateTime? endDate, UITweenManager uiTweenManager)
|
||||
{
|
||||
Date = new DateTime(year, month, 1);
|
||||
m_FirstDayOfWeek = firstDayOfWeek;
|
||||
m_ShowDatesInOtherMonths = showDaysInOtherMonths;
|
||||
|
||||
// Time to setup all the buttons! :)
|
||||
// create current month starting from 1
|
||||
DateTime currentDate;
|
||||
currentDate = (DateTime)StartDate();
|
||||
|
||||
|
||||
|
||||
// update main date heading
|
||||
string monthHeading = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Date.Month);
|
||||
m_DateLabel.text = monthHeading.ToUpper() + " " + Date.Year;
|
||||
|
||||
//used for mon-sun labels
|
||||
int startingIndex = (int)m_FirstDayOfWeek;
|
||||
|
||||
for (int i = 0; i < 42; i++)
|
||||
{
|
||||
|
||||
// update days of weeks labels
|
||||
if (i < 7)
|
||||
{
|
||||
m_DaysOfWeekLabels[i].text = ((DayOfWeek)startingIndex).ToString().Remove(1).ToUpper();
|
||||
|
||||
startingIndex++;
|
||||
|
||||
if (startingIndex > 6)
|
||||
startingIndex = 0;
|
||||
}
|
||||
|
||||
// update buttons
|
||||
|
||||
CalenderButtons[i].Setup(this, currentDate, currentDate.Day.ToString(), m_ShowDatesInOtherMonths, uiTweenManager);
|
||||
|
||||
if(CalenderRefreshed != null)
|
||||
{
|
||||
CalenderRefreshed(Date, CalenderButtons[i], currentDate);
|
||||
}
|
||||
|
||||
|
||||
currentDate = currentDate.AddDays(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool DateIsInCalenderMonth(DateTime chosenDate, DateTime calenderDate)
|
||||
{
|
||||
if (calenderDate.Month == chosenDate.Month)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public DateTime? StartDate()
|
||||
{
|
||||
DateTime currentDate = new DateTime(Date.Year, Date.Month, 1);
|
||||
|
||||
DayOfWeek firstDayOfMonth = currentDate.DayOfWeek;
|
||||
|
||||
|
||||
if (firstDayOfMonth < m_FirstDayOfWeek)
|
||||
{
|
||||
|
||||
// start current date based upon start day of week
|
||||
// this is used to show previous dates before
|
||||
int dayIndex = (int)m_FirstDayOfWeek;
|
||||
int daysBehind = 0;
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
dayIndex++;
|
||||
daysBehind++;
|
||||
|
||||
if (dayIndex > 6)
|
||||
{
|
||||
dayIndex = 0;
|
||||
}
|
||||
|
||||
if (dayIndex == (int)firstDayOfMonth)
|
||||
{
|
||||
return currentDate = currentDate.AddDays(-daysBehind);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// start current date based upon start day of week
|
||||
return currentDate = currentDate.AddDays(-(firstDayOfMonth - m_FirstDayOfWeek));
|
||||
}
|
||||
|
||||
Debug.LogError("Something went wrong, should not be getting here.");
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ba1ca574d789a4a45b9b23aac9378972
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,116 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class CalenderButton : MonoBehaviour, IPointerEnterHandler, IPointerDownHandler, IPointerExitHandler
|
||||
{
|
||||
public enum State
|
||||
{
|
||||
Normal,
|
||||
Hover,
|
||||
Selected,
|
||||
Highlighted,
|
||||
Disabled,
|
||||
}
|
||||
|
||||
[SerializeField] TextMeshProUGUI m_ButtonText;
|
||||
|
||||
private Dictionary<State, DisplayState> m_DisplayDictionary;
|
||||
[SerializeField] Image m_ButtonPrimaryImage;
|
||||
[SerializeField] Image m_ButtonSecondaryImage;
|
||||
[SerializeField] DisplayState m_NormalState;
|
||||
[SerializeField] DisplayState m_SelectedState;
|
||||
[SerializeField] DisplayState m_HoverState;
|
||||
[SerializeField] DisplayState m_HighlightedState;
|
||||
[SerializeField] DisplayState m_DisabledState;
|
||||
|
||||
public State CurrentState { get; private set; }
|
||||
|
||||
private Calender m_Calender;
|
||||
public DateTime Date { get; private set; }
|
||||
|
||||
private bool m_ShowDaysInOtherMonths;
|
||||
|
||||
public void Setup(Calender calender, DateTime buttonDate, string text, bool showDaysInOtherMonths, UITweenManager uiTweenManager)
|
||||
{
|
||||
if (m_ButtonText == null)
|
||||
{
|
||||
m_ButtonText = transform.Find("Text").GetComponent<TextMeshProUGUI>();
|
||||
}
|
||||
m_DisplayDictionary = new Dictionary<State, DisplayState>();
|
||||
m_Calender = calender;
|
||||
Date = buttonDate;
|
||||
m_ButtonText.text = text;
|
||||
m_ShowDaysInOtherMonths = showDaysInOtherMonths;
|
||||
|
||||
m_DisplayDictionary.Add(State.Normal, m_NormalState);
|
||||
m_DisplayDictionary.Add(State.Hover, m_HoverState);
|
||||
m_DisplayDictionary.Add(State.Selected, m_SelectedState);
|
||||
|
||||
if(m_HighlightedState != null)
|
||||
{
|
||||
m_DisplayDictionary.Add(State.Highlighted, m_HighlightedState);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("WARNING there's not highlight script defined, if this is the case, no highlight will be shown");
|
||||
}
|
||||
|
||||
m_DisplayDictionary.Add(State.Disabled, m_DisabledState);
|
||||
|
||||
foreach(KeyValuePair<State, DisplayState> displayState in m_DisplayDictionary)
|
||||
{
|
||||
displayState.Value.Setup(m_ButtonPrimaryImage, m_ButtonSecondaryImage, m_ButtonText, uiTweenManager);
|
||||
}
|
||||
|
||||
if (!m_ShowDaysInOtherMonths && buttonDate.Month != calender.Date.Month)
|
||||
{
|
||||
UpdateState(State.Disabled, m_Calender.Date, null, null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Force normal display script to trigger
|
||||
UpdateState(State.Normal, m_Calender.Date, null, null);
|
||||
}
|
||||
|
||||
public void ResetToOriginal()
|
||||
{
|
||||
if (!m_ShowDaysInOtherMonths && Date.Month != m_Calender.Date.Month)
|
||||
{
|
||||
UpdateState(State.Disabled, m_Calender.Date, null, null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Force normal display script to trigger
|
||||
UpdateState(State.Normal, m_Calender.Date, null, null);
|
||||
}
|
||||
|
||||
|
||||
public void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
if (CurrentState != State.Disabled && m_Calender.PointerEnter != null )
|
||||
m_Calender.PointerEnter(this, m_Calender);
|
||||
}
|
||||
|
||||
public void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
if(CurrentState != State.Disabled && m_Calender.PointerDown != null)
|
||||
m_Calender.PointerDown(this, Date, m_Calender);
|
||||
}
|
||||
|
||||
public void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
if (CurrentState != State.Disabled && m_Calender.PointerExit != null)
|
||||
m_Calender.PointerExit(this, m_Calender);
|
||||
}
|
||||
|
||||
public void UpdateState(State newState, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
CurrentState = newState;
|
||||
m_DisplayDictionary[newState].UpdateState(Date, calenderDate, selectedStartDate, selectedEndDate);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6367b2a9e388249eaa7ad70209051527
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,12 @@
|
|||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
public class DateRangePicker : MonoBehaviour
|
||||
{
|
||||
public delegate void CalenderUpdate(DateTime? selectedStartDate, DateTime? selectedEndDate);
|
||||
public CalenderUpdate CalendersUpdated;
|
||||
|
||||
public virtual void Setup()
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7fa390d6e188c43f2a8261443828eb41
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,48 @@
|
|||
using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class DateText : MonoBehaviour
|
||||
{
|
||||
[SerializeField] DateRangePicker m_DatePicker;
|
||||
[SerializeField] TextMeshProUGUI m_DateText;
|
||||
[SerializeField] TextMeshProUGUI m_TimeText;
|
||||
bool first = true;
|
||||
private void Start()
|
||||
{
|
||||
m_DatePicker.CalendersUpdated += CalenderUpdated;
|
||||
}
|
||||
|
||||
public void CalenderUpdated(DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
string text = "";
|
||||
|
||||
//if (selectedStartDate != null)
|
||||
//{
|
||||
// text += selectedStartDate.Value.ToShortDateString();
|
||||
//}
|
||||
|
||||
//if (selectedEndDate != null)
|
||||
//{
|
||||
// text += " - " + selectedEndDate.Value.ToShortDateString();
|
||||
//}
|
||||
|
||||
if (selectedStartDate != null)
|
||||
{
|
||||
text += selectedStartDate.Value.ToString("yyyy-MM-dd");
|
||||
}
|
||||
|
||||
if (selectedEndDate != null)
|
||||
{
|
||||
text += " - " + selectedEndDate.Value.ToString("yyyy-MM-dd");
|
||||
}
|
||||
|
||||
m_DateText.text = text;
|
||||
|
||||
if (first)
|
||||
{
|
||||
m_TimeText.text = "00:00:00";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4f2ba0573c8c248e8bdd84ad35bd9466
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,69 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Used to spawn calender buttons, which is generally used for styling, ideally should be doing this to prefabs that have been unpacked.
|
||||
/// </summary>
|
||||
[ExecuteInEditMode]
|
||||
public class SpawnCalenderButtons : MonoBehaviour
|
||||
{
|
||||
[SerializeField] DateRangePicker m_DateRangePicker;
|
||||
|
||||
[SerializeField] CalenderButton m_CalenderButtonPrefab;
|
||||
[SerializeField] List<CalenderData> m_Calenders;
|
||||
[SerializeField] bool m_Spawn = false;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if(m_Spawn)
|
||||
{
|
||||
m_Spawn = false;
|
||||
|
||||
Spawn_CalenderButtons();
|
||||
}
|
||||
}
|
||||
|
||||
private void Spawn_CalenderButtons()
|
||||
{
|
||||
int currentRow = 0;
|
||||
|
||||
|
||||
for (int i = 0; i < m_Calenders.Count; i++)
|
||||
{
|
||||
m_Calenders[i].Calender.CalenderButtons = new List<CalenderButton>();
|
||||
|
||||
if (m_Calenders[i] != null)
|
||||
{
|
||||
for (int j = 0; j < 42; j++)
|
||||
{
|
||||
|
||||
if (j % 7 == 0)
|
||||
{
|
||||
currentRow = j / 7;
|
||||
|
||||
// want to remove any buttons that exist
|
||||
CalenderButton[] btns = m_Calenders[i].Rows[currentRow].GetComponentsInChildren<CalenderButton>();
|
||||
|
||||
for (int fw = 0; fw < btns.Length; fw++)
|
||||
DestroyImmediate(btns[fw].gameObject);
|
||||
|
||||
}
|
||||
|
||||
GameObject btnObj = Instantiate(m_CalenderButtonPrefab.gameObject, m_Calenders[i].Rows[currentRow].transform, false);
|
||||
m_Calenders[i].Calender.CalenderButtons.Add(btnObj.GetComponent<CalenderButton>());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_DateRangePicker.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class CalenderData
|
||||
{
|
||||
public Calender Calender;
|
||||
public Transform[] Rows;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f9257739379f54a479dda5de9a3c4438
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 474639de43941457e9641fbf836d902b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,240 @@
|
|||
using UnityEngine;
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
public class Dual_DateRangePicker : DateRangePicker
|
||||
{
|
||||
// FW == First Window Calender
|
||||
// SW == Second Window Calender
|
||||
[SerializeField] DayOfWeek m_FirstDayOfWeek = DayOfWeek.Monday;
|
||||
[SerializeField] bool m_ShowDaysInOtherMonths = false;
|
||||
[SerializeField] bool m_CloseOnLastSelection = false;
|
||||
[SerializeField] Calender FW_Calender;
|
||||
[SerializeField] Calender SW_Calender;
|
||||
[SerializeField] UITweenManager UITweenManager;
|
||||
|
||||
private DateTime? m_StartDate;
|
||||
private CalenderButton m_StartDate_SelectedBTN;
|
||||
private DateTime? m_EndDate;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Setup();
|
||||
}
|
||||
|
||||
public override void Setup()
|
||||
{
|
||||
FW_Calender.Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
|
||||
SW_Calender.Date = FW_Calender.Date.AddMonths(1);
|
||||
|
||||
FW_Calender.PointerEnter += OnPointerEnter;
|
||||
FW_Calender.PointerDown += OnPointerDown;
|
||||
FW_Calender.PointerExit += OnPointerExit;
|
||||
|
||||
SW_Calender.PointerEnter += OnPointerEnter;
|
||||
SW_Calender.PointerDown += OnPointerDown;
|
||||
SW_Calender.PointerExit += OnPointerExit;
|
||||
|
||||
FW_Calender.CalenderRefreshed += OnCalenderRefreshed;
|
||||
SW_Calender.CalenderRefreshed += OnCalenderRefreshed;
|
||||
|
||||
FW_Calender.Setup(DateTime.Now.Year, DateTime.Now.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(DateTime.Now.Year, DateTime.Now.AddMonths(1).Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnPointerEnter(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Normal && m_EndDate == null && DateIsInCalenderMonth(chosenCalenderButton.Date, calender.Date))
|
||||
{
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Hover, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerDown(CalenderButton chosenCalenderButton, DateTime chosenDate, Calender calender)
|
||||
{
|
||||
// clears selection
|
||||
if (m_StartDate != null && m_EndDate != null)
|
||||
{
|
||||
for (int i = 0; i < 42; i++)
|
||||
{
|
||||
FW_Calender.CalenderButtons[i].ResetToOriginal();
|
||||
SW_Calender.CalenderButtons[i].ResetToOriginal();
|
||||
}
|
||||
|
||||
m_StartDate = null;
|
||||
m_EndDate = null;
|
||||
|
||||
// don't return on this one
|
||||
}
|
||||
|
||||
if (m_StartDate == null && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// revert, if second date is selected is less that the first chosen ddate
|
||||
if (m_StartDate != null && chosenDate <= m_StartDate && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
// revert previous selected start date
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_StartDate != null && m_EndDate == null)
|
||||
{
|
||||
m_EndDate = chosenDate;
|
||||
|
||||
// select end button
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
|
||||
DateTime date = m_StartDate.Value;
|
||||
|
||||
for (int i = 0; i < (m_EndDate - m_StartDate).Value.TotalDays + 1; i++)
|
||||
{
|
||||
|
||||
CalenderButton fw_CalenderBTN = null;
|
||||
CalenderButton sw_CalenderBTN = null;
|
||||
|
||||
fw_CalenderBTN = FW_Calender.CalenderButtons.Where(x => x.Date == date && x.CurrentState != CalenderButton.State.Disabled).FirstOrDefault();
|
||||
sw_CalenderBTN = SW_Calender.CalenderButtons.Where(x => x.Date == date && x.CurrentState != CalenderButton.State.Disabled).FirstOrDefault();
|
||||
|
||||
if (fw_CalenderBTN != null && DateIsInCalenderMonth(date, FW_Calender.Date))
|
||||
{
|
||||
fw_CalenderBTN.UpdateState(CalenderButton.State.Highlighted, date, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
if (sw_CalenderBTN != null && DateIsInCalenderMonth(date, SW_Calender.Date))
|
||||
{
|
||||
sw_CalenderBTN.UpdateState(CalenderButton.State.Highlighted, date, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
|
||||
date = date.AddDays(1);
|
||||
}
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
|
||||
if(m_CloseOnLastSelection)
|
||||
{
|
||||
FW_Calender.gameObject.SetActive(false);
|
||||
SW_Calender.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnCalenderRefreshed(DateTime calenderDate, CalenderButton calenderButton, DateTime buttonDate)
|
||||
{
|
||||
if (DateIsInCalenderMonth(calenderDate, buttonDate))
|
||||
{
|
||||
// single selection
|
||||
if (m_StartDate != null && m_StartDate == buttonDate && m_EndDate == null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single selection but we also need to show highlight
|
||||
else if (m_StartDate != null && m_StartDate == buttonDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single 'end' selection
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate && m_StartDate != null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
else if (m_StartDate != null && m_EndDate != null && buttonDate >= m_StartDate && buttonDate <= m_EndDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool DateIsInCalenderMonth(DateTime chosenDate, DateTime calenderDate)
|
||||
{
|
||||
if(calenderDate.Month == chosenDate.Month)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void OnPointerExit(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Hover)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Normal, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderMonth()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddMonths(1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddMonths(1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderYear()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddYears(1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddYears(1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderMonth()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddMonths(-1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddMonths(-1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderYear()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddYears(-1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddYears(-1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_ToggleCalenders()
|
||||
{
|
||||
FW_Calender.gameObject.SetActive(!FW_Calender.gameObject.activeInHierarchy);
|
||||
SW_Calender.gameObject.SetActive(!SW_Calender.gameObject.activeInHierarchy);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 20abaff1cf16c492491a5ed49e3c0efc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,239 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
public enum PickType
|
||||
{
|
||||
ONE_DAY,
|
||||
TWO_DAY,
|
||||
}
|
||||
public class Single_DateRangePicker : DateRangePicker
|
||||
{
|
||||
[SerializeField] PickType m_PickType = PickType.ONE_DAY;
|
||||
[SerializeField] DayOfWeek m_FirstDayOfWeek = DayOfWeek.Monday;
|
||||
|
||||
[SerializeField] UITweenManager UITweenManager;
|
||||
[SerializeField] bool m_ShowDaysInOtherMonths = false;
|
||||
[SerializeField] bool m_CloseOnLastSelection = false;
|
||||
|
||||
[SerializeField] Calender m_Calender;
|
||||
|
||||
private DateTime? m_StartDate;
|
||||
private CalenderButton m_StartDate_SelectedBTN;
|
||||
private DateTime? m_EndDate;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Setup();
|
||||
}
|
||||
|
||||
public override void Setup()
|
||||
{
|
||||
m_Calender.PointerEnter = OnPointerEnter;
|
||||
m_Calender.PointerDown = OnPointerDown;
|
||||
m_Calender.PointerExit = OnPointerExit;
|
||||
m_Calender.CalenderRefreshed = OnCalenderRefreshed;
|
||||
m_Calender.Setup(DateTime.Now.Year, DateTime.Now.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnPointerEnter(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Normal && m_EndDate == null)
|
||||
{
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Hover, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerDown(CalenderButton chosenCalenderButton, DateTime chosenDate, Calender calender)
|
||||
{
|
||||
switch (m_PickType)
|
||||
{
|
||||
case PickType.ONE_DAY:
|
||||
if (m_StartDate != null)
|
||||
{
|
||||
for (int i = 0; i < 42; i++)
|
||||
m_Calender.CalenderButtons[i].ResetToOriginal();
|
||||
|
||||
m_StartDate = null;
|
||||
|
||||
// don't return on this one
|
||||
}
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = chosenDate;
|
||||
//m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
|
||||
|
||||
break;
|
||||
case PickType.TWO_DAY:
|
||||
// clears selection
|
||||
if (m_StartDate != null && m_EndDate != null)
|
||||
{
|
||||
for (int i = 0; i < 42; i++)
|
||||
m_Calender.CalenderButtons[i].ResetToOriginal();
|
||||
|
||||
m_StartDate = null;
|
||||
m_EndDate = null;
|
||||
|
||||
// don't return on this one
|
||||
}
|
||||
|
||||
// intiate first click
|
||||
if (m_StartDate == null && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_StartDate != null && chosenDate <= m_StartDate && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
// revert previous selected start date
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// initiate second click
|
||||
if (m_StartDate != null && m_EndDate == null)
|
||||
{
|
||||
m_EndDate = chosenDate;
|
||||
|
||||
// select end button
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
|
||||
DateTime date = m_StartDate.Value;
|
||||
|
||||
for (int i = 0; i < (m_EndDate - m_StartDate).Value.TotalDays + 1; i++)
|
||||
{
|
||||
|
||||
CalenderButton calenderButton;
|
||||
|
||||
calenderButton = m_Calender.CalenderButtons.Where(x => x.Date == date && x.CurrentState != CalenderButton.State.Disabled).FirstOrDefault();
|
||||
|
||||
|
||||
if (calenderButton != null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, date, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
date = date.AddDays(1);
|
||||
}
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
|
||||
if (m_CloseOnLastSelection)
|
||||
{
|
||||
m_Calender.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generally called when the next month is shown on a calender
|
||||
/// </summary>
|
||||
public void OnCalenderRefreshed(DateTime calenderDate, CalenderButton calenderButton, DateTime buttonDate)
|
||||
{
|
||||
// single selection
|
||||
if (m_StartDate != null && m_StartDate == buttonDate && m_EndDate == null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single selection but we also need to show highlight
|
||||
else if (m_StartDate != null && m_StartDate == buttonDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single 'end' selection
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate && m_StartDate != null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
else if (m_StartDate != null && m_EndDate != null && buttonDate >= m_StartDate && buttonDate <= m_EndDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Highlighted, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerExit(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Hover)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Normal, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
private bool DateIsInCalenderMonth(DateTime chosenDate, DateTime calenderDate)
|
||||
{
|
||||
if (calenderDate.Month == chosenDate.Month)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderMonth()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddMonths(1);
|
||||
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderYear()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddYears(1);
|
||||
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderMonth()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddMonths(-1);
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderYear()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddYears(-1);
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_ToggleCalenders()
|
||||
{
|
||||
m_Calender.gameObject.SetActive(!m_Calender.gameObject.activeInHierarchy);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1aa8eff758fb541f596ec995f29789f5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,212 @@
|
|||
using UnityEngine;
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
public class nh_Dual_DateRangePicker : DateRangePicker
|
||||
{
|
||||
// FW == First Window Calender
|
||||
// SW == Second Window Calender
|
||||
[SerializeField] DayOfWeek m_FirstDayOfWeek = DayOfWeek.Monday;
|
||||
[SerializeField] bool m_ShowDaysInOtherMonths = false;
|
||||
[SerializeField] bool m_CloseOnLastSelection = false;
|
||||
[SerializeField] Calender FW_Calender;
|
||||
[SerializeField] Calender SW_Calender;
|
||||
[SerializeField] UITweenManager UITweenManager;
|
||||
|
||||
private DateTime? m_StartDate;
|
||||
private CalenderButton m_StartDate_SelectedBTN;
|
||||
private DateTime? m_EndDate;
|
||||
private CalenderButton m_EndDate_SelectedBTN;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Setup();
|
||||
}
|
||||
|
||||
public override void Setup()
|
||||
{
|
||||
FW_Calender.Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
|
||||
SW_Calender.Date = FW_Calender.Date.AddMonths(1);
|
||||
|
||||
FW_Calender.PointerEnter += OnPointerEnter;
|
||||
FW_Calender.PointerDown += OnPointerDown;
|
||||
FW_Calender.PointerExit += OnPointerExit;
|
||||
|
||||
SW_Calender.PointerEnter += OnPointerEnter;
|
||||
SW_Calender.PointerDown += OnPointerDown;
|
||||
SW_Calender.PointerExit += OnPointerExit;
|
||||
|
||||
FW_Calender.CalenderRefreshed += OnCalenderRefreshed;
|
||||
SW_Calender.CalenderRefreshed += OnCalenderRefreshed;
|
||||
|
||||
FW_Calender.Setup(DateTime.Now.Year, DateTime.Now.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(DateTime.Now.Year, DateTime.Now.AddMonths(1).Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnPointerEnter(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Normal && m_EndDate == null)
|
||||
{
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Hover, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerDown(CalenderButton chosenCalenderButton, DateTime chosenDate, Calender calender)
|
||||
{
|
||||
// clears selection
|
||||
if (m_StartDate != null && m_EndDate != null)
|
||||
{
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
m_EndDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = null;
|
||||
m_EndDate = null;
|
||||
|
||||
// don't return on this one
|
||||
}
|
||||
|
||||
if (m_StartDate == null && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// revert, if second date is selected is less that the first chosen ddate
|
||||
if (m_StartDate != null && chosenDate <= m_StartDate && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
// revert previous selected start date
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_StartDate != null && m_EndDate == null)
|
||||
{
|
||||
m_EndDate = chosenDate;
|
||||
|
||||
// select end button
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
|
||||
m_EndDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
|
||||
if (m_CloseOnLastSelection)
|
||||
{
|
||||
FW_Calender.gameObject.SetActive(false);
|
||||
SW_Calender.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerExit(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Hover)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Normal, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnCalenderRefreshed(DateTime calenderDate, CalenderButton calenderButton, DateTime buttonDate)
|
||||
{
|
||||
if (DateIsInCalenderMonth(calenderDate, buttonDate))
|
||||
{
|
||||
// single selection
|
||||
if (m_StartDate != null && m_StartDate == buttonDate && m_EndDate == null)
|
||||
{
|
||||
m_StartDate_SelectedBTN = calenderButton;
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single selection but we also need to show highlight
|
||||
else if (m_StartDate != null && m_StartDate == buttonDate)
|
||||
{
|
||||
m_StartDate_SelectedBTN = calenderButton;
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single 'end' selection
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate && m_StartDate != null)
|
||||
{
|
||||
m_EndDate_SelectedBTN = calenderButton;
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate)
|
||||
{
|
||||
m_EndDate_SelectedBTN = calenderButton;
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool DateIsInCalenderMonth(DateTime chosenDate, DateTime calenderDate)
|
||||
{
|
||||
if (calenderDate.Month == chosenDate.Month)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void OnClick_NextCalenderMonth()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddMonths(1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddMonths(1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderYear()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddYears(1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddYears(1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderMonth()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddMonths(-1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddMonths(-1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderYear()
|
||||
{
|
||||
FW_Calender.Date = FW_Calender.Date.AddYears(-1);
|
||||
SW_Calender.Date = SW_Calender.Date.AddYears(-1);
|
||||
|
||||
FW_Calender.Setup(FW_Calender.Date.Year, FW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
SW_Calender.Setup(SW_Calender.Date.Year, SW_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_ToggleCalenders()
|
||||
{
|
||||
FW_Calender.gameObject.SetActive(!FW_Calender.gameObject.activeInHierarchy);
|
||||
SW_Calender.gameObject.SetActive(!SW_Calender.gameObject.activeInHierarchy);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 83d7ecc101cae4c4ea257b1922a3b9d0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,172 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// nh - no highlight date picker
|
||||
/// </summary>
|
||||
public class nh_Single_DateRangePicker : DateRangePicker
|
||||
{
|
||||
[SerializeField] DayOfWeek m_FirstDayOfWeek = DayOfWeek.Monday;
|
||||
|
||||
[SerializeField] UITweenManager UITweenManager;
|
||||
[SerializeField] bool m_ShowDaysInOtherMonths = false;
|
||||
[SerializeField] bool m_CloseOnLastSelection = false;
|
||||
|
||||
[SerializeField] Calender m_Calender;
|
||||
|
||||
private DateTime? m_StartDate;
|
||||
private CalenderButton m_StartDate_SelectedBTN;
|
||||
private DateTime? m_EndDate;
|
||||
private CalenderButton m_EndDate_SelectedBTN;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Setup();
|
||||
}
|
||||
|
||||
public override void Setup()
|
||||
{
|
||||
m_Calender.PointerEnter = OnPointerEnter;
|
||||
m_Calender.PointerDown = OnPointerDown;
|
||||
m_Calender.PointerExit = OnPointerExit;
|
||||
m_Calender.CalenderRefreshed = OnCalenderRefreshed;
|
||||
m_Calender.Setup(DateTime.Now.Year, DateTime.Now.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnPointerEnter(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Normal && m_EndDate == null)
|
||||
{
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Hover, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerDown(CalenderButton chosenCalenderButton, DateTime chosenDate, Calender calender)
|
||||
{
|
||||
// clears selection
|
||||
if (m_StartDate != null && m_EndDate != null)
|
||||
{
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
m_EndDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = null;
|
||||
m_EndDate = null;
|
||||
|
||||
// don't return on this one
|
||||
}
|
||||
|
||||
// intiate first click
|
||||
if (m_StartDate == null && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_StartDate != null && chosenDate <= m_StartDate && m_EndDate == null)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
{
|
||||
// revert previous selected start date
|
||||
m_StartDate_SelectedBTN.ResetToOriginal();
|
||||
|
||||
m_StartDate = chosenDate;
|
||||
m_StartDate_SelectedBTN = chosenCalenderButton;
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// initiate second click
|
||||
if (m_StartDate != null && m_EndDate == null)
|
||||
{
|
||||
m_EndDate = chosenDate;
|
||||
m_EndDate_SelectedBTN = chosenCalenderButton;
|
||||
// select end button
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Selected, chosenDate, m_StartDate, m_EndDate);
|
||||
|
||||
CalendersUpdated?.Invoke(m_StartDate, m_EndDate);
|
||||
|
||||
if (m_CloseOnLastSelection)
|
||||
{
|
||||
m_Calender.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerExit(CalenderButton chosenCalenderButton, Calender calender)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState == CalenderButton.State.Hover)
|
||||
{
|
||||
if (chosenCalenderButton.CurrentState != CalenderButton.State.Disabled)
|
||||
chosenCalenderButton.UpdateState(CalenderButton.State.Normal, calender.Date, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnCalenderRefreshed(DateTime calenderDate, CalenderButton calenderButton, DateTime buttonDate)
|
||||
{
|
||||
// single selection
|
||||
if (m_StartDate != null && m_StartDate == buttonDate && m_EndDate == null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single selection but we also need to show highlight
|
||||
else if (m_StartDate != null && m_StartDate == buttonDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
// single 'end' selection
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate && m_StartDate != null)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
else if (m_EndDate != null && m_EndDate == buttonDate)
|
||||
{
|
||||
calenderButton.UpdateState(CalenderButton.State.Selected, buttonDate, m_StartDate, m_EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderMonth()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddMonths(1);
|
||||
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_NextCalenderYear()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddYears(1);
|
||||
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderMonth()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddMonths(-1);
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_PreviousCalenderYear()
|
||||
{
|
||||
m_Calender.Date = m_Calender.Date.AddYears(-1);
|
||||
m_Calender.Setup(m_Calender.Date.Year, m_Calender.Date.Month, m_FirstDayOfWeek, m_ShowDaysInOtherMonths, m_StartDate, m_EndDate, UITweenManager);
|
||||
}
|
||||
|
||||
public void OnClick_ToggleCalenders()
|
||||
{
|
||||
m_Calender.gameObject.SetActive(!m_Calender.gameObject.activeInHierarchy);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0b61848c7a50b46ee914a5c840feeae0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 8aad7807a4d2d479bb6c3c6627cc6aa9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,12 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class DisableDisplayState : DisplayState
|
||||
{
|
||||
public override void UpdateState(DateTime? buttonDate, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
UITweenManager.ForceTween(PrimaryImage, Color.clear, null, 0f);
|
||||
UITweenManager.ForceTween(ButtonText, Color.clear, null, 0f);
|
||||
UITweenManager.ForceTween(SecondaryImage, Color.clear, null, 0f);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 00d95f725a9bc4909a37a5325ddc40f8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
public class DisplayState : MonoBehaviour
|
||||
{
|
||||
protected Image PrimaryImage { get; private set; }
|
||||
protected Image SecondaryImage { get; private set; }
|
||||
protected TextMeshProUGUI ButtonText { get; private set; }
|
||||
protected UITweenManager UITweenManager { get; private set; }
|
||||
|
||||
public virtual void Setup(Image primaryImage, Image secondaryImage, TextMeshProUGUI buttonText, UITweenManager uitweenManager)
|
||||
{
|
||||
PrimaryImage = primaryImage;
|
||||
SecondaryImage = secondaryImage;
|
||||
ButtonText = buttonText;
|
||||
UITweenManager = uitweenManager;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="dayInMonth">Is the current calender button, in the current calender date? Or does it need to be greyed out</param>
|
||||
public virtual void UpdateState(DateTime? buttonDate, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b44ccd99a54604291b70c647ed4452c7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,30 @@
|
|||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
public class HighlightedDisplayState : DisplayState
|
||||
{
|
||||
[SerializeField] Sprite m_FirstSelectionDate_HighlightSprite;
|
||||
[SerializeField] Sprite m_InBetween_Dates_HighlightSprite;
|
||||
[SerializeField] Sprite m_LastSelectionDate_HighlightSprite;
|
||||
|
||||
[SerializeField] Color32 m_Highlight_Image_Color;
|
||||
|
||||
public override void UpdateState(DateTime? buttonDate, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
if(buttonDate == selectedStartDate)
|
||||
{
|
||||
SecondaryImage.sprite = m_FirstSelectionDate_HighlightSprite;
|
||||
}
|
||||
else if(buttonDate > selectedStartDate && buttonDate < selectedEndDate)
|
||||
{
|
||||
SecondaryImage.sprite = m_InBetween_Dates_HighlightSprite;
|
||||
PrimaryImage.color = Color.clear;
|
||||
}
|
||||
else if(buttonDate == selectedEndDate)
|
||||
{
|
||||
SecondaryImage.sprite = m_LastSelectionDate_HighlightSprite;
|
||||
}
|
||||
|
||||
SecondaryImage.color = m_Highlight_Image_Color;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 97bc0f2fe435e4363ae1d19951bfbc46
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,14 @@
|
|||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
public class HoverDisplayState : DisplayState
|
||||
{
|
||||
[SerializeField] Color32 m_BtnImageColor;
|
||||
[SerializeField] Color32 m_BtnTextColor;
|
||||
|
||||
public override void UpdateState(DateTime? buttonDate, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
UITweenManager.ForceTween(PrimaryImage, m_BtnImageColor, null, 0f);
|
||||
UITweenManager.ForceTween(ButtonText, m_BtnTextColor, null, 0f);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 488e8e5ffe36649a4bea689cce6afa2d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,35 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class NormalDisplayState : DisplayState
|
||||
{
|
||||
[SerializeField] Color32 m_BtnImageColor;
|
||||
[SerializeField] Color32 m_BtnTextColor;
|
||||
|
||||
[Header("Is current day, is not in month & days in month are displayed")]
|
||||
[SerializeField] Color32 m_Btn_ImageColor_NotInMonth;
|
||||
[SerializeField] Color32 m_Btn_TextColor_NotInMonth;
|
||||
|
||||
public override void UpdateState(DateTime? buttonDate, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
SecondaryImage.color = Color.clear;
|
||||
|
||||
if (buttonDate != null && calenderDate != null)
|
||||
{
|
||||
if (buttonDate.Value.Month == calenderDate.Value.Month)
|
||||
{
|
||||
UITweenManager.ForceTween(PrimaryImage, m_BtnImageColor, null, 0f);
|
||||
UITweenManager.ForceTween(ButtonText, m_BtnTextColor, null, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
UITweenManager.ForceTween(PrimaryImage, m_Btn_ImageColor_NotInMonth, null, 0f);
|
||||
UITweenManager.ForceTween(ButtonText, m_Btn_TextColor_NotInMonth, null, 0f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("UHOH: buttonDate or calenderDate == null");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e456cc388e88a4371be4c3688e8fa6fe
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,14 @@
|
|||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
public class SelectedDisplayState : DisplayState
|
||||
{
|
||||
[SerializeField] Color32 m_BtnImageColor;
|
||||
[SerializeField] Color32 m_BtnTextColor;
|
||||
|
||||
public override void UpdateState(DateTime? buttonDate, DateTime? calenderDate, DateTime? selectedStartDate, DateTime? selectedEndDate)
|
||||
{
|
||||
UITweenManager.ForceTween(PrimaryImage, m_BtnImageColor, null, .1f);
|
||||
UITweenManager.ForceTween(ButtonText, m_BtnTextColor, null, .1f);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: eeafa67c690664539bc6b9ecc446523f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6240952cbc1b94a45ab24def4922a2b4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,88 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a78e3d77370b14785a616aed9b23c29f
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 3d755b18b2b344f2d9c78f07f9005a8e
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1,88 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4ce4c08bac5e741cf9759db73740ac95
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 92ce88db5b11a4a4582ea5b759419ab8
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,88 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4aeefb11e15b4471798b5b76eca3d4e8
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 095aeadda0ae4447fa23dfa987333226
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ad591f29b014b4fdb85e39a7b76e631d
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7ae9bf0f40b8645789df112f2576400a
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 51bcd696195bd457cb17aaf20b0f2ee3
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: efcdc93ca6c2a485cbd892c3e4941922
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4a684ea551fd34a03aaf68792b3b4243
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 44f23ab20b87c4ecdb1342f3dae04f17
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,222 @@
|
|||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.Events;
|
||||
using TMPro;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// This must in scene in order for tweening to work
|
||||
/// </summary>
|
||||
public class UITweenManager : MonoBehaviour
|
||||
{
|
||||
private List<UIItem> m_TweeningItems = new List<UIItem>();
|
||||
|
||||
public void Tween(TextMeshProUGUI textComponent, Color32 to, UnityAction onComplete, float duration = 1)
|
||||
{
|
||||
int instanceId = textComponent.GetInstanceID();
|
||||
|
||||
if(!IsItemCurrentlyTweening(instanceId))
|
||||
{
|
||||
m_TweeningItems.Add(new UITextItem(textComponent.color, to, textComponent, () =>
|
||||
{
|
||||
m_TweeningItems.RemoveAll(x => x.InstanceID == instanceId);
|
||||
|
||||
onComplete?.Invoke();
|
||||
},
|
||||
duration));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("Item is already tweening");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void Tween(Image imageComponent, Color32 to, UnityAction onComplete, float duration = 1)
|
||||
{
|
||||
int instanceId = imageComponent.GetInstanceID();
|
||||
|
||||
if (!IsItemCurrentlyTweening(instanceId))
|
||||
{
|
||||
m_TweeningItems.Add(new UIImageItem(imageComponent.color, to, imageComponent, () =>
|
||||
{
|
||||
m_TweeningItems.RemoveAll(x => x.InstanceID == instanceId);
|
||||
|
||||
onComplete?.Invoke();
|
||||
},
|
||||
duration));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("Item is already tweening");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// If current component is listed for tweening, it will be cancelled and new tween will take place
|
||||
/// </summary>
|
||||
public void ForceTween(TextMeshProUGUI textComponent, Color32 to, UnityAction onComplete, float duration = 1)
|
||||
{
|
||||
int instanceId = textComponent.GetInstanceID();
|
||||
|
||||
if (IsItemCurrentlyTweening(instanceId))
|
||||
CancelTween(instanceId);
|
||||
|
||||
if(duration == 0)
|
||||
{
|
||||
textComponent.color = to;
|
||||
onComplete?.Invoke();
|
||||
return;
|
||||
}
|
||||
|
||||
m_TweeningItems.Add(new UITextItem(textComponent.color, to, textComponent, () =>
|
||||
{
|
||||
m_TweeningItems.RemoveAll(x => x.InstanceID == instanceId);
|
||||
|
||||
onComplete?.Invoke();
|
||||
},
|
||||
duration));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If current component is listed for tweening, it will be cancelled and new tween will take place
|
||||
/// </summary>
|
||||
public void ForceTween(Image imageComponent, Color32 to, UnityAction onComplete, float duration = 1)
|
||||
{
|
||||
int instanceId = imageComponent.GetInstanceID();
|
||||
|
||||
if (IsItemCurrentlyTweening(instanceId))
|
||||
CancelTween(instanceId);
|
||||
|
||||
if(duration == 0)
|
||||
{
|
||||
imageComponent.color = to;
|
||||
onComplete?.Invoke();
|
||||
return;
|
||||
}
|
||||
|
||||
m_TweeningItems.Add(new UIImageItem(imageComponent.color, to, imageComponent, () =>
|
||||
{
|
||||
m_TweeningItems.RemoveAll(x => x.InstanceID == instanceId);
|
||||
|
||||
onComplete?.Invoke();
|
||||
},
|
||||
duration));
|
||||
}
|
||||
|
||||
public void CancelTween(int instanceId, UnityAction onComplete = null)
|
||||
{
|
||||
m_TweeningItems.RemoveAll(x => x.InstanceID == instanceId);
|
||||
|
||||
onComplete?.Invoke();
|
||||
|
||||
}
|
||||
|
||||
private bool IsItemCurrentlyTweening(int instanceId)
|
||||
{
|
||||
foreach(UIItem item in m_TweeningItems)
|
||||
{
|
||||
if(item.InstanceID == instanceId)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if(m_TweeningItems != null)
|
||||
{
|
||||
for (int i = 0; i < m_TweeningItems.Count; i++)
|
||||
{
|
||||
m_TweeningItems[i].Update(Time.deltaTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class UITextItem : UIItem
|
||||
{
|
||||
public TextMeshProUGUI Text { get; private set; }
|
||||
|
||||
public UITextItem(Color32 from, Color32 to, TextMeshProUGUI textComponent, UnityAction onComplete, float duration = 1)
|
||||
: base(textComponent.GetInstanceID(), from, to, onComplete, duration)
|
||||
{
|
||||
Text = textComponent;
|
||||
}
|
||||
|
||||
public override void Update(float deltaTime)
|
||||
{
|
||||
base.Update(deltaTime);
|
||||
Text.color = CurrentColor;
|
||||
}
|
||||
}
|
||||
|
||||
public class UIImageItem : UIItem
|
||||
{
|
||||
public Image Image { get; private set; }
|
||||
|
||||
public UIImageItem(Color32 from, Color32 to, Image imageComponent, UnityAction onComplete, float duration = 1)
|
||||
: base(imageComponent.GetInstanceID(), from, to, onComplete, duration)
|
||||
{
|
||||
Image = imageComponent;
|
||||
}
|
||||
|
||||
public override void Update(float deltaTime)
|
||||
{
|
||||
base.Update(deltaTime);
|
||||
Image.color = CurrentColor;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class UIItem
|
||||
{
|
||||
public enum State
|
||||
{
|
||||
Tweening,
|
||||
Sleep,
|
||||
}
|
||||
|
||||
public int InstanceID { get; private set; }
|
||||
private State m_CurrentState;
|
||||
private Color32 m_FromColor;
|
||||
private Color32 m_TargetColor;
|
||||
protected Color32 CurrentColor;
|
||||
private float m_Time = 0.0f;
|
||||
|
||||
private UnityAction m_OnCompleteCallback;
|
||||
private float m_Duration;
|
||||
|
||||
public UIItem(int instanceId, Color32 from, Color32 to, UnityAction onComplete, float duration = 1)
|
||||
{
|
||||
InstanceID = instanceId;
|
||||
m_FromColor = from;
|
||||
m_TargetColor = to;
|
||||
m_OnCompleteCallback = onComplete;
|
||||
m_CurrentState = State.Tweening;
|
||||
m_Time = 0.0f;
|
||||
m_Duration = duration;
|
||||
}
|
||||
|
||||
public virtual void Update(float deltaTime)
|
||||
{
|
||||
if(m_CurrentState == State.Tweening)
|
||||
{
|
||||
m_Time += deltaTime / m_Duration;
|
||||
|
||||
CurrentColor = Color32.Lerp(m_FromColor, m_TargetColor, m_Time);
|
||||
|
||||
if(m_Time >= 1f)
|
||||
{
|
||||
m_CurrentState = State.Sleep;
|
||||
m_OnCompleteCallback?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5d1a497fe0d8d425182df5d6dd7f8a3f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1bfbbf325d48b674ba6a79761030db79
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 544254c1339e04932b784967aebaa1d7
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dc94ab512ebec45028d7b49b74dd6c87
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
|
@ -0,0 +1,92 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b7e53227f9fbe49bf9c00a2804c8322f
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
applyGammaDecoding: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,98 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public class uGUITools : MonoBehaviour {
|
||||
[MenuItem("uGUI/Anchors to Corners %[")]
|
||||
static void AnchorsToCorners(){
|
||||
foreach(Transform transform in Selection.transforms){
|
||||
RectTransform t = transform as RectTransform;
|
||||
RectTransform pt = Selection.activeTransform.parent as RectTransform;
|
||||
|
||||
if(t == null || pt == null) return;
|
||||
|
||||
Vector2 newAnchorsMin = new Vector2(t.anchorMin.x + t.offsetMin.x / pt.rect.width,
|
||||
t.anchorMin.y + t.offsetMin.y / pt.rect.height);
|
||||
Vector2 newAnchorsMax = new Vector2(t.anchorMax.x + t.offsetMax.x / pt.rect.width,
|
||||
t.anchorMax.y + t.offsetMax.y / pt.rect.height);
|
||||
|
||||
t.anchorMin = newAnchorsMin;
|
||||
t.anchorMax = newAnchorsMax;
|
||||
t.offsetMin = t.offsetMax = new Vector2(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("uGUI/Corners to Anchors %]")]
|
||||
static void CornersToAnchors(){
|
||||
foreach(Transform transform in Selection.transforms){
|
||||
RectTransform t = transform as RectTransform;
|
||||
|
||||
if(t == null) return;
|
||||
|
||||
t.offsetMin = t.offsetMax = new Vector2(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("uGUI/Mirror Horizontally Around Anchors %;")]
|
||||
static void MirrorHorizontallyAnchors(){
|
||||
MirrorHorizontally(false);
|
||||
}
|
||||
|
||||
[MenuItem("uGUI/Mirror Horizontally Around Parent Center %:")]
|
||||
static void MirrorHorizontallyParent(){
|
||||
MirrorHorizontally(true);
|
||||
}
|
||||
|
||||
static void MirrorHorizontally(bool mirrorAnchors){
|
||||
foreach(Transform transform in Selection.transforms){
|
||||
RectTransform t = transform as RectTransform;
|
||||
RectTransform pt = Selection.activeTransform.parent as RectTransform;
|
||||
|
||||
if(t == null || pt == null) return;
|
||||
|
||||
if(mirrorAnchors){
|
||||
Vector2 oldAnchorMin = t.anchorMin;
|
||||
t.anchorMin = new Vector2(1 - t.anchorMax.x, t.anchorMin.y);
|
||||
t.anchorMax = new Vector2(1 - oldAnchorMin.x, t.anchorMax.y);
|
||||
}
|
||||
|
||||
Vector2 oldOffsetMin = t.offsetMin;
|
||||
t.offsetMin = new Vector2(-t.offsetMax.x, t.offsetMin.y);
|
||||
t.offsetMax = new Vector2(-oldOffsetMin.x, t.offsetMax.y);
|
||||
|
||||
t.localScale = new Vector3(-t.localScale.x, t.localScale.y, t.localScale.z);
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("uGUI/Mirror Vertically Around Anchors %'")]
|
||||
static void MirrorVerticallyAnchors(){
|
||||
MirrorVertically(false);
|
||||
}
|
||||
|
||||
[MenuItem("uGUI/Mirror Vertically Around Parent Center %\"")]
|
||||
static void MirrorVerticallyParent(){
|
||||
MirrorVertically(true);
|
||||
}
|
||||
|
||||
static void MirrorVertically(bool mirrorAnchors){
|
||||
foreach(Transform transform in Selection.transforms){
|
||||
RectTransform t = transform as RectTransform;
|
||||
RectTransform pt = Selection.activeTransform.parent as RectTransform;
|
||||
|
||||
if(t == null || pt == null) return;
|
||||
|
||||
if(mirrorAnchors){
|
||||
Vector2 oldAnchorMin = t.anchorMin;
|
||||
t.anchorMin = new Vector2(t.anchorMin.x, 1 - t.anchorMax.y);
|
||||
t.anchorMax = new Vector2(t.anchorMax.x, 1 - oldAnchorMin.y);
|
||||
}
|
||||
|
||||
Vector2 oldOffsetMin = t.offsetMin;
|
||||
t.offsetMin = new Vector2(t.offsetMin.x, -t.offsetMax.y);
|
||||
t.offsetMax = new Vector2(t.offsetMax.x, -oldOffsetMin.y);
|
||||
|
||||
t.localScale = new Vector3(t.localScale.x, -t.localScale.y, t.localScale.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b66134ef387b4426894470ae7fe91c97
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f1155dccfcd56fb479ac4a3a8a927b00
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dac58325ef0165b4d9637dfdfcf4519b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue