summaryrefslogtreecommitdiff
path: root/GameCode/ScreenEdgeBounce.cs
diff options
context:
space:
mode:
Diffstat (limited to 'GameCode/ScreenEdgeBounce.cs')
-rw-r--r--GameCode/ScreenEdgeBounce.cs132
1 files changed, 132 insertions, 0 deletions
diff --git a/GameCode/ScreenEdgeBounce.cs b/GameCode/ScreenEdgeBounce.cs
new file mode 100644
index 0000000..21c8b69
--- /dev/null
+++ b/GameCode/ScreenEdgeBounce.cs
@@ -0,0 +1,132 @@
+using Photon.Pun;
+using UnityEngine;
+
+public class ScreenEdgeBounce : MonoBehaviour
+{
+ private float sinceBounce = 1f;
+
+ private Camera mainCam;
+
+ private RayHitReflect reflect;
+
+ private Vector2 lastNormal;
+
+ private ProjectileHit projHit;
+
+ private bool done;
+
+ private RayHitBulletSound bulletSound;
+
+ private PhotonView view;
+
+ private void Start()
+ {
+ GetComponentInParent<ChildRPC>().childRPCsVector2Vector2IntInt.Add("ScreenBounce", DoHit);
+ view = GetComponentInParent<PhotonView>();
+ bulletSound = GetComponentInParent<RayHitBulletSound>();
+ projHit = GetComponentInParent<ProjectileHit>();
+ ScreenEdgeBounce[] componentsInChildren = base.transform.root.GetComponentsInChildren<ScreenEdgeBounce>();
+ for (int i = 0; i < componentsInChildren.Length; i++)
+ {
+ if (i > 0)
+ {
+ Object.Destroy(componentsInChildren[i]);
+ }
+ }
+ mainCam = MainCam.instance.transform.GetComponent<Camera>();
+ reflect = GetComponentInParent<RayHitReflect>();
+ }
+
+ private void Update()
+ {
+ if (!view.IsMine || done)
+ {
+ return;
+ }
+ Vector3 vector = mainCam.WorldToScreenPoint(base.transform.position);
+ vector.x /= Screen.width;
+ vector.y /= Screen.height;
+ vector = new Vector3(Mathf.Clamp(vector.x, 0f, 1f), Mathf.Clamp(vector.y, 0f, 1f), vector.z);
+ if (vector.x != 0f && vector.x != 1f && vector.y != 1f && vector.y != 0f)
+ {
+ return;
+ }
+ Vector2 vector2 = Vector2.zero;
+ if (vector.x == 0f)
+ {
+ vector2 = Vector2.right;
+ }
+ else if (vector.x == 1f)
+ {
+ vector2 = -Vector2.right;
+ }
+ if (vector.y == 0f)
+ {
+ vector2 = Vector2.up;
+ }
+ else if (vector.y == 1f)
+ {
+ vector2 = -Vector2.up;
+ }
+ if (lastNormal == vector2 && Vector2.Angle(vector2, base.transform.forward) < 90f)
+ {
+ lastNormal = vector2;
+ return;
+ }
+ lastNormal = vector2;
+ vector.x *= Screen.width;
+ vector.y *= Screen.height;
+ RaycastHit2D raycastHit2D = default(RaycastHit2D);
+ raycastHit2D.normal = vector2;
+ raycastHit2D.point = mainCam.ScreenToWorldPoint(vector);
+ int num = -1;
+ if ((bool)raycastHit2D.transform)
+ {
+ PhotonView component = raycastHit2D.transform.root.GetComponent<PhotonView>();
+ if ((bool)component)
+ {
+ num = component.ViewID;
+ }
+ }
+ int intData = -1;
+ if (num == -1)
+ {
+ Collider2D[] componentsInChildren = MapManager.instance.currentMap.Map.GetComponentsInChildren<Collider2D>();
+ for (int i = 0; i < componentsInChildren.Length; i++)
+ {
+ if (componentsInChildren[i] == raycastHit2D.collider)
+ {
+ intData = i;
+ }
+ }
+ }
+ GetComponentInParent<ChildRPC>().CallFunction("ScreenBounce", raycastHit2D.point, raycastHit2D.normal, num, intData);
+ if (reflect.reflects <= 0)
+ {
+ done = true;
+ }
+ sinceBounce = 0f;
+ }
+
+ private void DoHit(Vector2 hitPos, Vector2 hitNormal, int viewID = -1, int colliderID = -1)
+ {
+ HitInfo hitInfo = new HitInfo();
+ hitInfo.point = hitPos;
+ hitInfo.normal = hitNormal;
+ hitInfo.collider = null;
+ if (viewID != -1)
+ {
+ PhotonView photonView = PhotonNetwork.GetPhotonView(viewID);
+ hitInfo.collider = photonView.GetComponentInChildren<Collider2D>();
+ hitInfo.transform = photonView.transform;
+ }
+ else if (colliderID != -1)
+ {
+ hitInfo.collider = MapManager.instance.currentMap.Map.GetComponentsInChildren<Collider2D>()[colliderID];
+ hitInfo.transform = hitInfo.collider.transform;
+ }
+ DynamicParticles.instance.PlayBulletHit(projHit.damage, base.transform, hitInfo, projHit.projectileColor);
+ bulletSound.DoHitEffect(hitInfo);
+ reflect.DoHitEffect(hitInfo);
+ }
+}