예제 #1
0
        public static SnapshotEntity GeneratePlayerSnapshotEntityTemplate(string workerId)
        {
            // Set name of Unity prefab associated with this entity
            var playerEntity = new SnapshotEntity {
                Prefab = "PlayerPrefab"
            };

            // Define componetns attached to snapshot entity
            playerEntity.Add(
                new PlayerComponent.Data(
                    new PlayerComponentData(
                        Coordinates.ZERO,
                        playerEntity.DefaultTransformData(),
                        playerEntity.DefaultTransformData(),
                        playerEntity.DefaultTransformData()
                        )
                    )
                );

            var specificClientPredicate = CommonPredicates.SpecificClientOnly(workerId);

            var acl = Acl.Build()
                      // Both FSim (server) workers and client workers granted read access over all states
                      .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                      // Only the local client worker (local authority) granted write access over PlayerComponent component
                      .SetWriteAccess <PlayerComponent>(specificClientPredicate);

            playerEntity.SetAcl(acl);

            return(playerEntity);
        }
예제 #2
0
        public static void SpawnNpcsAroundPosition(SnapshotBuilder snapshot, Coordinates position, uint team)
        {
            float totalNpcs    = SimulationSettings.HQStartingWizardsCount + SimulationSettings.HQStartingLumberjacksCount;
            float radiusFromHQ = SimulationSettings.NPCSpawnDistanceToHQ;

            for (int i = 0; i < totalNpcs; i++)
            {
                float   radians = (i / totalNpcs) * 2 * Mathf.PI;
                Vector3 offset  = new Vector3(Mathf.Cos(radians), 0, Mathf.Sin(radians));
                offset *= radiusFromHQ;
                Coordinates coordinates = (position.ToVector3() + offset).ToCoordinates();

                SnapshotEntity entity = null;
                if (i < SimulationSettings.HQStartingLumberjacksCount)
                {
                    entity = EntityTemplateFactory.CreateNPCLumberjackTemplate(coordinates, team);
                }
                else
                {
                    entity = EntityTemplateFactory.CreateNPCWizardTemplate(coordinates, team);
                }

                var id = snapshot.GenerateId();
                snapshot.Add(id, entity);
            }
        }
예제 #3
0
        public static SnapshotEntity CreateNPCWizardTemplate(Coordinates initialPosition, uint teamId)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.NPCWizardPrefabName
            };

            template.Add(new TransformComponent.Data(initialPosition, 0));
            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new Health.Data(SimulationSettings.WizardMaxHealth, SimulationSettings.WizardMaxHealth, true));
            template.Add(new Flammable.Data(false, true, FireEffectType.SMALL));
            template.Add(new TargetNavigation.Data(NavigationState.INACTIVE, Vector3f.ZERO, EntityId.InvalidEntityId, 0f));
            template.Add(new Spells.Data(new Map <SpellType, float> {
                { SpellType.LIGHTNING, 0f }, { SpellType.RAIN, 0f }
            }, true));
            template.Add(new NPCWizard.Data(WizardFSMState.StateEnum.IDLE, EntityId.InvalidEntityId, SimulationSettings.InvalidPosition.ToVector3f()));
            template.Add(new TeamAssignment.Data(teamId));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Health>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TargetNavigation>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Spells>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <NPCWizard>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TeamAssignment>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
예제 #4
0
        public static SnapshotEntity CreateTreeTemplate(Coordinates initialPosition, uint initialRotation)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.TreePrefabName
            };

            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new TransformComponent.Data(initialPosition, initialRotation));
            template.Add(new Harvestable.Data());
            template.Add(new Health.Data(SimulationSettings.TreeMaxHealth, SimulationSettings.TreeMaxHealth, true));
            template.Add(new Flammable.Data(false, true, FireEffectType.BIG));
            template.Add(new TreeState.Data((TreeType)UnityEngine.Random.Range(0, 2), TreeFSMState.HEALTHY));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Harvestable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Health>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TreeState>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
        // Template definition for a Swarm Goal entity
        public static SnapshotEntity GenerateGoalSnapshotEntityTemplate()
        {
            //Spawn to a random position
            Coordinates goalInitialCoordinates = new Coordinates(Random.Range(-tankSize, tankSize),
                                                                 Random.Range(0.0f, tankHeight),
                                                                 Random.Range(-tankSize, tankSize));


            Vector3f zero = new Vector3f();

            // Set name of Unity prefab associated with this entity
            var SwarmGoalEntity = new SnapshotEntity {
                Prefab = "Goal"
            };


            // Define components attached to snapshot entity
            SwarmGoalEntity.Add(new WorldTransform.Data(new WorldTransformData(goalInitialCoordinates, zero, 0.0f)));
            SwarmGoalEntity.Add(new GoalParameters.Data(new GoalParametersData(tankSize, tankHeight, goalSpeed)));

            //Alastair's recommendation:
            var acl = Acl.Build()
                      .SetReadAccess(CommonRequirementSets.PhysicsOrVisual)
                      .SetWriteAccess <WorldTransform>(CommonRequirementSets.PhysicsOnly);

            SwarmGoalEntity.SetAcl(acl);

            return(SwarmGoalEntity);
        }
