Ejemplo n.º 1
0
        protected override void OnUpdate()
        {
            Entities.WithStructuralChanges().
            WithAll <Character, Despawn>().
            ForEach((Entity entity,
                     in SlotPredictedState slotState,
                     in TransformPredictedState transformState,
                     in VelocityPredictedState velocityState) =>
            {
                if (slotState.FilledIn == Entity.Null)
                {
                    return;
                }

                var pickupedEntity = slotState.FilledIn;

                var ownerSlot = EntityManager.GetComponentData <SlotSetting>(entity);
                var offset    = EntityManager.GetComponentData <OffsetSetting>(pickupedEntity);

                ItemAttachUtilities.ItemDetachFromOwner(EntityManager,
                                                        pickupedEntity,
                                                        entity,
                                                        transformState.Position + math.mul(transformState.Rotation, ownerSlot.Pos + offset.Pos),
                                                        transformState.Rotation,
                                                        velocityState.Linear);
            }).Run();
Ejemplo n.º 2
0
        protected override void OnUpdate()
        {
            Entities.WithAll <Item>()
            .WithStructuralChanges()
            .ForEach((Entity entity,
                      in OwnerPredictedState itemState,
                      in TriggerPredictedState triggerState,
                      in VelocityPredictedState velocityState) =>
            {
                if (itemState.Owner != Entity.Null)
                {
                    return;
                }

                if (velocityState.MotionType != MotionType.Dynamic)
                {
                    return;
                }

                if (triggerState.TriggeredEntity == Entity.Null)
                {
                    return;
                }

                var triggeredEntity = triggerState.TriggeredEntity;
                if (!EntityManager.HasComponent <TriggeredSetting>(triggeredEntity))
                {
                    return;
                }

                if (!EntityManager.HasComponent <Table>(triggeredEntity))
                {
                    return;
                }

                var slot = EntityManager.GetComponentData <SlotPredictedState>(triggeredEntity);
                if (slot.FilledIn == Entity.Null)
                {
                    ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                          entity, triggeredEntity, Entity.Null);
                }
                else
                {
                    if (!HasComponent <Plate>(slot.FilledIn))
                    {
                        return;
                    }

                    //食物不能装盘返回
                    if (!HasComponent <CanDishOut>(entity))
                    {
                        return;
                    }
                    characterDishOutSystem.DishOut(slot.FilledIn,
                                                   entity, Entity.Null, quaternion.identity);
                }
            }).Run();
        protected override void OnUpdate()
        {
            Entities
            .WithAll <ServerEntity>()
            .WithStructuralChanges()
            .ForEach((Entity entity,
                      ref TriggerPredictedState triggerState,
                      in SlotPredictedState slotState,
                      in UserCommand command,
                      in TransformPredictedState transformState,
                      in VelocityPredictedState velocityState) =>
            {
                if (!command.Buttons.IsSet(UserCommand.Button.Button1))
                {
                    return;
                }

                var worldTick = GetSingleton <WorldTime>().Tick;
                //   FSLog.Info($"CharacterPickupGroundSystem:{pickupState.PickupedEntity},{triggerState.TriggeredEntity}");

                //pickup item
                var pickupedEntity  = slotState.FilledIn;
                var triggeredEntity = triggerState.TriggeredEntity;
                if (pickupedEntity == Entity.Null && triggeredEntity != Entity.Null)
                {
                    if (!EntityManager.HasComponent <Item>(triggeredEntity))
                    {
                        return;
                    }
                    FSLog.Info($"PickUpItem,command ,triggerState.TriggeredEntity:{triggeredEntity},worldTick:{worldTick}");

                    ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                          triggeredEntity, entity, Entity.Null);

                    triggerState.TriggeredEntity = Entity.Null;
                }
                //putdown item
                else if (pickupedEntity != Entity.Null && triggeredEntity == Entity.Null)
                {
                    FSLog.Info(
                        $"PutDownItem,tick:{command.RenderTick},worldTick:{worldTick},velocityState.Linear:{velocityState.Linear}");
                    var ownerSlot = EntityManager.GetComponentData <SlotSetting>(entity);
                    //  var offset = EntityManager.GetComponentData<OffsetSetting>(pickupedEntity);

                    ItemAttachUtilities.ItemDetachFromOwner(EntityManager,
                                                            pickupedEntity,
                                                            entity,
                                                            transformState.Position + math.mul(transformState.Rotation, ownerSlot.Pos),
                                                            transformState.Rotation,
                                                            velocityState.Linear);
                }
            }).Run();
        protected override void OnUpdate()
        {
            Entities
            .WithAll <ServerEntity>()
            .WithName("CharacterPickupSink")
            .WithStructuralChanges()
            .ForEach((Entity characterEntity,
                      in TriggerPredictedState triggerState,
                      in SlotPredictedState slotState,
                      in UserCommand command) =>
            {
                //未按键返回
                if (!command.Buttons.IsSet(UserCommand.Button.Button1))
                {
                    return;
                }

                //已拾取物品返回
                var pickupEntity = slotState.FilledIn;
                if (pickupEntity != Entity.Null)
                {
                    return;
                }

                //没有触发返回
                var triggerEntity = triggerState.TriggeredEntity;
                if (triggerEntity == Entity.Null)
                {
                    return;
                }

                //触发的不是洗碗池返回
                if (!EntityManager.HasComponent <TableSink>(triggerEntity))
                {
                    return;
                }

                //slot为空返回
                var slot = EntityManager.GetComponentData <MultiSlotPredictedState>(triggerEntity);
                if (slot.Value.IsEmpty())
                {
                    return;
                }

                //拾取盘子
                ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                      slot.Value.GetTail(), characterEntity, triggerEntity);
            }).Run();
Ejemplo n.º 5
0
        protected override void OnUpdate()
        {
            Entities
            .WithAll <ServerEntity>()
            .WithName("CharacterServeSystem")
            .WithStructuralChanges()
            .ForEach((Entity entity,
                      in SlotPredictedState slotState,
                      in ServeSetting setting,
                      in TriggerPredictedState triggerState,
                      in UserCommand command) =>
            {
                if (!command.Buttons.IsSet(UserCommand.Button.Button1))
                {
                    return;
                }

                var pickupedEntity = slotState.FilledIn;
                if (pickupedEntity == Entity.Null)
                {
                    return;
                }

                var triggerEntity = triggerState.TriggeredEntity;
                if (triggerEntity == Entity.Null)
                {
                    return;
                }

                if (!EntityManager.HasComponent <TableServe>(triggerEntity))
                {
                    return;
                }

                var slot = EntityManager.GetComponentData <SlotPredictedState>(triggerEntity);
                if (slot.FilledIn != Entity.Null)
                {
                    return;
                }

                if (!EntityManager.HasComponent <Plate>(pickupedEntity))
                {
                    return;
                }

                ItemAttachUtilities.ItemAttachToOwner(EntityManager, pickupedEntity,
                                                      triggerEntity, entity);
            }).Run();
Ejemplo n.º 6
0
        protected override void OnUpdate()
        {
            var entity   = GetSingletonEntity <SpawnItemArray>();
            var requests = EntityManager.GetBuffer <SpawnItemRequest>(entity);

            //  FSLog.Info($"Spwan item :{requests.Length}");
            if (requests.Length == 0)
            {
                return;
            }

            var array = requests.ToNativeArray(Allocator.Temp);

            requests.Clear();

            foreach (var t in array)
            {
                var spawnItem = t;
                if (spawnItem.DeferFrame > 0)
                {
                    spawnItem.DeferFrame = spawnItem.DeferFrame - 1;
                    requests.Add(spawnItem);
                    continue;
                }

                FSLog.Info($"Spawn item:{spawnItem.Type}");


                var e = ItemCreateUtilities.CreateItem(EntityManager, spawnItem.Type,
                                                       spawnItem.OffPos, spawnItem.Owner);

                if (e == Entity.Null)
                {
                    continue;
                }

                if (spawnItem.Owner == Entity.Null)
                {
                    continue;
                }

                ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                      e, spawnItem.Owner, Entity.Null);
            }

            array.Dispose();
        }
        protected override void OnUpdate()
        {
            var entity   = GetSingletonEntity <SpawnItemArray>();
            var requests = EntityManager.GetBuffer <SpawnItemRequest>(entity);

            //  FSLog.Info($"Spwan item :{requests.Length}");
            if (requests.Length == 0)
            {
                return;
            }

            var array = requests.ToNativeArray(Allocator.Temp);

            requests.Clear();

            var query = EntityManager.CreateEntityQuery(ComponentType.ReadOnly <PredictedItem>());
            var predictedItemEntities = query.ToEntityArray(Allocator.TempJob);


            foreach (var t in array)
            {
                var spawnItem = t;
                if (spawnItem.DeferFrame > 0)
                {
                    spawnItem.DeferFrame = spawnItem.DeferFrame - 1;
                    requests.Add(spawnItem);
                    continue;
                }


                //排除掉重返的request
                var isRepeatRequest = false;
                foreach (var predictedItemEntity in predictedItemEntities)
                {
                    var predictedItem = EntityManager.GetComponentData <PredictedItem>(predictedItemEntity);
                    var ownerState    = EntityManager.GetComponentData <OwnerPredictedState>(predictedItemEntity);

                    if (predictedItem.StartTick == spawnItem.StartTick &&
                        ownerState.Owner == spawnItem.Owner)
                    {
                        isRepeatRequest = true;
                        ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                              predictedItemEntity, spawnItem.Owner, Entity.Null);
                        break;
                    }
                }
                if (isRepeatRequest)
                {
                    continue;
                }

                FSLog.Info($"Spawn item:{spawnItem.Type}");

                var e = ItemCreateUtilities.CreateItem(EntityManager, spawnItem.Type,
                                                       spawnItem.OffPos, spawnItem.Owner);

                if (e == Entity.Null)
                {
                    continue;
                }

                EntityManager.AddComponentData(e, new PredictedItem()
                {
                    StartTick = spawnItem.StartTick
                });
                EntityManager.AddComponentData(e, new UIObject());
                if (spawnItem.Owner == Entity.Null)
                {
                    continue;
                }

                ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                      e, spawnItem.Owner, Entity.Null);
            }

            predictedItemEntities.Dispose();
            array.Dispose();
        }
        protected override void OnUpdate()
        {
            Entities
            .WithAll <ServerEntity>()
            .WithName("CharacterPickupTable")
            .WithStructuralChanges()
            .ForEach((Entity entity,
                      in TriggerPredictedState triggerState,
                      in SlotPredictedState slotState,
                      in TransformPredictedState transformState,
                      in UserCommand command) =>
            {
                //未按键返回
                if (!command.Buttons.IsSet(UserCommand.Button.Button1))
                {
                    return;
                }

                FSLog.Info($"CharacterPickupTable1");

                //没有触发返回
                var triggerEntity = triggerState.TriggeredEntity;
                if (triggerEntity == Entity.Null)
                {
                    return;
                }

                //触发的不是Table返回
                if (!EntityManager.HasComponent <Table>(triggerEntity))
                {
                    return;
                }

                var worldTick = GetSingleton <WorldTime>().Tick;
                var slot      = EntityManager.GetComponentData <SlotPredictedState>(triggerEntity);

                var pickupEntity = slotState.FilledIn;
                FSLog.Info($"worldTick:{worldTick},CharacterPickupTableSystem Update," +
                           $"PickupedEntity:{pickupEntity}," +
                           $"triggerEntity:{triggerEntity},slot.FiltInEntity:{slot.FilledIn}");

                if (pickupEntity == Entity.Null && slot.FilledIn != Entity.Null)
                {
                    //the item is not sliced,can't pickup
                    if (EntityManager.HasComponent <Unsliced>(slot.FilledIn) &&
                        EntityManager.HasComponent <ProgressPredictState>(slot.FilledIn))
                    {
                        var itemSliceState = EntityManager.GetComponentData <ProgressPredictState>(slot.FilledIn);
                        FSLog.Info($"PickUpItem,itemSliceState.CurSliceTick:{itemSliceState.CurTick}");

                        if (itemSliceState.CurTick > 0)
                        {
                            return;
                        }
                    }

                    FSLog.Info($"PickUpItem,command tick:{command.RenderTick},worldTick:{worldTick}");
                    ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                          slot.FilledIn, entity, triggerEntity);
                }
                else if (pickupEntity != Entity.Null && slot.FilledIn == Entity.Null)
                {
                    ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                          pickupEntity, triggerEntity, entity, float3.zero, transformState.Rotation);
                }
            }).Run();
        protected override void OnUpdate()
        {
            Entities
            .WithAll <ServerEntity>()
            .WithName("CharacterPutDownPot")
            .WithStructuralChanges()
            .ForEach((Entity entity,
                      in TriggerPredictedState triggerState,
                      in SlotPredictedState slotState,
                      in UserCommand command) =>
            {
                //未按键返回
                if (!command.Buttons.IsSet(UserCommand.Button.Button1))
                {
                    return;
                }

                //没有拾取返回
                var pickupEntity = slotState.FilledIn;
                if (pickupEntity == Entity.Null)
                {
                    return;
                }

                //拾取的道具不是unCooked返回
                if (!EntityManager.HasComponent <Uncooked>(pickupEntity))
                {
                    return;
                }

                //没有触发返回
                var triggerEntity = triggerState.TriggeredEntity;
                if (triggerEntity == Entity.Null)
                {
                    return;
                }

                //触发的不是Table返回
                if (!EntityManager.HasComponent <Table>(triggerEntity))
                {
                    return;
                }

                //Table上没有道具返回
                var slot = EntityManager.GetComponentData <SlotPredictedState>(triggerEntity);
                if (slot.FilledIn == Entity.Null)
                {
                    return;
                }

                //Table上不是锅返回
                if (!EntityManager.HasComponent <Pot>(slot.FilledIn))
                {
                    return;
                }

                var potEntity    = slot.FilledIn;
                var potSlotState = EntityManager.GetComponentData <SlotPredictedState>(potEntity);

                //锅已烧糊
                if (EntityManager.HasComponent <Burnt>(potEntity))
                {
                    return;
                }

                //锅已满
                if (potSlotState.FilledIn != Entity.Null)
                {
                    return;
                }

                //锅设置为满
                var potState   = EntityManager.GetComponentData <PotPredictedState>(potEntity);
                potState.State = PotState.Full;
                EntityManager.SetComponentData(potEntity, potState);

                //放入锅里
                ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                      pickupEntity, potEntity, entity);
            }).Run();
