private void Awake() { Debug.Assert(reticle != null); Debug.Assert(web != null); Debug.Assert(animator != null); Debug.Assert(spriteRenderer != null); raycastMask = LayerMask.GetMask("Floor"); raycastMask |= LayerMask.GetMask("Fly"); state = State.Idle; rotState = RotState.normalHorizontal; }
private void Update() { #if UNITY_EDITOR touchPos = Input.mousePosition; //if (EventSystem.current.IsPointerOverGameObject() == false) { if (Input.GetMouseButtonDown(0)) { if (touchPos.x <= Screen.width * 0.5) { rotState = RotState.LEFT; } else { rotState = RotState.RIGHT; } } else if (Input.GetMouseButtonUp(0)) { rotState = RotState.ADVANCE; } } #else //if (EventSystem.current.IsPointerOverGameObject() == false) { if (Input.touchCount > 0) { touchPos = Input.GetTouch(0).position; if (Input.GetTouch(0).phase == TouchPhase.Began) { if (touchPos.x <= Screen.width * 0.5) { rotState = RotState.LEFT; } else { rotState = RotState.RIGHT; } } else if (Input.GetTouch(0).phase == TouchPhase.Ended) { rotState = RotState.ADVANCE; } } } #endif }
private void Shoot() { // left click if (Input.GetMouseButtonDown(0) && currentZip == null) { state = State.Shooting; animator.SetTrigger("Fire"); RaycastHit2D[] hit = Physics2D.RaycastAll(transform.position, aimDirection, slingDist, raycastMask); web.startColor = new Color(241 / 255f, 241 / 255f, 215 / 255f); web.endColor = new Color(241 / 255f, 241 / 255f, 215 / 255f); web.SetWidth(0.05f, 0.05f); web.positionCount = 2; web.SetPosition(0, this.transform.position); bool hitTrigger = false; for (int i = 0, counti = hit.Length; i < counti; i++) { if (hit[i].collider != null) { // Spider has hit platform which is not theirs if (hit[i].transform.GetComponent <WebPlatform>() != null && hit[i].transform.GetComponent <WebPlatform>() != currentPlatform) { // grab the platform we're aiming at WebPlatform nextPlatform = hit[i].transform.gameObject.GetComponent <WebPlatform>(); // can't zip to same platform... this causes issues... if (currentWeb == null && nextPlatform != null && nextPlatform != currentPlatform) { hitTrigger = true; FMODUnity.RuntimeManager.PlayOneShot("event:/Spoder/Web_Splat"); currentWeb = new Web(this.transform.position, hit[i].point, hit[i].transform.gameObject.GetComponent <WebPlatform>()); Vector2 target = currentWeb.end; currentOrientation = currentWeb.target.Direction(); //store the current coroutine so we don't start another until it's up!.. IEnumerator kinda sucks, but game jam! Debug.Log("SETTING CURRENT ZIP"); currentZip = StartCoroutine(IZip(target)); GetComponent <FMODUnity.StudioEventEmitter>().Stop(); float dot = Vector2.Dot(hit[i].normal, Vector2.up); Debug.Log(string.Format("Surface Normal: {0}, Spider Up {1}, Dot {2}", hit[i].normal, Vector2.up, dot)); // floor if (dot <= -1) { Debug.Log("Horizontal"); Quaternion currentRot = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, this.transform.rotation.z); rotState = RotState.InvertHorizontal; this.transform.rotation = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, 180); } // ceiling if (dot >= 1) { Debug.Log("Horizontal"); rotState = RotState.normalHorizontal; Quaternion currentRot = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, this.transform.rotation.z); this.transform.rotation = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, 0); } if ((dot > 0 && dot < 1) || (dot < 0 && dot > -1)) { Debug.Log("Vertical"); Quaternion currentRot = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, this.transform.rotation.z); if (aimDirection.x < 0) { rotState = RotState.invertVertical; this.transform.rotation = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, -90); } else { rotState = RotState.normalVertical; this.transform.rotation = Quaternion.Euler(this.transform.rotation.x, this.transform.rotation.y, 90); } } break; } } // Fly has caught spider else if (hit[i].transform.GetComponent <Fly>() && hit[i].transform.GetComponent <Fly>() != victim) { if (hit[i].transform.GetComponent <Fly>().FlyState == Fly.FlyStates.AtTable) { continue; } Debug.Log("Hit Fly"); hitTrigger = true; Fly nextFly = hit[i].transform.GetComponent <Fly>(); FMOD.Studio.EventInstance instance = FMODUnity.RuntimeManager.CreateInstance("event:/Flappy Fly/Fly_Hit"); Debug.Log(nextFly.Gender); instance.setParameterValue("Female_Fly", nextFly.Gender); instance.start(); /// i.e spider is not carrying anyone if (victim == null) { victim = nextFly; victim.Caught(); currentReel = StartCoroutine(IReelInVictim()); nextFly.GetComponent <Animator>().SetTrigger("Trapped"); } else { nextFly.Kill(); } break; } } } // no hit if (!hitTrigger) { Debug.Log("No Hit"); Debug.DrawRay(transform.position, aimDirection * slingDist, Color.yellow); web.SetPosition(1, this.transform.position + (Vector3)(aimDirection * slingDist)); } } else { if (currentZip == null && currentReel == null) { // stop slinging that web web.positionCount = 0; } } }