예제 #6
0
        public static SnapshotEntity CreateNPCLumberjackTemplate(Coordinates initialPosition, uint teamId)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.NPCPrefabName
            };

            template.Add(new TransformComponent.Data(initialPosition, 0));
            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new Health.Data(SimulationSettings.LumberjackMaxHealth, SimulationSettings.LumberjackMaxHealth, true));
            template.Add(new Flammable.Data(false, true, FireEffectType.SMALL));
            template.Add(new TargetNavigation.Data(NavigationState.INACTIVE, Vector3f.ZERO, new EntityId(), 0f));
            template.Add(new Inventory.Data(0));
            template.Add(new NPCLumberjack.Data(LumberjackFSMState.StateEnum.IDLE, new EntityId(), SimulationSettings.InvalidPosition.ToVector3f()));
            template.Add(new TeamAssignment.Data(teamId));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonRequirementSets.PhysicsOrVisual)
                              .SetWriteAccess <TransformComponent>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <Health>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <TargetNavigation>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <Inventory>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <NPCLumberjack>(CommonRequirementSets.PhysicsOnly)
                              .SetWriteAccess <TeamAssignment>(CommonRequirementSets.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
예제 #7
0
        public static SnapshotEntity CreateHQTemplate(Coordinates initialPosition, uint initialRotation, uint teamId)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.HQPrefabName
            };

            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new HQInfo.Data(new List <EntityId>()));
            template.Add(new TransformComponent.Data(initialPosition, initialRotation));
            template.Add(new Health.Data(SimulationSettings.HQMaxHealth, SimulationSettings.HQMaxHealth, true));
            template.Add(new TeamAssignment.Data(teamId));
            template.Add(new Flammable.Data(false, true, FireEffectType.BIG));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <HQInfo>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Health>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TeamAssignment>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
        // Template definition for a Example entity
        public static SnapshotEntity GenerateExampleSnapshotEntityTemplate()
        {
            // Set name of Unity prefab associated with this entity
            var exampleEntity = new SnapshotEntity {
                Prefab = "ExampleEntity"
            };

            // Define components attached to snapshot entity
            exampleEntity.Add(new WorldTransform.Data(new WorldTransformData(new Coordinates(0, 0, 0))));
            exampleEntity.Add(new UnityName.Data(new UnityNameData("your_example_entity")));
            exampleEntity.Add(new CppName.Data(new CppNameData("your_example_entity")));

            var acl = Acl.Build()
                      // Both FSim (server) workers and client workers granted read access over all states
                      .SetReadAccess(Acl.MakeRequirementSet(CommonAttributeSets.Physics, CommonAttributeSets.Visual, Acl.MakeAttributeSet("cpp")))
                      // Only FSim workers granted write access over WorldTransform component
                      .SetWriteAccess <WorldTransform>(CommonRequirementSets.PhysicsOnly)
                      // Only client workers granted write access over Name component
                      .SetWriteAccess <UnityName>(CommonRequirementSets.VisualOnly)
                      .SetWriteAccess <CppName>(Acl.MakeRequirementSet(Acl.MakeAttributeSet("cpp")));

            exampleEntity.SetAcl(acl);

            return(exampleEntity);
        }
예제 #9
0
        public static SnapshotEntity CreateBarracksTemplate(Coordinates initialPosition, BarracksState barracksState, uint teamId)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.BarracksPrefabName
            };

            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new TransformComponent.Data(initialPosition, (uint)(UnityEngine.Random.value * 360)));
            template.Add(new BarracksInfo.Data(barracksState));
            template.Add(new Health.Data(barracksState == BarracksState.CONSTRUCTION_FINISHED ? SimulationSettings.BarracksMaxHealth : 0, SimulationSettings.BarracksMaxHealth, true));
            template.Add(new Flammable.Data(false, false, FireEffectType.BIG));
            template.Add(new StockpileDepository.Data(barracksState == BarracksState.UNDER_CONSTRUCTION));
            template.Add(new NPCSpawner.Data(barracksState == BarracksState.CONSTRUCTION_FINISHED, new Map <NPCRole, float> {
                { NPCRole.LUMBERJACK, 0f }, { NPCRole.WIZARD, 0f }
            }));
            template.Add(new TeamAssignment.Data(teamId));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <BarracksInfo>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Health>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <StockpileDepository>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <NPCSpawner>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TeamAssignment>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
