Пример #1
0
    private void Start()
    {
        name         = "Zombie";
        rnd          = new System.Random(posX * posY);
        HealthPoints = 3;
        AttackValue  = 1;
        enemyHealthRepresentation.maxHealth = HealthPoints;
        int random = rnd.Next(2);

        if (random == 0)
        {
            directionHorizontal = true;
        }
        else
        {
            directionHorizontal = false;
        }
        if (rnd.Next(2) == 0)
        {
            movementState = new MoveDownState();
        }
        else
        {
            movementState = new MoveUpState();
        }
    }
Пример #2
0
    private void DoMovingToBarricades(ZombieAction lastAction)
    {
        _moveState = ZombieMoveState.Moving;
        OnStateChanged();
        _rigidBody.constraints = DefaultConstraints;
        _animationQueue.Clear();

        if (lastAction != ZombieAction.Rotating)
        {
            AnimationObject animObj = null;
            if (_model.Type == ZombieType.Acid || _model.Type == ZombieType.Fire)
            {
                animObj = _animationObjPool.GetZombieAnimation(AnimationObjectType.ZombieWalk, new List <object> {
                    false
                });
            }
            else
            {
                animObj = _animationObjPool.GetZombieAnimation(AnimationObjectType.ZombieWalk, new List <object> {
                    _model.IsBoss
                });
            }

            _animationQueue.Add(animObj);
            _animationQueue.PlayNext();
        }
    }
        public Zombie(int id, int posX, int posY, Map mp) : base(id, posX, posY, mp)
        {
            name   = "Zombie";
            rnd    = new Random(posX * posY);
            hp     = 3;
            attack = 1;

            int random = rnd.Next(2);

            if (random == 0)
            {
                directionHorizontal = true;
            }
            else
            {
                directionHorizontal = false;
            }
            if (rnd.Next(2) == 0)
            {
                movementState = new MoveDownState();
            }
            else
            {
                movementState = new MoveUpState();
            }
        }
Пример #4
0
 private void Awake()
 {
     IgnoreRaycastLayer = LayerMask.NameToLayer("Ignore Raycast");
     _target            = _mapData.ZombieTarget;
     _instanceId        = gameObject.GetInstanceID();
     _moveState         = ZombieMoveState.Moving;
     _lifeState         = ZombieLifeState.Alive;
     _lastForceType     = ForceType.Unknown;
     _stateTimer        = 0;
 }
Пример #5
0
    public void OnPhysicsForceTimer()
    {
        _stateTimer++;
        bool afterJump = _lastForceType == ForceType.AfterFlyJump;
        bool exploFly  = _lastForceType == ForceType.ExplosionFly;

        bool jumping = _moveState == ZombieMoveState.Jumping;
        bool laying  = _moveState == ZombieMoveState.Laying;
        bool flying  = _moveState == ZombieMoveState.Flying;
        bool physics = _moveState == ZombieMoveState.Physics;

        bool alive = _lifeState == ZombieLifeState.Alive;

        if (physics && alive)
        {
            if (_stateTimer > 1)
            {
                _moveState = ZombieMoveState.Moving;
            }
        }

        if (_stateTimer >= _config.physics.timeToForcePhysics)
        {
            if (alive)
            {
                if ((jumping || laying) && afterJump)
                {
                    _actionList.Clear();
                    _actionList.Add(ZombieAction.GettingUp);
                    PlayNextAction();
                }
            }
            else
            {
                if (_collider.enabled && _rigidBody.useGravity)
                {
                    _actionList.Clear();
                    _collider.enabled      = false;
                    _rigidBody.useGravity  = false;
                    _rigidBody.constraints = RigidbodyConstraints.FreezeAll;
                    _actionList.Add(ZombieAction.ReturnToPool);
                    PlayNextAction();
                }
                else if (flying && exploFly)
                {
                    _actionList.Clear();
                    _rigidBody.constraints = RigidbodyConstraints.FreezeAll;
                    _actionList.Add(ZombieAction.ReturnToPool);
                    PlayNextAction();
                }
            }
        }
    }
