예제 #1
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.transform.tag == "Stage")
        {
            Debug.Log("Tagging : " + other.gameObject.name.ToString());
            StartCoroutine(EffectPlayAndReturn(effect2));
        }

        if (other.transform.tag == "Wall")
        {
            Debug.Log("Tagging : " + other.gameObject.name.ToString());
            StartCoroutine(EffectPlayAndReturn(effect1));
        }

        if (other.transform.tag == "Player")
        {
            float damage = RirisFSMManager.Stat.damageCoefiiecient[0] * 0.01f *
                           (RirisFSMManager.Stat.Str + RirisFSMManager.Stat.addStrPerRound * GameStatus.Instance.StageLevel)
                           - PlayerFSMManager.Instance.Stat.Defense;

            var hitTarget = GameLib.SimpleDamageProcess(this.transform, 0.01f, "Player", RirisFSMManager.Stat, damage * damageType);
            Invoke("AttackSupport", 0.5f);
            dameged = true;

            Debug.Log("Tagging : " + other.gameObject.name.ToString());
            StartCoroutine(EffectPlayAndReturn(effect1));
        }
    }
예제 #2
0
    private void Update()
    {
        //_manager.Sight.enabled = false;
        _manager.Sight.transform.gameObject.SetActive(false);

        if (GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS))
        {
        }

        _time += Time.deltaTime;
        if (_time > _idleTime)
        {
            _manager._sightCount++;

            if ((_manager._sightCount % 2) == 1)
            {
                _manager.SetState(SauronState.RIGHTSIGHT);
            }
            if ((_manager._sightCount % 2) == 0)
            {
                _manager.SetState(SauronState.LEFTSIGHT);
            }

            _time = 0;
        }
    }
예제 #3
0
    public void Update()
    {
        // 마우스 클릭시 상태 변환
        if (Input.GetMouseButtonDown(0))
        {
            // 상태 변동
            //if (CurrntState == PlayerState.IDLE) SetState(PlayerState.Run);
            //else SetState(PlayerState.IDLE);

            // 클릭시 선이 보임
            Ray        r = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit rayhit;


            if (Physics.Raycast(r, out rayhit, 10000.0f, clickLayer))
            {
                if (rayhit.transform.gameObject.layer == 9)
                {
                    _marker.position = rayhit.point;
                    SetState(PlayerState.Run);
                }
                else if (rayhit.transform.gameObject.layer == 10)
                {
                    GameLib.Log(this, "Monster");
                    _target = rayhit.transform;
                    SetState(PlayerState.Chase);
                }
                _marker.position = rayhit.point;
                // 마커를 가져오는 로직.
            }
        }
    }
예제 #4
0
    private void Update()
    {
        // 시야에 없으면서 동시에 추적 시간 5초가 넘었을 시에 아이들로 돌아온다?
        // 복귀타이머 -> 복귀
        // 추적상태에서 attack으로 넘어갈 때 2초 후 공격 시작하는 형식으로 그 사이 애니메이션 작동

        //if (Vector3.Distance(_manager.PlayerTransform.position, transform.position) >= _manager.Stat.AttackRange)
        if (!GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS))
        {
            _manager.SetState(DroneState.IDLE);
            return;
        }
        //if (GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS))
        //{
        //    _manager.SetState(DroneState.ATTACKDELAY);
        //    return;
        //}
        if (Vector3.Distance(_manager.PlayerTransform.position, transform.position) < _manager.Stat.AttackRange)
        {
            _manager.SetState(DroneState.ATTACKDELAY);
            return;
        }
        //_manager.CC.CKMove(_manager.PlayerTransform.position, _manager.Stat);
        //transform.LookAt(_manager.PlayerTransform);
    }
예제 #5
0
    private void Update()
    {
        //_manager.CC.CKMove(destination, _manager.Stat);
        //transform.LookAt(destination);

        if (Vector3.Distance(destination, transform.position) < 0.3f)
        {
            _manager.SetState(MP01State.IDLE);
            return;
        }

        //시야에 있다.
        if (GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS))
        {
            _manager.SetState(MP01State.WATCH);
            _manager.SightLight[0].SetActive(false);
            _manager.SightLight[1].SetActive(true);
            return;
        }
        if (_manager.isAlertPatrol)
        {
            timer += Time.deltaTime;
            _manager.SightLight[0].SetActive(false);
            _manager.SightLight[1].SetActive(true);
            if (timer >= fifteen)
            {
                timer = 0;
                _manager.SightLight[0].SetActive(true);
                _manager.SightLight[1].SetActive(false);
                _manager.isAlertPatrol = false;
            }
        }
    }
