|
|
|
@ -5,14 +5,17 @@ using UnityEngine.Events; |
|
|
|
using UnityEngine.EventSystems; |
|
|
|
using UnityEngine.EventSystems; |
|
|
|
using UnityEngine.UI; |
|
|
|
using UnityEngine.UI; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace UltraCombos.Frozen |
|
|
|
|
|
|
|
{ |
|
|
|
public class CharacterBehaviour : MonoBehaviour |
|
|
|
public class CharacterBehaviour : MonoBehaviour |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
public List<State> appearSataes = new List<State>(); |
|
|
|
|
|
|
|
|
|
|
|
public float videoStopTime = 1.5f; |
|
|
|
public float videoStopTime = 1.5f; |
|
|
|
[Range(0, 15)] |
|
|
|
public float disappearTime = 5.0f; |
|
|
|
public float disappearTime = 5; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Area area; |
|
|
|
public Area area; |
|
|
|
public List<Area> AppearArea = new List<Area>(); |
|
|
|
public List<Area> appearAreas = new List<Area>(); |
|
|
|
|
|
|
|
|
|
|
|
Vector2 wallRoi; |
|
|
|
Vector2 wallRoi; |
|
|
|
float origin_height = 0.0f; |
|
|
|
float origin_height = 0.0f; |
|
|
|
@ -40,16 +43,16 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
[SerializeField] |
|
|
|
[SerializeField] |
|
|
|
UnityEvent onTrigger = new UnityEvent(); |
|
|
|
UnityEvent onTrigger = new UnityEvent(); |
|
|
|
|
|
|
|
|
|
|
|
enum State |
|
|
|
enum Status |
|
|
|
{ |
|
|
|
{ |
|
|
|
TRIGGER = 0, |
|
|
|
TRIGGER = 0, |
|
|
|
STANDBY = 1, |
|
|
|
STANDBY = 1, |
|
|
|
SLEEP = 2 |
|
|
|
SLEEP = 2 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
State state = State.SLEEP; |
|
|
|
Status status = Status.SLEEP; |
|
|
|
DShowMoviePlayer StatePlayer { get { return players[(int)state]; } } |
|
|
|
DShowMoviePlayer StatePlayer { get { return players[(int)status]; } } |
|
|
|
MeshRenderer StateRenderer { get { return renderers[(int)state]; } } |
|
|
|
MeshRenderer StateRenderer { get { return renderers[(int)status]; } } |
|
|
|
|
|
|
|
|
|
|
|
MeshRenderer[] renderers; |
|
|
|
MeshRenderer[] renderers; |
|
|
|
|
|
|
|
|
|
|
|
@ -57,6 +60,10 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
|
|
|
|
|
|
|
|
Coroutine flow = null; |
|
|
|
Coroutine flow = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool is_alive = false; |
|
|
|
|
|
|
|
const float alive_threshold = 1.0f / 255.0f; |
|
|
|
|
|
|
|
float alive_value = 0.0f; |
|
|
|
|
|
|
|
|
|
|
|
[SerializeField, Header("Debug")] |
|
|
|
[SerializeField, Header("Debug")] |
|
|
|
bool mode = false; |
|
|
|
bool mode = false; |
|
|
|
[SerializeField] |
|
|
|
[SerializeField] |
|
|
|
@ -103,7 +110,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
fakeButton.anchorMin = new Vector2(0, 0); |
|
|
|
fakeButton.anchorMin = new Vector2(0, 0); |
|
|
|
fakeButton.anchorMax = new Vector2(0, 0); |
|
|
|
fakeButton.anchorMax = new Vector2(0, 0); |
|
|
|
fakeButton.pivot = new Vector2(0.5f, 0.5f); |
|
|
|
fakeButton.pivot = new Vector2(0.5f, 0.5f); |
|
|
|
var standby_scale = renderers[(int)State.STANDBY].transform.localScale; |
|
|
|
var standby_scale = renderers[(int)Status.STANDBY].transform.localScale; |
|
|
|
fakeButton.sizeDelta = new Vector2(standby_scale.x, standby_scale.y) * FrozenScreenToWorldSpace.Instance.finalPixelsByMeter; |
|
|
|
fakeButton.sizeDelta = new Vector2(standby_scale.x, standby_scale.y) * FrozenScreenToWorldSpace.Instance.finalPixelsByMeter; |
|
|
|
fakeButton.anchoredPosition3D = new Vector3(0, 0, 0); |
|
|
|
fakeButton.anchoredPosition3D = new Vector3(0, 0, 0); |
|
|
|
fakeButton.localScale = Vector3.one; |
|
|
|
fakeButton.localScale = Vector3.one; |
|
|
|
@ -144,6 +151,31 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
fakeButton.gameObject.SetActive(false); |
|
|
|
fakeButton.gameObject.SetActive(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public bool Active |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (value) Activate(); |
|
|
|
|
|
|
|
else Deactivate(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Activate() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (is_alive) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
is_alive = true; |
|
|
|
|
|
|
|
gameObject.SetActive(true); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void Deactivate() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (is_alive == false) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
is_alive = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void ResetFlow() |
|
|
|
private void ResetFlow() |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (flow != null) |
|
|
|
if (flow != null) |
|
|
|
@ -184,7 +216,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
roaming_seed = Random.Range(0.0f, 1.0f); |
|
|
|
roaming_seed = Random.Range(0.0f, 1.0f); |
|
|
|
|
|
|
|
|
|
|
|
trigger_clip_index = ++trigger_clip_index % triggerClips.Count; |
|
|
|
trigger_clip_index = ++trigger_clip_index % triggerClips.Count; |
|
|
|
players[(int)State.TRIGGER].VideoAsset = triggerClips[trigger_clip_index]; |
|
|
|
players[(int)Status.TRIGGER].VideoAsset = triggerClips[trigger_clip_index]; |
|
|
|
|
|
|
|
|
|
|
|
yield return null; |
|
|
|
yield return null; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -192,7 +224,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
if (mode) info = "STANDBY"; |
|
|
|
if (mode) info = "STANDBY"; |
|
|
|
// standby |
|
|
|
// standby |
|
|
|
{ |
|
|
|
{ |
|
|
|
state = State.STANDBY; |
|
|
|
status = Status.STANDBY; |
|
|
|
var player = StatePlayer; |
|
|
|
var player = StatePlayer; |
|
|
|
player.Loop = isStandbyLoop; |
|
|
|
player.Loop = isStandbyLoop; |
|
|
|
player.Play(); |
|
|
|
player.Play(); |
|
|
|
@ -221,7 +253,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
// trigger |
|
|
|
// trigger |
|
|
|
{ |
|
|
|
{ |
|
|
|
onTrigger.Invoke(); |
|
|
|
onTrigger.Invoke(); |
|
|
|
state = State.TRIGGER; |
|
|
|
status = Status.TRIGGER; |
|
|
|
var player = StatePlayer; |
|
|
|
var player = StatePlayer; |
|
|
|
player.Play(); |
|
|
|
player.Play(); |
|
|
|
|
|
|
|
|
|
|
|
@ -241,28 +273,24 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
if (mode) info = "SLEEP"; |
|
|
|
if (mode) info = "SLEEP"; |
|
|
|
// sleep |
|
|
|
// sleep |
|
|
|
{ |
|
|
|
{ |
|
|
|
state = State.SLEEP; |
|
|
|
status = Status.SLEEP; |
|
|
|
yield return new WaitForSeconds(disappearTime); |
|
|
|
yield return new WaitForSeconds(disappearTime); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
flow = null; |
|
|
|
flow = null; |
|
|
|
yield return null; |
|
|
|
yield return null; |
|
|
|
} |
|
|
|
} |
|
|
|
/* |
|
|
|
|
|
|
|
IEnumerator PlayStandbyOnStart() |
|
|
|
void Update() |
|
|
|
{ |
|
|
|
{ |
|
|
|
DShowMoviePlayer player = CurrentPlayer; |
|
|
|
alive_value = Mathf.Lerp(alive_value, is_alive ? 1.0f : 0.0f, Time.deltaTime); |
|
|
|
player.Loop = isStandbyLoop; |
|
|
|
if (is_alive == false && alive_value < alive_threshold) |
|
|
|
while (!player.IsPlaying) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
player.Play(); |
|
|
|
alive_value = 0.0f; |
|
|
|
renderers[STANDBY].material.mainTexture = player.Texture; |
|
|
|
gameObject.SetActive(false); |
|
|
|
yield return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
void Update() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
for (int i = 0; i < players.Length; i++) |
|
|
|
for (int i = 0; i < players.Length; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (players[i].IsPlaying) |
|
|
|
if (players[i].IsPlaying) |
|
|
|
@ -275,10 +303,11 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
// standby material |
|
|
|
// standby material |
|
|
|
{ |
|
|
|
{ |
|
|
|
float smooth = Time.deltaTime * 2.0f; |
|
|
|
float smooth = Time.deltaTime * 2.0f; |
|
|
|
if (state != State.STANDBY && isStandbyLoop == false) |
|
|
|
if (status != Status.STANDBY && isStandbyLoop == false) |
|
|
|
smooth = 1.0f; |
|
|
|
smooth = 1.0f; |
|
|
|
float alpha = System.Convert.ToInt32(state == State.STANDBY); |
|
|
|
float alpha = System.Convert.ToInt32(status == Status.STANDBY); |
|
|
|
var mat = renderers[(int)State.STANDBY].material; |
|
|
|
alpha = Mathf.Min(alpha, alive_value); |
|
|
|
|
|
|
|
var mat = renderers[(int)Status.STANDBY].material; |
|
|
|
var col = new Color(1, 1, 1, Mathf.Lerp(mat.color.a, alpha, smooth)); |
|
|
|
var col = new Color(1, 1, 1, Mathf.Lerp(mat.color.a, alpha, smooth)); |
|
|
|
mat.color = col; |
|
|
|
mat.color = col; |
|
|
|
mat.SetColor("_TintColor", col); |
|
|
|
mat.SetColor("_TintColor", col); |
|
|
|
@ -287,19 +316,20 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
// trigger material |
|
|
|
// trigger material |
|
|
|
{ |
|
|
|
{ |
|
|
|
float smooth = Time.deltaTime * 2.0f; |
|
|
|
float smooth = Time.deltaTime * 2.0f; |
|
|
|
if (state == State.TRIGGER) |
|
|
|
if (status == Status.TRIGGER) |
|
|
|
smooth = 1.0f; |
|
|
|
smooth = 1.0f; |
|
|
|
float alpha = System.Convert.ToInt32(state == State.TRIGGER); |
|
|
|
float alpha = System.Convert.ToInt32(status == Status.TRIGGER); |
|
|
|
var mat = renderers[(int)State.TRIGGER].material; |
|
|
|
alpha = Mathf.Min(alpha, alive_value); |
|
|
|
|
|
|
|
var mat = renderers[(int)Status.TRIGGER].material; |
|
|
|
var col = new Color(1, 1, 1, Mathf.Lerp(mat.color.a, alpha, smooth)); |
|
|
|
var col = new Color(1, 1, 1, Mathf.Lerp(mat.color.a, alpha, smooth)); |
|
|
|
mat.color = col; |
|
|
|
mat.color = col; |
|
|
|
mat.SetColor("_TintColor", col); |
|
|
|
mat.SetColor("_TintColor", col); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (state) |
|
|
|
switch (status) |
|
|
|
{ |
|
|
|
{ |
|
|
|
case State.STANDBY: |
|
|
|
case Status.STANDBY: |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (roaming > 0.0f) |
|
|
|
if (roaming > 0.0f) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -309,12 +339,12 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
case State.TRIGGER: |
|
|
|
case Status.TRIGGER: |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
case State.SLEEP: |
|
|
|
case Status.SLEEP: |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
@ -338,7 +368,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
float noise = Mathf.PerlinNoise(Time.time * 0.4f, roaming_seed) > 0.5f ? 1.0f : -1.0f; |
|
|
|
float noise = Mathf.PerlinNoise(Time.time * 0.4f, roaming_seed) > 0.5f ? 1.0f : -1.0f; |
|
|
|
noise *= roaming * Time.deltaTime; |
|
|
|
noise *= roaming * Time.deltaTime; |
|
|
|
//float padding = transform.localScale.x * 0.5f; |
|
|
|
//float padding = transform.localScale.x * 0.5f; |
|
|
|
float padding = renderers[(int)State.TRIGGER].transform.localScale.x * 0.5f; |
|
|
|
float padding = renderers[(int)Status.TRIGGER].transform.localScale.x * 0.5f; |
|
|
|
Vector3 pos = transform.position; |
|
|
|
Vector3 pos = transform.position; |
|
|
|
switch (area) |
|
|
|
switch (area) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -365,7 +395,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
void RandomAppearWall() |
|
|
|
void RandomAppearWall() |
|
|
|
{ |
|
|
|
{ |
|
|
|
Vector3 newPos = Vector3.zero; |
|
|
|
Vector3 newPos = Vector3.zero; |
|
|
|
area = AppearArea[Random.Range(0, AppearArea.Count)]; |
|
|
|
area = appearAreas[Random.Range(0, appearAreas.Count)]; |
|
|
|
Quaternion q = new Quaternion(); |
|
|
|
Quaternion q = new Quaternion(); |
|
|
|
if (area == Area.LeftWall) |
|
|
|
if (area == Area.LeftWall) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -389,7 +419,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
|
|
|
|
|
|
|
|
void RandomPos() |
|
|
|
void RandomPos() |
|
|
|
{ |
|
|
|
{ |
|
|
|
float minX = renderers[(int)State.TRIGGER].transform.localScale.x / 2; |
|
|
|
float minX = renderers[(int)Status.TRIGGER].transform.localScale.x / 2; |
|
|
|
#if true |
|
|
|
#if true |
|
|
|
switch (area) |
|
|
|
switch (area) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -445,7 +475,7 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
void UpdateButtonPos() |
|
|
|
void UpdateButtonPos() |
|
|
|
{ |
|
|
|
{ |
|
|
|
//Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, wallRoi); |
|
|
|
//Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, wallRoi); |
|
|
|
var roi = FrozenScreenToWorldSpace.Instance.GetWallRoiFromPosition(area, renderers[(int)State.STANDBY].transform.position); |
|
|
|
var roi = FrozenScreenToWorldSpace.Instance.GetWallRoiFromPosition(area, renderers[(int)Status.STANDBY].transform.position); |
|
|
|
Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, roi); |
|
|
|
Vector2 newScreenPos = FrozenScreenToWorldSpace.Instance.GetFinalScreenPos(area, roi); |
|
|
|
fakeButton.anchoredPosition = newScreenPos; |
|
|
|
fakeButton.anchoredPosition = newScreenPos; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -468,9 +498,12 @@ public class CharacterBehaviour : MonoBehaviour |
|
|
|
|
|
|
|
|
|
|
|
private void Trigger(PointerEventData data) |
|
|
|
private void Trigger(PointerEventData data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (state != State.STANDBY) |
|
|
|
if (status != Status.STANDBY) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
isTriggered = true; |
|
|
|
isTriggered = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|