Пример #6
0
    private void DoKnockback(DamageInfo damageInfo)
    {
        OnStateChanged();
        _moveState = ZombieMoveState.Physics;
        Vector3 charPos = damageInfo.CharPosition;

        charPos.y = _rigidBody.position.y;
        Vector3 knockDirection = _rigidBody.position - charPos;

        knockDirection.Normalize();
        knockDirection *= _config.physics.knockbackImpulse;
        _rigidBody.AddForce(knockDirection, ForceMode.Impulse);
    }
Пример #7
0
    private void DoGettingUp()
    {
        _lastForceType = ForceType.Unknown;
        _moveState     = ZombieMoveState.Laying;
        OnStateChanged();
//        AnimationObject animObj = _animationObjPool.GetZombieAfterJump(_transform);

        List <object> parameters = new List <object>();

        parameters.Add(_transform);
        AnimationObject animObj = _animationObjPool.GetZombieAnimation(AnimationObjectType.ZombieAfterJump, parameters);

        _animationQueue.Add(animObj);
        _animationQueue.PlayNext();
    }
Пример #8
0
    public void Reset()
    {
        _stateTimer            = 0;
        _rigidBody.useGravity  = true;
        _moveState             = ZombieMoveState.Moving;
        _lifeState             = ZombieLifeState.Alive;
        _rigidBody.constraints = DefaultConstraints;
        _transform.rotation    = Quaternion.identity;
        _target        = _mapData.ZombieTarget;
        _currentAction = ZombieAction.None;

        if (_animationQueue != null)
        {
            _animationQueue.Reset();
        }
    }
Пример #9
0
    private void DoJumping()
    {
        _lastForceType = ForceType.AfterFlyJump;
        _moveState     = ZombieMoveState.Jumping;
        OnStateChanged();
        _rigidBody.constraints = RigidbodyConstraints.None | RigidbodyConstraints.FreezeRotation;
        Vector3 rotation = new Vector3(75, _transform.rotation.y, _transform.rotation.z);

        Vector3 force = new Vector3(0, _config.physics.afterFlyJumpForce, 0);

        _rigidBody.AddForce(force, ForceMode.Impulse);
        _animationQueue.Clear();

        Sequence seq = DOTween.Sequence();

        seq.Append(_transform.DORotate(rotation, _config.physics.afterFlyJumpRotationLength));
//        _animationQueue.Add(_animationObjPool.GetZombieJump(seq));

        List <object> parameters = new List <object>();

        parameters.Add(seq);
        _animationQueue.Add(_animationObjPool.GetZombieAnimation(AnimationObjectType.ZombieJump, parameters));
        _animationQueue.PlayNext();
    }
Пример #10
0
    private void DoTakingOff()
    {
        _animationQueue.Clear();
        _view.ShowShadow(_model.IsBoss, false);
        if (_lastForceType == ForceType.ExplosionFly)
        {
            _rigidBody.maxAngularVelocity = DefaultMaxAngularVelocity; // default
            _moveState             = ZombieMoveState.Flying;
            _rigidBody.constraints = RigidbodyConstraints.None;
            Vector3 torque = new Vector3(UnityEngine.Random.Range(-1000f, 1000f), UnityEngine.Random.Range(-1000f, 1000f), UnityEngine.Random.Range(-1000f, 1000f));
            _rigidBody.AddTorque(torque);
        }
        else if (_lastForceType == ForceType.Salto)
        {
            _rigidBody.maxAngularVelocity = SaltoMaxAngularVelocity;
            _moveState             = ZombieMoveState.Flying;
            _rigidBody.constraints = RigidbodyConstraints.None;
            _rigidBody.AddTorque(_saltoAxis * _config.physics.saltoRotation, ForceMode.VelocityChange);
        }

        OnStateChanged();
        _actionList.Add(ZombieAction.InFly);
        PlayNextAction();
    }