public virtual void Exit(T2.Skill.SkillCtrl skillCtrl) { bBeforeDelay = false; bAction = false; bAfterDelay = false; //쿨타임 시작. if (CoolTimeCoroutine != null) { StartCoroutine(CoolTimeCoroutine); } skillCtrl.mgr.ChangeState(T2.Manager.State.idle); //정상 종료 체크 if (bUsing == false) { /* * 정상종료 된다면 curSkill을 IdleSkill로 바로 대입한다. * (changeSkillState()함수로 바꾸면 무한 뺑뺑이가 돌아버림...) * IdleSkill에는 아무 기능도 없고 재설정해야하는 변수는 다른곳에서 * 이미 했기때문에 바로 대입해도 상관없을 듯 하다. */ if (skillCtrl.curSkill != T2.Skill.IdleSkill.GetInstance()) { skillCtrl.curSkill = T2.Skill.IdleSkill.GetInstance(); } } else { bUsing = false; } }
public virtual void Enter(T2.Skill.SkillCtrl skillCtrl) { bBeforeDelay = false; bAction = false; bAfterDelay = false; this.skillCtrl = skillCtrl; }
public override void Execute(T2.Skill.SkillCtrl skillCtrl) { //피격시 비정상 종료. if (skillCtrl.mgr.GetState() == T2.Manager.State.be_Shot) { Exit(skillCtrl); } }
public override void Exit(T2.Skill.SkillCtrl skillCtrl) { //사용 중 캔슬 되어 버릴 수 있으니 바뀐 값을 되돌려야 한다. //ec)만약 무적판정이 있다면, 여기서 다시 한번 꺼주어야 한다. oBlinkEffect.SetActive(false); base.Exit(skillCtrl); }
public override void Enter(T2.Skill.SkillCtrl skillCtrl) { //기본 변수 초기화. base.Enter(skillCtrl); base.skillCtrl = skillCtrl; base.skillCtrl.mgr.DecreaseSkillPoint(Manager.SkillType.EP, iDecPoint); base.bUsing = true; base.CoolTimeCoroutine = CoolTimer(coolTime); skillCtrl.mgr.ChangeState(T2.Manager.State.Skill); //선딜 타이머 시작. StartCoroutine(BeforeDelayTimer(beforeDelayTime)); }
public override void Enter(T2.Skill.SkillCtrl skillCtrl) { //기본 변수 초기화. base.Enter(skillCtrl); base.skillCtrl = skillCtrl; base.skillCtrl.mgr.DecreaseSkillPoint(PointType, iDecPoint); base.bUsing = true; base.CoolTimeCoroutine = CoolTimer(coolTime); fOrizinFOV = base.skillCtrl.cam.fieldOfView; skillCtrl.mgr.ChangeState(T2.Manager.State.Skill); //스킬이 끝난 후, 이동속도를 '처음'부터 가속하기 위해 moveState를 Stop으로 해 놓는다. base.skillCtrl.moveCtrl.SetMoveState(T2.MoveCtrl.MoveState.Stop); Transform camTr = Camera.main.transform; fInitCamRotY = camTr.eulerAngles.y; //화면의 중앙 벡터 Vector3 centerPos = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, 0.0f)); //화면의 중앙에서 카메라의 정면방향으로 레이를 쏜다. Ray aimRay = new Ray(centerPos, camTr.forward); //카메라의 기준이 될 피벗의 방향을 정하는 레이를 만든다. Ray pivotRay = new Ray(base.skillCtrl.trCamPivot.position, base.skillCtrl.trCamPivot.forward); //카메라에서 쏘는 레이가 부딪힌 위치를 바라보도록 한다. RaycastHit rayHit; //레이어 마스크 ignore처리 (-1)에서 빼 주어야 함 int mask = (1 << LayerMask.NameToLayer(Layers.T_HitCollider)) | (1 << LayerMask.NameToLayer(Layers.Bullet)); mask = ~mask; //총알이 날아갈 위치를 얻는다. if (Physics.Raycast(aimRay, out rayHit, fReach, mask)) { vFireTargetPos = rayHit.point; //피벗레이는 화면상보다 좀더 앞에 있기 때문에 FollowCam스크립트의 Dist만큼 빼준다. vPivotTargetPos = pivotRay.GetPoint(rayHit.distance - base.skillCtrl.cam.GetComponent <FollowCam>().GetDist()); } else { vFireTargetPos = aimRay.GetPoint(fReach); vPivotTargetPos = pivotRay.GetPoint(fReach); } //선딜 타이머 시작. StartCoroutine(BeforeDelayTimer(beforeDelayTime)); }
public override void Exit(T2.Skill.SkillCtrl skillCtrl) { //bUsing이 아직 true라면, 스킬이 도중에 캔슬 되는 경우이다. //스킬 캔슬로 인해 제대로 정리되지 않은 변수들을 초기화 시켜준다. if (bUsing == true) { this.StopAllCoroutines(); //잔상을 모두 지운다. afterModelPool.AllDeActiveObject(); afterImageCount = 0; iFlow = 0; base.skillCtrl.animator.speed = 1.0f; base.skillCtrl.mgr.SetCtrlPossible(T2.Manager.CtrlPossibleIndex.MouseRot, true); //카메라 FOV원위치 시키는 코드 추가. } base.Exit(skillCtrl); }
public virtual void Execute(T2.Skill.SkillCtrl skillCtrl) { }