Global Game Jam 2021
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

190 lines
6.9 KiB

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;
private void Start()
{
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);
}
[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 (_child == child)
{
return true;
}
else
{
return false;
}
}
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
}
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;
}
}
}
}
}