예제 #1
0
    void OnAgeChanged(Age.Update update)
    {
        _age = Mathf.FloorToInt(age.Data.Age);
        if (update.Age.HasValue)
        {
            _age = Mathf.FloorToInt(update.Age.Value);
        }
        float growUpAge = age.Data.GrowUpAge;

        if (update.GrowUpAge.HasValue)
        {
            growUpAge = update.GrowUpAge.Value;
        }
        if (_age >= growUpAge)
        {
            transform.localScale = _originScale;
            return;
        }

        transform.localScale = _originScale * (SimulationSettings.NPCChildhoodMinWeekness +
                                               (_age / growUpAge) *
                                               (1 - SimulationSettings.NPCChildhoodMinWeekness));
    }
예제 #2
0
    // Start is called before the first frame update
    void Start()
    {
        allAnimals.Add(_entityId.Id, this);
        _id = _entityId.Id;
        var update = new DinoAiData.Update
        {
            CurrentAiState = aiDataReader.Data.CurrentAiState
        };

        OnAiDataChanged(update);

        var update2 = new Age.Update
        {
            Age = age.Data.Age
        };

        OnAgeChanged(update2);

        var update3 = new DinoAttrs.Update
        {
        };

        OnAttrsChanged(update3);
    }
예제 #3
0
    private bool IfShouldDie()
    {
        // No.1 如果已经死了,就啥都不干了
        if (!IsAlive)
        {
            return(true);
        }

        // No.2 恢复健康
        // BUG:如果服务器算不过来,而导致[UnityGameLogic] Worker disconnected
        // 这时候health,age等变量会被置空,从而抛出异常。这是正常现象。
        // 应该去查找为什么会与服务器断开链接,往往是因为计算量太大了,算不过来了而导致的本问题。Sep.7.2019, Liu Gang.
        _curHealth = health.Data.CurrentHealth;
        _maxHealth = health.Data.MaxHealth;
        if (_curHealth + ScriptableAnimalStats.liveCost < _maxHealth)
        {// 健康的恢复速度是粮食消耗速度的一半,不能大于或者粮食消耗的速度,否则就不会饿死了
            _curHealth += ScriptableAnimalStats.liveCost / 2;
        }

        // No.3 消耗粮食
        float cost = ScriptableAnimalStats.liveCost * _deltaTime;

        _curFood = attrsWriter.Data.CurrentFood;
        if (_curFood >= cost)
        {
            _curFood -= cost;
        }
        else
        {
            _curFood    = 0;
            _curHealth -= cost - _curFood;// 粮食不够,就消耗健康
        }
        var update = new DinoAttrs.Update
        {
            CurrentFood = _curFood,
        };

        attrsWriter.SendUpdate(update);
        var update3 = new Health.Update
        {
            CurrentHealth = _curHealth
        };

        health.SendUpdate(update3);

        // No.4 年龄增加
        float lastAge   = age.Data.Age;
        float nowAge    = age.Data.Age + _deltaTime;
        float growupAge = age.Data.GrowUpAge;

        _age = Mathf.FloorToInt(nowAge); // 仅用于显示
        var update2 = new Age.Update
        {
            Age = nowAge
        };

        age.SendUpdate(update2);

        if (_age >= growupAge && lastAge < growupAge)
        {// 成人以后,血量恢复至原始大小
            GrowUp();
        }

        // No.5 判断是否该死了
        if (_curHealth <= 0)
        {
            Die();
            return(true);
        }

        return(false);
    }