예제 #6
0
    private void Update()
    {
        _time += Time.deltaTime;

        if (_time > _animTime)
        {
            _manager.SightLight[1].SetActive(true);
            _manager.Sight.transform.gameObject.SetActive(true);
        }

        if (GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS))
        {
            _manager.SetState(SauronState.ATTACK);

            _manager.SightLight[1].SetActive(false);

            _manager.SightLight[3].SetActive(true);
        }


        if (_time > _sightTime)
        {
            _manager.SetState(SauronState.IDLE);
            _manager.Sight.transform.Rotate(Vector3.left * 180);
            _time = 0;
            _manager.SightLight[1].SetActive(false);
        }
    }
예제 #7
0
    public void ItemSetActive(Transform respawnTrans, CharacterController start, Collider target)
    {
        if (InActiveItem.Count == 0)
        {
            CreateItem();
        }

        var item = InActiveItem.First.Value;

        InActiveItem.RemoveFirst();

        item.transform.position = respawnTrans.position;

        try
        {
            item.GetComponent <MacBullet>().LookAtTarget();

            item.GetComponent <MacBullet>().dir =
                GameLib.DirectionToCharacter(start, target);

            item.GetComponent <MacBullet>()._Move = true;
            item.GetComponent <MacBullet>().mac   = respawnTrans.GetComponentInParent <MacFSMManager>();
        }
        catch
        {
        }

        item.SetActive(true);

        ActiveItem.AddLast(item);
    }
예제 #8
0
    private void Update()
    {
        _time += Time.deltaTime;

        //if(_time >=_scanTime && _scanCount > 0)
        //{
        //    _manager.SetState(DroneState.SCANCHASE);
        //    _time = 0;
        //    --_scanCount;
        //    _manager.isScan = true;
        //}


        if (GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS) && !_manager.isScan)
        {
            _manager.SetState(DroneState.CHASE);
            return;
        }
        //if (!GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS) && !_manager.isScan)
        //{
        //    _manager.SetState(DroneState.IDLE);
        //    return;
        //}
        if (Vector3.Distance(destination, transform.position) < 3f)// && !_manager.isScan)
        {
            _manager.SetState(DroneState.IDLE);
            return;
        }
        if (_manager.PlayerTransform.position.y > transform.position.y + 9f)
        {
            _manager.SetState(DroneState.GOUPSTAIR);
            return;
        }
    }
예제 #9
0
 public override void BeginState()
 {
     base.BeginState();
     GameLib.SimpleDamageProcess(transform, _manager.Stat.AttackRange,
                                 "Player", _manager.Stat);
     Debug.Log("Damage");
 }
예제 #10
0
    public override void BeginState()
    {
        base.BeginState();

        GetComponent <RedHatHIT>().StopAllCoroutines();

        if (_manager.dashEffect != null)
        {
            _manager.dashEffect.SetActive(false);
            _manager.dashEffect = null;
        }
        StartCoroutine(GameLib.BlinkOff(_manager.materialList));
        GameLib.DissoveActive(_manager.materialList, true);
        StartCoroutine(GameLib.Dissolving(_manager.materialList));

        var voice = _manager.sound.monsterVoice;

        voice.PlayMonsterVoice(this.gameObject, voice.redhatDeadVoice);

        useGravity = false;
        _manager.CC.detectCollisions  = false;
        _manager.mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
        _manager.agent.speed          = 0;
        _manager.agent.angularSpeed   = 0;
    }
예제 #11
0
    protected override void Update()
    {
        base.Update();

        playerTrans = new Vector3(_manager.PlayerCapsule.transform.position.x, transform.position.y, _manager.PlayerCapsule.transform.position.z);

        DahsCheck();

        this.transform.localRotation = Quaternion.RotateTowards(this.transform.rotation,
                                                                Quaternion.LookRotation(PlayerFSMManager.GetLookTargetPos(transform) - transform.position,
                                                                                        Vector3.up), 2f * Time.deltaTime);

        if (GameLib.DistanceToCharacter(_manager.CC, _manager.priorityTarget) < _manager.Stat.AttackRange)
        {
            _manager.SetState(RedHatState.ATTACK);
        }

        else
        {
            _manager.transform.LookAt(PlayerFSMManager.GetLookTargetPos(this.transform));

            _manager.agent.destination = playerTrans;

            if (_manager.agent.remainingDistance >= 1.5f)
            {
                _manager.agent.isStopped = false;
            }
            else
            {
                _manager.agent.isStopped = true;
            }
        }
    }
