void beam_lock() { if (!beam.enabled) beam.enabled = true; beam.SetPosition(0, transform.position); beam.SetPosition(1, beamFacing.position); Vector3 lookPos = player.transform.position - beamFacing.position; lookPos.y = 0; Quaternion rotation = Quaternion.LookRotation(lookPos); beamFacing.rotation = rotation; beamFacing.position = new Vector3(beamFacing.position.x, floor, beamFacing.position.z); if (!beamCharge.isPlaying) { audio_beam.volume = 1; audio_beam.loop = false; audio_beam.PlayOneShot(sndBeamCharge); beamCharge.Play(); } if (beamCharge.time >= 1.5F) { audio_beam.volume = 0.1F; bstate = beamState.shoot; beamCharge.Stop(); } }
void beam_shoot() { if (!beamEnd.isPlaying) beamEnd.Play(); audio_beam.loop = true; audio_beam.PlayOneShot(sndBeamFire); if (Vector3.Distance(transform.position, beamFacing.position) < beamLength) { audio_beam.volume -= 0.001F; beamFacing.Translate(Vector3.forward * beamSpeed * Time.deltaTime); beam.SetPosition(0, transform.position); beam.SetPosition(1, beamFacing.position); /*Vector3 direction = player.transform.position - transform.position; direction.y = floor; Quaternion rotation = Quaternion.LookRotation(direction);*/ //beamFacing.localRotation = rotation; } else { audio_beam.loop = false; audio_beam.Stop(); bstate = beamState.idle; } Collider[] hitColliders = Physics.OverlapSphere(beamFacing.position, 1); foreach (Collider c in hitColliders) { if(c.tag == "Player") { player.GetComponent<Player>().TakeDamage(beamDamage); Rigidbody rbody = player.GetComponent<Rigidbody>(); rbody.AddForce((player.transform.position - transform.position).normalized * pushForce, ForceMode.Impulse); audio_beam.loop = false; audio_beam.Stop(); bstate = beamState.idle; } } }
void beam_idle() { if (beamFacing.position != transform.position) beamFacing.position = transform.position; if (beamFacing.rotation != transform.rotation) beamFacing.rotation = transform.rotation; if (beam.enabled) { beam.SetPosition(0, transform.position); beam.SetPosition(1, transform.position); beam.enabled = false; } if (beamEnd.isPlaying) beamEnd.Stop(); if(curBeamCooldown <= 0) { curBeamCooldown = beamCooldown; bstate = beamState.lockOnPlayer; } else { curBeamCooldown--; } }