public static GameObject InstantiateProjectile(ProjectileParameters parameters, Quaternion rotation) { var projParent = new GameObject("PProjFirePoint"); projParent.transform.localPosition = parameters.Position; projParent.transform.rotation = parameters.Rotatoin; var projGO = new GameObject("PlayerProj", typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(Rigidbody2D)); var renderer = projGO.GetComponent <SpriteRenderer>(); renderer.sprite = parameters.Texture; renderer.sortingLayerID = SortingLayer; var collider = projGO.GetComponent <BoxCollider2D>(); collider.size = new Vector2(0.5f, 0.5f); collider.isTrigger = true; var rb = projGO.GetComponent <Rigidbody2D>(); rb.isKinematic = true; rb.rotation = 0; rb.gravityScale = 0; var projectile = projGO.AddComponent <Projectile>(); var paraClone = parameters.Clone(); projectile.Parameters = paraClone; projGO.tag = "Projectile"; projGO.transform.rotation = rotation; projGO.transform.localPosition = projParent.transform.position; projGO.transform.SetParent(projParent.transform); Destroy(projParent, 3f); return(projParent); }
private void Update() { var horizontal = Input.GetAxisRaw("Horizontal"); var horizontalAbs = Mathf.Abs(horizontal); var vertical = Input.GetAxisRaw("Vertical"); var verticalAbs = Mathf.Abs(vertical); if (abilityCharge < 10) { abilityCharge += Time.deltaTime; AbilityRechargeBar.value = abilityCharge; } if (HasWon && !winTrigger) { winTrigger = true; rb.velocity = Vector2.zero; animator.UpdateSprite(PlayerSpriteState.Win); OnWin(); } if (HP <= 0 && !deathTrigger && !HasWon) { deathTrigger = true; IsDead = true; rb.velocity = Vector2.zero; animator.UpdateSprite(PlayerSpriteState.Death); OnDeath(); } else if (!deathTrigger && !IsDead && !HasWon) { if (Input.GetKeyDown(KeyCode.E) && OnTrapDoor && !gamePaused) { TrapDoorText.gameObject.SetActive(false); LastTrapDoor.Lock(); loadWOrld(CurrentLevel + 1); WorldController.StartWave(); } if (Input.GetKeyDown(KeyCode.C) && !gamePaused) { if (customizationOpen) { customizationOpen = false; CustomizationWindow.SetActive(customizationOpen); } else { customizationOpen = true; CustomizationWindow.SetActive(customizationOpen); } } if (Input.GetKeyDown(KeyCode.Q) && Bombs > 0) { var bombGO = Instantiate(BombPrefab); bombGO.transform.position = transform.localPosition; IncreaseStat(PlayerStats.BOMB, -1); } if (Input.GetKeyDown(KeyCode.Space) && abilityCharge >= 10f) { Teleporting = true; abilityCharge = 0; AbilityRechargeBar.value = abilityCharge; var teleAimGO = Instantiate(TeleAimPrefab); teleAimGO.transform.position = UnityEngine.Camera.main.ScreenToWorldPoint(Input.mousePosition); teleAimGO.GetComponent <Teleport>().player = this; } if (Input.GetKeyDown(KeyCode.P)) { PauseGame(); } if (Input.GetAxisRaw("Fire1") > 0.1f && !gamePaused && !Teleporting) { Vector2 dir = UnityEngine.Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward); Quaternion spriteRotation = Quaternion.AngleAxis(angle - 45, Vector3.forward); ProjectileParameters = new ProjectileParameters() { Texture = ProjTexture, Speed = 15f, Damage = DMG, OrbitSpeed = 25f, OrbitLength = 0.5f, OrbitOffset = 0 }; var proj = ProjectileParameters.Clone(); proj.Position = transform.position; proj.Rotatoin = rotation; if (Time.time - lastShoot > DPS) { Projectile.InstantiateProjectile(proj, spriteRotation); lastShoot = Time.time; } } if (horizontalAbs < 0.1f && verticalAbs < 0.1f && !gamePaused) { rb.velocity = Vector2.zero; animator.UpdateSprite(LastDir); } if (horizontalAbs > verticalAbs && !gamePaused) { animator.UpdateSprite(horizontal > 0 ? PlayerSpriteState.Right : PlayerSpriteState.Left); LastDir = horizontal > 0 ? PlayerSpriteState.Right : PlayerSpriteState.Left; } rb.velocity = new Vector2(horizontal * Speed * Time.fixedDeltaTime, vertical * Speed * Time.fixedDeltaTime); } if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } }