public virtual void attack() { isAttacking = false; if (charInput.getSwitchSpellDown()) { spellIndex = (spellIndex + 1) % spells.Length; spell = (GameObject)Resources.Load("Prefabs/" + spells[spellIndex]); spell.GetComponent <Spell>().PreStartStuff(); } if (charInput.spawnBoi) { Instantiate((GameObject)Resources.Load("Prefabs/Enemies/Enemy"), (hit.distance != 0?hit.point:(cameraT.position + cameraT.forward * 100)), Quaternion.identity); } if (charInput.shield && !drawPad) { shielding = true; if (currShield == null) { currShield = Instantiate(shield, wandTip.transform.position, Quaternion.identity); currShield.GetComponent <Shield>().SetPlayer(this); } animator.SetInteger("shield", 1); } else { shielding = false; if (currShield != null) { currShield.GetComponent <Shield>().kill(); } animator.SetInteger("shield", 0); } if (charInput.getDrawPadDown()) { timeSpeed = timeSpeed == 0?1:0; drawPad = !drawPad; if (OnDrawPadSwitch != null) { OnDrawPadSwitch(); } if (drawPad) { drawPadObj = Instantiate((GameObject)Resources.Load("Prefabs/DrawSpellCaster"), transform.position + 3 * transform.up, Quaternion.LookRotation(cameraT.forward)); drawMouseTracker = new Vector3(Screen.width / 2, Screen.height / 2, Camera.main.nearClipPlane); } else { if (drawPadObj != null) { drawPadObj.GetComponent <DrawSpellCaster>().kill(); } } } //attacking valid = attackValid(); if ((charInput.leftMouseDown && valid)) { isAttacking = true; animator.SetInteger("attack", 2); attackFrameCounter = -1; } if (!charInput.leftMouseDown && charInput.leftMouseDownPrev || !valid) { animator.SetInteger("attack", 0); if ((!charInput.leftMouseDown && charInput.leftMouseDownPrev && valid) || (!valid && attackValidPrev)) { attackFrameCounter = 7; } isAttacking = false; } if (!isAttacking && attackFrameCounter > 0) { attackFrameCounter -= 1; } if (charInput.getSwitchAttackDown()) { attackMode = !attackMode; animator.SetBool("scope", attackMode); } if ((isAttacking || attackFrameCounter > 0 || attackMode || shielding)) { if (!drawPad) { armdegY = Mathf.SmoothDampAngle(armdegY, !flying?(cameraT.eulerAngles.x + (attackMode?-20 * (targetSpeed / runSpeed):0)):0, ref armturnYvel, 0.1f); arm.RotateAround(arm.position, transform.right, armdegY); } else { armdegY += (-charInput.mouseY); arm.RotateAround(arm.position, transform.right, armdegY); } } if (drawPad) { drawMouseTracker.x += 20 * charInput.mouseX; rotateArm(Camera.main.ScreenToWorldPoint(new Vector3(drawMouseTracker.x, charInput.mousePosition.y, Camera.main.nearClipPlane)) - cameraT.position, transform.forward, false); } else if (attackMode || isAttacking) { rotateArm(cameraT.forward, transform.forward, true); } attackValidPrev = valid; }