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);
            }
        }
示例#2
0
    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);
        }
    }
示例#3
0
    /// <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);
    }
示例#4
0
    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);
                }
            });
        }
示例#6
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);
         }
     }
 }
示例#7
0
        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);
                }
            }
        }
示例#9
0
        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));
 }