예제 #10
0
        private void ListBefore_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            CallStackInfoAgregated info = (CallStackInfoAgregated)this.ListBefore.SelectedItem;

            //change the datagrid selected item to the one here
            SnapshotEntity entity = (SnapshotEntity)DataContext;

            entity.CurrentAgreg = entity.CallstackAg.Where(p => p.MethodHandle == info.MethodHandle);
        }
예제 #11
0
        private void ListCurrent_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SnapshotEntity         entity = (SnapshotEntity)DataContext;
            CallStackInfoAgregated info   = (CallStackInfoAgregated)this.ListCurrent.SelectedItem;

            //query the before and after list and update the binding
            this.ListBefore.ItemsSource = entity.CallstackAg.Where(p => p.MethodHandle == info.CalledByHandle);
            this.ListAfter.ItemsSource  = entity.CallstackAg.Where(p => p.CalledByHandle == info.MethodHandle);
        }
        public void TestWithSnapshot()
        {
            var snapshot = new SnapshotEntity()
            {
                Balance      = 1,
                AvgOpenPrice = 40000
            };
            var ops = new List <AvgPriceUpdate>();

            // ops.Add(new OperationUpdate()
            // {
            //     Amount = 1,
            //     Balance = 1,
            //     AssetPriceInUsd = 40000
            // });
            ops.Add(new AvgPriceUpdate()
            {
                Amount          = 1,
                Balance         = 2,
                AssetPriceInUsd = 50000
            });
            ops.Add(new AvgPriceUpdate()
            {
                Amount          = (decimal) - 1.5,
                Balance         = (decimal)0.5,
                AssetPriceInUsd = 45000
            });
            ops.Add(new AvgPriceUpdate()
            {
                Amount          = 1,
                Balance         = (decimal)1.5,
                AssetPriceInUsd = 53000
            });
            ops.Add(new AvgPriceUpdate()
            {
                Amount          = (decimal) - 0.5,
                Balance         = 1,
                AssetPriceInUsd = 55000
            });
            ops.Add(new AvgPriceUpdate()
            {
                Amount          = 1,
                Balance         = 2,
                AssetPriceInUsd = 50000
            });
            var t = AvgPriceCalculator.CalculateAvgPrice(ops, snapshot);


            Assert.AreEqual(45000, t[0].AvgOpenPrice);
            Assert.AreEqual(45000, t[1].AvgOpenPrice);
            Assert.AreEqual((decimal)50333.33, t[2].AvgOpenPrice);
            Assert.AreEqual((decimal)50333.33, t[3].AvgOpenPrice);
            Assert.AreEqual((decimal)50166.66, t[4].AvgOpenPrice);
        }
예제 #13
0
        public static SnapshotEntity CreateArmchairEntityTemplate(Coordinates spawnPosition, float rotation)
        {
            var entityTemplate = new SnapshotEntity {
                Prefab = SimulationSettings.ArmchairPrefabName
            };

            entityTemplate.Add(new WorldTransform.Data(spawnPosition, MathUtils.ToNativeQuaternion(UnityEngine.Quaternion.Euler(0, rotation, 0))));
            entityTemplate.Add(new Grabbable.Data(new Option <CurrentGrabberInfo>()));

            var acl = Acl.GenerateServerAuthoritativeAcl(entityTemplate);

            entityTemplate.SetAcl(acl);

            return(entityTemplate);
        }
예제 #14
0
        public static SnapshotEntity CreateCubeEntityTemplate(Coordinates spawnPosition)
        {
            var entityTemplate = new SnapshotEntity {
                Prefab = SimulationSettings.CubePrefabName
            };

            entityTemplate.Add(new WorldTransform.Data(spawnPosition, new Quaternion(0, 0, 0, 0)));
            entityTemplate.Add(new Grabbable.Data(new Option <CurrentGrabberInfo>()));

            var acl = Acl.GenerateServerAuthoritativeAcl(entityTemplate);

            entityTemplate.SetAcl(acl);

            return(entityTemplate);
        }