예제 #12
0
    protected override void Update()
    {
        _Time += Time.deltaTime;

        float maxDistance = _DashTime * _manager.Stat.statData._DashSpeed;

        if (_Time < _DashReadyTime)
        {
        }

        else if (_Time < _DashReadyTime + _DashTime)
        {
            _manager.isNotChangeState = true;
            transform.position        = Vector3.MoveTowards(this.transform.position, dashEndPos,
                                                            _manager.Stat.statData._DashSpeed * Time.deltaTime);
        }

        else if (_Time < _DashReadyTime + _DashTime + _DashAfterDelay)
        {
            _manager.CC.detectCollisions = true;
        }

        else if (_Time > _DashReadyTime + _DashTime + _DashAfterDelay)
        {
            if (GameLib.DistanceToCharacter(_manager.CC, _manager.priorityTarget) <= _manager.Stat.AttackRange)
            {
                _manager.SetState(RedHatState.ATTACK);
            }
            else
            {
                _manager.SetState(RedHatState.CHASE);
            }
        }
    }
예제 #13
0
    public override void BeginState()
    {
        base.BeginState();

        Vector3 direction = (_manager.PlayerCapsule.transform.forward).normalized;

        direction.y = 0;

        if (_manager.CurrentAttackType != AttackType.SKILL2)
        {
            try
            {
                StartCoroutine(GameLib.Blinking(_manager.materialList, Color.white));
            }
            catch
            {
            }
        }

        if (!PlayerFSMManager.Instance.isSkill4)
        {
            var voice = _manager.sound.monsterVoice;
            voice.PlayMonsterVoice(this.gameObject, voice.redhatDamegedVoice);
        }

        _manager.agent.acceleration = 0;
        _manager.agent.velocity     = Vector3.zero;
    }
예제 #14
0
    private void OnTriggerEnter(Collider other)
    {
        if (_Dameged)
        {
            return;
        }

        if (other.transform.tag == "Player")
        {
            if (_Type == MacBulletType.Normal)
            {
                float damage = mac.Stat.damageCoefiiecient[0] * 0.01f *
                               (mac.Stat.Str + mac.Stat.addStrPerRound * GameStatus.Instance.StageLevel)
                               - PlayerFSMManager.Instance.Stat.Defense;

                var hitTarget = GameLib.SimpleDamageProcess(this.transform, 0.01f, "Player", mac.Stat, damage);
                Invoke("AttackSupport", 0.5f);
                _Dameged = true;

                var sound = mac.sound.monsterSFX;
                sound.PlayMonsterSFX(this.gameObject, sound.macSmallBallHit);

                if (!_Destroy)
                {
                    _MoveEffect.SetActive(false);
                    _DestroyEffect.SetActive(true);

                    PlayEffect(_DestroyEffectParticles);
                    _Destroy = true;
                }
            }
            if (_Type == MacBulletType.Skill)
            {
                float damage = mac.Stat.damageCoefiiecient[1] * 0.01f *
                               (mac.Stat.Str + mac.Stat.addStrPerRound * GameStatus.Instance.StageLevel)
                               - PlayerFSMManager.Instance.Stat.Defense;

                var hitTarget = GameLib.SimpleDamageProcess(this.transform, 0.01f, "Player", mac.Stat, damage);
                Invoke("AttackSupport", 0.5f);
                _Dameged = true;
            }
        }

        if (other.transform.tag == "DreamPillar")
        {
            _Dameged = true;

            if (!_Destroy)
            {
                _MoveEffect.SetActive(false);
                _DestroyEffect.SetActive(true);

                PlayEffect(_DestroyEffectParticles);
                _Destroy = true;
            }
        }
    }
예제 #15
0
    void Update()
    {
        GameLib.JJRotate(transform, manager.PlayerCc.transform.position, manager.stat);

        if (Vector3.Distance(transform.position, manager.PlayerCc.transform.position) >= manager.stat.slimeRange)
        {
            manager.SetState(SlimeState.CHASE);
            return;
        }
    }
예제 #16
0
 void Update()
 {
     if (Vector3.Distance(transform.position, manager.target.position)
         > manager.stat.attackRange)
     {
         manager.SetState(PlayerState.CHASE);
         return;
     }
     GameLib.JJRotate(transform, manager.target.position, manager.stat);
 }
