示例#1
0
 public void SetAttackedPassenger(MovableCharacterSM character)
 {
     if (_attackedPassenger == null)
     {
         _attackedPassenger = character;
     }
 }
示例#2
0
 public virtual void AddDamage(MovableCharacterSM attacker)
 {
     AttackedStartTime = Time.time;
     ActivateState((int)MovableCharacterStates.Attacked);
     if (attacker.AttackStrength < 0)
         MonobehaviorHandler.GetMonobeharior().GetObject<AudioPlayer>("AudioPlayer").PlayAudioById("heal");
     if (attacker.AttackStrength < 0 && Hp >= InitialLifes)
     {
         Hp = InitialLifes;
         return;
     }
     if (attacker.AttackStrength > 0)
         MonobehaviorHandler.GetMonobeharior().GetObject<AudioPlayer>("AudioPlayer").PlayAudioById("lowkick");
     float currentStrength = attacker.AttackStrength*Randomizer.GetNormalizedRandom();
     AttackTarget = attacker;
     AddDamageValue(currentStrength);
     if (_isHalfImmortal)
     {
         if (Hp < InitialLifes/2)
         {
             Hp = InitialLifes/2;
         }
     }
     if (IsAttackListenerActivated)
     {
         TrainingHandler handler =
                 MonobehaviorHandler.GetMonobeharior().GetObject<TrainingHandler>("TrainingHandler");
         handler.SetAttackedPassenger(this);
         handler.ShowNext();
         IsAttackListenerActivated = false;
     }
 }
示例#3
0
    public void CalculateAttackReaction()
    {
        if (_attackDenyedByTraining)
        {
            return;
        }
        bool willCounterAttack = Randomizer.GetPercentageBasedBoolean((int)CounterAttackProbability);

        if (willCounterAttack)
        {
            if (AttackTarget != null)
            {
                AttackIfPossible();
            }
            else
            {
                MakeIdle();
            }
        }
        else
        {
            MovableCharacterSM pursuer = AttackTarget;
            AttackTarget = null;
            BeginEscape(pursuer);
        }
    }
示例#4
0
文件: Floor.cs 项目: Syjgin/zerotram
 public float CalculateLocalScaleForMovable(MovableCharacterSM character)
 {
     float posY = character.transform.position.y;
     posY -= _polygonCollider2D.bounds.min.y;
     float scalePercent = 1 + 0.3f*(1 - posY/_normalizedMax);
     return scalePercent;
 }
示例#5
0
    public void RegisterDeath(MovableCharacterSM obj)
    {
        if (obj is ConductorSM)
        {
            GameOver(true);
        }
        else
        {
            if (obj is PassengerSM)
            {
                var ps = obj as PassengerSM;
                if (ps.HasTicket())
                {
                    if (!ps.WasStickWhenFlyAway)
                    {
                        _killedPassengers++;
                    }
                    if (!ps.IsVisibleToHero())
                    {
                        if (_totalHares > 0)
                        {
                            _totalHares--;
                        }
                    }
                }
                else
                {
                    if (!_flyingAwayByKinds.ContainsKey(ps.GetClassName()))
                    {
                        _flyingAwayByKinds.Add(ps.GetClassName(), 1);
                    }
                    else
                    {
                        int currentValue = _flyingAwayByKinds [ps.GetClassName()];
                        _flyingAwayByKinds [ps.GetClassName()] = currentValue + 1;
                    }
                    if (_totalHares > 0)
                    {
                        _totalHares--;
                    }
                }

                _passengers.Remove(ps);
            }
            UpdateStats();
            if (_maxKilledPassengers < 0)
            {
                GameOver(false);
            }
            else
            {
                if (_passengers.Count == 0)
                {
                    MonobehaviorHandler.GetMonobeharior().GetObject <DoorsTimer>("DoorsTimer").StopNow();
                }
            }
        }
    }
示例#6
0
    public float CalculateLocalScaleForMovable(MovableCharacterSM character)
    {
        float posY = character.transform.position.y;

        posY -= _polygonCollider2D.bounds.min.y;
        float scalePercent = 1 + 0.3f * (1 - posY / _normalizedMax);

        return(scalePercent);
    }
示例#7
0
    public bool TryRunAwayFromMovable(MovableCharacterSM movable)
    {
        float currentRunAwayProbability = GetRunAwayProbabilityForClass(movable.GetClassName());

        if (Randomizer.GetPercentageBasedBoolean((int)currentRunAwayProbability))
        {
            BeginEscape(movable);
            return(true);
        }
        return(false);
    }
示例#8
0
    public bool TryAttackMovable(MovableCharacterSM movable)
    {
        if (_attackDenyedByTraining)
        {
            return(false);
        }
        float currentAttackProbability = GetAttackProbabilityForClass(movable.GetClassName());
        var   sm = movable as PassengerSM;

        if (sm != null)
        {
            if (_isPassengerAttackDenied)
            {
                return(false);
            }
            PassengerSM passenger = sm;
            if (passenger.IsOnTheBench())
            {
                currentAttackProbability *=
                    ConfigReader.GetConfig().GetField("tram").GetField("SitAggressionIncrement").n;
            }
        }
        if (Randomizer.GetPercentageBasedBoolean((int)currentAttackProbability))
        {
            if (_isConductorAttackDenied)
            {
                ConductorSM conductor = movable as ConductorSM;
                if (conductor != null)
                {
                    return(false);
                }
            }
            AttackTarget = movable;
            AttackIfPossible();
            return(true);
        }
        MakeIdle();
        return(false);
    }
