public void OnDeleteEntityResponse_should_add_received_responses_to_entity() { var entity = SetupTestEntity(); var emptyRequest = new WorldCommands.DeleteEntity.Request(); var context = "Some context"; deleteEntityStorage.CommandRequestsInFlight.Add(TestCommandRequestId, new CommandRequestStore <WorldCommands.DeleteEntity.Request>(entity, emptyRequest, context, TestCommandRequestId)); using (var wrappedOp = WorkerOpFactory.CreateDeleteEntityResponseOp(TestCommandRequestId)) { receiveSystem.OnDeleteEntityResponse(wrappedOp.Op); Assert.IsTrue(entityManager.HasComponent <WorldCommands.DeleteEntity.CommandResponses>(entity)); var responses = entityManager.GetComponentData <WorldCommands.DeleteEntity.CommandResponses>(entity); var count = 0; Assert.DoesNotThrow(() => { count = responses.Responses.Count; }); Assert.AreEqual(1, count); var response = responses.Responses[0]; Assert.AreEqual(emptyRequest, response.RequestPayload); Assert.AreEqual(context, response.Context); Assert.AreEqual(TestCommandRequestId, response.RequestId); Assert.AreEqual(wrappedOp.Op.StatusCode, response.StatusCode); Assert.AreEqual(wrappedOp.Op.Message, response.Message); Assert.AreEqual(wrappedOp.Op.EntityId, response.EntityId); } }
private void OnCollisionEnter(Collision other) { Collider[] hitColliders = Physics.OverlapSphere(transform.position, blastRadius, layerMask); if (hitColliders.Length > 0) { foreach (var v in hitColliders) { { if (v.gameObject.TryGetComponent <UpdateHealth>(out var updateHealth)) { if (updateHealth.enabled) { updateHealth.TakeCannonballDamage(GameConstants.CannonDamage); } } } } } Destroy(gameObject); if (worldCommandSender != null) { WorldCommands.DeleteEntity.Request request = new WorldCommands.DeleteEntity.Request(entityId); worldCommandSender.SendDeleteEntityCommand(request); } }
/// <summary> /// 删除一个恐龙 /// </summary> public void DestroyDino() { allAnimals.Remove(_entityId.Id); transform.parent = null; var linkentity = GetComponent <LinkedEntityComponent>(); var request = new WorldCommands.DeleteEntity.Request(linkentity.EntityId); worldCommandSender.SendDeleteEntityCommand(request); Destroy(gameObject); }
public void DestroyEgg() { allEggs.Remove(_entityId.Id); var linkentity = GetComponent <LinkedEntityComponent>(); var request = new WorldCommands.DeleteEntity.Request(linkentity.EntityId); worldCommandSender.SendDeleteEntityCommand(request); Destroy(gameObject); //Debug.Log("Server - destroy an egg:"+_entityId); }
void HandleCleanUnits() { Entities.With(group).ForEach((Entity entity, ref BaseUnitReviveTimer.Component revive, ref BaseUnitStatus.Component status, ref SpatialEntityId entityId) => { if (revive.IsStart == false) { return; } if (status.Type.BaseType() == UnitBaseType.Fixed) { return; } switch (status.State) { case UnitState.None: return; case UnitState.Alive: revive.IsStart = false; revive.RestTime = 0.0f; return; } if (revive.RestTime > 0) { revive.RestTime -= Time.deltaTime; } var id = entityId.EntityId; if (revive.RestTime < 0 && deletedIds.Contains(id) == false) { var request = new WorldCommands.DeleteEntity.Request ( id, context: new DeleteUnitContext() { entityId = id } ); this.CommandSystem.SendCommand(request); deletedIds.Add(id); } }); }
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); } } }
private void UpdateVisibility() { if (health == null) { return; } var visible = (health.Data.Health > 0); if (visible == isVisible) { return; } isVisible = visible; if (characterController) { characterController.enabled = visible; } foreach (var childRenderer in GetComponentsInChildren <Renderer>()) { if (!renderersToIgnore.Contains(childRenderer)) { childRenderer.enabled = visible; } } if (!needDestroy) { return; } if (isDestroy) { return; } //删除实体 isDestroy = true; var linkentity = GetComponent <LinkedEntityComponent>(); var request = new WorldCommands.DeleteEntity.Request(linkentity.EntityId); m_CommandSender.SendDeleteEntityCommand(request); }
public void OnDeleteEntityResponse_should_log_if_corresponding_entity_not_found() { var emptyRequest = new WorldCommands.DeleteEntity.Request(); deleteEntityStorage.CommandRequestsInFlight.Add(TestCommandRequestId, new CommandRequestStore <WorldCommands.DeleteEntity.Request>(Entity.Null, emptyRequest, null, TestCommandRequestId)); using (var wrappedOp = WorkerOpFactory.CreateDeleteEntityResponseOp(TestCommandRequestId)) { using (var expectingScope = logDispatcher.EnterExpectingScope()) { expectingScope.Expect(LogType.Log, LoggingUtils.LoggerName, "Op"); receiveSystem.OnDeleteEntityResponse(wrappedOp.Op); } } }
public void SendDeleteEntityCommand(WorldCommands.DeleteEntity.Request request, Action <WorldCommands.DeleteEntity.ReceivedResponse> callback = null) { var requestId = commandSystem.SendCommand(request, entity); if (callback == null) { return; } Action <WorldCommands.DeleteEntity.ReceivedResponse> wrappedCallback = response => { if (IsValid) { callback(response); } }; callbackSystem.RegisterCommandResponseCallback(requestId, wrappedCallback); }
public void DelExampleEntity() { //获得射线位置 var ray = shotRayProvider.GetShotRay(gunState.Data.IsAiming, camera); var linkentity = shooting.getShotEnityID(currentGun.CurrentGunSettings.ShotRange, ray); if (linkentity == null) { return; } var healthpickup = linkentity.transform.GetComponent <HealthPickupClientVisibility>(); if (healthpickup == null) { return; } var request = new WorldCommands.DeleteEntity.Request(linkentity.EntityId); m_CommandSender.SendDeleteEntityCommand(request, OnDelEntityResponse); }
public void delHealthPickEntity(EntityId id) { var request = new WorldCommands.DeleteEntity.Request(id); m_CommandSender.SendDeleteEntityCommand(request, OnDelEntityResponse); }
public void AddRequest(WorldCommands.DeleteEntity.Request request, Entity sendingEntity, CommandRequestId requestId) { deleteEntityResponses.Add( new CommandRequestWithMetaData <WorldCommands.DeleteEntity.Request>(request, sendingEntity, requestId)); }