private void DieUponHealthDepletion(Health.Update update)
 {
     if (npcDeathActive && update.currentHealth.Value <= 0)
     {
         SpatialOS.Commands.DeleteEntity(fSimAuthorityCheck, gameObject.EntityId(), result => { });
     }
 }
        private void OnHarvest(Harvestable.Harvest.ReceivedRequest request)
        {
            var   payload   = request.Payload;
            var   nowHealth = health.Data.CurrentHealth;
            float resTaken  = 0;

            if (nowHealth > payload.ResourcesNeed)
            {
                resTaken   = payload.ResourcesNeed;
                nowHealth -= payload.ResourcesNeed;
            }
            else
            {
                resTaken  = nowHealth;
                nowHealth = 0;
            }

            var update = new HarvestResponse()
            {
                ResourcesTaken = resTaken
            };

            cmdReceiver.SendHarvestResponse(request.RequestId, update);
            //Debug.Log("OnHarvest ResourceNeed<"+payload.ResourcesNeed+"> Harvester<"+payload.Harvester.Id+">");

            var update2 = new Health.Update
            {
                CurrentHealth = nowHealth
            };

            health.SendUpdate(update2);
        }
 private void HealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue && update.currentHealth.Value <= 0)
     {
         PlayDeathAnimation();
     }
 }
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue)
     {
         UpdateHQHealthBar(teamAssignment.Data.teamId, update.currentHealth.Value);
     }
 }
示例#5
0
 private void EvaluateAndTransitionToConstructionFinishedState(Health.Update update)
 {
     if (update.currentHealth.Value == SimulationSettings.BarracksMaxHealth)
     {
         Owner.TriggerTransition(BarracksState.CONSTRUCTION_FINISHED);
     }
 }
示例#6
0
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.CanBeChanged.HasValue && update.CurrentHealth.Value <= 0)
     {
         Owner.TriggerTransition(TreeFSMState.BURNT);
     }
 }
示例#7
0
 private void EvaluateAndTransitionToUnderConstructionState(Health.Update update)
 {
     if (update.currentHealth.Value <= 0)
     {
         Owner.TriggerTransition(BarracksState.UNDER_CONSTRUCTION);
     }
 }
示例#8
0
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue)
     {
         UpdateHQFlammablility(update.currentHealth.Value);
     }
 }
示例#9
0
    public void GrowUp()
    {
        if (age.Data.Age < age.Data.GrowUpAge)
        {
            return;
        }
        float ratioChild = 1.0f;

        // 恢复小恐龙的粮食,攻击力,生命消耗等属性,变成成人的
        float curFood = attrsWriter.Data.CurrentFood;
        float maxFood = attrsWriter.Data.MaxFood;
        var   update  = new DinoAttrs.Update
        {
            CurrentFood = ScriptableAnimalStats.foodStorage * curFood / maxFood, // 当前的粮食按照比例提升
            MaxFood     = ScriptableAnimalStats.foodStorage,                     // 恢复成人数值
            Power       = ScriptableAnimalStats.power,                           // 恢复成人数值
            LiveCost    = ScriptableAnimalStats.liveCost,                        // 恢复成人数值
        };

        attrsWriter.SendUpdate(update);

        // 恢复小恐龙的生命值,变成成人的
        float curHealth = health.Data.CurrentHealth;
        float maxHealth = health.Data.MaxHealth;
        var   update3   = new Health.Update
        {
            CurrentHealth = ScriptableAnimalStats.toughness * curHealth / maxHealth, // 当前的生命按照比例提升
            CanBeChanged  = true,
            MaxHealth     = ScriptableAnimalStats.toughness
        };

        health.SendUpdate(update3);
    }
示例#10
0
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue)
     {
         DieUponHealthDepletion(update);
     }
 }
 private void EvaluateTransitionToStockpileUnderConstruction(Health.Update update)
 {
     if (update.currentHealth.Value > 0 && update.currentHealth.Value < SimulationSettings.BarracksMaxHealth)
     {
         flammable.Send(new Flammable.Update().SetCanBeIgnited(true));
     }
 }
示例#12
0
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue && update.currentHealth.Value <= 0)
     {
         Owner.TriggerTransition(TreeFSMState.STUMP);
     }
 }