示例#9
0
    public virtual void AddDamage(MovableCharacterSM attacker)
    {
        AttackedStartTime = Time.time;
        ActivateState((int)MovableCharacterStates.Attacked);
        if (attacker.AttackStrength < 0)
        {
            MonobehaviorHandler.GetMonobeharior().GetObject <AudioPlayer>("AudioPlayer").PlayAudioById("heal");
        }
        if (attacker.AttackStrength < 0 && Hp >= InitialLifes)
        {
            Hp = InitialLifes;
            return;
        }
        if (attacker.AttackStrength > 0)
        {
            MonobehaviorHandler.GetMonobeharior().GetObject <AudioPlayer>("AudioPlayer").PlayAudioById("lowkick");
        }
        float currentStrength = attacker.AttackStrength * Randomizer.GetNormalizedRandom();

        AttackTarget = attacker;
        AddDamageValue(currentStrength);
        if (_isHalfImmortal)
        {
            if (Hp < InitialLifes / 2)
            {
                Hp = InitialLifes / 2;
            }
        }
        if (IsAttackListenerActivated)
        {
            TrainingHandler handler =
                MonobehaviorHandler.GetMonobeharior().GetObject <TrainingHandler>("TrainingHandler");
            handler.SetAttackedPassenger(this);
            handler.ShowNext();
            IsAttackListenerActivated = false;
        }
    }
示例#10
0
 public void SetAttackedPassenger(MovableCharacterSM character)
 {
     if (_attackedPassenger == null)
     {
         _attackedPassenger = character;
     }
 }
示例#11
0
 public MovableCharacterState(StateMachine parent) : base(parent)
 {
     MovableCharacter = (MovableCharacterSM)parent;
 }
示例#12
0
 public void StopEscape()
 {
     _pursuer = null;
 }
示例#13
0
 public void TryAttackMovable(MovableCharacterSM movable)
 {
     if(_attackDenyedByTraining)
         return;
     float currentAttackProbability = AttackProbability;
     var sm = movable as PassengerSM;
     if (sm != null)
     {
         if(_isPassengerAttackDenied)
             return;
         PassengerSM passenger = sm;
         if (passenger.IsOnTheBench())
         {
             currentAttackProbability *=
                  ConfigReader.GetConfig().GetField("tram").GetField("SitAggressionIncrement").n;
         }
     }
     if (Randomizer.GetPercentageBasedBoolean((int)currentAttackProbability))
     {
         if (_isConductorAttackDenied)
         {
             ConductorSM conductor = movable as ConductorSM;
             if (conductor != null)
             {
                 return;
             }
         }
         AttackTarget = movable;
         AttackIfPossible();
     }
     else
     {
         MakeIdle();
     }
 }
示例#14
0
 public void BeginEscape(MovableCharacterSM pursuer)
 {
     _pursuer = pursuer;
     ActivateState((int)MovableCharacterStates.Escape);
 }
示例#15
0
 public MovableCharacterState(StateMachine parent) : base(parent)
 {
     MovableCharacter = (MovableCharacterSM) parent;
 }
示例#16
0
 public void StopEscape()
 {
     _pursuer = null;
 }
示例#17
0
 public bool TryRunAwayFromMovable(MovableCharacterSM movable)
 {
     float currentRunAwayProbability = GetRunAwayProbabilityForClass(movable.GetClassName());
     if (Randomizer.GetPercentageBasedBoolean((int)currentRunAwayProbability))
     {
         BeginEscape(movable);
         return true;
     }
     return false;
 }
示例#18
0
    public void RegisterDeath(MovableCharacterSM obj)
    {
        if (obj is ConductorSM)
        {
            GameOver(true);
        }
        else
        {
            if (obj is PassengerSM)
            {
                var ps = obj as PassengerSM;
                if (ps.HasTicket())
                {
                    if (!ps.WasStickWhenFlyAway)
                    {
                        _killedPassengers++;
                    }
                    if (!ps.IsVisibleToHero())
                    {
                        if(_totalHares > 0)
                            _totalHares--;
                    }
                }
                else
                {
                    if(!_flyingAwayByKinds.ContainsKey (ps.GetClassName ())) {
                        _flyingAwayByKinds.Add (ps.GetClassName (), 1);
                    } else {
                        int currentValue = _flyingAwayByKinds [ps.GetClassName ()];
                        _flyingAwayByKinds [ps.GetClassName ()] = currentValue + 1;
                    }
                    if(_totalHares > 0)
                        _totalHares--;
                }

                _passengers.Remove(ps);
            }
            UpdateStats();
            if (_maxKilledPassengers < 0)
            {
                GameOver(false);
            }
            else
            {
                if (_passengers.Count == 0)
                {
                    MonobehaviorHandler.GetMonobeharior().GetObject<DoorsTimer>("DoorsTimer").StopNow();
                }
            }
        }
    }
示例#19
0
 public void BeginEscape(MovableCharacterSM pursuer)
 {
     _pursuer = pursuer;
     ActivateState((int)MovableCharacterStates.Escape);
 }