Files
2025-05-13 05:19:58 +03:00

73 lines
1.7 KiB
C#

using UnityEngine;
using System.Collections;
public class VisibilityZone : Zone {
private GameObject obj;
private float startupDepth;
private Material startupMaterial;
private bool startupVisibility;
private SpriteRenderer renderer;
private bool initialized;
private bool hidden;
public ZoneVisibilityControl control;
public Predicate[] visibilityPredicates;
// Use this for initialization
void Start () {
Init ();
}
public void Init(){
if(!initialized){
obj = gameObject;
startupDepth = obj.transform.position.z;
renderer = obj.GetComponent<SpriteRenderer>();
startupMaterial = renderer.sharedMaterial;
startupVisibility = obj.activeSelf;
initialized = true;
}
}
public bool IsInside(Vector2 position){
var b = renderer.bounds;
var r = new Rect(b.min.x, b.min.y, b.max.x - b.min.x, b.max.y - b.min.y);
return r.Contains(position);
//Vector3 tp = new Vector3(position.x, position.y, b.min.z);
//return b.Contains(tp);
}
public void Hide(Material hideMaterial, float hideDepth){
hidden = true;
var pos = obj.transform.position;
pos.z = hideDepth;
obj.transform.position = pos;
renderer.sharedMaterial = hideMaterial;
obj.SetActive(true);
}
public void Show(){
hidden = false;
var pos = obj.transform.position;
pos.z = startupDepth;
obj.transform.position = pos;
renderer.sharedMaterial = startupMaterial;
obj.SetActive(startupVisibility);
}
// Update is called once per frame
void Update () {
if (control == null) {
return;
}
foreach(var p in visibilityPredicates){
if(p != null && p.Check(this)){
Show ();
return;
}
}
Hide (control.hideMaterial, control.hideDepth);
}
}