示例#13
0
    void OnTriggerStay(Collider other)
    {
        if (other != null && other.gameObject.tag == "Player" && other.gameObject.GetComponent <PlayerMover>().space&& time <= Time.time && other is CapsuleCollider)
        {
            float newHealth = HealthWriter.Data.health - 25f;
            time = Time.time + 1;

            if (newHealth <= 0)
            {
                var update = new Health.Update();
                update.SetHealth(100f);
                HealthWriter.Send(update);
                other.gameObject.GetComponent <ScoresPlayer> ().addScores(25f);
                GetComponent <ScoresPlayer> ().reset();
                rigidbody.MovePosition(new Vector3(0f, 1f, 0f));
                var pos            = rigidbody.position;
                var positionUpdate = new Position.Update()
                                     .SetCoords(new Coordinates(pos.x, pos.y, pos.z));
                PositionWriter.Send(positionUpdate);
                var update2 = new Death.Update();
                update2.SetDeath(true);
                DeathWriter.Send(update2);
            }
            else
            {
                var update = new Health.Update();
                update.SetHealth(newHealth);
                HealthWriter.Send(update);
                other.gameObject.GetComponent <ScoresPlayer> ().addScores(25f);
            }
        }
    }
示例#14
0
 private void SendHealthUpdate(int value)
 {
     Health.Update update = new Health.Update
     {
         Health = value
     };
     healthWriter.SendUpdate(update);
 }
 private void EvaluateTransitionToBarracks(Health.Update update)
 {
     if (barracksInfo.Data.barracksState == BarracksState.UNDER_CONSTRUCTION && update.currentHealth.Value == SimulationSettings.BarracksMaxHealth)
     {
         flammable.Send(new Flammable.Update().SetCanBeIgnited(true));
         TransitionToBarracksState(BarracksState.CONSTRUCTION_FINISHED);
     }
 }
 private void EvaluateTransitionToUntouchedStockpile(Health.Update update)
 {
     if (update.currentHealth.Value <= 0)
     {
         SpatialOS.Commands.SendCommand(flammable, Flammable.Commands.Extinguish.Descriptor, new ExtinguishRequest(false), gameObject.EntityId(), _ => { });
         TransitionToBarracksState(BarracksState.UNDER_CONSTRUCTION);
     }
 }
示例#17
0
 private void DieUponHealthDepletion(Health.Update update)
 {
     if (update.currentHealth.Value <= 0)
     {
         Die();
         StartCoroutine(RespawnDelayed(SimulationSettings.PlayerRespawnDelay));
     }
 }
示例#18
0
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue)
     {
         Owner.EvaluateAndSetFlammability(update);
         EvaluateAndTransitionToUnderConstructionState(update);
     }
 }
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue)
     {
         healthLocalCopy = update.currentHealth.Value;
         UpdatePlayerPanelHealthBar(healthLocalCopy);
     }
 }
示例#20
0
        private void TakeDamageFromFire()
        {
            var update = new Health.Update()
            {
                CurrentHealth = health.Data.CurrentHealth - SimulationSettings.FireDamagePerTick
            };

            health.SendUpdate(update);
        }
示例#21
0
        public static void SetCanBeChanged(this HealthWriter health, bool canBeChanged)
        {
            var update = new Health.Update()
            {
                CanBeChanged = canBeChanged
            };

            health.SendUpdate(update);
        }
 private void OnHealthUpdated(Health.Update update)
 {
     if (update.currentHealth.HasValue)
     {
         EvaluateTransitionToUntouchedStockpile(update);
         EvaluateTransitionToStockpileUnderConstruction(update);
         EvaluateTransitionToBarracks(update);
     }
 }
示例#23
0
    public void Die()
    {
        var update2 = new Health.Update
        {
            CurrentHealth = 0,
        };

        health.SendUpdate(update2);

        stateMachine.TriggerTransition(DinoAiFSMState.StateEnum.DEAD, new EntityId(), DinoStateMachine.InvalidPosition);
    }
示例#24
0
 public static void SetCurrentHealth(this HealthWriter health, int newHealth)
 {
     if (health.Data.CanBeChanged)
     {
         var update = new Health.Update()
         {
             CurrentHealth = Mathf.Max(newHealth, 0)
         };
         health.SendUpdate(update);
     }
 }
