Tanoda
CardExpanding2D.cs
Go to the documentation of this file.
1
5
6using System.Collections;
7using System.Collections.Generic;
8using UnityEngine;
9using UnityEngine.UI;
10
12{
13public class CardExpanding2D : MonoBehaviour
14{
15
16 [SerializeField]
17 private float lerpSpeed = 8f;
18
19 [SerializeField]
20 private RectTransform buttonRect = null;
21 private Vector2 closeButtonMin = Vector2.zero;
22 private Vector2 closeButtonMax = Vector2.zero;
23
24 [SerializeField]
25 private Vector2 cardSize = Vector2.zero;
26 [SerializeField]
27 private Vector2 pageSize = Vector2.zero;
28
29 private Vector2 cardCenter = Vector2.zero;
30 private Vector2 pageCenter = Vector2.zero;
31
32 private Vector2 cardMin = Vector2.zero;
33 private Vector2 cardMax = Vector2.zero;
34 private Vector2 pageMin = Vector2.zero;
35 private Vector2 pageMax = Vector2.zero;
36
37 private RectTransform rectTrans;
39 private int animationActive = -1;
40
41 void Start()
42 {
43 rectTrans = GetComponent<RectTransform>();
44
46 buttonRect.GetComponent<Image>().color = new Color32(228, 0, 0, 0);
47
48 closeButtonMin = new Vector2(pageMin.x + pageSize.x - 64, pageMin.y + pageSize.y - 64);
49 closeButtonMax = new Vector2(pageMax.x - 16, pageMax.y - 16);
50
52 cardMin = new Vector2(cardCenter.x - cardSize.x * 0.5f, cardCenter.y - cardSize.y * 0.5f);
53 cardMax = new Vector2(cardCenter.x + cardSize.x * 0.5f, cardCenter.y + cardSize.y * 0.5f);
54
55 pageMin = new Vector2(pageCenter.x - pageSize.x * 0.5f, pageCenter.y - pageSize.y * 0.5f);
56 pageMax = new Vector2(pageCenter.x + pageSize.x * 0.5f, pageCenter.y + pageSize.y * 0.5f);
57 }
58
59 void Update()
60 {
62 if (animationActive == 1)
63 {
64 rectTrans.offsetMin = Vector2.Lerp(rectTrans.offsetMin, pageMin, Time.deltaTime * lerpSpeed);
65 rectTrans.offsetMax = Vector2.Lerp(rectTrans.offsetMax, pageMax, Time.deltaTime * lerpSpeed);
66
67 if (rectTrans.offsetMin.x < pageMin.x * 0.995f && rectTrans.offsetMin.y < pageMin.y * 0.995f && rectTrans.offsetMax.x > pageMax.x * 0.995f && rectTrans.offsetMax.y > pageMax.y * 0.995f)
68 {
69 rectTrans.offsetMin = pageMin;
70 rectTrans.offsetMax = pageMax;
71
73 buttonRect.GetComponent<Image>().color = Color32.Lerp(buttonRect.GetComponent<Image>().color, new Color32(228, 0, 0, 191), Time.deltaTime * lerpSpeed);
74
75 if (Mathf.Abs(buttonRect.GetComponent<Image>().color.a - 191) < 2)
76 {
77 buttonRect.GetComponent<Image>().color = new Color32(228, 0, 0, 191);
78
79 animationActive = 0;
81 }
82 }
84 }
85 else if (animationActive == -1)
86 {
87 buttonRect.GetComponent<Image>().color = Color32.Lerp(buttonRect.GetComponent<Image>().color, new Color32(228, 0, 0, 0), Time.deltaTime * lerpSpeed * 1.25f);
88
89 rectTrans.offsetMin = Vector2.Lerp(rectTrans.offsetMin, cardMin, Time.deltaTime * lerpSpeed);
90 rectTrans.offsetMax = Vector2.Lerp(rectTrans.offsetMax, cardMax, Time.deltaTime * lerpSpeed);
91
92 if (rectTrans.offsetMin.x > cardMin.x * 1.005f && rectTrans.offsetMin.y > cardMin.y * 1.005f && rectTrans.offsetMax.x < cardMax.x * 1.005f && rectTrans.offsetMax.y < cardMax.y * 1.005f)
93 {
94 rectTrans.offsetMin = cardMin;
95 rectTrans.offsetMax = cardMax;
96
98 buttonRect.offsetMin = Vector2.zero;
99 buttonRect.offsetMax = Vector2.zero;
100
101 animationActive = 0;
103 }
104 }
105 }
106
107 public void ToggleCard()
108 {
110 if (animationActive != 1)
111 {
112 animationActive = 1;
113 cardCenter = transform.localPosition;
114
116 buttonRect.offsetMin = closeButtonMin;
117 buttonRect.offsetMax = closeButtonMax;
118 }
119 else if (animationActive != -1)
120 {
121 animationActive = -1;
122 }
123 }
124}
125}
System.Drawing.Image Image
Definition: TestScript.cs:37
Credit Erdener Gonenc - @PixelEnvision.