@ -0,0 +1,56 @@ | |||
using System.Collections; | |||
using System.Collections.Generic; | |||
using UnityEngine; | |||
using UnityEngine.UI; | |||
public class AlertController : MonoBehaviour | |||
{ | |||
public Text text; | |||
public Slider slider; | |||
public float hideTime = 5f; | |||
private Vector3 originalPos; | |||
private float lastSpotted; | |||
void Start () | |||
{ | |||
NotificationServer.register("spotted boat", spottedBoat); | |||
NotificationServer.register("lost boat", lostBoat); | |||
originalPos = text.rectTransform.anchoredPosition3D; | |||
} | |||
public void spottedBoat() | |||
{ | |||
LeanTween.cancel(text.gameObject, false); | |||
LeanTween.cancel(slider.gameObject, false); | |||
lastSpotted = Time.timeSinceLevelLoad; | |||
NotificationServer.notify("show AlertText"); | |||
text.text = "hide!"; | |||
setTimer(0f); | |||
} | |||
public void lostBoat() | |||
{ | |||
LeanTween.cancel(text.gameObject, false); | |||
LeanTween.cancel(slider.gameObject, false); | |||
NotificationServer.notify("show AlertText"); | |||
NotificationServer.notify("show AlertTimer"); | |||
text.text = "stay hidden"; | |||
LeanTween.value(slider.gameObject, 0f, 1f, hideTime).setOnUpdate((float val)=>{ | |||
setTimer(val); | |||
}).setOnComplete(()=>{ | |||
NotificationServer.notify("hide AlertTimer"); | |||
NotificationServer.notify("statechange Searchlight returning"); | |||
text.text = "hidden..."; | |||
LeanTween.delayedCall(text.gameObject, 2f, ()=>{ | |||
NotificationServer.notify("hide AlertText"); | |||
}); | |||
}); | |||
} | |||
public void setTimer(float val) | |||
{ | |||
slider.value = val; | |||
} | |||
} |
@ -0,0 +1,12 @@ | |||
fileFormatVersion: 2 | |||
guid: 89a715dd2260f413b89b4b9cdb979f3c | |||
timeCreated: 1485005279 | |||
licenseType: Free | |||
MonoImporter: | |||
serializedVersion: 2 | |||
defaultReferences: [] | |||
executionOrder: 0 | |||
icon: {instanceID: 0} | |||
userData: | |||
assetBundleName: | |||
assetBundleVariant: |
@ -0,0 +1,107 @@ | |||
using System.Collections; | |||
using System.Collections.Generic; | |||
using UnityEngine; | |||
using BansheeGz.BGSpline.Components; | |||
using BansheeGz.BGSpline.Curve; | |||
public class Lighthouse : MonoBehaviour | |||
{ | |||
public BGCurve splineCurve; | |||
public List<float> splineDistantPoints = new List<float>(); | |||
public float speed = 200f; | |||
public float timePadding = 0.5f; | |||
public float timeBetweenPoints = 3f; | |||
public AnimationCurve animationCurve; | |||
private BGCcCursor splineCursor; | |||
private BGCcCursorObjectTranslate splineObjectTranslate; | |||
private int targetPoint = 0; | |||
private bool reverseDirection = false; | |||
private bool midpoint = false; | |||
void Start() | |||
{ | |||
splineCursor = splineCurve.GetComponent<BGCcCursor>(); | |||
splineObjectTranslate = splineCurve.GetComponent<BGCcCursorObjectTranslate>(); | |||
if (splineDistantPoints == null || splineDistantPoints.Count == 0) | |||
{ | |||
splineDistantPoints.Add(0f); | |||
for (int i=1; i<splineCurve.PointsCount; i++) | |||
{ | |||
BGCurvePointI point = splineCurve.Points[i]; | |||
float distance = 0f; | |||
Vector3 temp = splineCursor.Math.CalcPositionByClosestPoint(point.PositionWorld, out distance); | |||
splineDistantPoints.Add(distance); | |||
} | |||
splineDistantPoints.Add(splineCursor.Math.GetDistance()); | |||
} | |||
splineCursor.Distance = 0f; | |||
moveToNextPoint(); | |||
NotificationServer.register("statechange Searchlight", searchlightStateChanged); | |||
} | |||
public void moveToNextPoint() | |||
{ | |||
LeanTween.delayedCall(gameObject, timeBetweenPoints, ()=>{ | |||
if (reverseDirection) | |||
targetPoint--; | |||
else | |||
targetPoint++; | |||
if (targetPoint >= splineDistantPoints.Count) | |||
{ | |||
if (splineCurve.Closed) | |||
{ | |||
targetPoint = 1; | |||
splineCursor.Distance = 0f; | |||
} | |||
else | |||
{ | |||
targetPoint = splineDistantPoints.Count - 2; | |||
reverseDirection = !reverseDirection; | |||
} | |||
} | |||
midpoint = true; | |||
float start = splineCursor.Distance; | |||
float end = splineDistantPoints[targetPoint]; | |||
float distance = Mathf.Abs(end - start); | |||
LeanTween.value(gameObject, start, end, distance / speed + timePadding).setOnUpdate((float val)=>{ | |||
splineCursor.Distance = val; | |||
}).setEase(animationCurve).setOnComplete(()=>{ | |||
midpoint = false; | |||
moveToNextPoint(); | |||
}); | |||
}); | |||
} | |||
public void searchlightStateChanged() | |||
{ | |||
LeanTween.cancel(gameObject, false); | |||
if (Searchlight.state == Searchlight.SearchState.Chasing) | |||
{ | |||
splineObjectTranslate.enabled = false; | |||
} | |||
else if (Searchlight.state == Searchlight.SearchState.Returning) | |||
{ | |||
splineObjectTranslate.enabled = false; | |||
Vector3 start = splineObjectTranslate.ObjectToManipulate.position; | |||
Vector3 end = splineCursor.CalculatePosition(); | |||
float distance = (end - start).magnitude; | |||
LeanTween.move(splineObjectTranslate.ObjectToManipulate.gameObject, end, distance / speed + timePadding).setEase(animationCurve).setOnComplete(()=>{ | |||
splineObjectTranslate.enabled = true; | |||
if (midpoint) | |||
{ | |||
if (reverseDirection) | |||
targetPoint++; | |||
else | |||
targetPoint--; | |||
} | |||
moveToNextPoint(); | |||
NotificationServer.notify("statechange Searchlight safe"); | |||
}); | |||
} | |||
} | |||
} |
@ -0,0 +1,12 @@ | |||
fileFormatVersion: 2 | |||
guid: e529d146693e04d5983a4fbbb25de5ab | |||
timeCreated: 1484975905 | |||
licenseType: Free | |||
MonoImporter: | |||
serializedVersion: 2 | |||
defaultReferences: [] | |||
executionOrder: 0 | |||
icon: {instanceID: 0} | |||
userData: | |||
assetBundleName: | |||
assetBundleVariant: |
@ -0,0 +1,111 @@ | |||
using System.Collections; | |||
using System.Collections.Generic; | |||
using UnityEngine; | |||
public class Searchlight : MonoBehaviour | |||
{ | |||
public enum SearchState | |||
{ | |||
Spline, | |||
Chasing, | |||
Returning | |||
} | |||
public float speed = 500f; | |||
public float timePadding = 0.5f; | |||
public float timeBetweenChase = 0.5f; | |||
public float randomFactor = 50f; | |||
public AnimationCurve animationCurve; | |||
[HideInInspector] | |||
public bool isTriggering = false; | |||
public static SearchState state = SearchState.Spline; | |||
public static Collider chased; | |||
private static List<Searchlight> instants = new List<Searchlight>(); | |||
public static bool isTriggeringAtLeastOne() | |||
{ | |||
foreach (Searchlight sl in instants) | |||
{ | |||
if (sl.isTriggering) | |||
return true; | |||
} | |||
return false; | |||
} | |||
void Awake() | |||
{ | |||
NotificationServer.register("statechange Searchlight", stateChanged); | |||
NotificationServer.register("statechange Searchlight safe", stateSafe); | |||
NotificationServer.register("statechange Searchlight returning", stateReturning); | |||
if (!instants.Contains(this)) | |||
instants.Add(this); | |||
} | |||
void OnTriggerEnter(Collider other) | |||
{ | |||
chased = other; | |||
isTriggering = true; | |||
if (state != SearchState.Chasing) | |||
{ | |||
state = SearchState.Chasing; | |||
NotificationServer.notify("statechange Searchlight"); | |||
NotificationServer.notify("chasing boat"); | |||
} | |||
NotificationServer.notify("spotted boat"); | |||
} | |||
void OnTriggerExit(Collider other) | |||
{ | |||
isTriggering = false; | |||
if (state == SearchState.Chasing && !isTriggeringAtLeastOne()) | |||
{ | |||
// chased = null; | |||
// state = SearchState.Returning; | |||
// NotificationServer.notify("statechange Searchlight"); | |||
NotificationServer.notify("lost boat"); | |||
} | |||
} | |||
public void stateSafe() | |||
{ | |||
state = SearchState.Spline; | |||
// NotificationServer.notify("statechange Searchlight"); | |||
} | |||
public void stateReturning() | |||
{ | |||
state = SearchState.Returning; | |||
NotificationServer.notify("statechange Searchlight"); | |||
} | |||
public void stateChanged() | |||
{ | |||
LeanTween.cancel(gameObject, false); | |||
if (state == SearchState.Chasing) | |||
LeanTween.move(gameObject, chased.transform.position, 0.5f).setEase(animationCurve).setOnComplete(chase); | |||
} | |||
public void chase() | |||
{ | |||
if (isTriggering) | |||
{ | |||
LeanTween.delayedCall(gameObject, timeBetweenChase, chase); | |||
} | |||
else | |||
{ | |||
LeanTween.delayedCall(gameObject, timeBetweenChase, ()=>{ | |||
Vector3 start = transform.localPosition; | |||
Vector3 end = chased.transform.localPosition | |||
+ Vector3.right * Random.Range(-randomFactor, randomFactor) | |||
+ Vector3.forward * Random.Range(-randomFactor, randomFactor); | |||
float distance = (end - start).magnitude; | |||
LeanTween.value(gameObject, 0f, 1f, distance / speed + timePadding).setOnUpdate((float val)=>{ | |||
transform.localPosition = start + (end-start)*val; | |||
}).setEase(animationCurve).setOnComplete(chase); | |||
}); | |||
} | |||
} | |||
} |
@ -0,0 +1,12 @@ | |||
fileFormatVersion: 2 | |||
guid: 51b93e628614140229e5d1f43186a375 | |||
timeCreated: 1484985371 | |||
licenseType: Free | |||
MonoImporter: | |||
serializedVersion: 2 | |||
defaultReferences: [] | |||
executionOrder: 0 | |||
icon: {instanceID: 0} | |||
userData: | |||
assetBundleName: | |||
assetBundleVariant: |
@ -0,0 +1,20 @@ | |||
using System.Collections; | |||
using System.Collections.Generic; | |||
using UnityEngine; | |||
public class TestMoveController : MonoBehaviour | |||
{ | |||
public float speed = 100f; | |||
void Update () | |||
{ | |||
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) | |||
transform.Translate(Vector3.back * Time.deltaTime * speed); | |||
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) | |||
transform.Translate(Vector3.left * Time.deltaTime * speed); | |||
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) | |||
transform.Translate(Vector3.forward * Time.deltaTime * speed); | |||
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) | |||
transform.Translate(Vector3.right * Time.deltaTime * speed); | |||
} | |||
} |
@ -0,0 +1,12 @@ | |||
fileFormatVersion: 2 | |||
guid: 89a55db40871a4d4c920b5f69d6bfc03 | |||
timeCreated: 1484997652 | |||
licenseType: Free | |||
MonoImporter: | |||
serializedVersion: 2 | |||
defaultReferences: [] | |||
executionOrder: 0 | |||
icon: {instanceID: 0} | |||
userData: | |||
assetBundleName: | |||
assetBundleVariant: |
@ -0,0 +1,9 @@ | |||
fileFormatVersion: 2 | |||
guid: 0fbabcae9313543ffbf1429aeac3664d | |||
folderAsset: yes | |||
timeCreated: 1484963877 | |||
licenseType: Free | |||
DefaultImporter: | |||
userData: | |||
assetBundleName: | |||
assetBundleVariant: |