예제 #17
0
    private void Update()
    {
        GameLib.Log(this, "GoblinIDLE");
        time += Time.deltaTime;

        if (time > idleTime)
        {
            _manager.SetState(MonsterStates.Patrol);
        }
    }
예제 #18
0
 private void Update()
 {
     GameLib.Log(this, "MonsterAttack");
     if ((Vector3.Distance(_manager.playerTran.position, transform.position) >= _manager.MonsterState.AttackRange))
     {
         _manager.SetState(MonsterStates.Chase);
         return;
     }
     transform.LookAt(_manager.playerTran);
 }
예제 #19
0
    public void AttackCheck()
    {
        var hitTarget = GameLib.SimpleDamageProcess(transform, _manager.Stat.AttackRange,
                                                    "Monster", _manager.Stat);

        if (hitTarget != null)
        {
            _manager._lastAttack = hitTarget;
        }
    }
예제 #20
0
    //캐릭터주변블러 = 맞았을때? 공격할때? 스킬쓸떄? 연구해야징
    private void OnTriggerEnter(Collider other)
    {
        if (_Dameged)
        {
            return;
        }
        if (redHat.CurrentState == RedHatState.ATTACK)
        {
            if (other.transform.tag == "Player")
            {
                float damage = redHat.Stat.damageCoefiiecient[0] * 0.01f *
                               (redHat.Stat.Str + redHat.Stat.addStrPerRound * GameStatus.Instance.StageLevel)
                               - PlayerFSMManager.Instance.Stat.Defense;

                Debug.Log(damage);

                var hitTarget = GameLib.SimpleDamageProcess(
                    this.transform, 1f, "Player", redHat.Stat, MonsterType.RedHat,
                    damage);

                Transform effectTransform =
                    MonsterEffects.Instance.redHatAttackEffect.
                    ItemSetActive(PlayerFSMManager.Instance.Anim.transform, "Effect");

                var sound = redHat.sound.monsterSFX;
                sound.PlayMonsterSFX(hitTarget.gameObject, sound.redhatAttackHit);

                effectTransform.rotation = redHat.transform.rotation;

                Invoke("AttackSupport", 0.5f);
                _Dameged = true;
            }
        }
        else if (redHat.CurrentState == RedHatState.DASH)
        {
            if (other.transform.tag == "Player")
            {
                float damage = redHat.Stat.damageCoefiiecient[1] * 0.01f *
                               (redHat.Stat.Str + redHat.Stat.addStrPerRound * GameStatus.Instance.StageLevel)
                               - PlayerFSMManager.Instance.Stat.Defense;

                var hitTarget = GameLib.SimpleDamageProcess(this.transform, 1f, "Player", redHat.Stat, damage);

                Transform effectTransform =
                    MonsterEffects.Instance.redHatSkillEffect1.
                    ItemSetActive(PlayerFSMManager.Instance.Anim.transform, "Effect");

                var sound = redHat.sound.monsterSFX;
                sound.PlayMonsterSFX(hitTarget.gameObject, sound.redhatDashHit);

                Invoke("AttackSupport", 0.5f);
                _Dameged = true;
            }
        }
    }
예제 #21
0
    void Update()
    {
        GameLib.JJMove(manager.cc, manager.target, manager.stat);

        Vector3 diff = manager.target.position - transform.position;

        diff.y = 0.0f;
        if (diff.magnitude < manager.stat.attackRange)
        {
            manager.SetState(PlayerState.ATTACK);
        }
    }
예제 #22
0
    public override void EndState()
    {
        base.EndState();

        useGravity = true;
        _manager.CC.detectCollisions = true;
        _time = 0;

        GetComponent <TiberDEAD>().StopAllCoroutines();
        GameLib.DissoveActive(_manager.materialList, false);
        MonsterPoolManager._Instance._Tiber.ItemReturnPool(gameObject, MonsterType.Tiber);
    }
예제 #23
0
    // Update is called once per frame
    // A-B=AB>
    void Update()
    {
        Debug.Log("RUN");
        GameLib.JJMove(manager.cc, manager.marker, manager.stat);
        Vector3 diff = manager.marker.position - transform.position;

        diff.y = 0.0f;
        if (diff.magnitude < 0.1f)
        {
            manager.SetState(PlayerState.IDLE);
        }
    }
