using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace Light2D
{
///
/// That class is generating obstacles for object it attached to.
/// Obect must have MeshRenderer, SpriteRenderer or CustomSprite script from which texture for obstacle will be grabbed.
/// For rendering obstacle of SpriteRenderer and CustomSprite LightObstacleSprite with material "Material" (material with dual color shader by default) will be used.
/// For objects with MeshRenderer "Material" property is ignored. MeshRenderer.sharedMaterial is used instead.
///
[ExecuteInEditMode]
public class LightObstacleGenerator : MonoBehaviour
{
///
/// Vertex color.
///
public Color MultiplicativeColor = new Color(0, 0, 0, 1);
///
/// AdditiveColor that will be used for obstacle when SpriteRenderer or CustomSprite scripts is attached.
/// Only DualColor shader supports additive color.
///
public Color AdditiveColor;
///
/// Material that will be used for obstacle when SpriteRenderer or CustomSprite scripts is attached.
///
public Material Material;
public float LightObstacleScale = 1;
private void Start()
{
#if UNITY_EDITOR
if (Material == null)
{
Material = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/Light2D/Materials/DualColor.mat");
}
#endif
if (!Application.isPlaying)
return;
var obstacleObj = new GameObject(gameObject.name + " Light Obstacle");
obstacleObj.transform.parent = gameObject.transform;
obstacleObj.transform.localPosition = Vector3.zero;
obstacleObj.transform.localRotation = Quaternion.identity;
obstacleObj.transform.localScale = Vector3.one*LightObstacleScale;
if (LightingSystem.Instance != null)
obstacleObj.layer = LightingSystem.Instance.LightObstaclesLayer;
if (GetComponent() != null || GetComponent() != null)
{
var obstacleSprite = obstacleObj.AddComponent();
obstacleSprite.Color = MultiplicativeColor;
obstacleSprite.AdditiveColor = AdditiveColor;
obstacleSprite.Material = Material;
}
else
{
var obstacleMesh = obstacleObj.AddComponent();
obstacleMesh.MultiplicativeColor = MultiplicativeColor;
obstacleMesh.AdditiveColor = AdditiveColor;
obstacleMesh.Material = Material;
}
Destroy(this);
}
}
}