示例#25
0
    public void OnAttack(DinoAiData.Attack.ReceivedRequest request)
    {
        var payload = request.Payload;

        _curHealth  = health.Data.CurrentHealth;
        _curHealth -= payload.Damage;
        if (logChanges)
        {
            Debug.Log(string.Format("{0}: Taking Damage {1} HP {2}!", gameObject.name, payload.Damage, _curHealth));
        }

        // 生命减少
        var update = new Health.Update
        {
            CurrentHealth = _curHealth
        };

        health.SendUpdate(update);
        // 把生命减少的一半变成粮食储存起来,便于死后给食肉恐龙提供食物,否则如果食肉恐龙杀死一只饥饿(Food为零)的食草恐龙以后,什么都没得吃
        _curFood = attrsWriter.Data.CurrentFood;
        float addFood = payload.Damage / 2;

        if (addFood + _curFood > attrsWriter.Data.MaxFood)
        {
            addFood = attrsWriter.Data.MaxFood - _curFood;
        }
        var update2 = new DinoAttrs.Update
        {
            CurrentFood = _curFood + addFood
        };

        attrsWriter.SendUpdate(update2);

        // 如果血不够了,立即死亡。不用等到下一个AI周期了。
        if (_curHealth <= 0)
        {
            if (IsAlive)
            {
                Die();
            }
        }
        else
        {// 挨打的一方也进入战斗状态
            DinoBehaviour attacker = null;
            if (allAnimals.TryGetValue(payload.Attacker.Id, out attacker))
            {
                if (IsAlive && stateMachine.CurrentState != DinoAiFSMState.StateEnum.ATTACK)
                {
                    stateMachine.TriggerTransition(DinoAiFSMState.StateEnum.ATTACK, payload.Attacker, attacker.transform.position);
                }
            }
        }
    }
 public void OnHealthUpdated(Health.Update update)
 {
     if (update.value.HasValue && update.value.Value <= 0)
     {
         SpatialOS.Commands.DeleteEntity(HealthWriter, gameObject.EntityId(), result => {
             if (result.StatusCode != StatusCode.Success)
             {
                 Debug.Log("failed to delete entity with error: " + result.ErrorMessage);
                 return;
             }
             Debug.Log("deleted entity: " + result.Response.Value);
         });
     }
 }
    private void OnHealthUpdate(Health.Update update)
    {
        if (!update.Health.HasValue)
        {
            return;
        }
        if (update.Health.Value <= 0)
        {
            gameObject.SetActive(false);
        }
        float fillAmount = (float)update.Health.Value / 100;

        foregroundImage.fillAmount = fillAmount;
    }
示例#28
0
        public static void AddCurrentHealthDelta(this HealthWriter health, int delta)
        {
            if (health.Data.CanBeChanged)
            {
                if (health.TryingToDecreaseHealthBelowZero(delta))
                {
                    return;
                }

                var update = new Health.Update()
                {
                    CurrentHealth = Mathf.Max(health.Data.CurrentHealth + delta, 0)
                };
                health.SendUpdate(update);
            }
        }
示例#29
0
        void OnHealthChanged(Health.Update update)
        {
            float currentHealth = CurrentHealth;

            if (update.CurrentHealth.HasValue)
            {
                currentHealth = update.CurrentHealth.Value;
            }
            float maxHealth = MaxHealth;

            if (update.MaxHealth.HasValue)
            {
                maxHealth = update.MaxHealth.Value;
            }
            _healthStr = string.Format(currentHealth + "/" + maxHealth);
        }
示例#30
0
 private void DieUponHealthDepletion(Health.Update update)
 {
     if (npcDeathActive && update.CurrentHealth.Value <= 0)
     {
         var linkedComponent = gameObject.GetComponent <LinkedEntityComponent>(); // 终于找到一个gameObject和EntityId挂钩的地方
         if (linkedComponent != null)
         {
             var request = new WorldCommands.DeleteEntity.Request
             {
                 EntityId      = linkedComponent.EntityId,
                 TimeoutMillis = 1
             };
             worldSender.SendDeleteEntityCommand(request);
         }
     }
 }