예제 #15
0
        public static SnapshotEntity CreatePlayerCreatorTemplate()
        {
            var entityTemplate = new SnapshotEntity {
                Prefab = SimulationSettings.PlayerCreatorPrefabName
            };

            entityTemplate.Add(new WorldTransform.Data(Coordinates.ZERO, new Quaternion(0, 0, 0, 0)));
            entityTemplate.Add(new PlayerCreation.Data());

            var acl = Acl.GenerateServerAuthoritativeAcl(entityTemplate);

            entityTemplate.SetAcl(acl);

            return(entityTemplate);
        }
예제 #16
0
        public Task SaveAsync <T>(T item) where T : AggregateRoot
        {
            var entity = new SnapshotEntity
            {
                AggregateId = item.Id,
                SourceType  = item.GetType().FullName,
                Version     = item.Version,
                Payload     = aggregateSerializer.Serialize(item)
            };

            db.Snapshots.Add(entity);

            db.SaveChanges();

            return(Task.FromResult(true));
        }
예제 #17
0
        public static SnapshotEntity CreateIndividualTemplate(Coordinates initialPosition)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.PlayerPrefabName
            };

            template.Add(new TransformComponent.Data(initialPosition, (uint)0));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
예제 #18
0
 private SnapshotUnit <TPrimaryKey, T> Convert <T>(SnapshotEntity <TPrimaryKey> snapshotEntity)
     where T : ISnapshot, new()
 {
     return(new SnapshotUnit <TPrimaryKey, T>
     {
         Data = this.serializer.Deserialize <T>(snapshotEntity.Data),
         Meta = new SnapshotMeta <TPrimaryKey>
         {
             ActorId = snapshotEntity.Id,
             DoingVersion = snapshotEntity.DoingVersion,
             Version = snapshotEntity.Version,
             MinEventTimestamp = snapshotEntity.MinEventTimestamp,
             MinEventVersion = snapshotEntity.MinEventVersion,
             IsLatest = snapshotEntity.IsLatest
         }
     });
 }
예제 #19
0
    // Template definition for a Terrain entity
    public static SnapshotEntity GenerateTerrainSnapshotEntityTemplate()
    {
        // Set name of Unity prefab associated with this entity
        var terrain = new SnapshotEntity {
            Prefab = "Terrain"
        };

        // Define components attached to snapshot entity
        terrain.Add(new Terrain.Data(new TerrainData()));
        terrain.Add(new WorldTransform.Data(new WorldTransformData(new Coordinates(5, 0, 0), 0)));

        // Grant FSim workers write-access over all of this entity's components, read-access for visual (e.g. client) workers
        var acl = Acl.GenerateServerAuthoritativeAcl(terrain);

        terrain.SetAcl(acl);

        return(terrain);
    }
        public static SnapshotEntity GenerateEnvironmentNodeEntityTemplate(Coordinates position, Map <Evolution.Material, uint> initialResources)
        {
            var entity = new SnapshotEntity {
                Prefab = "EnvironmentNode"
            };

            entity.Add(new Position.Data(new PositionData(position)));
            entity.Add(new Evolution.Environment.Resources.Data(new ResourcesData(initialResources)));

            var acl = Acl.Build()
                      .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                      .SetWriteAccess <Position>(CommonPredicates.PhysicsOnly)
                      .SetWriteAccess <Evolution.Environment.Resources>(CommonPredicates.PhysicsOrVisual);

            entity.SetAcl(acl);

            return(entity);
        }
예제 #21
0
    private static SnapshotEntity Spawner()
    {
        var exampleEntity = new SnapshotEntity {
            Prefab = "Spawner"
        };

        exampleEntity.Add(new WorldTransform.Data(new WorldTransformData(new Coordinates(0, 0, 0))));
        exampleEntity.Add(new SpawnComponent.Data(new SpawnComponentData()));

        var acl = Acl.Build()
                  .SetReadAccess(CommonRequirementSets.PhysicsOrVisual)
                  .SetWriteAccess <WorldTransform>(CommonRequirementSets.PhysicsOnly)
                  .SetWriteAccess <SpawnComponent>(CommonRequirementSets.PhysicsOnly);

        exampleEntity.SetAcl(acl);

        return(exampleEntity);
    }