Ejemplo n.º 10
0
        protected override void OnUpdate()
        {
            /*  var flyingCount = flyingItemQuery.CalculateEntityCount();
             *
             * var flyingPos =
             *    new NativeArray<float3>(flyingCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
             *
             * var initialFlyingPosJobHandle = Entities
             *    .WithName("InitialFlyingPosJobHandle")
             *    .ForEach((int entityInQueryIndex, in TransformPredictedState transformState) =>
             *    {
             *        flyingPos[entityInQueryIndex] = transformState.Position;
             *    })
             *    .ScheduleParallel(Dependency);
             *
             *
             * //开始接飞来的食物
             * Dependency = Entities
             *    .WithAll<ServerEntity, Character>()
             *    .WithName("CharacterPickupFlyingBegin")
             *    .WithReadOnly(flyingPos)
             *    .ForEach((Entity entity,
             *        ref TransformPredictedState transformState,
             *        in CharacterMoveSetting moveSetting,
             *        in SlotPredictedState slotState) =>
             *    {
             *        var pickupEntity = slotState.FilledIn;
             *
             *        if (pickupEntity != Entity.Null)
             *            return;
             *
             *        var closestPos = float3.zero;
             *        var closestDistance = 5.0f;
             *        for (var i = 0; i < flyingPos.Length; i++)
             *        {
             *            var itemPos = flyingPos[i];
             *            var distance = math.distance(itemPos, transformState.Position);
             *
             *            if (distance >= closestDistance)
             *                continue;
             *
             *            closestDistance = distance;
             *            closestPos = itemPos;
             *        }
             *
             *        if (closestPos.Equals(float3.zero))
             *            return;
             *
             *        var dir = math.normalize(closestPos - transformState.Position);
             *        dir.y = 0;
             *        var fromRotation = transformState.Rotation;
             *        var toRotation = quaternion.LookRotationSafe(dir, math.up());
             *
             *        var angle = Quaternion.Angle(fromRotation, toRotation);
             *        transformState.Rotation = Quaternion.RotateTowards(fromRotation, toRotation,
             *            math.abs(angle - 180.0f) < float.Epsilon
             *                ? -moveSetting.RotationVelocity
             *                : moveSetting.RotationVelocity);
             *
             *    }).ScheduleParallel(initialFlyingPosJobHandle);
             *
             * CompleteDependency();*/

            //结束接飞来的食物
            Entities
            .WithAll <ServerEntity, Character>()
            .WithName("CharacterPickupFlyingEnd")
            .WithStructuralChanges()
            .ForEach((Entity entity,
                      ref TriggerPredictedState triggerState,
                      ref TransformPredictedState transformState,
                      in SlotPredictedState slotState) =>
            {
                var pickupEntity = slotState.FilledIn;
                if (pickupEntity != Entity.Null || triggerState.TriggeredEntity == Entity.Null)
                {
                    return;
                }

                if (!HasComponent <Flying>(triggerState.TriggeredEntity))
                {
                    return;
                }

                if (!HasComponent <Item>(triggerState.TriggeredEntity))
                {
                    return;
                }

                var item = GetComponent <OwnerPredictedState>(triggerState.TriggeredEntity);
                //  FSLog.Info($"PickUpItem flying,PreOwner:{item.PreOwner},entity:{entity}");
                if (item.PreOwner == Entity.Null || item.PreOwner == entity)
                {
                    return;
                }
                //  var worldTick = GetSingleton<WorldTime>().Tick;
                //  FSLog.Info($"PickUpItem flying,command tick:{command.RenderTick},worldTick:{worldTick}");

                var itemPos = GetComponent <TransformPredictedState>(triggerState.TriggeredEntity);
                var dir     = math.normalize(itemPos.Position - transformState.Position);
                dir.y       = 0;

                ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                      triggerState.TriggeredEntity, entity, Entity.Null);

                transformState.Rotation      = quaternion.LookRotationSafe(dir, math.up());
                triggerState.TriggeredEntity = Entity.Null;
            }).Run();

            // flyingPos.Dispose();
        }
