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); } }
private void EvaluateAndTransitionToConstructionFinishedState(Health.Update update) { if (update.currentHealth.Value == SimulationSettings.BarracksMaxHealth) { Owner.TriggerTransition(BarracksState.CONSTRUCTION_FINISHED); } }
private void OnHealthUpdated(Health.Update update) { if (update.CanBeChanged.HasValue && update.CurrentHealth.Value <= 0) { Owner.TriggerTransition(TreeFSMState.BURNT); } }
private void EvaluateAndTransitionToUnderConstructionState(Health.Update update) { if (update.currentHealth.Value <= 0) { Owner.TriggerTransition(BarracksState.UNDER_CONSTRUCTION); } }
private void OnHealthUpdated(Health.Update update) { if (update.currentHealth.HasValue) { UpdateHQFlammablility(update.currentHealth.Value); } }
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); }
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)); } }
private void OnHealthUpdated(Health.Update update) { if (update.currentHealth.HasValue && update.currentHealth.Value <= 0) { Owner.TriggerTransition(TreeFSMState.STUMP); } }
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); } } }
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); } }
private void DieUponHealthDepletion(Health.Update update) { if (update.currentHealth.Value <= 0) { Die(); StartCoroutine(RespawnDelayed(SimulationSettings.PlayerRespawnDelay)); } }
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); } }
private void TakeDamageFromFire() { var update = new Health.Update() { CurrentHealth = health.Data.CurrentHealth - SimulationSettings.FireDamagePerTick }; health.SendUpdate(update); }
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); } }
public void Die() { var update2 = new Health.Update { CurrentHealth = 0, }; health.SendUpdate(update2); stateMachine.TriggerTransition(DinoAiFSMState.StateEnum.DEAD, new EntityId(), DinoStateMachine.InvalidPosition); }
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); } }
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; }
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); } }
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); }
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); } } }