代码提交-20240627-0949

This commit is contained in:
AFeiJia 2024-06-27 09:49:08 +08:00
parent abfd4822c5
commit f3fe5787eb
385 changed files with 753799 additions and 1360 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 36e2bd3e8c7c05748941200f14273f61
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 37017c8e38e58dd4cb8644f2f6466e65
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5045b4877a5eb420da0cffa31b71daab
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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 ont
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 its 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 its
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
its 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 its 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.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9f322b4d879b6470fb45dcd842be2def
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3ed0cfe6ba8e24ed79016ec29e3a71bb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 57ffa77aa6eca44fe878123a3fe12f05
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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:

View File

@ -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:

View File

@ -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.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: cb2669def561d43fb902a9ff0d098418
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 40df41bbe49bb406bbdae4d0d0783fee
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3532de14aa3d944789e9dd237f4946eb
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1ceca557817634736a573c095f2b2e4d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 319b3274983304476b141f3a80b70d47
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5589e92101a854ecb9aad2815097817d
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: fa61da735eed248d49bb5817ed91f20a
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ecb6ee7528fc3420481cfda349e87f7c
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 41b94a664ddfe2648b03f82112d7422e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b4b96a1e703bb41c8b887f1e16913fe8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c83657a7decbe45c18fe6bdf9daa370c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1be9216cab2ec4a72a45f0a2957dd188
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2a3e2fd96e9ed4aa698a7ea5ab9dfa00
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 863b5a8f4ace14ed7bea67941e0e0463
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6750c470d4f8a4e1b8ff2c4d059e28c4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cd54ba8d589f74f35a94243a49c7eb94
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ba1ca574d789a4a45b9b23aac9378972
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6367b2a9e388249eaa7ad70209051527
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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()
{
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7fa390d6e188c43f2a8261443828eb41
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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";
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4f2ba0573c8c248e8bdd84ad35bd9466
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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;
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f9257739379f54a479dda5de9a3c4438
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 474639de43941457e9641fbf836d902b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 20abaff1cf16c492491a5ed49e3c0efc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1aa8eff758fb541f596ec995f29789f5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 83d7ecc101cae4c4ea257b1922a3b9d0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0b61848c7a50b46ee914a5c840feeae0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8aad7807a4d2d479bb6c3c6627cc6aa9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 00d95f725a9bc4909a37a5325ddc40f8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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)
{
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b44ccd99a54604291b70c647ed4452c7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 97bc0f2fe435e4363ae1d19951bfbc46
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 488e8e5ffe36649a4bea689cce6afa2d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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");
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e456cc388e88a4371be4c3688e8fa6fe
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: eeafa67c690664539bc6b9ecc446523f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4a684ea551fd34a03aaf68792b3b4243
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 44f23ab20b87c4ecdb1342f3dae04f17
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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();
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5d1a497fe0d8d425182df5d6dd7f8a3f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1bfbbf325d48b674ba6a79761030db79
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b66134ef387b4426894470ae7fe91c97
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f1155dccfcd56fb479ac4a3a8a927b00
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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