Ejemplo n.º 11
0
        protected override void OnUpdate()
        {
            Entities
            .WithAll <ServerEntity>()
            .WithName("CharacterPickupPlateRecycle")
            .WithStructuralChanges()
            .ForEach((Entity characterEntity,
                      in TriggerPredictedState triggerState,
                      in SlotPredictedState slotState,
                      in UserCommand command) =>
            {
                //未按键返回
                if (!command.Buttons.IsSet(UserCommand.Button.Button1))
                {
                    return;
                }

                //已拾取物品返回
                var pickupEntity = slotState.FilledIn;
                if (pickupEntity != Entity.Null)
                {
                    return;
                }

                //没有触发返回
                var triggerEntity = triggerState.TriggeredEntity;
                if (triggerEntity == Entity.Null)
                {
                    return;
                }

                //触发的不是PlateRecycle返回
                if (!EntityManager.HasComponent <TablePlateRecycle>(triggerEntity))
                {
                    return;
                }

                //slot为空返回
                var slot = EntityManager.GetComponentData <MultiSlotPredictedState>(triggerEntity);
                if (slot.Value.IsEmpty())
                {
                    return;
                }


                //将盘子叠起来
                var count = slot.Value.Count();

                var prePlateEntity = Entity.Null;
                for (var i = 0; i < count; ++i)
                {
                    slot            = EntityManager.GetComponentData <MultiSlotPredictedState>(triggerEntity);
                    var plateEntity = slot.Value.GetTail();

                    ItemAttachUtilities.ItemAttachToOwner(EntityManager,
                                                          plateEntity, prePlateEntity == Entity.Null ? characterEntity : prePlateEntity,
                                                          triggerEntity);

                    prePlateEntity = plateEntity;
                }
            }).Run();