예제 #22
0
        // Template definition for a PlayerSpawner entity
        public static SnapshotEntity GeneratePlayerSpawnerSnapshotEntityTemplate()
        {
            // Set name of Unity prefab associated with this entity
            var playerSpawner = new SnapshotEntity {
                Prefab = "PlayerSpawner"
            };

            // Define components attached to snapshot entity
            playerSpawner.Add(new WorldTransform.Data(new WorldTransformData(new Coordinates(0, 5, 0), new Vector3f(), 0.0f)));
            playerSpawner.Add(new Spawner.Data(new SpawnerData()));

            // Grant FSim (server-side) workers write-access over all of this entity's components, read-access for visual (e.g. client) workers
            var acl = Acl.GenerateServerAuthoritativeAcl(playerSpawner);

            playerSpawner.SetAcl(acl);

            return(playerSpawner);
        }
        /// <summary>
        /// Adds the snapshot.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="streamName">Name of the stream.</param>
        /// <param name="snapshot">The snapshot.</param>
        public void AddSnapshot <T>(string streamName, T snapshot)
        {
            var wrapper = new SnapshotWrapper
            {
                StreamName = streamName.Id().ToString(),
                Snapshot   = snapshot,
                Created    = DateTime.UtcNow
            };

            var            eventStreamGuid = new Guid(wrapper.StreamName);
            SnapshotEntity newSnapshot     = new SnapshotEntity();

            newSnapshot.Id            = wrapper.Id;
            newSnapshot.Payload       = JsonConvert.SerializeObject(wrapper.Snapshot);
            newSnapshot.EventStreamId = eventStreamGuid;
            newSnapshot.CreatedUtc    = wrapper.Created;

            snapShotService.Insert(newSnapshot);
        }
예제 #24
0
        public static Entity CreateSpecatorPlayerTemplate(string clientId)
        {
            var entityTemplate = new SnapshotEntity {
                Prefab = SimulationSettings.SpectatorPlayerPrefabName
            };

            entityTemplate.Add(new WorldTransform.Data(Coordinates.ZERO + new Vector3d(0, 4, 0), new Quaternion(0, 0, 0, 0)));
            entityTemplate.Add(new ClientAuthorityCheck.Data());
            entityTemplate.Add(new ClientConnection.Data(SimulationSettings.TotalHeartbeatsBeforeTimeout));

            var acl = Acl.Build()
                      .SetReadAccess(CommonRequirementSets.PhysicsOrVisual)
                      .SetWriteAccess <WorldTransform>(CommonRequirementSets.SpecificClientOnly(clientId))
                      .SetWriteAccess <ClientAuthorityCheck>(CommonRequirementSets.SpecificClientOnly(clientId))
                      .SetWriteAccess <ClientConnection>(CommonRequirementSets.PhysicsOnly);

            entityTemplate.SetAcl(acl);

            return(entityTemplate);
        }
예제 #25
0
        public static SnapshotEntity CreateSimulationManagerTemplate()
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.SimulationManagerEntityName
            };

            template.Add(new TransformComponent.Data(Coordinates.ZERO, 0));
            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new PlayerLifeCycle.Data(new Map <string, EntityId>()));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <PlayerLifeCycle>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
예제 #26
0
    public static SnapshotEntity GenerateCrateEntityTemplate()
    {
        var crate = new SnapshotEntity {
            Prefab = "Crate"
        };

        crate.Add(new Crate.Data(new CrateData()));
        crate.Add(new WorldTransform.Data(new WorldTransformData(new Coordinates(1, 6, 9), 0)));
        crate.Add(new Controllable.Data());

        var permissions = Acl.Build()
                          .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                          .SetWriteAccess <EntityAcl>(CommonPredicates.PhysicsOnly)
                          .SetWriteAccess <Crate>(CommonPredicates.PhysicsOnly)
                          .SetWriteAccess <WorldTransform>(CommonPredicates.PhysicsOnly)
                          .SetWriteAccess <Controllable>(CommonPredicates.PhysicsOnly);

        crate.SetAcl(permissions);

        return(crate);
    }
