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(); } }
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(); } }
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; }
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(); } } } }
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); }
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(); }
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(); } }
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(); }
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(); }