Added Trail Effect library.
5
Assets/TrailEffect/Effects.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6a726ba0fdae4d440984f5fdb4733d17
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
5
Assets/TrailEffect/Effects/Trails.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f8269202cdc317242afb02d19b41b357
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
5
Assets/TrailEffect/Effects/Trails/Editor.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 35bda278aee224f419e59e01d4a4ff06
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
|
@ -0,0 +1,28 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using PigeonCoopToolkit.Generic.Editor;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public class PCTKEffectsIntroDialogue
|
||||
{
|
||||
static PCTKEffectsIntroDialogue()
|
||||
{
|
||||
EditorApplication.update+=Update;
|
||||
}
|
||||
|
||||
static void Update()
|
||||
{
|
||||
if (EditorPrefs.GetBool("PCTK/Effects/Trails/ShownIntroDialogue") == false)
|
||||
{
|
||||
IntroDialogue dialogue = EditorWindow.GetWindow<IntroDialogue>(true, "Thanks for your purchase!");
|
||||
dialogue.Init(Resources.Load("PCTK/Effects/Trails/banner") as Texture2D, new Generic.VersionInformation("Better Trails", 1, 3, 0), Application.dataPath + "/PigeonCoopToolkit/__Effects (Trails) Examples/Pigeon Coop Toolkit - Effects (Trails).pdf");
|
||||
EditorPrefs.SetBool("PCTK/Effects/Trails/ShownIntroDialogue",true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 83aee9145022a53418a0c515cc492327
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
19
Assets/TrailEffect/Effects/Trails/Editor/SmokePlumeEditor.cs
Normal file
|
@ -0,0 +1,19 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
[CustomEditor(typeof(SmokePlume))]
|
||||
[CanEditMultipleObjects]
|
||||
public class SmokePlumeEditor : TrailEditor_Base
|
||||
{
|
||||
protected override void DrawTrailSpecificGUI()
|
||||
{
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("ConstantForce"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("RandomForceScale"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TimeBetweenPoints"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ddcb2ed96cba10e4da2cae8ff8533fda
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
18
Assets/TrailEffect/Effects/Trails/Editor/SmokeTrailEditor.cs
Normal file
|
@ -0,0 +1,18 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
[CustomEditor(typeof(SmokeTrail))]
|
||||
[CanEditMultipleObjects]
|
||||
public class SmokeTrailEditor : TrailEditor_Base
|
||||
{
|
||||
protected override void DrawTrailSpecificGUI()
|
||||
{
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("RandomForceScale"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("MinVertexDistance"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bf32d2b00d1c88c4b91cf689b5f770c5
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
17
Assets/TrailEffect/Effects/Trails/Editor/TrailEditor.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
[CustomEditor(typeof(Trail))]
|
||||
[CanEditMultipleObjects]
|
||||
public class TrailEditor : TrailEditor_Base
|
||||
{
|
||||
protected override void DrawTrailSpecificGUI()
|
||||
{
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("MinVertexDistance"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dba587684cc69dc4097b307d0bacf81d
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
113
Assets/TrailEffect/Effects/Trails/Editor/TrailEditor_Base.cs
Normal file
|
@ -0,0 +1,113 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
|
||||
public class TrailEditor_Base : UnityEditor.Editor
|
||||
{
|
||||
|
||||
|
||||
public static TrailPreviewUtillity win;
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
|
||||
TrailRenderer_Base t = (TrailRenderer_Base)serializedObject.targetObject;
|
||||
if (t == null)
|
||||
return;
|
||||
|
||||
float defaultLabelWidth = EditorGUIUtility.labelWidth;
|
||||
float defaultFieldWidth = EditorGUIUtility.fieldWidth;
|
||||
GUILayout.Space(5);
|
||||
|
||||
GUILayout.BeginVertical();
|
||||
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.Lifetime"));
|
||||
EditorGUIUtility.labelWidth = defaultLabelWidth;
|
||||
EditorGUIUtility.fieldWidth = defaultFieldWidth;
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
EditorGUIUtility.fieldWidth = defaultLabelWidth - 80;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.TrailMaterial"));
|
||||
GUILayout.Space(10);
|
||||
EditorGUIUtility.labelWidth = 30;
|
||||
EditorGUIUtility.fieldWidth = 40;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.MaterialTileLength"), new GUIContent("Tile"), GUILayout.Width(70));
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
EditorGUIUtility.labelWidth = defaultLabelWidth;
|
||||
EditorGUIUtility.fieldWidth = defaultFieldWidth;
|
||||
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
EditorGUIUtility.fieldWidth = defaultLabelWidth - 80;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.SizeOverLife"));
|
||||
GUILayout.Space(10);
|
||||
EditorGUIUtility.labelWidth = 50;
|
||||
EditorGUIUtility.fieldWidth = 20;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.StretchSizeToFit"), new GUIContent("Stretch"), GUILayout.Width(70));
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
EditorGUIUtility.labelWidth = defaultLabelWidth;
|
||||
EditorGUIUtility.fieldWidth = defaultFieldWidth;
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
EditorGUIUtility.fieldWidth = defaultLabelWidth - 80;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.ColorOverLife"));
|
||||
GUILayout.Space(10);
|
||||
EditorGUIUtility.labelWidth = 50;
|
||||
EditorGUIUtility.fieldWidth = 20;
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.StretchColorToFit"), new GUIContent("Stretch"), GUILayout.Width(70));
|
||||
GUILayout.EndHorizontal();
|
||||
EditorGUIUtility.labelWidth = defaultLabelWidth;
|
||||
EditorGUIUtility.fieldWidth = defaultFieldWidth;
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.UseForwardOverride"));
|
||||
if(t.TrailData.UseForwardOverride)
|
||||
{
|
||||
EditorGUI.indentLevel++;
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.ForwardOverride"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("TrailData.ForwardOverrideRelative"), new GUIContent("Override Relative"));
|
||||
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
}
|
||||
|
||||
|
||||
DrawTrailSpecificGUI();
|
||||
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("MaxNumberOfPoints"));
|
||||
EditorGUILayout.PropertyField(serializedObject.FindProperty("Emit"));
|
||||
|
||||
|
||||
GUILayout.EndVertical();
|
||||
|
||||
|
||||
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
serializedObject.UpdateIfDirtyOrScript();
|
||||
|
||||
|
||||
GUILayout.Space(5);
|
||||
if (GUILayout.Button("Open preview"))
|
||||
{
|
||||
// Get existing open window or if none, make a new one:
|
||||
win = (TrailPreviewUtillity)EditorWindow.GetWindow(typeof(TrailPreviewUtillity), true, "Normalized Trail Preview");
|
||||
win.minSize = new Vector2(900, 140);
|
||||
win.maxSize = new Vector2(900, 140);
|
||||
win.Trail = t;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected virtual void DrawTrailSpecificGUI()
|
||||
{}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0ab5f16befc58ca4bbfb8159ae3ead06
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
275
Assets/TrailEffect/Effects/Trails/Editor/TrailPreviewUtillity.cs
Normal file
|
@ -0,0 +1,275 @@
|
|||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
public class TrailPreviewUtillity : EditorWindow
|
||||
{
|
||||
public TrailRenderer_Base Trail;
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (Trail == null || Trail.TrailData == null || Selection.activeGameObject != Trail.gameObject)
|
||||
{
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
|
||||
Repaint();
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if (Trail == null || Trail.TrailData == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
GUIStyle blackBG = new GUIStyle();
|
||||
blackBG.normal.background = EditorGUIUtility.whiteTexture;
|
||||
blackBG.normal.textColor = Color.white;
|
||||
Color revertTo = GUI.color;
|
||||
|
||||
|
||||
|
||||
float highPoint = 0;
|
||||
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
float s = Trail.TrailData.SizeOverLife.Evaluate((float)i / (float)100);
|
||||
if (highPoint < s)
|
||||
highPoint = s;
|
||||
}
|
||||
|
||||
GUI.color = new Color(0.3f,0.3f,0.3f,1);
|
||||
GUILayout.BeginArea(new Rect(0, 0, position.width, position.height), blackBG);
|
||||
|
||||
|
||||
float xPos = 0;
|
||||
float increment = 101;
|
||||
float modulo = 303;
|
||||
|
||||
while (xPos * increment < position.width)
|
||||
{
|
||||
xPos++;
|
||||
DrawLine(Vector2.right * (xPos * increment), Vector2.right * (xPos * increment) + Vector2.up * position.height, xPos * increment % modulo == 0 ? new Color(1, 1, 1, 0.1f) : new Color(1, 1, 1, 0.025f), 1);
|
||||
}
|
||||
|
||||
DrawLine(Vector2.up * position.height / 2, Vector2.right * position.width + Vector2.up * position.height / 2, new Color(1, 1, 1, 0.1f), 1);
|
||||
|
||||
|
||||
GL.PushMatrix();
|
||||
GL.LoadPixelMatrix(-0.5f, 0.5f, 0.5f, -0.5f);
|
||||
if (Trail.TrailData.TrailMaterial != null)
|
||||
Trail.TrailData.TrailMaterial.SetPass(0);
|
||||
|
||||
GL.Begin(GL.TRIANGLE_STRIP);
|
||||
|
||||
InsertTriangle(0, 1);
|
||||
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
InsertTriangle((float)i / (float)100, highPoint * 2);
|
||||
}
|
||||
|
||||
GL.End();
|
||||
GL.PopMatrix();
|
||||
|
||||
GUILayout.EndArea();
|
||||
|
||||
if (Trail.TrailData.TrailMaterial == null)
|
||||
{
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.FlexibleSpace();
|
||||
GUI.color = new Color(0, 0, 0, 0.15f);
|
||||
|
||||
GUILayout.BeginVertical();
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
GUILayout.BeginVertical(blackBG);
|
||||
GUI.color = Color.white;
|
||||
GUILayout.Label("Material is NULL", EditorStyles.whiteMiniLabel);
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.EndVertical();
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.EndVertical();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.BeginHorizontal();
|
||||
GUI.color = new Color(0, 0, 0, 0.15f);
|
||||
GUILayout.BeginVertical(blackBG);
|
||||
GUI.color = Color.white;
|
||||
GUILayout.Label("Start", EditorStyles.whiteMiniLabel);
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
GUI.color = new Color(0, 0, 0, 0.15f);
|
||||
GUILayout.BeginVertical(blackBG);
|
||||
GUI.color = Color.white;
|
||||
GUILayout.Label("End", EditorStyles.whiteMiniLabel);
|
||||
GUILayout.EndVertical();
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.EndVertical();
|
||||
}
|
||||
|
||||
GUI.color = revertTo;
|
||||
|
||||
|
||||
}
|
||||
|
||||
void InsertTriangle(float t, float scaler)
|
||||
{
|
||||
if(scaler <= 0)
|
||||
return;
|
||||
Color c = Trail.TrailData.ColorOverLife.Evaluate(t);
|
||||
float s = Trail.TrailData.SizeOverLife.Evaluate(t) / (scaler);
|
||||
|
||||
GL.Color(c);
|
||||
GL.Vertex3(t, 0.5f + s, 0);
|
||||
GL.MultiTexCoord(0, Trail.TrailData.MaterialTileLength > 0 ? new Vector3((t * position.width) / (300 * Trail.TrailData.MaterialTileLength), 0, 0) : new Vector3(t, 0, 0));
|
||||
GL.Vertex3(t, 0.5f - s, 0);
|
||||
GL.MultiTexCoord(0, Trail.TrailData.MaterialTileLength > 0 ? new Vector3((t * position.width) / (300 * Trail.TrailData.MaterialTileLength), 1, 0) : new Vector3(t, 1, 0));
|
||||
}
|
||||
|
||||
public static void DrawLine(Vector2 start, Vector2 end, Color color, float width)
|
||||
{
|
||||
if (Event.current == null)
|
||||
return;
|
||||
if (Event.current.type != EventType.repaint)
|
||||
return;
|
||||
|
||||
CreateMaterial();
|
||||
|
||||
lineMaterial.SetPass(0);
|
||||
|
||||
Vector3 startPt;
|
||||
Vector3 endPt;
|
||||
|
||||
if (width == 1)
|
||||
{
|
||||
GL.Begin(GL.LINES);
|
||||
GL.Color(color);
|
||||
startPt = new Vector3(start.x, start.y, 0);
|
||||
endPt = new Vector3(end.x, end.y, 0);
|
||||
GL.Vertex(startPt);
|
||||
GL.Vertex(endPt);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.Begin(GL.QUADS);
|
||||
GL.Color(color);
|
||||
startPt = new Vector3(end.y, start.x, 0);
|
||||
endPt = new Vector3(start.y, end.x, 0);
|
||||
Vector3 perpendicular = (startPt - endPt).normalized * width;
|
||||
Vector3 v1 = new Vector3(start.x, start.y, 0);
|
||||
Vector3 v2 = new Vector3(end.x, end.y, 0);
|
||||
GL.Vertex(v1 - perpendicular);
|
||||
GL.Vertex(v1 + perpendicular);
|
||||
GL.Vertex(v2 + perpendicular);
|
||||
GL.Vertex(v2 - perpendicular);
|
||||
}
|
||||
GL.End();
|
||||
}
|
||||
|
||||
public static void CreateMaterial()
|
||||
{
|
||||
if (lineMaterial != null)
|
||||
return;
|
||||
Debug.Log ("Not Supported!{Unity5.0+}");
|
||||
// lineMaterial = new Material("Shader \"Lines/Colored Blended\" {" +
|
||||
// "SubShader { Pass { " +
|
||||
// " Blend SrcAlpha OneMinusSrcAlpha " +
|
||||
// " ZWrite Off Cull Off Fog { Mode Off } " +
|
||||
// " BindChannels {" +
|
||||
// " Bind \"vertex\", vertex Bind \"color\", color }" +
|
||||
// "} } }");
|
||||
// lineMaterial.hideFlags = HideFlags.HideAndDontSave;
|
||||
// lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
|
||||
}
|
||||
|
||||
public static Material lineMaterial = null;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails.Editor
|
||||
{
|
||||
public class TrailPreviewUtillity : EditorWindow
|
||||
{
|
||||
|
||||
public PCTrailRendererData Data;
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if(Data == null)
|
||||
{
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
|
||||
DrawLine(Vector2.zero, Vector2.right + Vector2.up,Color.red,1,Data.TrailMaterial);
|
||||
|
||||
}
|
||||
|
||||
public static void DrawLine(Vector2 start, Vector2 end, Color color, float width, Material m)
|
||||
{
|
||||
if (Event.current == null)
|
||||
return;
|
||||
if (Event.current.type != EventType.repaint)
|
||||
return;
|
||||
|
||||
|
||||
|
||||
m.SetPass(0);
|
||||
|
||||
Vector3 startPt;
|
||||
Vector3 endPt;
|
||||
|
||||
if (width == 1)
|
||||
{
|
||||
GL.Begin(GL.LINES);
|
||||
GL.Color(color);
|
||||
startPt = new Vector3(start.x, start.y, 0);
|
||||
endPt = new Vector3(end.x, end.y, 0);
|
||||
GL.Vertex(startPt);
|
||||
GL.Vertex(endPt);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.Begin(GL.QUADS);
|
||||
GL.Color(color);
|
||||
startPt = new Vector3(end.y, start.x, 0);
|
||||
endPt = new Vector3(start.y, end.x, 0);
|
||||
Vector3 perpendicular = (startPt - endPt).normalized * width;
|
||||
Vector3 v1 = new Vector3(start.x, start.y, 0);
|
||||
Vector3 v2 = new Vector3(end.x, end.y, 0);
|
||||
GL.Vertex(v1 - perpendicular);
|
||||
GL.Vertex(v1 + perpendicular);
|
||||
GL.Vertex(v2 + perpendicular);
|
||||
GL.Vertex(v2 - perpendicular);
|
||||
}
|
||||
GL.End();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 34af64ac36cf82046853c1e9e5421c3b
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
5
Assets/TrailEffect/Effects/Trails/Icons.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e88319607f0d43843b735c35e8da7d61
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
BIN
Assets/TrailEffect/Effects/Trails/Icons/SmokPlumeIcon.png
Normal file
After Width: | Height: | Size: 5 KiB |
BIN
Assets/TrailEffect/Effects/Trails/Icons/SmokeTrailIcon.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
Assets/TrailEffect/Effects/Trails/Icons/TrailIcon.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
60
Assets/TrailEffect/Effects/Trails/PCTrail.cs
Normal file
|
@ -0,0 +1,60 @@
|
|||
using PigeonCoopToolkit.Utillities;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
public class PCTrail : IDisposable
|
||||
{
|
||||
public CircularBuffer<PCTrailPoint> Points;
|
||||
|
||||
public Mesh Mesh;
|
||||
|
||||
public Vector3[] verticies;
|
||||
|
||||
public Vector3[] normals;
|
||||
|
||||
public Vector2[] uvs;
|
||||
|
||||
public Color[] colors;
|
||||
|
||||
public int[] indicies;
|
||||
|
||||
public int activePointCount;
|
||||
|
||||
public bool IsActiveTrail;
|
||||
|
||||
public int NumPoints;
|
||||
|
||||
public PCTrail(int numPoints)
|
||||
{
|
||||
this.Mesh = new Mesh();
|
||||
this.Mesh.MarkDynamic();
|
||||
this.verticies = new Vector3[2 * numPoints];
|
||||
this.normals = new Vector3[2 * numPoints];
|
||||
this.uvs = new Vector2[2 * numPoints];
|
||||
this.colors = new Color[2 * numPoints];
|
||||
this.indicies = new int[2 * numPoints * 3];
|
||||
this.Points = new CircularBuffer<PCTrailPoint>(numPoints);
|
||||
this.NumPoints = numPoints;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (this.Mesh != null)
|
||||
{
|
||||
if (Application.isEditor)
|
||||
{
|
||||
Object.DestroyImmediate(this.Mesh, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Object.Destroy(this.Mesh);
|
||||
}
|
||||
}
|
||||
this.Points.Clear();
|
||||
this.Points = null;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/PCTrail.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6bdb573c1d60b9b4c9c5813da7dd36b3
|
||||
timeCreated: 1510298205
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
43
Assets/TrailEffect/Effects/Trails/PCTrailPoint.cs
Normal file
|
@ -0,0 +1,43 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
public class PCTrailPoint
|
||||
{
|
||||
public Vector3 Forward;
|
||||
|
||||
public Vector3 Position;
|
||||
|
||||
public int PointNumber;
|
||||
|
||||
private float _timeActive;
|
||||
|
||||
private float _distance;
|
||||
|
||||
public virtual void Update(float deltaTime)
|
||||
{
|
||||
this._timeActive += deltaTime;
|
||||
}
|
||||
|
||||
public float TimeActive()
|
||||
{
|
||||
return this._timeActive;
|
||||
}
|
||||
|
||||
public void SetTimeActive(float time)
|
||||
{
|
||||
this._timeActive = time;
|
||||
}
|
||||
|
||||
public void SetDistanceFromStart(float distance)
|
||||
{
|
||||
this._distance = distance;
|
||||
}
|
||||
|
||||
public float GetDistanceFromStart()
|
||||
{
|
||||
return this._distance;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/PCTrailPoint.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d1183b720c636c54187be6b54124b9d8
|
||||
timeCreated: 1510298399
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
41
Assets/TrailEffect/Effects/Trails/PCTrailRendererData.cs
Normal file
|
@ -0,0 +1,41 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
[Serializable]
|
||||
public class PCTrailRendererData
|
||||
{
|
||||
public Material TrailMaterial;
|
||||
|
||||
public float Lifetime = 1f;
|
||||
|
||||
public bool UsingSimpleSize;
|
||||
|
||||
public float SimpleSizeOverLifeStart;
|
||||
|
||||
public float SimpleSizeOverLifeEnd;
|
||||
|
||||
public AnimationCurve SizeOverLife = new AnimationCurve();
|
||||
|
||||
public bool UsingSimpleColor;
|
||||
|
||||
public Color SimpleColorOverLifeStart;
|
||||
|
||||
public Color SimpleColorOverLifeEnd;
|
||||
|
||||
public Gradient ColorOverLife;
|
||||
|
||||
public bool StretchSizeToFit;
|
||||
|
||||
public bool StretchColorToFit;
|
||||
|
||||
public float MaterialTileLength;
|
||||
|
||||
public bool UseForwardOverride;
|
||||
|
||||
public Vector3 ForwardOverride;
|
||||
|
||||
public bool ForwardOverrideRelative;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2df86c9fa942e934f8d1b47514ebeeca
|
||||
timeCreated: 1510298132
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
5
Assets/TrailEffect/Effects/Trails/Resources.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6f284d34362cfbd4dac1f041e217159f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
5
Assets/TrailEffect/Effects/Trails/Resources/PCTK.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cb26a4a5e9479484ea1e4015d6117887
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f4c3d22dfd9259b47bd18e2fbb40a661
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9c92f0fb3caf95948bab8c97c7c38a7d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
88
Assets/TrailEffect/Effects/Trails/SmokePlume.cs
Normal file
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Random = UnityEngine.Random;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
[AddComponentMenu("Pigeon Coop Toolkit/Effects/Smoke Plume")]
|
||||
public class SmokePlume : TrailRenderer_Base
|
||||
{
|
||||
public float TimeBetweenPoints = 0.1f;
|
||||
|
||||
public Vector3 ConstantForce = Vector3.up * 0.5f;
|
||||
|
||||
public float RandomForceScale = 0.05f;
|
||||
|
||||
public int MaxNumberOfPoints = 50;
|
||||
|
||||
private float _timeSincePoint;
|
||||
|
||||
protected void OnEnable()
|
||||
{
|
||||
base.Start();
|
||||
base.ClearSystem(true);
|
||||
this._timeSincePoint = 0f;
|
||||
}
|
||||
|
||||
protected override void OnStartEmit()
|
||||
{
|
||||
this._timeSincePoint = 0f;
|
||||
}
|
||||
|
||||
protected override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
this.TrailData.SizeOverLife = new AnimationCurve(new Keyframe[]
|
||||
{
|
||||
new Keyframe(0f, 0f),
|
||||
new Keyframe(0.5f, 0.2f),
|
||||
new Keyframe(1f, 0.2f)
|
||||
});
|
||||
this.TrailData.Lifetime = 6f;
|
||||
this.ConstantForce = Vector3.up * 0.5f;
|
||||
this.TimeBetweenPoints = 0.1f;
|
||||
this.RandomForceScale = 0.05f;
|
||||
this.MaxNumberOfPoints = 50;
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
if (this._emit)
|
||||
{
|
||||
this._timeSincePoint += (this._noDecay ? 0f : Time.deltaTime);
|
||||
if (this._timeSincePoint >= this.TimeBetweenPoints)
|
||||
{
|
||||
base.AddPoint(new SmokeTrailPoint(), this._t.position);
|
||||
this._timeSincePoint = 0f;
|
||||
}
|
||||
}
|
||||
base.Update();
|
||||
}
|
||||
|
||||
protected override void InitialiseNewPoint(PCTrailPoint newPoint)
|
||||
{
|
||||
((SmokeTrailPoint)newPoint).RandomVec = Random.onUnitSphere * this.RandomForceScale;
|
||||
}
|
||||
|
||||
protected override void UpdateTrail(PCTrail trail, float deltaTime)
|
||||
{
|
||||
if (this._noDecay)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using IEnumerator<PCTrailPoint> enumerator = trail.Points.GetEnumerator();
|
||||
while (enumerator.MoveNext())
|
||||
{
|
||||
PCTrailPoint current = enumerator.Current;
|
||||
current.Position += this.ConstantForce * deltaTime;
|
||||
}
|
||||
}
|
||||
|
||||
protected override int GetMaxNumberOfPoints()
|
||||
{
|
||||
return this.MaxNumberOfPoints;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/SmokePlume.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9150799c728c3564980a1475e0a0808c
|
||||
timeCreated: 1510298265
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
70
Assets/TrailEffect/Effects/Trails/SmokeTrail.cs
Normal file
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
using Random = UnityEngine.Random;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
[AddComponentMenu("Pigeon Coop Toolkit/Effects/Smoke Trail")]
|
||||
public class SmokeTrail : TrailRenderer_Base
|
||||
{
|
||||
public float MinVertexDistance = 0.1f;
|
||||
|
||||
public int MaxNumberOfPoints = 50;
|
||||
|
||||
private Vector3 _lastPosition;
|
||||
|
||||
private float _distanceMoved;
|
||||
|
||||
public float RandomForceScale = 1f;
|
||||
|
||||
protected void OnEnable()
|
||||
{
|
||||
base.Start();
|
||||
base.ClearSystem(true);
|
||||
this._lastPosition = this._t.position;
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
if (this._emit)
|
||||
{
|
||||
this._distanceMoved += Vector3.Distance(this._t.position, this._lastPosition);
|
||||
if (this._distanceMoved != 0f && this._distanceMoved >= this.MinVertexDistance)
|
||||
{
|
||||
base.AddPoint(new SmokeTrailPoint(), this._t.position);
|
||||
this._distanceMoved = 0f;
|
||||
}
|
||||
this._lastPosition = this._t.position;
|
||||
}
|
||||
base.Update();
|
||||
}
|
||||
|
||||
protected override void OnStartEmit()
|
||||
{
|
||||
this._lastPosition = this._t.position;
|
||||
this._distanceMoved = 0f;
|
||||
}
|
||||
|
||||
protected override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
this.MinVertexDistance = 0.1f;
|
||||
this.RandomForceScale = 1f;
|
||||
}
|
||||
|
||||
protected override void InitialiseNewPoint(PCTrailPoint newPoint)
|
||||
{
|
||||
((SmokeTrailPoint)newPoint).RandomVec = Random.onUnitSphere * this.RandomForceScale;
|
||||
}
|
||||
|
||||
protected override void OnTranslate(Vector3 t)
|
||||
{
|
||||
this._lastPosition += t;
|
||||
}
|
||||
|
||||
protected override int GetMaxNumberOfPoints()
|
||||
{
|
||||
return this.MaxNumberOfPoints;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/SmokeTrail.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e6e5843f68b0854409013b4b9196c5fd
|
||||
timeCreated: 1510298456
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
16
Assets/TrailEffect/Effects/Trails/SmokeTrailPoint.cs
Normal file
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
public class SmokeTrailPoint : PCTrailPoint
|
||||
{
|
||||
public Vector3 RandomVec;
|
||||
|
||||
public override void Update(float deltaTime)
|
||||
{
|
||||
base.Update(deltaTime);
|
||||
this.Position += this.RandomVec * deltaTime;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/SmokeTrailPoint.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2cd086e711bdc064f8bc07309eedeb68
|
||||
timeCreated: 1510298131
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
188
Assets/TrailEffect/Effects/Trails/SmoothTrail.cs
Normal file
|
@ -0,0 +1,188 @@
|
|||
using PigeonCoopToolkit.Utillities;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
[AddComponentMenu("Pigeon Coop Toolkit/Effects/Smooth Trail")]
|
||||
public class SmoothTrail : TrailRenderer_Base
|
||||
{
|
||||
private class ControlPoint
|
||||
{
|
||||
public Vector3 p;
|
||||
|
||||
public Vector3 forward;
|
||||
}
|
||||
|
||||
public float MinControlPointDistance = 0.1f;
|
||||
|
||||
public int MaxControlPoints = 15;
|
||||
|
||||
public int PointsBetweenControlPoints = 4;
|
||||
|
||||
private Vector3 _lastPosition;
|
||||
|
||||
private float _distanceMoved;
|
||||
|
||||
private CircularBuffer<SmoothTrail.ControlPoint> _controlPoints;
|
||||
|
||||
protected void OnEnable()
|
||||
{
|
||||
base.Start();
|
||||
base.ClearSystem(true);
|
||||
this._lastPosition = this._t.position;
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
if (this._emit)
|
||||
{
|
||||
this._distanceMoved += Vector3.Distance(this._t.position, this._lastPosition);
|
||||
if (!Mathf.Approximately(this._distanceMoved, 0f) && this._distanceMoved >= this.MinControlPointDistance)
|
||||
{
|
||||
this.AddControlPoint(this._t.position);
|
||||
this._distanceMoved = 0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
this._controlPoints[this._controlPoints.Count - 1].p = this._t.position;
|
||||
if (this.TrailData.UseForwardOverride)
|
||||
{
|
||||
this._controlPoints[this._controlPoints.Count - 1].forward = (this.TrailData.ForwardOverrideRelative ? this._t.TransformDirection(this.TrailData.ForwardOverride.normalized) : this.TrailData.ForwardOverride.normalized);
|
||||
}
|
||||
}
|
||||
this._lastPosition = this._t.position;
|
||||
}
|
||||
base.Update();
|
||||
}
|
||||
|
||||
protected override void OnStartEmit()
|
||||
{
|
||||
this._lastPosition = this._t.position;
|
||||
this._distanceMoved = 0f;
|
||||
this._controlPoints = new CircularBuffer<SmoothTrail.ControlPoint>(this.MaxControlPoints);
|
||||
this._controlPoints.Add(new SmoothTrail.ControlPoint
|
||||
{
|
||||
p = this._lastPosition
|
||||
});
|
||||
if (this.TrailData.UseForwardOverride)
|
||||
{
|
||||
this._controlPoints[0].forward = (this.TrailData.ForwardOverrideRelative ? this._t.TransformDirection(this.TrailData.ForwardOverride.normalized) : this.TrailData.ForwardOverride.normalized);
|
||||
}
|
||||
base.AddPoint(new PCTrailPoint(), this._lastPosition);
|
||||
this.AddControlPoint(this._lastPosition);
|
||||
}
|
||||
|
||||
protected override void UpdateTrail(PCTrail trail, float deltaTime)
|
||||
{
|
||||
if (!trail.IsActiveTrail)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int num = 0;
|
||||
for (int i = 0; i < this._controlPoints.Count; i++)
|
||||
{
|
||||
trail.Points[num].Position = this._controlPoints[i].p;
|
||||
if (this.TrailData.UseForwardOverride)
|
||||
{
|
||||
trail.Points[num].Forward = this._controlPoints[i].forward;
|
||||
}
|
||||
num++;
|
||||
if (i < this._controlPoints.Count - 1)
|
||||
{
|
||||
float d = Vector3.Distance(this._controlPoints[i].p, this._controlPoints[i + 1].p) / 2f;
|
||||
Vector3 curveStartHandle;
|
||||
if (i == 0)
|
||||
{
|
||||
curveStartHandle = this._controlPoints[i].p + (this._controlPoints[i + 1].p - this._controlPoints[i].p).normalized * d;
|
||||
}
|
||||
else
|
||||
{
|
||||
curveStartHandle = this._controlPoints[i].p + (this._controlPoints[i + 1].p - this._controlPoints[i - 1].p).normalized * d;
|
||||
}
|
||||
int num2 = i + 1;
|
||||
Vector3 curveEndHandle;
|
||||
if (num2 == this._controlPoints.Count - 1)
|
||||
{
|
||||
curveEndHandle = this._controlPoints[num2].p + (this._controlPoints[num2 - 1].p - this._controlPoints[num2].p).normalized * d;
|
||||
}
|
||||
else
|
||||
{
|
||||
curveEndHandle = this._controlPoints[num2].p + (this._controlPoints[num2 - 1].p - this._controlPoints[num2 + 1].p).normalized * d;
|
||||
}
|
||||
PCTrailPoint pCTrailPoint = trail.Points[num - 1];
|
||||
PCTrailPoint pCTrailPoint2 = trail.Points[num - 1 + this.PointsBetweenControlPoints + 1];
|
||||
for (int j = 0; j < this.PointsBetweenControlPoints; j++)
|
||||
{
|
||||
float t = ((float)j + 1f) / ((float)this.PointsBetweenControlPoints + 1f);
|
||||
trail.Points[num].Position = this.GetPointAlongCurve(this._controlPoints[i].p, curveStartHandle, this._controlPoints[i + 1].p, curveEndHandle, t, 0.3f);
|
||||
trail.Points[num].SetTimeActive(Mathf.Lerp(pCTrailPoint.TimeActive(), pCTrailPoint2.TimeActive(), t));
|
||||
if (this.TrailData.UseForwardOverride)
|
||||
{
|
||||
trail.Points[num].Forward = Vector3.Lerp(pCTrailPoint.Forward, pCTrailPoint2.Forward, t);
|
||||
}
|
||||
num++;
|
||||
}
|
||||
}
|
||||
}
|
||||
int num3 = this._controlPoints.Count - 1 + (this._controlPoints.Count - 1) * this.PointsBetweenControlPoints;
|
||||
int num4 = num3 - this.PointsBetweenControlPoints - 1;
|
||||
int num5 = num3 + 1;
|
||||
float num6 = trail.Points[num4].GetDistanceFromStart();
|
||||
for (int k = num4 + 1; k < num5; k++)
|
||||
{
|
||||
num6 += Vector3.Distance(trail.Points[k - 1].Position, trail.Points[k].Position);
|
||||
trail.Points[k].SetDistanceFromStart(num6);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
this.MinControlPointDistance = 0.1f;
|
||||
this.MaxControlPoints = 15;
|
||||
this.PointsBetweenControlPoints = 4;
|
||||
}
|
||||
|
||||
protected override void OnTranslate(Vector3 t)
|
||||
{
|
||||
this._lastPosition += t;
|
||||
for (int i = 0; i < this._controlPoints.Count; i++)
|
||||
{
|
||||
this._controlPoints[i].p += t;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddControlPoint(Vector3 position)
|
||||
{
|
||||
for (int i = 0; i < this.PointsBetweenControlPoints; i++)
|
||||
{
|
||||
base.AddPoint(new PCTrailPoint(), position);
|
||||
}
|
||||
base.AddPoint(new PCTrailPoint(), position);
|
||||
SmoothTrail.ControlPoint controlPoint = new SmoothTrail.ControlPoint
|
||||
{
|
||||
p = position
|
||||
};
|
||||
if (this.TrailData.UseForwardOverride)
|
||||
{
|
||||
controlPoint.forward = (this.TrailData.ForwardOverrideRelative ? this._t.TransformDirection(this.TrailData.ForwardOverride.normalized) : this.TrailData.ForwardOverride.normalized);
|
||||
}
|
||||
this._controlPoints.Add(controlPoint);
|
||||
}
|
||||
|
||||
protected override int GetMaxNumberOfPoints()
|
||||
{
|
||||
return this.MaxControlPoints + this.MaxControlPoints * this.PointsBetweenControlPoints;
|
||||
}
|
||||
|
||||
public Vector3 GetPointAlongCurve(Vector3 curveStart, Vector3 curveStartHandle, Vector3 curveEnd, Vector3 curveEndHandle, float t, float crease)
|
||||
{
|
||||
float num = 1f - t;
|
||||
float num2 = Mathf.Pow(num, 3f);
|
||||
float num3 = Mathf.Pow(num, 2f);
|
||||
float num4 = 1f - crease;
|
||||
return (num2 * curveStart * num4 + 3f * num3 * t * curveStartHandle * crease + 3f * num * Mathf.Pow(t, 2f) * curveEndHandle * crease + Mathf.Pow(t, 3f) * curveEnd * num4) / (num2 * num4 + 3f * num3 * t * crease + 3f * num * Mathf.Pow(t, 2f) * crease + Mathf.Pow(t, 3f) * num4);
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/SmoothTrail.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fd5b6425a33ee3749a6a773b54f07066
|
||||
timeCreated: 1510298520
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
61
Assets/TrailEffect/Effects/Trails/Trail.cs
Normal file
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
[AddComponentMenu("Pigeon Coop Toolkit/Effects/Trail")]
|
||||
public class Trail : TrailRenderer_Base
|
||||
{
|
||||
public float MinVertexDistance = 0.1f;
|
||||
|
||||
public int MaxNumberOfPoints = 50;
|
||||
|
||||
private Vector3 _lastPosition;
|
||||
|
||||
private float _distanceMoved;
|
||||
|
||||
public void OnEnable()
|
||||
{
|
||||
base.Start();
|
||||
base.ClearSystem(true);
|
||||
this._lastPosition = this._t.position;
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
if (this._emit)
|
||||
{
|
||||
this._distanceMoved += Vector3.Distance(this._t.position, this._lastPosition);
|
||||
if (this._distanceMoved != 0f && this._distanceMoved >= this.MinVertexDistance)
|
||||
{
|
||||
base.AddPoint(new PCTrailPoint(), this._t.position);
|
||||
this._distanceMoved = 0f;
|
||||
}
|
||||
this._lastPosition = this._t.position;
|
||||
}
|
||||
base.Update();
|
||||
}
|
||||
|
||||
protected override void OnStartEmit()
|
||||
{
|
||||
this._lastPosition = this._t.position;
|
||||
this._distanceMoved = 0f;
|
||||
}
|
||||
|
||||
protected override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
this.MinVertexDistance = 0.1f;
|
||||
}
|
||||
|
||||
protected override void OnTranslate(Vector3 t)
|
||||
{
|
||||
this._lastPosition += t;
|
||||
}
|
||||
|
||||
protected override int GetMaxNumberOfPoints()
|
||||
{
|
||||
return this.MaxNumberOfPoints;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/Trail.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3f6ff3d33c169d34ca9bc146f4ef62ce
|
||||
timeCreated: 1510298149
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
512
Assets/TrailEffect/Effects/Trails/TrailRenderer_Base.cs
Normal file
|
@ -0,0 +1,512 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using PigeonCoopToolkit.Utillities;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace PigeonCoopToolkit.Effects.Trails
|
||||
{
|
||||
public abstract class TrailRenderer_Base : MonoBehaviour
|
||||
{
|
||||
public PCTrailRendererData TrailData;
|
||||
|
||||
public bool Emit;
|
||||
|
||||
protected bool _emit;
|
||||
|
||||
protected bool _noDecay;
|
||||
|
||||
private PCTrail _activeTrail;
|
||||
|
||||
private List<PCTrail> _fadingTrails;
|
||||
|
||||
protected Transform _t;
|
||||
|
||||
private static Dictionary<Material, List<PCTrail>> _matToTrailList;
|
||||
|
||||
private static List<Mesh> _toClean;
|
||||
|
||||
private static bool _hasRenderer;
|
||||
|
||||
private static int GlobalTrailRendererCount;
|
||||
|
||||
protected virtual void Awake()
|
||||
{
|
||||
GlobalTrailRendererCount++;
|
||||
if (GlobalTrailRendererCount == 1)
|
||||
{
|
||||
_matToTrailList = new Dictionary<Material, List<PCTrail>>();
|
||||
_toClean = new List<Mesh>();
|
||||
}
|
||||
_fadingTrails = new List<PCTrail>();
|
||||
_t = transform;
|
||||
_emit = Emit;
|
||||
if (_emit)
|
||||
{
|
||||
_activeTrail = new PCTrail(GetMaxNumberOfPoints());
|
||||
_activeTrail.IsActiveTrail = true;
|
||||
OnStartEmit();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void Start()
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void LateUpdate()
|
||||
{
|
||||
if (_hasRenderer)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_hasRenderer = true;
|
||||
foreach (KeyValuePair<Material, List<PCTrail>> current in _matToTrailList)
|
||||
{
|
||||
CombineInstance[] array = new CombineInstance[current.Value.Count];
|
||||
for (int i = 0; i < current.Value.Count; i++)
|
||||
{
|
||||
array[i] = new CombineInstance
|
||||
{
|
||||
mesh = current.Value[i].Mesh,
|
||||
subMeshIndex = 0,
|
||||
transform = Matrix4x4.identity
|
||||
};
|
||||
}
|
||||
Mesh mesh = new Mesh();
|
||||
mesh.CombineMeshes(array, true, false);
|
||||
_toClean.Add(mesh);
|
||||
DrawMesh(mesh, current.Key);
|
||||
current.Value.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void Update()
|
||||
{
|
||||
if (_hasRenderer)
|
||||
{
|
||||
_hasRenderer = false;
|
||||
if (_toClean.Count > 0)
|
||||
{
|
||||
for (int i = 0; i < _toClean.Count; i++)
|
||||
{
|
||||
Mesh mesh = _toClean[i];
|
||||
if (mesh != null)
|
||||
{
|
||||
if (Application.isEditor)
|
||||
{
|
||||
Object.DestroyImmediate(mesh, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Object.Destroy(mesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_toClean.Clear();
|
||||
}
|
||||
if (!_matToTrailList.ContainsKey(TrailData.TrailMaterial))
|
||||
{
|
||||
_matToTrailList.Add(TrailData.TrailMaterial, new List<PCTrail>());
|
||||
}
|
||||
if (_activeTrail != null)
|
||||
{
|
||||
UpdatePoints(_activeTrail, Time.deltaTime);
|
||||
UpdateTrail(_activeTrail, Time.deltaTime);
|
||||
GenerateMesh(_activeTrail);
|
||||
_matToTrailList[TrailData.TrailMaterial].Add(_activeTrail);
|
||||
}
|
||||
for (int j = _fadingTrails.Count - 1; j >= 0; j--)
|
||||
{
|
||||
if (_fadingTrails[j] == null || !AnyElement(_fadingTrails[j].Points))
|
||||
{
|
||||
if (_fadingTrails[j] != null)
|
||||
{
|
||||
_fadingTrails[j].Dispose();
|
||||
}
|
||||
_fadingTrails.RemoveAt(j);
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdatePoints(_fadingTrails[j], Time.deltaTime);
|
||||
UpdateTrail(_fadingTrails[j], Time.deltaTime);
|
||||
GenerateMesh(_fadingTrails[j]);
|
||||
_matToTrailList[TrailData.TrailMaterial].Add(_fadingTrails[j]);
|
||||
}
|
||||
}
|
||||
CheckEmitChange();
|
||||
}
|
||||
|
||||
protected bool AnyElement(CircularBuffer<PCTrailPoint> InPoints)
|
||||
{
|
||||
for (int i = 0; i < InPoints.Count; i++)
|
||||
{
|
||||
PCTrailPoint pCTrailPoint = InPoints[i];
|
||||
if (pCTrailPoint.TimeActive() < TrailData.Lifetime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected virtual void OnDestroy()
|
||||
{
|
||||
GlobalTrailRendererCount--;
|
||||
if (GlobalTrailRendererCount == 0)
|
||||
{
|
||||
if (_toClean != null && _toClean.Count > 0)
|
||||
{
|
||||
for (int i = 0; i < _toClean.Count; i++)
|
||||
{
|
||||
Mesh mesh = _toClean[i];
|
||||
if (mesh != null)
|
||||
{
|
||||
if (Application.isEditor)
|
||||
{
|
||||
Object.DestroyImmediate(mesh, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Object.Destroy(mesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_toClean = null;
|
||||
_matToTrailList.Clear();
|
||||
_matToTrailList = null;
|
||||
}
|
||||
if (_activeTrail != null)
|
||||
{
|
||||
_activeTrail.Dispose();
|
||||
_activeTrail = null;
|
||||
}
|
||||
if (_fadingTrails != null)
|
||||
{
|
||||
for (int j = 0; j < _fadingTrails.Count; j++)
|
||||
{
|
||||
PCTrail pCTrail = _fadingTrails[j];
|
||||
if (pCTrail != null)
|
||||
{
|
||||
pCTrail.Dispose();
|
||||
}
|
||||
}
|
||||
_fadingTrails.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnStopEmit()
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void OnStartEmit()
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void OnTranslate(Vector3 t)
|
||||
{
|
||||
}
|
||||
|
||||
protected abstract int GetMaxNumberOfPoints();
|
||||
|
||||
protected virtual void Reset()
|
||||
{
|
||||
if (TrailData == null)
|
||||
{
|
||||
TrailData = new PCTrailRendererData();
|
||||
}
|
||||
TrailData.Lifetime = 1f;
|
||||
TrailData.UsingSimpleColor = false;
|
||||
TrailData.UsingSimpleSize = false;
|
||||
TrailData.ColorOverLife = new Gradient();
|
||||
TrailData.SimpleColorOverLifeStart = Color.white;
|
||||
TrailData.SimpleColorOverLifeEnd = new Color(1f, 1f, 1f, 0f);
|
||||
TrailData.SizeOverLife = new AnimationCurve(new Keyframe(0f, 1f), new Keyframe(1f, 0f));
|
||||
TrailData.SimpleSizeOverLifeStart = 1f;
|
||||
TrailData.SimpleSizeOverLifeEnd = 0f;
|
||||
}
|
||||
|
||||
protected virtual void InitialiseNewPoint(PCTrailPoint newPoint)
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual void UpdateTrail(PCTrail trail, float deltaTime)
|
||||
{
|
||||
}
|
||||
|
||||
protected void AddPoint(PCTrailPoint newPoint, Vector3 pos)
|
||||
{
|
||||
if (_activeTrail == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
newPoint.Position = pos;
|
||||
newPoint.PointNumber = ((_activeTrail.Points.Count == 0) ? 0 : (_activeTrail.Points[_activeTrail.Points.Count - 1].PointNumber + 1));
|
||||
InitialiseNewPoint(newPoint);
|
||||
newPoint.SetDistanceFromStart((_activeTrail.Points.Count == 0) ? 0f : (_activeTrail.Points[_activeTrail.Points.Count - 1].GetDistanceFromStart() + Vector3.Distance(_activeTrail.Points[_activeTrail.Points.Count - 1].Position, pos)));
|
||||
if (TrailData.UseForwardOverride)
|
||||
{
|
||||
newPoint.Forward = (TrailData.ForwardOverrideRelative ? _t.TransformDirection(TrailData.ForwardOverride.normalized) : TrailData.ForwardOverride.normalized);
|
||||
}
|
||||
_activeTrail.Points.Add(newPoint);
|
||||
}
|
||||
|
||||
private void GenerateMesh(PCTrail trail)
|
||||
{
|
||||
trail.Mesh.Clear(false);
|
||||
Vector3 vector = (Camera.main != null) ? Camera.main.transform.forward : Vector3.forward;
|
||||
if (TrailData.UseForwardOverride)
|
||||
{
|
||||
vector = TrailData.ForwardOverride.normalized;
|
||||
}
|
||||
trail.activePointCount = NumberOfActivePoints(trail);
|
||||
if (trail.activePointCount < 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int num = 0;
|
||||
for (int i = 0; i < trail.Points.Count; i++)
|
||||
{
|
||||
PCTrailPoint pCTrailPoint = trail.Points[i];
|
||||
float num2 = pCTrailPoint.TimeActive() / TrailData.Lifetime;
|
||||
if (pCTrailPoint.TimeActive() <= TrailData.Lifetime)
|
||||
{
|
||||
if (TrailData.UseForwardOverride && TrailData.ForwardOverrideRelative)
|
||||
{
|
||||
vector = pCTrailPoint.Forward;
|
||||
}
|
||||
Vector3 a = Vector3.zero;
|
||||
a = i < trail.Points.Count - 1 ? Vector3.Cross((trail.Points[i + 1].Position - pCTrailPoint.Position).normalized, vector).normalized : Vector3.Cross((pCTrailPoint.Position - trail.Points[i - 1].Position).normalized, vector).normalized;
|
||||
Color color = TrailData.StretchColorToFit ? (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, 1f - num / (float)trail.activePointCount / 2f) : TrailData.ColorOverLife.Evaluate(1f - num / (float)trail.activePointCount / 2f)) : (TrailData.UsingSimpleColor ? Color.Lerp(TrailData.SimpleColorOverLifeStart, TrailData.SimpleColorOverLifeEnd, num2) : TrailData.ColorOverLife.Evaluate(num2));
|
||||
float d = TrailData.StretchSizeToFit ? (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, 1f - num / (float)trail.activePointCount / 2f) : TrailData.SizeOverLife.Evaluate(1f - num / (float)trail.activePointCount / 2f)) : (TrailData.UsingSimpleSize ? Mathf.Lerp(TrailData.SimpleSizeOverLifeStart, TrailData.SimpleSizeOverLifeEnd, num2) : TrailData.SizeOverLife.Evaluate(num2));
|
||||
trail.verticies[num] = pCTrailPoint.Position + a * d;
|
||||
if (TrailData.MaterialTileLength <= 0f)
|
||||
{
|
||||
trail.uvs[num] = new Vector2(num / (float)trail.activePointCount / 2f, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
trail.uvs[num] = new Vector2(pCTrailPoint.GetDistanceFromStart() / TrailData.MaterialTileLength, 0f);
|
||||
}
|
||||
trail.normals[num] = vector;
|
||||
trail.colors[num] = color;
|
||||
num++;
|
||||
trail.verticies[num] = pCTrailPoint.Position - a * d;
|
||||
if (TrailData.MaterialTileLength <= 0f)
|
||||
{
|
||||
trail.uvs[num] = new Vector2(num / (float)trail.activePointCount / 2f, 1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
trail.uvs[num] = new Vector2(pCTrailPoint.GetDistanceFromStart() / TrailData.MaterialTileLength, 1f);
|
||||
}
|
||||
trail.normals[num] = vector;
|
||||
trail.colors[num] = color;
|
||||
num++;
|
||||
}
|
||||
}
|
||||
Vector2 v = trail.verticies[num - 1];
|
||||
for (int j = num; j < trail.verticies.Length; j++)
|
||||
{
|
||||
trail.verticies[j] = v;
|
||||
}
|
||||
int num3 = 0;
|
||||
for (int k = 0; k < 2 * (trail.activePointCount - 1); k++)
|
||||
{
|
||||
if (k % 2 == 0)
|
||||
{
|
||||
trail.indicies[num3] = k;
|
||||
num3++;
|
||||
trail.indicies[num3] = k + 1;
|
||||
num3++;
|
||||
trail.indicies[num3] = k + 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
trail.indicies[num3] = k + 2;
|
||||
num3++;
|
||||
trail.indicies[num3] = k + 1;
|
||||
num3++;
|
||||
trail.indicies[num3] = k;
|
||||
}
|
||||
num3++;
|
||||
}
|
||||
int num4 = trail.indicies[num3 - 1];
|
||||
for (int l = num3; l < trail.indicies.Length; l++)
|
||||
{
|
||||
trail.indicies[l] = num4;
|
||||
}
|
||||
trail.Mesh.vertices = trail.verticies;
|
||||
trail.Mesh.SetIndices(trail.indicies, MeshTopology.Triangles, 0);
|
||||
trail.Mesh.uv = trail.uvs;
|
||||
trail.Mesh.normals = trail.normals;
|
||||
trail.Mesh.colors = trail.colors;
|
||||
}
|
||||
|
||||
private void DrawMesh(Mesh trailMesh, Material trailMaterial)
|
||||
{
|
||||
Graphics.DrawMesh(trailMesh, Matrix4x4.identity, trailMaterial, gameObject.layer);
|
||||
}
|
||||
|
||||
private void UpdatePoints(PCTrail line, float deltaTime)
|
||||
{
|
||||
for (int i = 0; i < line.Points.Count; i++)
|
||||
{
|
||||
line.Points[i].Update(_noDecay ? 0f : deltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
[Obsolete("UpdatePoint is deprecated, you should instead override UpdateTrail and loop through the individual points yourself (See Smoke or Smoke Plume scripts for how to do this).", true)]
|
||||
protected virtual void UpdatePoint(PCTrailPoint pCTrailPoint, float deltaTime)
|
||||
{
|
||||
}
|
||||
|
||||
private void CheckEmitChange()
|
||||
{
|
||||
if (_emit != Emit)
|
||||
{
|
||||
_emit = Emit;
|
||||
if (_emit)
|
||||
{
|
||||
if (_activeTrail == null || _activeTrail.NumPoints != GetMaxNumberOfPoints())
|
||||
{
|
||||
if (_activeTrail != null)
|
||||
{
|
||||
_activeTrail.Dispose();
|
||||
}
|
||||
_activeTrail = new PCTrail(GetMaxNumberOfPoints());
|
||||
}
|
||||
else
|
||||
{
|
||||
_activeTrail.Points.Clear();
|
||||
}
|
||||
_activeTrail.IsActiveTrail = true;
|
||||
OnStartEmit();
|
||||
}
|
||||
else
|
||||
{
|
||||
OnStopEmit();
|
||||
_activeTrail.IsActiveTrail = false;
|
||||
_fadingTrails.Add(_activeTrail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int NumberOfActivePoints(PCTrail line)
|
||||
{
|
||||
int num = 0;
|
||||
for (int i = 0; i < line.Points.Count; i++)
|
||||
{
|
||||
if (line.Points[i].TimeActive() < TrailData.Lifetime)
|
||||
{
|
||||
num++;
|
||||
}
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
[ContextMenu("Toggle inspector size input method")]
|
||||
protected void ToggleSizeInputStyle()
|
||||
{
|
||||
TrailData.UsingSimpleSize = !TrailData.UsingSimpleSize;
|
||||
}
|
||||
|
||||
[ContextMenu("Toggle inspector color input method")]
|
||||
protected void ToggleColorInputStyle()
|
||||
{
|
||||
TrailData.UsingSimpleColor = !TrailData.UsingSimpleColor;
|
||||
}
|
||||
|
||||
public void LifeDecayEnabled(bool enabled)
|
||||
{
|
||||
_noDecay = !enabled;
|
||||
}
|
||||
|
||||
public void Translate(Vector3 t)
|
||||
{
|
||||
if (_activeTrail != null)
|
||||
{
|
||||
for (int i = 0; i < _activeTrail.Points.Count; i++)
|
||||
{
|
||||
_activeTrail.Points[i].Position += t;
|
||||
}
|
||||
}
|
||||
if (_fadingTrails != null)
|
||||
{
|
||||
for (int j = 0; j < _fadingTrails.Count; j++)
|
||||
{
|
||||
PCTrail pCTrail = _fadingTrails[j];
|
||||
if (pCTrail != null)
|
||||
{
|
||||
for (int k = 0; k < pCTrail.Points.Count; k++)
|
||||
{
|
||||
pCTrail.Points[k].Position += t;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
OnTranslate(t);
|
||||
}
|
||||
|
||||
public void CreateTrail(Vector3 from, Vector3 to, float distanceBetweenPoints)
|
||||
{
|
||||
float num = Vector3.Distance(from, to);
|
||||
Vector3 normalized = (to - from).normalized;
|
||||
float num2 = 0f;
|
||||
CircularBuffer<PCTrailPoint> circularBuffer = new CircularBuffer<PCTrailPoint>(GetMaxNumberOfPoints());
|
||||
int num3 = 0;
|
||||
while (num2 < num)
|
||||
{
|
||||
PCTrailPoint pCTrailPoint = new PCTrailPoint();
|
||||
pCTrailPoint.PointNumber = num3;
|
||||
pCTrailPoint.Position = from + normalized * num2;
|
||||
circularBuffer.Add(pCTrailPoint);
|
||||
InitialiseNewPoint(pCTrailPoint);
|
||||
num3++;
|
||||
if (distanceBetweenPoints <= 0f)
|
||||
{
|
||||
break;
|
||||
}
|
||||
num2 += distanceBetweenPoints;
|
||||
}
|
||||
PCTrailPoint pCTrailPoint2 = new PCTrailPoint();
|
||||
pCTrailPoint2.PointNumber = num3;
|
||||
pCTrailPoint2.Position = to;
|
||||
circularBuffer.Add(pCTrailPoint2);
|
||||
InitialiseNewPoint(pCTrailPoint2);
|
||||
PCTrail pCTrail = new PCTrail(GetMaxNumberOfPoints());
|
||||
pCTrail.Points = circularBuffer;
|
||||
_fadingTrails.Add(pCTrail);
|
||||
}
|
||||
|
||||
public void ClearSystem(bool emitState)
|
||||
{
|
||||
if (_fadingTrails != null)
|
||||
{
|
||||
for (int i = 0; i < _fadingTrails.Count; i++)
|
||||
{
|
||||
PCTrail pCTrail = _fadingTrails[i];
|
||||
if (pCTrail != null && pCTrail != _activeTrail)
|
||||
{
|
||||
pCTrail.Dispose();
|
||||
}
|
||||
}
|
||||
_fadingTrails.Clear();
|
||||
}
|
||||
Emit = emitState;
|
||||
_emit = !emitState;
|
||||
CheckEmitChange();
|
||||
}
|
||||
|
||||
public int NumSegments()
|
||||
{
|
||||
int num = 0;
|
||||
if (_activeTrail != null && NumberOfActivePoints(_activeTrail) != 0)
|
||||
{
|
||||
num++;
|
||||
}
|
||||
return num + _fadingTrails.Count;
|
||||
}
|
||||
}
|
||||
}
|
12
Assets/TrailEffect/Effects/Trails/TrailRenderer_Base.cs.meta
Normal file
|
@ -0,0 +1,12 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 21f59b203fc36464997343d7fbb43d8f
|
||||
timeCreated: 1510298121
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
5
Assets/TrailEffect/Generic.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0a9b95943ee423546af04cdf2ca77dcb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
5
Assets/TrailEffect/Generic/Editor.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4bb7bc1d04cd01a44b699141de29a4f4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
81
Assets/TrailEffect/Generic/Editor/IntroDialogue.cs
Normal file
|
@ -0,0 +1,81 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Generic.Editor
|
||||
{
|
||||
public class IntroDialogue : EditorWindow
|
||||
{
|
||||
public VersionInformation versionInformation;
|
||||
public Texture2D banner;
|
||||
public string UserGuidePath;
|
||||
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if(banner == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
GUI.DrawTexture(new Rect(0, 0, banner.width, banner.height), banner);
|
||||
GUILayout.Space(banner.height - 18);
|
||||
if (versionInformation != null) GUILayout.Label(versionInformation.ToString());
|
||||
GUIStyle lessPaddingNotif = new GUIStyle("NotificationText");
|
||||
lessPaddingNotif.padding = new RectOffset(10,10,10,10);
|
||||
lessPaddingNotif.margin = new RectOffset(10, 10, 10, 10);
|
||||
lessPaddingNotif.stretchWidth = true;
|
||||
GUILayout.Label("Thanks for your purchase! ♥", lessPaddingNotif);
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Space(16);
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.Label("We hope you enjoy this tool. Feel free to contact us at our twitter or email - send us feature requests, get some help from us, or just say hi!", "WordWrapLabel");
|
||||
GUILayout.Label("Don't forget to rate or review "+versionInformation.Name+" on the asset store once you've had a chance to evaluate it", "WordWrapLabel");
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.Space(16);
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
GUILayout.BeginVertical();
|
||||
if (!string.IsNullOrEmpty(UserGuidePath))
|
||||
{
|
||||
if (GUILayout.Button("Need help? Read the guide!","LargeButton"))
|
||||
{
|
||||
Application.OpenURL(UserGuidePath);
|
||||
};
|
||||
|
||||
}
|
||||
GUILayout.Space(5);
|
||||
if (GUILayout.Button("Want to say hello? @PigeonCoopAU", "LargeButton"))
|
||||
{
|
||||
Application.OpenURL("http://www.twitter.com/PigeonCoopAU");
|
||||
};
|
||||
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.Label("© 2014 Pigeon Coop ", EditorStyles.miniLabel);
|
||||
|
||||
}
|
||||
|
||||
public void Init(Texture2D _banner, VersionInformation _versionInformation, string userGuidePath)
|
||||
{
|
||||
banner = _banner;
|
||||
UserGuidePath = userGuidePath;
|
||||
|
||||
if (System.IO.File.Exists(FileUtil.GetProjectRelativePath(userGuidePath)) == false)
|
||||
UserGuidePath = null;
|
||||
|
||||
versionInformation = _versionInformation;
|
||||
minSize = maxSize = new Vector2(banner.width, 500);
|
||||
}
|
||||
}
|
||||
}
|
8
Assets/TrailEffect/Generic/Editor/IntroDialogue.cs.meta
Normal file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 026003e24f7b7ce43b28fc3c8a4a40bf
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
5
Assets/TrailEffect/Generic/Resources.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f96a53c06e3e24b4cae13070f3b8a5cd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
5
Assets/TrailEffect/Generic/Resources/PCTK.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ca4b996a254788e47a48279672b9f8fc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
5
Assets/TrailEffect/Generic/Resources/PCTK/Generic.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c3eef40730cf0864d97e8e04a0ee6f8e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
44
Assets/TrailEffect/Generic/VersionInformation.cs
Normal file
|
@ -0,0 +1,44 @@
|
|||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Generic
|
||||
{
|
||||
[System.Serializable]
|
||||
public class VersionInformation
|
||||
{
|
||||
public string Name;
|
||||
public int Major = 1;
|
||||
public int Minor = 0;
|
||||
public int Patch = 0;
|
||||
|
||||
public VersionInformation(string name, int major, int minor, int patch)
|
||||
{
|
||||
Name = name;
|
||||
Major = major;
|
||||
Minor = minor;
|
||||
Patch = patch;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0} {1}.{2}.{3}", Name, Major, Minor, Patch);
|
||||
}
|
||||
|
||||
public bool Match(VersionInformation other, bool looseMatch)
|
||||
{
|
||||
if(looseMatch)
|
||||
{
|
||||
return other.Name == Name &&
|
||||
other.Major == Major &&
|
||||
other.Minor == Minor;
|
||||
}
|
||||
else
|
||||
{
|
||||
return other.Name == Name &&
|
||||
other.Major == Major &&
|
||||
other.Minor == Minor &&
|
||||
other.Patch == Patch;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
8
Assets/TrailEffect/Generic/VersionInformation.cs.meta
Normal file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1d58a7e753bea0e4c84779d092563363
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
9
Assets/TrailEffect/Materials.meta
Normal file
|
@ -0,0 +1,9 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ed403bda32d6d8b4abc0e3a2de4b8fa1
|
||||
folderAsset: yes
|
||||
timeCreated: 1497081290
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
40
Assets/TrailEffect/Materials/Arrow.mat
Normal file
|
@ -0,0 +1,40 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Arrow
|
||||
m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _DecalTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 9e6a712ea43474b4ca7d6dc2984f9e2d, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
4
Assets/TrailEffect/Materials/Arrow.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: bf90f05c17802054f98f9b5f331d8953
|
||||
NativeFormatImporter:
|
||||
userData:
|
52
Assets/TrailEffect/Materials/BarrelSmoke.mat
Normal file
|
@ -0,0 +1,52 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: BarrelSmoke
|
||||
m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 984639d35625032479433f0f906a8bda, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 98450d1e53061f840886062fc42513fa, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _Cutoff
|
||||
second: 0.5589286
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 0.01
|
||||
- first:
|
||||
name: _Shininess
|
||||
second: 0.70927906
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 0.02745098}
|
||||
- first:
|
||||
name: _EmisColor
|
||||
second: {r: 0.2, g: 0.2, b: 0.2, a: 0}
|
||||
- first:
|
||||
name: _SpecColor
|
||||
second: {r: 0.1397059, g: 0.1397059, b: 0.1397059, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 1, b: 1, a: 0.19607843}
|
4
Assets/TrailEffect/Materials/BarrelSmoke.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2c45238b0e8e5b443a693d7c92c89d3e
|
||||
NativeFormatImporter:
|
||||
userData:
|
52
Assets/TrailEffect/Materials/FlameSwordTrail.mat
Normal file
|
@ -0,0 +1,52 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: FlameSwordTrail
|
||||
m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 984639d35625032479433f0f906a8bda, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 98450d1e53061f840886062fc42513fa, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _Cutoff
|
||||
second: 0.4464286
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 0.3592857
|
||||
- first:
|
||||
name: _Shininess
|
||||
second: 0.70927906
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _EmisColor
|
||||
second: {r: 0.2, g: 0.2, b: 0.2, a: 0}
|
||||
- first:
|
||||
name: _SpecColor
|
||||
second: {r: 0.1397059, g: 0.1397059, b: 0.1397059, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 0.88965523, b: 0, a: 1}
|
4
Assets/TrailEffect/Materials/FlameSwordTrail.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a6c0d0c41df93a243b0e594e935d9a86
|
||||
NativeFormatImporter:
|
||||
userData:
|
|
@ -0,0 +1,34 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: LowPolyTankTextureTreadDecal
|
||||
m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: ab6d9a235b23c874885a173a6a2aa027, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 0.3455882, g: 0.22165315, b: 0, a: 0.5019608}
|
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0e0449aa4e0e216479ba4ebbe28e8288
|
||||
NativeFormatImporter:
|
||||
userData:
|
52
Assets/TrailEffect/Materials/MuzzleFlash.mat
Normal file
|
@ -0,0 +1,52 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: MuzzleFlash
|
||||
m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 984639d35625032479433f0f906a8bda, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 98450d1e53061f840886062fc42513fa, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _Cutoff
|
||||
second: 0.4464286
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
- first:
|
||||
name: _Shininess
|
||||
second: 0.70927906
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _EmisColor
|
||||
second: {r: 0.2, g: 0.2, b: 0.2, a: 0}
|
||||
- first:
|
||||
name: _SpecColor
|
||||
second: {r: 0.1397059, g: 0.1397059, b: 0.1397059, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 0.69411767, g: 0.69411767, b: 0.69411767, a: 0.19607843}
|
4
Assets/TrailEffect/Materials/MuzzleFlash.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 43839268c81ec7340b2eb815c164e0dd
|
||||
NativeFormatImporter:
|
||||
userData:
|
37
Assets/TrailEffect/Materials/SelectionTrail.mat
Normal file
|
@ -0,0 +1,37 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: SelectionTrail
|
||||
m_Shader: {fileID: 4800000, guid: c105fca0e8365434ab3e97e8a6979893, type: 3}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 62418b70010db0749956023a9435a814, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: PixelSnap
|
||||
second: 0
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 0.8095238, g: 1, b: 0, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
4
Assets/TrailEffect/Materials/SelectionTrail.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ee25fb26e9e357d48893fa69862a63d2
|
||||
NativeFormatImporter:
|
||||
userData:
|
40
Assets/TrailEffect/Materials/SwordSwingMat.mat
Normal file
|
@ -0,0 +1,40 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: SwordSwingMat
|
||||
m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _DecalTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 19bac775940f2024a80fd4f854a89757, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
4
Assets/TrailEffect/Materials/SwordSwingMat.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 75a9595d302878140b92c9b78b8d8a54
|
||||
NativeFormatImporter:
|
||||
userData:
|
34
Assets/TrailEffect/Materials/SwordSwingRoughMat.mat
Normal file
|
@ -0,0 +1,34 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: SwordSwingRoughMat
|
||||
m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 0e3f7f3b6dce3a94a86111da4203b740, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
4
Assets/TrailEffect/Materials/SwordSwingRoughMat.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ba822564932e653439da54554926872f
|
||||
NativeFormatImporter:
|
||||
userData:
|
37
Assets/TrailEffect/Materials/TankShellTrail.mat
Normal file
|
@ -0,0 +1,37 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: TankShellTrail
|
||||
m_Shader: {fileID: 4800000, guid: c105fca0e8365434ab3e97e8a6979893, type: 3}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 62418b70010db0749956023a9435a814, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: PixelSnap
|
||||
second: 0
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 0.8482759, b: 0, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
4
Assets/TrailEffect/Materials/TankShellTrail.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 74ac504b5aa2e7045830c0f69e8d297e
|
||||
NativeFormatImporter:
|
||||
userData:
|
52
Assets/TrailEffect/Materials/TankSmoke.mat
Normal file
|
@ -0,0 +1,52 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: TankSmoke
|
||||
m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 984639d35625032479433f0f906a8bda, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 98450d1e53061f840886062fc42513fa, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- first:
|
||||
name: _Cutoff
|
||||
second: 0.4464286
|
||||
- first:
|
||||
name: _InvFade
|
||||
second: 1
|
||||
- first:
|
||||
name: _Shininess
|
||||
second: 0.70927906
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
- first:
|
||||
name: _EmisColor
|
||||
second: {r: 0.2, g: 0.2, b: 0.2, a: 0}
|
||||
- first:
|
||||
name: _SpecColor
|
||||
second: {r: 0.1397059, g: 0.1397059, b: 0.1397059, a: 1}
|
||||
- first:
|
||||
name: _TintColor
|
||||
second: {r: 0.69411767, g: 0.69411767, b: 0.69411767, a: 0.11764706}
|
4
Assets/TrailEffect/Materials/TankSmoke.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 31435463954d86b4d837cc81741fbf2d
|
||||
NativeFormatImporter:
|
||||
userData:
|
28
Assets/TrailEffect/Materials/UsedShell.mat
Normal file
|
@ -0,0 +1,28 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: UsedShell
|
||||
m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
- first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats: []
|
||||
m_Colors:
|
||||
- first:
|
||||
name: _Color
|
||||
second: {r: 0.33088237, g: 0.33088237, b: 0.33088237, a: 1}
|
4
Assets/TrailEffect/Materials/UsedShell.mat.meta
Normal file
|
@ -0,0 +1,4 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 28b26d01baf691f41ae86e9f14169cc5
|
||||
NativeFormatImporter:
|
||||
userData:
|
9
Assets/TrailEffect/Textures.meta
Normal file
|
@ -0,0 +1,9 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 14d3150ca4de43f4b96ec7b2073cd409
|
||||
folderAsset: yes
|
||||
timeCreated: 1497081290
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
Assets/TrailEffect/Textures/Arrow 1.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
Assets/TrailEffect/Textures/Arrow.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
Assets/TrailEffect/Textures/SmokePlume 2.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
Assets/TrailEffect/Textures/SmokePlume.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
Assets/TrailEffect/Textures/swingFX.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
Assets/TrailEffect/Textures/swingFXRough.png
Normal file
After Width: | Height: | Size: 22 KiB |
5
Assets/TrailEffect/Utillities.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e0c6b2c9ac2b99d44a2fddaf4a1f2e1f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
286
Assets/TrailEffect/Utillities/CircularBuffer.cs
Normal file
|
@ -0,0 +1,286 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PigeonCoopToolkit.Utillities
|
||||
{
|
||||
public class CircularBuffer<T> : IList<T>, ICollection<T>,
|
||||
IEnumerable<T>, IEnumerable
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance of a <see cref="RingBuffer<T>"/> with a
|
||||
/// specified cache size.
|
||||
/// </summary>
|
||||
/// <param name="capacity">The maximal count of items to be stored within
|
||||
/// the ring buffer.</param>
|
||||
public CircularBuffer(int capacity)
|
||||
{
|
||||
// validate capacity
|
||||
if (capacity <= 0)
|
||||
throw new ArgumentException("Must be greater than zero", "capacity");
|
||||
// set capacity and init the cache
|
||||
Capacity = capacity;
|
||||
_buffer = new T[capacity];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// the internal buffer
|
||||
/// </summary>
|
||||
T[] _buffer;
|
||||
/// <summary>
|
||||
/// The all-over position within the ring buffer. The position
|
||||
/// increases continously by adding new items to the buffer. This
|
||||
/// value is needed to calculate the current relative position within the
|
||||
/// buffer.
|
||||
/// </summary>
|
||||
int _position;
|
||||
/// <summary>
|
||||
/// The current version of the buffer, this is required for a correct
|
||||
/// exception handling while enumerating over the items of the buffer.
|
||||
/// </summary>
|
||||
long _version;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets an item for a specified position within the ring buffer.
|
||||
/// </summary>
|
||||
/// <param name="index">The position to get or set an item.</param>
|
||||
/// <returns>The fond item at the specified position within the ring buffer.
|
||||
/// </returns>
|
||||
/// <exception cref="IndexOutOfRangeException"></exception>
|
||||
public T this[int index] {
|
||||
get {
|
||||
// validate the index
|
||||
if (index < 0 || index >= Count)
|
||||
throw new IndexOutOfRangeException();
|
||||
// calculate the relative position within the rolling base array
|
||||
int index2 = (_position - Count + index) % Capacity;
|
||||
return _buffer[index2];
|
||||
}
|
||||
set { Insert(index, value); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximal count of items within the ring buffer.
|
||||
/// </summary>
|
||||
public int Capacity { get; private set; }
|
||||
/// <summary>
|
||||
/// Get the current count of items within the ring buffer.
|
||||
/// </summary>
|
||||
public int Count { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new item to the buffer.
|
||||
/// </summary>
|
||||
/// <param name="item">The item to be added to the buffer.</param>
|
||||
public void Add(T item) {
|
||||
// add a new item to the current relative position within the
|
||||
// buffer and increase the position
|
||||
_buffer[_position++ % Capacity] = item;
|
||||
// increase the count if capacity is not yet reached
|
||||
if (Count < Capacity) Count++;
|
||||
// buffer changed; next version
|
||||
_version++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears the whole buffer and releases all referenced objects
|
||||
/// currently stored within the buffer.
|
||||
/// </summary>
|
||||
public void Clear() {
|
||||
for (int i = 0; i < Count; i++)
|
||||
_buffer[i] = default(T);
|
||||
_position = 0;
|
||||
Count = 0;
|
||||
_version++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if a specified item is currently present within
|
||||
/// the buffer.
|
||||
/// </summary>
|
||||
/// <param name="item">The item to search for within the current
|
||||
/// buffer.</param>
|
||||
/// <returns>True if the specified item is currently present within
|
||||
/// the buffer; otherwise false.</returns>
|
||||
public bool Contains(T item) {
|
||||
int index = IndexOf(item);
|
||||
return index != -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copies the current items within the buffer to a specified array.
|
||||
/// </summary>
|
||||
/// <param name="array">The target array to copy the items of
|
||||
/// the buffer to.</param>
|
||||
/// <param name="arrayIndex">The start position witihn the target
|
||||
/// array to start copying.</param>
|
||||
public void CopyTo(T[] array, int arrayIndex) {
|
||||
for (int i = 0; i < Count; i++) {
|
||||
array[i + arrayIndex] = _buffer[(_position - Count + i) % Capacity];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets an enumerator over the current items within the buffer.
|
||||
/// </summary>
|
||||
/// <returns>An enumerator over the current items within the buffer.
|
||||
/// </returns>
|
||||
public IEnumerator<T> GetEnumerator() {
|
||||
long version = _version;
|
||||
for (int i = 0; i < Count; i++) {
|
||||
if (version != _version)
|
||||
throw new InvalidOperationException("Collection changed");
|
||||
yield return this[i];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the position of a specied item within the ring buffer.
|
||||
/// </summary>
|
||||
/// <param name="item">The item to get the current position for.</param>
|
||||
/// <returns>The zero based index of the found item within the
|
||||
/// buffer. If the item was not present within the buffer, this
|
||||
/// method returns -1.</returns>
|
||||
public int IndexOf(T item) {
|
||||
// loop over the current count of items
|
||||
for (int i = 0; i < Count; i++) {
|
||||
// get the item at the relative position within the internal array
|
||||
T item2 = _buffer[(_position - Count + i) % Capacity];
|
||||
// if both items are null, return true
|
||||
if (null == item && null == item2)
|
||||
return i;
|
||||
// if equal return the position
|
||||
if (item != null && item.Equals(item2))
|
||||
return i;
|
||||
}
|
||||
// nothing found
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Inserts an item at a specified position into the buffer.
|
||||
/// </summary>
|
||||
/// <param name="index">The position within the buffer to add
|
||||
/// the new item.</param>
|
||||
/// <param name="item">The new item to be added to the buffer.</param>
|
||||
/// <exception cref="IndexOutOfRangeException"></exception>
|
||||
/// <remarks>
|
||||
/// If the specified index is equal to the current count of items
|
||||
/// within the buffer, the specified item will be added.
|
||||
///
|
||||
/// <b>Warning</b>
|
||||
/// Frequent usage of this method might become a bad idea if you are
|
||||
/// working with a large buffer capacity. The insertion of an item
|
||||
/// at a specified position within the buffer causes causes all present
|
||||
/// items below the specified position to be moved one position.
|
||||
/// </remarks>
|
||||
public void Insert(int index, T item) {
|
||||
// validate index
|
||||
if (index < 0 || index > Count)
|
||||
throw new IndexOutOfRangeException();
|
||||
// add if index equals to count
|
||||
if (index == Count) {
|
||||
Add(item);
|
||||
return;
|
||||
}
|
||||
|
||||
// get the maximal count of items to be moved
|
||||
int count = Math.Min(Count, Capacity - 1) - index;
|
||||
// get the relative position of the new item within the buffer
|
||||
int index2 = (_position - Count + index) % Capacity;
|
||||
|
||||
// move all items below the specified position
|
||||
for (int i = index2 + count; i > index2; i--) {
|
||||
int to = i % Capacity;
|
||||
int from = (i - 1) % Capacity;
|
||||
_buffer[to] = _buffer[from];
|
||||
}
|
||||
|
||||
// set the new item
|
||||
_buffer[index2] = item;
|
||||
|
||||
// adjust storage information
|
||||
if (Count < Capacity) {
|
||||
Count++;
|
||||
_position++;
|
||||
}
|
||||
// buffer changed; next version
|
||||
_version++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a specified item from the current buffer.
|
||||
/// </summary>
|
||||
/// <param name="item">The item to be removed.</param>
|
||||
/// <returns>True if the specified item was successfully removed
|
||||
/// from the buffer; otherwise false.</returns>
|
||||
/// <remarks>
|
||||
/// <b>Warning</b>
|
||||
/// Frequent usage of this method might become a bad idea if you are
|
||||
/// working with a large buffer capacity. The removing of an item
|
||||
/// requires a scan of the buffer to get the position of the specified
|
||||
/// item. If the item was found, the deletion requires a move of all
|
||||
/// items stored abouve the found position.
|
||||
/// </remarks>
|
||||
public bool Remove(T item) {
|
||||
// find the position of the specified item
|
||||
int index = IndexOf(item);
|
||||
// item was not found; return false
|
||||
if (index == -1)
|
||||
return false;
|
||||
// remove the item at the specified position
|
||||
RemoveAt(index);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes an item at a specified position within the buffer.
|
||||
/// </summary>
|
||||
/// <param name="index">The position of the item to be removed.</param>
|
||||
/// <exception cref="IndexOutOfRangeException"></exception>
|
||||
/// <remarks>
|
||||
/// <b>Warning</b>
|
||||
/// Frequent usage of this method might become a bad idea if you are
|
||||
/// working with a large buffer capacity. The deletion requires a move
|
||||
/// of all items stored abouve the found position.
|
||||
/// </remarks>
|
||||
public void RemoveAt(int index) {
|
||||
// validate the index
|
||||
if (index < 0 || index >= Count)
|
||||
throw new IndexOutOfRangeException();
|
||||
// move all items above the specified position one step
|
||||
// closer to zeri
|
||||
for (int i = index; i < Count - 1; i++) {
|
||||
// get the next relative target position of the item
|
||||
int to = (_position - Count + i) % Capacity;
|
||||
// get the next relative source position of the item
|
||||
int from = (_position - Count + i + 1) % Capacity;
|
||||
// move the item
|
||||
_buffer[to] = _buffer[from];
|
||||
}
|
||||
// get the relative position of the last item, which becomes empty
|
||||
// after deletion and set the item as empty
|
||||
int last = (_position - 1) % Capacity;
|
||||
_buffer[last] = default(T);
|
||||
// adjust storage information
|
||||
_position--;
|
||||
Count--;
|
||||
// buffer changed; next version
|
||||
_version++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the buffer is read-only. This method always returns false.
|
||||
/// </summary>
|
||||
bool ICollection<T>.IsReadOnly { get { return false; } }
|
||||
|
||||
/// <summary>
|
||||
/// See generic implementation of <see cref="GetEnumerator"/>.
|
||||
/// </summary>
|
||||
/// <returns>See generic implementation of <see cref="GetEnumerator"/>.
|
||||
/// </returns>
|
||||
IEnumerator IEnumerable.GetEnumerator() {
|
||||
return this.GetEnumerator();
|
||||
}
|
||||
}
|
||||
}
|
8
Assets/TrailEffect/Utillities/CircularBuffer.cs.meta
Normal file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 51a19be087405654c8b4b50c67fa9200
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
5
Assets/TrailEffect/Utillities/Editor.meta
Normal file
|
@ -0,0 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5bd6a89e61571ac4da1296f14bbb936e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
34
Assets/TrailEffect/Utillities/Editor/RangePropertyDrawer.cs
Normal file
|
@ -0,0 +1,34 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Utillities.Editor
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(Range))]
|
||||
public class RangePropertyDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(UnityEngine.Rect position, SerializedProperty property, UnityEngine.GUIContent label)
|
||||
{
|
||||
SerializedProperty Min = property.FindPropertyRelative("Min");
|
||||
SerializedProperty Max = property.FindPropertyRelative("Max");
|
||||
Vector2 newMinMax = Vector2.zero;
|
||||
position.height = 16;
|
||||
EditorGUI.LabelField(position, label);
|
||||
position.y += 20;
|
||||
position.width = position.width / 2;
|
||||
newMinMax.x = EditorGUI.FloatField(position, "Min", Min.floatValue);
|
||||
position.x += position.width;
|
||||
newMinMax.y = EditorGUI.FloatField(position, "Max", Max.floatValue);
|
||||
|
||||
if (newMinMax.x > newMinMax.y)
|
||||
newMinMax.x = newMinMax.y;
|
||||
|
||||
Min.floatValue = newMinMax.x;
|
||||
Max.floatValue = newMinMax.y;
|
||||
}
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
return base.GetPropertyHeight(property, label) + 20;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1eefccc24adb7c54a990dc0f9e669651
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
33
Assets/TrailEffect/Utillities/GizmosExtra.cs
Normal file
|
@ -0,0 +1,33 @@
|
|||
using UnityEngine;
|
||||
|
||||
namespace PigeonCoopToolkit.Utillities
|
||||
{
|
||||
public static class GizmosExtra
|
||||
{
|
||||
|
||||
public static void GizmosDrawCircle(Vector3 position, Vector3 up, float size, int divisions)
|
||||
{
|
||||
Vector3 offset = (Quaternion.Euler(90,0,0) * (up* size)) ;
|
||||
|
||||
for (int i = 0; i < divisions; i++)
|
||||
{
|
||||
|
||||
Vector3 newOffset = Quaternion.AngleAxis(360f / divisions, up) * offset;
|
||||
Gizmos.DrawLine(position + offset, position + newOffset);
|
||||
offset = newOffset;
|
||||
}
|
||||
}
|
||||
|
||||
public static void GizmosDrawArrow(Vector3 from, Vector3 to, float arrowSize)
|
||||
{
|
||||
Gizmos.DrawLine(from, to);
|
||||
|
||||
Vector3 dir = to - from;
|
||||
dir = dir.normalized*arrowSize;
|
||||
|
||||
Gizmos.DrawLine(to, to - Quaternion.Euler(0, 0, 45)*dir);
|
||||
Gizmos.DrawLine(to, to - Quaternion.Euler(0, 0, -45)*dir);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
8
Assets/TrailEffect/Utillities/GizmosExtra.cs.meta
Normal file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ac8be081485ba1141bd28334fe9eabec
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
15
Assets/TrailEffect/Utillities/Range.cs
Normal file
|
@ -0,0 +1,15 @@
|
|||
namespace PigeonCoopToolkit.Utillities
|
||||
{
|
||||
[System.Serializable]
|
||||
public class Range
|
||||
{
|
||||
public float Min;
|
||||
public float Max;
|
||||
|
||||
public bool WithinRange(float value)
|
||||
{
|
||||
return Min <= value && Max >= value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
8
Assets/TrailEffect/Utillities/Range.cs.meta
Normal file
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: db4c92c149ebf004a83b3776345ca8d4
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
21
fie.csproj
|
@ -1852,6 +1852,27 @@
|
|||
<Compile Include="Assets\SEGI\SEGICascaded.cs" />
|
||||
<Compile Include="Assets\SEGI\SEGICascadedPreset.cs" />
|
||||
<Compile Include="Assets\SEGI\SEGIPreset.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Editor\PCTKEffectsIntroDialogue.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Editor\SmokePlumeEditor.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Editor\SmokeTrailEditor.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Editor\TrailEditor.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Editor\TrailEditor_Base.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Editor\TrailPreviewUtillity.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\PCTrail.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\PCTrailPoint.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\PCTrailRendererData.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\SmokePlume.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\SmokeTrail.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\SmokeTrailPoint.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\SmoothTrail.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\Trail.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Effects\Trails\TrailRenderer_Base.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Generic\Editor\IntroDialogue.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Generic\VersionInformation.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Utillities\CircularBuffer.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Utillities\Editor\RangePropertyDrawer.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Utillities\GizmosExtra.cs" />
|
||||
<Compile Include="Assets\TrailEffect\Utillities\Range.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include=".gitattributes" />
|
||||
|
|