Esempio n. 1
0
        public void Component_T_constraint_sets_AndOr_constraints_to_empty_list()
        {
            var constraint = Constraint.Component <Position.Component>();

            Assert.AreEqual(0, constraint.AsQueryConstraint().AndConstraint.Count);
            Assert.AreEqual(0, constraint.AsQueryConstraint().OrConstraint.Count);
        }
Esempio n. 2
0
        static void AddSymbolicTowerQuery <T>(InterestTemplate interest) where T : ISpatialComponentData
        {
            var towerQuery = InterestQuery.Query(
                Constraint.All(
                    Constraint.Component(SymbolicTower.ComponentId),
                    Constraint.RelativeSphere(FixedParams.WorldInterestLimit)))
                             .FilterResults(Position.ComponentId,
                                            SymbolicTower.ComponentId,
                                            Metadata.ComponentId)
                             .WithMaxFrequencyHz(FixedParams.WorldInterestFrequency);

            interest.AddQueries <T>(towerQuery);
        }
Esempio n. 3
0
        static void AddMinimapQuery <T>(InterestTemplate interest) where T : ISpatialComponentData
        {
            var minimapQuery = InterestQuery.Query(
                Constraint.All(
                    Constraint.Any(Constraint.Component(CommanderStatus.ComponentId),
                                   Constraint.Component(StrongholdStatus.ComponentId),
                                   Constraint.Component(HeadQuarters.ComponentId)),
                    Constraint.RelativeSphere(FixedParams.WorldInterestLimit)))
                               .FilterResults(Position.ComponentId,
                                              BaseUnitStatus.ComponentId,
                                              TransformInternal.ComponentId)
                               .WithMaxFrequencyHz(FixedParams.WorldInterestFrequency);

            interest.AddQueries <T>(minimapQuery);
        }
        void Test()
        {
            var playerQuery = InterestQuery.Query(
                Constraint.All(
                    Constraint.Component <PlayerInfo.Component>(),
                    Constraint.RelativeSphere(20))
                ).FilterResults(Position.ComponentId, PlayerInfo.ComponentId);

            var minimapQuery = InterestQuery.Query(
                Constraint.All(
                    Constraint.Component <MinimapRepresentaion.Component>(),
                    Constraint.RelativeBox(50, double.PositiveInfinity, 50))
                ).FilterResults(Position.ComponentId, MinimapRepresentaion.ComponentId);

            var interestTemplate = InterestTemplate.Create()
                                   .AddQueries <PlayerControls.Component>(playerQuery, minimapQuery);

            var playerTemplate = new EntityTemplate();

            playerTemplate.AddComponent(interestTemplate.ToSnapshot(), WorkerUtils.UnityGameLogic);
        }
        public static EntityTemplate Player(string workerId, byte[] args)
        {
            var client = EntityTemplate.GetWorkerAccessAttribute(workerId);

            var(spawnPosition, spawnYaw, spawnPitch) = SpawnPoints.GetRandomSpawnPoint();

            var serverResponse = new ServerResponse
            {
                Position = spawnPosition.ToIntAbsolute()
            };

            var rotationUpdate = new RotationUpdate
            {
                Yaw   = spawnYaw.ToInt1k(),
                Pitch = spawnPitch.ToInt1k()
            };

            var pos = new Position.Snapshot {
                Coords = spawnPosition.ToSpatialCoordinates()
            };
            var serverMovement = new ServerMovement.Snapshot {
                Latest = serverResponse
            };
            var clientMovement = new ClientMovement.Snapshot {
                Latest = new ClientRequest()
            };
            var clientRotation = new ClientRotation.Snapshot {
                Latest = rotationUpdate
            };
            var shootingComponent = new ShootingComponent.Snapshot();
            var gunComponent      = new GunComponent.Snapshot {
                GunId = PlayerGunSettings.DefaultGunIndex
            };
            var gunStateComponent = new GunStateComponent.Snapshot {
                IsAiming = false
            };
            var healthComponent = new HealthComponent.Snapshot
            {
                Health    = PlayerHealthSettings.MaxHealth,
                MaxHealth = PlayerHealthSettings.MaxHealth,
            };

            var healthRegenComponent = new HealthRegenComponent.Snapshot
            {
                CooldownSyncInterval = PlayerHealthSettings.SpatialCooldownSyncInterval,
                DamagedRecently      = false,
                RegenAmount          = PlayerHealthSettings.RegenAmount,
                RegenCooldownTimer   = PlayerHealthSettings.RegenAfterDamageCooldown,
                RegenInterval        = PlayerHealthSettings.RegenInterval,
                RegenPauseTime       = 0,
            };

            var sessionQuery  = InterestQuery.Query(Constraint.Component <Session.Component>());
            var checkoutQuery = InterestQuery.Query(Constraint.RelativeCylinder(150));

            var interestTemplate  = InterestTemplate.Create().AddQueries <ClientMovement.Component>(sessionQuery, checkoutQuery);
            var interestComponent = interestTemplate.ToSnapshot();

            var playerName = Encoding.ASCII.GetString(args);

            var playerStateComponent = new PlayerState.Snapshot
            {
                Name   = playerName,
                Kills  = 0,
                Deaths = 0,
            };


            var playerResComponent      = new Pickups.PlayerRes.Snapshot(0);
            var soldierManagerComponent = new Soldiers.SoldierManager.Snapshot();


            var template = new EntityTemplate();

            template.AddComponent(pos, WorkerUtils.UnityGameLogic);
            template.AddComponent(new Metadata.Snapshot {
                EntityType = "Player"
            }, WorkerUtils.UnityGameLogic);
            template.AddComponent(serverMovement, WorkerUtils.UnityGameLogic);
            template.AddComponent(clientMovement, client);
            template.AddComponent(clientRotation, client);

            template.AddComponent(shootingComponent, client);
            template.AddComponent(gunComponent, WorkerUtils.UnityGameLogic);
            template.AddComponent(gunStateComponent, client);
            template.AddComponent(healthComponent, WorkerUtils.UnityGameLogic);
            template.AddComponent(healthRegenComponent, WorkerUtils.UnityGameLogic);
            template.AddComponent(playerStateComponent, WorkerUtils.UnityGameLogic);

            template.AddComponent(interestComponent, WorkerUtils.UnityGameLogic);

            template.AddComponent(playerResComponent, WorkerUtils.UnityGameLogic);
            template.AddComponent(soldierManagerComponent, WorkerUtils.UnityGameLogic);


            PlayerLifecycleHelper.AddPlayerLifecycleComponents(template, workerId, WorkerUtils.UnityGameLogic);

            template.SetReadAccess(WorkerUtils.UnityClient, WorkerUtils.UnityGameLogic, WorkerUtils.MobileClient);
            template.SetComponentWriteAccess(EntityAcl.ComponentId, WorkerUtils.UnityGameLogic);

            return(template);
        }
        private static void SwitchType(EntityTemplate template, UnitType type, string writeAccess)
        {
            switch (type)
            {
            case UnitType.Soldier:
                template.AddComponent(new BulletComponent.Snapshot(), writeAccess);
                template.AddComponent(new BaseUnitPosture.Snapshot {
                    Posture = new PostureInfo {
                        Datas = new Dictionary <PosturePoint, PostureData>()
                    }
                }, writeAccess);
                break;

            case UnitType.Commander:
                template.AddComponent(new BulletComponent.Snapshot(), writeAccess);
                template.AddComponent(new CommanderStatus.Snapshot {
                    Order = new OrderPair {
                        Self = OrderType.Idle, Upper = OrderType.Idle
                    },
                    Rank = 0,
                }, writeAccess);
                template.AddComponent(new CommanderTeam.Snapshot {
                    FollowerInfo = new FollowerInfo {
                        Followers = new List <EntityId>(), UnderCommanders = new List <EntityId>()
                    },
                    SuperiorInfo = new SuperiorInfo()
                }, writeAccess);
                template.AddComponent(new CommanderSight.Snapshot {
                    WarPowers = new List <WarPower>()
                }, writeAccess);
                template.AddComponent(new CommanderAction.Snapshot {
                    ActionType = CommandActionType.None
                }, writeAccess);
                template.AddComponent(new BaseUnitPosture.Snapshot {
                    Posture = new PostureInfo {
                        Datas = new Dictionary <PosturePoint, PostureData>()
                    }
                }, writeAccess);
                template.AddComponent(new DominationDevice.Snapshot {
                    Type = DominationDeviceType.Capturing, Speed = 0.0f,
                }, writeAccess);
                break;

            case UnitType.Stronghold:
                template.AddComponent(new StrongholdUnitStatus.Snapshot(), writeAccess);
                template.AddComponent(new UnitFactory.Snapshot {
                    FollowerOrders = new List <FollowerOrder>(), SuperiorOrders = new List <SuperiorOrder>()
                }, writeAccess);
                template.AddComponent(new UnitArmyObserver.Snapshot(), writeAccess);
                template.AddComponent(new DominationStamina.Snapshot {
                    SideStaminas = new Dictionary <UnitSide, float>()
                }, writeAccess);
                break;

            case UnitType.HeadQuarter:
                //template.AddComponent(new HeadQuarters.Snapshot { UpperRank = 0,
                //                                                 FactoryDatas = new FactoryMap { Reserves = new Dictionary<EntityId,ReserveMap>() },
                //                                                 Orders = new List<OrganizeOrder>() }, writeAccess);
                template.AddComponent(new CommandersManager.Snapshot {
                    State          = CommanderManagerState.None,
                    CommanderDatas = new Dictionary <EntityId, TeamInfo>()
                }, writeAccess);
                var strongholdQuery = InterestQuery.Query(Constraint.Component <StrongholdUnitStatus.Component>())
                                      .FilterResults(Position.ComponentId, BaseUnitStatus.ComponentId);
                var interestTemplate = InterestTemplate.Create().AddQueries <CommandersManager.Component>(strongholdQuery);
                template.AddComponent(interestTemplate.ToSnapshot(), writeAccess);
                break;
            }
        }