using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class ParentBehaviour : MonoBehaviour
|
|
{
|
|
public spawner babySpawner;
|
|
|
|
public GameObject child;
|
|
|
|
public Texture baseVis;
|
|
public Texture hatVis;
|
|
public Texture eyeVis;
|
|
public Texture topVis;
|
|
public Texture bottomVis;
|
|
|
|
public List<string> order = new List<string>();
|
|
|
|
public ParentBehaviour otherParent;
|
|
|
|
public Texture2D[] parentBases;
|
|
public Texture2D parentFaceNeutral;
|
|
public Texture2D parentFaceHappy1;
|
|
public Texture2D parentFaceHappy2;
|
|
public Texture2D parentFaceAngry;
|
|
public Texture2D parentFaceTalk;
|
|
|
|
public GameObject parentBodyObj;
|
|
public GameObject parentFaceObj;
|
|
public GameObject parentDialougeObj;
|
|
public GameObject parentDialogueOutline;
|
|
public Transform parentRoot;
|
|
|
|
public Vector3 slideDistance = Vector3.right;
|
|
|
|
private void Start()
|
|
{
|
|
GetRandomChild();
|
|
GenerateVisuals();
|
|
}
|
|
|
|
[ContextMenu("Get Random Child")]
|
|
public void GetRandomChild()
|
|
{
|
|
bool _validChild = false;
|
|
while (!_validChild)
|
|
{
|
|
int _childIndex = Random.Range(0, babySpawner.transform.childCount);
|
|
|
|
child = babySpawner.transform.GetChild(_childIndex).gameObject;
|
|
|
|
if (!ReferenceEquals(child, otherParent.child) || otherParent.child == null)
|
|
{
|
|
//this prevents both parents asking for the same child
|
|
_validChild = true;
|
|
}
|
|
}
|
|
Randomizer _childRandomizer = child.GetComponent<Randomizer>();
|
|
|
|
baseVis = _childRandomizer.baseObj.GetComponent<MeshRenderer>().material.mainTexture;
|
|
hatVis = _childRandomizer.hatObj.GetComponent<MeshRenderer>().material.mainTexture;
|
|
eyeVis = _childRandomizer.eyeObj.GetComponent<MeshRenderer>().material.mainTexture;
|
|
topVis = _childRandomizer.topObj.GetComponent<MeshRenderer>().material.mainTexture;
|
|
bottomVis = _childRandomizer.bottomObj.GetComponent<MeshRenderer>().material.mainTexture;
|
|
|
|
order.Insert(Random.Range(0, order.Count), "base");
|
|
order.Insert(Random.Range(0, order.Count), "hat");
|
|
order.Insert(Random.Range(0, order.Count), "eye");
|
|
order.Insert(Random.Range(0, order.Count), "top");
|
|
order.Insert(Random.Range(0, order.Count), "bottom");
|
|
|
|
GiveFirstDetail();
|
|
}
|
|
|
|
public bool CheckChild(GameObject _child)
|
|
{
|
|
if (ReferenceEquals(_child, child))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public IEnumerator SlideInOut(Vector3 endPos, float slideTime)
|
|
{
|
|
parentDialougeObj.SetActive(false);
|
|
parentDialogueOutline.SetActive(false);
|
|
|
|
Vector3 startPos = parentRoot.position;
|
|
float timeElapsed = 0;
|
|
|
|
while(timeElapsed < slideTime)
|
|
{
|
|
parentRoot.position = Vector3.Lerp(startPos, endPos, timeElapsed / slideTime);
|
|
yield return new WaitForEndOfFrame();
|
|
timeElapsed += Time.deltaTime;
|
|
}
|
|
|
|
parentRoot.position = endPos;
|
|
|
|
GetRandomChild();
|
|
GenerateVisuals();
|
|
|
|
while (timeElapsed < slideTime)
|
|
{
|
|
parentRoot.position = Vector3.Lerp(endPos, startPos, timeElapsed / slideTime);
|
|
yield return new WaitForEndOfFrame();
|
|
timeElapsed += Time.deltaTime;
|
|
}
|
|
|
|
parentRoot.position = startPos;
|
|
parentDialougeObj.SetActive(true);
|
|
parentDialogueOutline.SetActive(true);
|
|
}
|
|
|
|
public void GenerateVisuals()
|
|
{
|
|
Texture _displayGraphic = parentBases[Random.Range(0, parentBases.Length)];
|
|
parentBodyObj.GetComponent<Image>().sprite = Sprite.Create((Texture2D)_displayGraphic, new Rect(0.0f, 0.0f, _displayGraphic.width, _displayGraphic.height), new Vector2(0.5f, 0.5f), 100.0f);
|
|
|
|
_displayGraphic = parentFaceNeutral;
|
|
parentFaceObj.GetComponent<Image>().sprite = Sprite.Create((Texture2D)_displayGraphic, new Rect(0.0f, 0.0f, _displayGraphic.width, _displayGraphic.height), new Vector2(0.5f, 0.5f), 100.0f);
|
|
}
|
|
|
|
public Texture GiveDetails(GameObject _child)
|
|
{
|
|
|
|
|
|
for (int i = 0; i < order.Count; i++)
|
|
{
|
|
switch (order[i]){
|
|
case "base":
|
|
if (_child.GetComponent<Randomizer>().baseObj.GetComponent<MeshRenderer>().material.mainTexture.name != baseVis.name)
|
|
{
|
|
print("returning baseVis");
|
|
return baseVis;
|
|
}
|
|
break;
|
|
case "hat":
|
|
if (_child.GetComponent<Randomizer>().hatObj.GetComponent<MeshRenderer>().material.mainTexture.name != hatVis.name)
|
|
{
|
|
print("returning hatVis");
|
|
return hatVis;
|
|
}
|
|
break;
|
|
case "eye":
|
|
if (_child.GetComponent<Randomizer>().eyeObj.GetComponent<MeshRenderer>().material.mainTexture.name != eyeVis.name)
|
|
{
|
|
print("returning eyeVis");
|
|
return eyeVis;
|
|
}
|
|
break;
|
|
case "top":
|
|
if (_child.GetComponent<Randomizer>().topObj.GetComponent<MeshRenderer>().material.mainTexture.name != topVis.name)
|
|
{
|
|
print("returning topVis");
|
|
return topVis;
|
|
}
|
|
break;
|
|
case "bottom":
|
|
if (_child.GetComponent<Randomizer>().bottomObj.GetComponent<MeshRenderer>().material.mainTexture.name != bottomVis.name)
|
|
{
|
|
print("returning bottomVis");
|
|
return bottomVis;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void GiveFirstDetail()
|
|
{
|
|
Texture _displayGraphic;
|
|
switch (order[0])
|
|
{
|
|
case "base":
|
|
_displayGraphic = baseVis;
|
|
break;
|
|
case "hat":
|
|
_displayGraphic = hatVis;
|
|
break;
|
|
case "eye":
|
|
_displayGraphic = eyeVis;
|
|
break;
|
|
case "top":
|
|
_displayGraphic = topVis;
|
|
break;
|
|
case "bottom":
|
|
_displayGraphic = bottomVis;
|
|
break;
|
|
default:
|
|
_displayGraphic = null;
|
|
break;
|
|
}
|
|
parentDialougeObj.GetComponent<Image>().sprite = Sprite.Create((Texture2D)_displayGraphic, new Rect(0.0f, 0.0f, _displayGraphic.width, _displayGraphic.height), new Vector2(0.5f, 0.5f), 100.0f);
|
|
}
|
|
|
|
private void OnCollisionEnter(Collision collision)
|
|
{
|
|
if (child != null)
|
|
{
|
|
if (collision.collider.gameObject.tag == "Child")
|
|
{
|
|
if (CheckChild(collision.collider.gameObject))
|
|
{
|
|
print("correct child");
|
|
//this is the correct child
|
|
GameObject player = collision.collider.gameObject.GetComponent<YeetHandle>().lastHeld;
|
|
player.GetComponent<PlayerDataHolder>().AddScore(1);
|
|
|
|
//destroy baby, spawn 2 more
|
|
Destroy(collision.collider.gameObject);
|
|
babySpawner.SpawnBaby();
|
|
babySpawner.SpawnBaby();
|
|
|
|
//Slide, cha cha real smooth
|
|
StartCoroutine(SlideInOut(parentRoot.position + slideDistance, 2));
|
|
}
|
|
else
|
|
{
|
|
Texture _displayGraphic = GiveDetails(collision.collider.gameObject);
|
|
//display the display graphic
|
|
parentDialougeObj.GetComponent<Image>().sprite = Sprite.Create((Texture2D)_displayGraphic, new Rect(0.0f, 0.0f, _displayGraphic.width, _displayGraphic.height), new Vector2(0.5f, 0.5f), 100.0f);
|
|
|
|
//yeet child back to centre of room
|
|
Debug.Log("ParentBehaviour.OnCollissionEnter: Yeet Back Child");
|
|
GameObject lastHeldPlayer = collision.collider.gameObject.GetComponent<YeetHandle>().lastHeld;
|
|
float yeetBackForce = 15f;
|
|
Vector3 yeetBackVelocity = (-1 * lastHeldPlayer.transform.forward * yeetBackForce) + lastHeldPlayer.transform.up * yeetBackForce;
|
|
collision.collider.gameObject.GetComponent<Rigidbody>().velocity = yeetBackVelocity;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|