예제 #24
0
    public void Update()
    {
        //Plane[] ps = GeometryUtility.CalculateFrustumPlanes(_manager.sight);

        //bool _isDestected = GeometryUtility.TestPlanesAABB(ps, _manager._testTarget.bounds);
        //if (_isDestected)
        //{
        //    Debug.Log(_manager._testTarget.bounds);
        //   // GameLib.Log()
        //}



        Vector3 dest = _manager.Marker.transform.position;

        dest.y = 0.0f;
        Vector3 playerPos = transform.position;

        playerPos.y = 0.0f;

        if (Vector3.Distance(dest, playerPos) < Mathf.Epsilon)
        {
            _manager.SetState(PlayerState.IDLE);
            return;
        }



        GameLib.Log(this, "RUN");
        //_marker.Maerker.postion;

        // 이동.
        Vector3 deltaMove = Vector3.zero;

        Vector3 moveDir = _manager.Marker.position - transform.position;

        moveDir.y = 0.0f;

        Vector3 nextMove = Vector3.MoveTowards(transform.position, _manager.Marker.position, _manager.playerState.moveSpeed * Time.deltaTime);

        deltaMove  = nextMove - transform.position;
        deltaMove += Physics.gravity * Time.deltaTime;
        _manager.CC.Move(deltaMove);

        // 방향 전환
        if (moveDir != Vector3.zero)
        {
            transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(moveDir), _manager.playerState.turnSpeed * Time.deltaTime);
        }

        // Quaternion playerRotation = Quaternion.LookRotation(Vector3 rot(transform.rotation, 0.0f, 0.0f));
    }
예제 #25
0
 private void Update()
 {
     if (!GameLib.DetectCharacter(_manager.Sight, _manager.PlayerCC))
     {
         _manager.SetState(NPCState.Stand);
         return;
     }
     time += Time.deltaTime;
     if (time > SkillTime)
     {
         _manager.SetState(NPCState.Attack);
     }
 }
예제 #26
0
        private AgentAction ShakeOut(Map map)
        {
            var adjacent = map.GetAdjacentWalkableTiles(playerTile);

            if (adjacent.Count == 0)
            {
                return(AgentAction.BombDown);
            }
            Random random        = new Random();
            var    randomAdjTile = adjacent.OrderBy(x => random.Next()).First();

            return(GameLib.DirectionTo(playerTile, randomAdjTile));
        }
예제 #27
0
    public void AttackCheck()
    {
        if (_manager.CurrntState != PlayerState.Attack)
        {
            return;
        }
        GameLib.Log(this, "call Attack Check");

        // 타겟에 대한 스테이트를 가져온다.
        CharacterState targetState = _manager.target.GetComponent <CharacterState>();

        playerState.ProcessDamage(_manager.playerState, targetState);
    }
예제 #28
0
 private void Update()
 {
     if (GameLib.DetectCharacter(_manager.Sight, _manager.PlayerCC))
     {
         _manager.SetState(GoblinState.CHASE);
         return;
     }
     time += Time.deltaTime;
     if (time > idleTime)
     {
         _manager.SetState(GoblinState.PATROL);
     }
 }
예제 #29
0
 public void SetState(PlayerState newState)
 {
     if (_isinit)
     {
         _state[_currentState].enabled = false;
         _state[_currentState].EndState();
         GameLib.Log(this, "False");
     }
     _currentState = newState;
     _state[_currentState].BeginState();
     _state[_currentState].enabled = true; // 지정한 친구만 로그를 보여준다.
     _anim.SetInteger("CurrentState", (int)_currentState);
 }
예제 #30
0
 private void Update()
 {
     if (!GameLib.DetectCharacter2(_manager.Sight, _manager.PlayerCS) && isRecognition)
     {
         //인식시간보다 덜 인식했다.
         if (_time < ReconCapture)
         {
             _manager.SetState(MP01State.ALERT);
             //_manager.SightLight[1].SetActive(true);
             return;
         }
     }
 }
예제 #31
0
 public LinkedList<Actor> GetActorsByType(GameLib.PhysicsObject.PhysicsType type)
 {
     LinkedList<Actor> temp = new LinkedList<Actor>();
     foreach (Actor actor in Actors) {
         if (actor.PhysicsObject.physicsType.Equals(type) && !actor.IsShutdown) {
             temp.AddLast(actor);
         }
     }
     return temp;
 }
예제 #32
0
 private void onPlayerLostGame(GameLib.Scene sender)
 {
     MessageBox.Show("Unfortunately you have lost the game! Press OK to restart the game.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
     game.Restart();
     UpdateForm();
 }