예제 #27
0
        // Template definition for a Fish entity
        public static SnapshotEntity GenerateFishSnapshotEntityTemplate()
        {
            //Spawn to a random position
            Coordinates fishInitialCoordinates = new Coordinates(Random.Range(-tankSize, tankSize),
                                                                 Random.Range(0.0f, tankHeight),
                                                                 Random.Range(-tankSize, tankSize));

            Vector3f fishInitialRotation = new Vector3f(Random.Range(-30, 30),
                                                        Random.Range(-30, 30),
                                                        Random.value * 360);            //roll, pitch, yaw

            float speed = Random.Range(initialSpeed / 2.0f, initialSpeed);

            //float fishInitialSpeed = Random.Range (initialSpeed / 2.0f, initialSpeed);

            // Set name of Unity prefab associated with this entity
            var FishEntity = new SnapshotEntity {
                Prefab = "Fish"
            };


            // Define components attached to snapshot entity
            FishEntity.Add(new WorldTransform.Data(new WorldTransformData(fishInitialCoordinates, fishInitialRotation, speed)));
            FishEntity.Add(new FishParameters.Data(new FishParametersData(numFish, initialSpeed, tankSize, tankHeight)));

            // Grant UnityWorker (server-side) workers write-access over all of this entity's components, read-access for visual (e.g. client) workers
            var acl = Acl.GenerateServerAuthoritativeAcl(FishEntity);

            //Alastair's recommendation: seems to have an issue

            /*var acl = Acl.Build()
             *      .SetReadAccess(CommonRequirementSets.PhysicsOrVisual)
             *      .SetWriteAccess<WorldTransform>(CommonRequirementSets.PhysicsOnly)
             *      .SetWriteAccess<FishParameters>(CommonRequirementSets.PhysicsOnly);*/

            FishEntity.SetAcl(acl);

            return(FishEntity);
        }
        public static SnapshotEntity CreateTreeTemplate(Coordinates initialPosition, uint initialRotation)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.TreePrefabName
            };

            template.Add(new TransformComponent.Data(new TransformComponentData(initialPosition, initialRotation)));
            template.Add(new Harvestable.Data(new HarvestableData(SimulationSettings.InitialResourceTotal)));
            template.Add(new Flammable.Data(new FlammableData(false, true, FireEffectType.SMALL)));
            template.Add(new TreeState.Data(new TreeStateData(TreeFSMState.HEALTHY)));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Harvestable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <Flammable>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TreeState>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
        public static SnapshotEntity CreateSimulationManagerEntitySnapshotTemplate(IList <Team> teams)
        {
            var template = new SnapshotEntity {
                Prefab = SimulationSettings.SimulationManagerEntityName
            };

            template.Add(new TransformComponent.Data(Coordinates.ZERO, 0));
            template.Add(new FSimAuthorityCheck.Data());
            template.Add(new PlayerLifeCycle.Data());
            template.Add(new TeamCollection.Data(new TeamCollectionData(new Improbable.Collections.List <Team>(teams))));

            var permissions = Acl.Build()
                              .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                              .SetWriteAccess <TransformComponent>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <FSimAuthorityCheck>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <PlayerLifeCycle>(CommonPredicates.PhysicsOnly)
                              .SetWriteAccess <TeamCollection>(CommonPredicates.PhysicsOnly);

            template.SetAcl(permissions);

            return(template);
        }
예제 #30
0
        public static SnapshotEntity GenerateOrganismEntityTemplate(Coordinates position, Genome genome1, Genome genome2, int[][] genomeKey)
        {
            var entity = new SnapshotEntity {
                Prefab = "OrganismPrefab"
            };

            //Debug.Log(position);

            entity.Add(new Health.Data(new HealthData(50)));

            string   dominantGenome = mixGenes(genome1, genome2);
            BitArray phenotype      = new BitArray(Convert.FromBase64String(dominantGenome));

            var food = getFood(phenotype, genomeKey[0]);

            entity.Add(new Consumer.Data(
                           new ConsumerData(food, getWaste(food), getRadius(phenotype, genomeKey[2]))
                           ));
            entity.Add(new Reproducer.Data(new ReproducerData(genome1, genome2)));

            entity.Add(new Mover.Data(new MoverData(position, getSpeed(phenotype, genomeKey[3]), 0.0f, 10)));
            entity.Add(new Affectable.Data(
                           new AffectableData(getLimits(phenotype, genomeKey), getMutationP(phenotype, genomeKey[7]))
                           ));

            var acl = Acl.Build()
                      .SetReadAccess(CommonPredicates.PhysicsOrVisual)
                      .SetWriteAccess <Health>(CommonPredicates.PhysicsOnly)
                      .SetWriteAccess <Consumer>(CommonPredicates.PhysicsOnly)
                      .SetWriteAccess <Reproducer>(CommonPredicates.PhysicsOnly)
                      .SetWriteAccess <Mover>(CommonPredicates.PhysicsOnly)
                      .SetWriteAccess <Affectable>(CommonPredicates.PhysicsOnly);

            entity.SetAcl(acl);

            return(entity);
        }