static string GetRandomSmallBloodPrefab()
            {
                int[] smallIndices = new int[] { 4, 5, 6, 7 };
                int   index        = random.NextInt(smallIndices.Length);

                return($"Blood{smallIndices[index]}");
            }
Beispiel #2
0
        void Start()
        {
            m_ResultsDelayedQueries = new bool[m_QueryCount];
            m_ResultsDirectQueries  = new bool[m_QueryCountPerFrame];

            m_BlackBoard = new BlackBoard(m_EntryCount, m_QueryCount);

            m_BlackBoardSystem = World.Active.GetOrCreateSystem <BlackBoardSystem>();
            m_BlackBoardSystem.BlackBoards.Add("TestBlackBoard", m_BlackBoard);

            m_Rand = new Random();
            m_Rand.InitState();

            for (int i = 0; i < m_EntryCount; i++)
            {
                m_BlackBoard.SetEntry(i, m_Rand.NextInt());
            }

            for (int i = 0; i < m_QueryCount; i++)
            {
                var value1 = m_Rand.NextInt();
                var value2 = m_Rand.NextInt();

                m_BlackBoard.SetQuery(
                    i,
                    m_Rand.NextInt(0, m_EntryCount),
                    value1 < value2 ? value1 : value2,
                    value1 < value2 ? value2 : value1);
            }
        }
Beispiel #3
0
        public static Entity GetRandomMagicWeapon(int level, ref Unity.Mathematics.Random random, EntityCommandBuffer commandBuffer)
        {
            var itemEntity = commandBuffer.CreateEntity();
            var storeIndex = Array.FindIndex(ItemsManagerComponent.Instance.ItemsStoreComponent.Items,
                                             item => item.ItemType == ItemType.Gear && item.GearType == GearType.Magic);
            var iconIndex = random.NextInt(0,
                                           ItemsManagerComponent.Instance.ItemsStoreComponent.Items[storeIndex].Icons.Length);

            commandBuffer.AddComponent(itemEntity, new ItemComponent
            {
                StoreIndex = storeIndex,
                IconIndex  = iconIndex,
                Level      = level
            });
            commandBuffer.AddComponent(itemEntity, new MagicStatModifierComponent
            {
                Value = random.NextInt(1, 6)
            });

            var randomStatModifiersArray = new NativeArray <WeaponStatsModifiers>(3, Allocator.Temp, NativeArrayOptions.UninitializedMemory);

            randomStatModifiersArray[0] = WeaponStatsModifiers.Defence;
            randomStatModifiersArray[1] = WeaponStatsModifiers.Attack;
            randomStatModifiersArray[2] = WeaponStatsModifiers.Health;
            AddRandomStats(itemEntity, commandBuffer, randomStatModifiersArray, ref random);
            randomStatModifiersArray.Dispose();
            return(itemEntity);
        }
Beispiel #4
0
        // Start is called before the first frame update
        void Start()
        {
            nativeResult = new NativeArray <int>(1, Allocator.Persistent);
            blobResult   = new NativeArray <int>(1, Allocator.Persistent);
            random       = new Unity.Mathematics.Random((uint)System.DateTime.Now.Ticks);

            // generate all keys
            allKeys    = new NativeArray <int>(itemCount, Allocator.Persistent);
            allQueries = new NativeArray <int>(itemCount * 2, Allocator.Persistent);
            for (int i = 0; i < itemCount; i++)
            {
                allKeys[i] = random.NextInt(0, 50); // generate duplicate keys

                // 50/50 random queries and certainly existing keys
                allQueries[i * 2]     = allKeys[i];
                allQueries[i * 2 + 1] = random.NextInt(-1000, 1000);
            }

            // construct source
            source = new NativeMultiHashMap <int, int>(allKeys.Length, Allocator.Persistent);
            for (int i = 0; i < itemCount; i++)
            {
                source.Add(allKeys[i], 1);
            }


            BlobBuilder builder = new BlobBuilder(Allocator.Temp);
            ref var     root    = ref builder.ConstructRoot <BlobMultiHashMap <int, int> >();
Beispiel #5
0
        // Update is called once per frame
        void Update()
        {
            var clock = new Stopwatch();

            clock.Start();
            for (var i = 0; i < m_EntryUpdatePerFrame; i++)
            {
                m_BlackBoard.SetEntry(m_Rand.NextInt(0, m_EntryCount), m_Rand.NextInt());
            }
            m_EntryUpdateTime   = clock.ElapsedTicks;
            m_EntryUpdateTimeMS = clock.ElapsedMilliseconds;
            clock.Restart();
            for (var i = 0; i < m_QueryCount; i++)
            {
                m_ResultsDelayedQueries[i] = m_BlackBoard.GetQueryResult(i);
            }
            m_ResultsDelayedQueriesTime   = clock.ElapsedTicks;
            m_ResultsDelayedQueriesTimeMS = clock.ElapsedMilliseconds;
            clock.Restart();
            for (var i = 0; i < m_QueryCountPerFrame; i++)
            {
                var value1 = m_Rand.NextInt();
                var value2 = m_Rand.NextInt();

                m_ResultsDirectQueries[i] = m_BlackBoard.GetQueryResult(
                    m_Rand.NextInt(0, m_EntryCount),
                    value1 < value2 ? value1 : value2,
                    value1 < value2 ? value2 : value1);
            }
            m_ResultsDirectQueriesTime   = clock.ElapsedTicks;
            m_ResultsDirectQueriesTimeMS = clock.ElapsedMilliseconds;
        }
Beispiel #6
0
        public Intent Act(ref GameStateData gs, int id)
        {
            intent.actionIntent =
                (ActionsAvailable)rdm.NextInt((int)ActionsAvailable.NONE, (int)ActionsAvailable.BLOCK);
            intent.moveIntent = (ActionsAvailable)rdm.NextInt(0, (int)ActionsAvailable.NONE);

            return(intent);
        }
Beispiel #7
0
            public void Execute(int i, TransformAccess transform)
            {
                Vector3 currentVelocity = ObjectVelocities[i];
                random  randomGen       = new random((uint)(i * Time + 1 + Seed));

                transform.position += transform.localToWorldMatrix.MultiplyVector(new Vector3(0, 0, 1)) * SwimSpeed * JobDeltaTime * randomGen.NextFloat(0.3f, 1.0f);

                if (currentVelocity != Vector3.zero)
                {
                    transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(currentVelocity), TurnSpeed * JobDeltaTime);
                }

                Vector3 currentPosition = transform.position;

                bool randomise = true;

                if (currentPosition.x > Center.x + Bounds.x / 2 || currentPosition.x < Center.x - Bounds.x / 2 || currentPosition.z > Center.z + Bounds.z / 2 || currentPosition.z < Center.z - Bounds.z / 2)
                {
                    Vector3 internalPosition = new Vector3(Center.x + randomGen.NextFloat(-Bounds.x / 2, Bounds.x / 2) / 1.3f, 0, Center.z + randomGen.NextFloat(-Bounds.z / 2, Bounds.z / 2) / 1.3f);
                    currentVelocity     = (internalPosition - currentPosition).normalized;
                    ObjectVelocities[i] = currentVelocity;
                    transform.rotation  = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(currentVelocity), TurnSpeed * JobDeltaTime * 2);
                    randomise           = false;
                }

                if (randomise)
                {
                    if (randomGen.NextInt(0, SwimChangeFrequency) <= 2)
                    {
                        ObjectVelocities[i] = new Vector3(randomGen.NextFloat(-1f, 1f), 0, randomGen.NextFloat(-1f, 1f));
                    }
                }
            }
        protected override void OnUpdate()
        {
            if (this._dropGroup.CalculateEntityCount() == 0)
            {
                return;
            }

            var dropChunks = this._dropGroup.CreateArchetypeChunkArray(Allocator.TempJob);

            for (var c = 0; c < dropChunks.Length; c++)
            {
                var chunk    = dropChunks[c];
                var entities = chunk.GetNativeArray(this.GetArchetypeChunkEntityType());
                if (entities.Length > 0)
                {
                    for (var i = 0; i < chunk.Count; i++)
                    {
                        var ownerEntity = entities[i];
                        this.Entities.With(this._lootGroup).ForEach((Entity itemEntity, ref PickedUpComponent pickedUpComponent) =>
                        {
                            if (pickedUpComponent.Owner == ownerEntity && _random.NextInt(0, 100) < 85)
                            {
                                this.PostUpdateCommands.AddComponent(itemEntity, new DestroyComponent());
                            }
                        });
                    }
                }
            }
            dropChunks.Dispose();
        }
Beispiel #9
0
        private static void AddRandomStats(Entity itemEntity, EntityCommandBuffer commandBuffer, NativeArray <WeaponStatsModifiers> randomStatModifiersArray, ref Unity.Mathematics.Random random)
        {
            var chance = 50;

            ShuffleStatsArray(randomStatModifiersArray, ref random);
            for (int i = 0; i < randomStatModifiersArray.Length; i++)
            {
                if (random.NextInt(0, 100) < chance)
                {
                    chance -= 20;
                    switch (randomStatModifiersArray[i])
                    {
                    case WeaponStatsModifiers.Attack:
                        commandBuffer.AddComponent(itemEntity, new AttackStatModifierComponent
                        {
                            Value = random.NextInt(1, 4)
                        });
                        break;

                    case WeaponStatsModifiers.Defence:
                        commandBuffer.AddComponent(itemEntity, new DefenceStatModifierComponent
                        {
                            Value = random.NextInt(1, 4)
                        });
                        break;

                    case WeaponStatsModifiers.Magick:
                        commandBuffer.AddComponent(itemEntity, new MagicStatModifierComponent
                        {
                            Value = random.NextInt(1, 4)
                        });
                        break;

                    case WeaponStatsModifiers.Health:
                        commandBuffer.AddComponent(itemEntity, new HealthStatModifierComponent
                        {
                            Value = random.NextInt(1, 4)
                        });
                        break;
                    }
                }
                else
                {
                    return;
                }
            }
        }
Beispiel #10
0
        internal void GenerateNewWayPointPath()
        {
            var roadIds = new RoadSet(RoadNetwork);

            if (!roadIds.Contains(m_RoadId))
            {
                m_RoadId = roadIds.GetNotTraversed(Math.Abs(m_Rand.NextInt()));
                if (m_RoadId.Equals(default))
Beispiel #11
0
            public void Update()
            {
                var random = new Unity.Mathematics.Random(1);

                for (var i = 0; i < _tenants; i++)
                {
                    PowerUsage += random.NextInt(12, 24);
                }
            }
Beispiel #12
0
        public void Run()
        {
            EcsEntity mainCharacter = EcsEntity.Null;

            foreach (var index in _mainCharacterFIlter)
            {
                mainCharacter = _mainCharacterFIlter.Entities[index];
            }

            if (mainCharacter == EcsEntity.Null)
            {
                return;
            }

            foreach (var index in _ecsFilter)
            {
                var joyStick = _ecsFilter.Get1[index];
                mainCharacter.Set <MoveComponent>().Value = joyStick.Value;
            }

            foreach (var index in _randomClickFilter)
            {
                var click = _ecsFilter.Get1[index];
                mainCharacter.Set <RecalculateStats>();
                mainCharacter.Set <AgilityComponent>().Value   = random.NextInt(1, 20);
                mainCharacter.Set <IntellectComponent>().Value = random.NextInt(1, 20);
                mainCharacter.Set <StrengthComponent>().Value  = random.NextInt(1, 20);

                var lc = mainCharacter.Get <LevelComponent>();
                lc.Value++;
                mainCharacter.Set <UpdateAvalableSkillsComponent>();
            }

            foreach (var index in _learnSkill)
            {
                var id       = _learnSkill.Get1[index].Id;
                var canLearn = mainCharacter.Get <AvailableToLearnSkillsComponent>();
                var skill    = canLearn.Skills[id];
                var learn    = mainCharacter.Set <LearnSkillComponent>();
                learn.Skill = skill;

                mainCharacter.Set <UpdateAvalableSkillsComponent>();
            }
        }
Beispiel #13
0
 private static void ShuffleStatsArray(NativeArray <WeaponStatsModifiers> array, ref Unity.Mathematics.Random random)
 {
     for (int i = 0; i < array.Length; i++)
     {
         var rIndex = random.NextInt(0, array.Length);
         var tmp    = array[rIndex];
         array[rIndex] = array[i];
         array[i]      = tmp;
     }
 }
        public void TestPerformance()
        {
            //map
            for (var i = 0; i < 100; i++)
            {
                var node = EntityManager.CreateEntity();
                EntityManager.AddComponentData(node, new TestNode
                {
                    Cost = 1, Id = i
                });
            }

            //request
            var random = new Random();

            random.InitState();
            for (var i = 0; i < 1000; i++)
            {
                var request = EntityManager.CreateEntity();
                EntityManager.AddComponentData(request, new PathFindingRequest
                {
                    StartId = 0, GoalId = random.NextInt(90, 99)
                });
            }

            var system = World.GetOrCreateSystem <TestSystem>();

            system.resultECB =
                World.GetOrCreateSystem <EndInitializationEntityCommandBufferSystem>();
            system.cleanECB = World.GetOrCreateSystem <EndSimulationEntityCommandBufferSystem>();

            Stopwatch sw = Stopwatch.StartNew();

            system.Update();
            system.resultECB.Update();
            EntityManager.CompleteAllJobs();

            var resultQuery =
                EntityManager.CreateEntityQuery(
                    typeof(PathResult), typeof(PathRoute));
            var resultEntities = resultQuery.ToEntityArray(Allocator.TempJob);
            var results        = resultQuery.ToComponentDataArray <PathResult>(Allocator.TempJob);

            Assert.AreEqual(1000, results.Length);
            foreach (var result in results)
            {
                Assert.AreEqual(true, result.Success, result.Log.ToString());
            }

            resultEntities.Dispose();
            results.Dispose();

            sw.Stop();
            Debug.Log(sw.ElapsedMilliseconds);
        }
Beispiel #15
0
        private IEnumerator DoAttack(Vector2 pos, Vector2 dir)
        {
            _coolDown = false;
            var ammo       = ammos[_random.NextInt(0, ammos.Count)];
            var projectile = Instantiate(ammo, pos, Quaternion.identity).GetComponent <Projectile>();

            projectile.SetDir(dir);
            yield return(new WaitForSeconds(cdTime));

            _coolDown = true;
        }
Beispiel #16
0
            public void Execute()
            {
                var random = new Unity.Mathematics.Random(Seed);

                for (int i = 0; i < InputData.Dimensions.x; i++)
                {
                    var swap = random.NextInt(0, InputData.Dimensions.x);
                    Swap(InputData, i, swap);
                    Swap(ResultData, i, swap);
                }
            }
Beispiel #17
0
 /// <summary>
 /// Returns a random element
 /// </summary>
 public static T GetRandom <T>(this IReadOnlyList <T> list, ref MRandom random)
 {
     if (list == null)
     {
         throw new ArgumentNullException(nameof(list));
     }
     if (list.Count == 0)
     {
         throw new ArgumentException("Empty list");
     }
     return(list[random.NextInt(0, list.Count)]);
 }
Beispiel #18
0
        public void ReFillEnergySuppliers(ref GameMasterData master)
        {
            var random = new Random(RandomSeed);

            foreach (ref var energySupplier in EnergySuppliers)
            {
                if (energySupplier.Value > 0)
                {
                    continue;
                }
                var _ = random.NextUInt4();
                random.state = _.x;
                energySupplier.Position.x = random.NextInt(0, master.Width - 1);
                random.state = _.y;
                energySupplier.Position.y = random.NextInt(0, master.Height - 1);
                random.state         = _.z;
                energySupplier.Value = random.NextInt(500, 20000);
                random.state         = _.w;
            }
            RandomSeed = random.state;
        }
Beispiel #19
0
        public static void Test <T>(Action <NativeArray <T> > test, Func <T> generateElement, int maxLength = 5000000)
            where T : unmanaged
        {
            Unity.Mathematics.Random rng   = new Unity.Mathematics.Random(GetRngSeed);
            NativeArray <T>          array = new NativeArray <T>(rng.NextInt(0, maxLength), Allocator.Persistent);

            for (int i = 0; i < Helpers.NUM_TESTS; i++)
            {
                for (int j = 0; j < array.Length; j++)
                {
                    array[j] = generateElement();
                }

                test(array);

                array.Dispose();
                array = new NativeArray <T>(rng.NextInt(0, maxLength), Allocator.Persistent);
            }

            array.Dispose();
        }
Beispiel #20
0
            public void Execute()
            {
                var rng = new Random(Seed);

                for (var i = 0; i <= Deck.Length - 2; ++i)
                {
                    var j   = rng.NextInt(i, Deck.Length);
                    var tmp = Deck[i];
                    Deck[i] = Deck[j];
                    Deck[j] = tmp;
                }
            }
Beispiel #21
0
            internal int SampleCommandIndex(ref Random rng)
            {
                int w = rng.NextInt(0, _totalWeight);

                for (int i = 0; i < _runningSumWeights.Length; i++)
                {
                    if (w < _runningSumWeights[i])
                    {
                        return(i);
                    }
                }
                return(_runningSumWeights.Length - 1);
            }
Beispiel #22
0
        public static void Shuffle <T>(IList <T> list, ref Rng rng)
        {
            int n = list.Count;

            while (n > 1)
            {
                n--;
                int k     = rng.NextInt(n + 1);
                T   value = list[k];
                list[k] = list[n];
                list[n] = value;
            }
        }
Beispiel #23
0
        // Spawn deals for all merchants for current year in turn 0
        protected override void OnUpdate()
        {
            var calendarQuery = GetEntityQuery(ComponentType.ReadOnly <TimeTable>());
            var calendar      = GetComponent <TimeTable>(calendarQuery.GetSingletonEntity());

            if (calendar.Turn != 0 || calendar.Pause)
            {
                return;
            }

            var dealManagerQuery = GetEntityQuery(ComponentType.ReadOnly <DealSpawner>());
            var dealPrefab       = GetComponent <DealSpawner>(dealManagerQuery.GetSingletonEntity()).DealPrefab;

            var merchantQuery = GetEntityQuery(ComponentType.ReadOnly <Merchant>());
            var merchants     = merchantQuery.ToComponentDataArray <Merchant>(Allocator.TempJob);

            Entities
            .WithStructuralChanges()
            .ForEach((in Merchant merchant) =>
            {
                // ReSharper disable once AccessToDisposedClosure
                for (var i = 0; i < merchants.Length; i++)
                {
                    // ReSharper disable once AccessToDisposedClosure
                    if (merchants[i].Id <= merchant.Id)
                    {
                        continue;
                    }

                    var numDeals = _random.NextInt(5, 11);
                    for (var j = 1; j <= numDeals; j++)
                    {
                        var newDeal = EntityManager.Instantiate(dealPrefab);
                        EntityManager.SetComponentData(newDeal, new Deal
                        {
                            Turn                = j,
                            FirstMerchantId     = merchant.Id,
                            FirstMerchantRandom = new Random(_random.NextUInt()),
                            FirstMerchantType   = merchant.Type,
                            // ReSharper disable once AccessToDisposedClosure
                            SecondMerchantId     = merchants[i].Id,
                            SecondMerchantRandom = new Random(_random.NextUInt()),
                            // ReSharper disable once AccessToDisposedClosure
                            SecondMerchantType = merchants[i].Type
                        });
                        Mappings[merchant.Type].Invoke(EntityManager, newDeal);
                        // ReSharper disable once AccessToDisposedClosure
                        Mappings[merchants[i].Type].Invoke(EntityManager, newDeal);
                    }
                }
            }).Run();
Beispiel #24
0
 /// <summary>
 /// Fisher–Yates shuffle
 /// </summary>
 /// <remarks>
 /// https://en.wikipedia.org/wiki/Fisher–Yates_shuffle
 /// </remarks>
 public static void Shuffle <T>(this IList <T> list, ref MRandom random)
 {
     if (list == null)
     {
         throw new ArgumentNullException(nameof(list));
     }
     for (int i = 0; i < list.Count; i++)
     {
         int j   = random.NextInt(i, list.Count);
         T   tmp = list[j];
         list[j] = list[i];
         list[i] = tmp;
     }
 }
Beispiel #25
0
        public static void Short()
        {
            Unity.Mathematics.Random rng = new Unity.Mathematics.Random(Helpers.GetRngSeed);

            Helpers.Test <short>(
                (array) =>
            {
                array.SIMD_MinMax(out short min, out short max);

                Assert.AreEqual(min, array.SIMD_Minimum());
                Assert.AreEqual(max, array.SIMD_Maximum());
            },
                () => (short)rng.NextInt(short.MinValue, short.MaxValue + 1));
        }
Beispiel #26
0
        private void Fill(NativeArray <TKey> queries, NativeHashMap <TKey, int> hashmap, ref BlobBuilderHashMap <TKey, int> blobBuilderHashMap,
                          int amt)
        {
            for (int i = 0; i < amt; i++)
            {
                TKey key         = GetRandomKey(random);
                int  randomValue = random.NextInt(1000);

                hashmap.TryAdd(key, randomValue);
                blobBuilderHashMap.TryAdd(key, randomValue);

                // 50/50, query random and existing keys
                queries[i * 2]     = GetRandomKey(random);
                queries[i * 2 + 1] = key;
            }
        }
Beispiel #27
0
        /// <summary>
        /// Returns a random element and removes it from the list
        /// </summary>
        public static T PopRandom <T>(this List <T> list, ref MRandom random)
        {
            if (list == null)
            {
                throw new ArgumentNullException(nameof(list));
            }
            if (list.Count == 0)
            {
                throw new ArgumentException("Empty list");
            }
            int index = random.NextInt(0, list.Count);
            T   item  = list[index];

            list.RemoveAt(index);
            return(item);
        }
Beispiel #28
0
        public static Entity GetHealthPotion(ref Unity.Mathematics.Random random, EntityCommandBuffer commandBuffer)
        {
            var itemEntity = commandBuffer.CreateEntity();
            var storeIndex = Array.FindIndex(ItemsManagerComponent.Instance.ItemsStoreComponent.Items,
                                             item => item.ItemType == ItemType.Potion);
            var iconIndex = random.NextInt(0,
                                           ItemsManagerComponent.Instance.ItemsStoreComponent.Items[storeIndex].Icons.Length);

            commandBuffer.AddComponent(itemEntity, new ItemComponent
            {
                StoreIndex = storeIndex,
                IconIndex  = iconIndex,
                Level      = 1
            });

            return(itemEntity);
        }
Beispiel #29
0
 public static void CrossOver(Network a, Network b, Network c, ref Rng r)
 {
     for (int l = 0; l < c.Layers.Count; l++)
     {
         int paramsLeft = c.Layers[l].ParamCount;
         while (paramsLeft > 0)
         {
             int     copySeqLength = Math.Min(r.NextInt(4, 16), paramsLeft);
             Network parent        = r.NextDouble() < 0.5f ? a : b;
             for (int p = 0; p < copySeqLength; p++)
             {
                 c.Layers[l][p] = parent.Layers[l][p];
             }
             paramsLeft -= copySeqLength;
         }
     }
 }
        protected override void OnUpdate()
        {
            Random r = new Random(Convert.ToUInt32(new System.Random().Next()));

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // get entities with position
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            NativeList <Entity> entitiesWithPosition = new NativeList <Entity>(Allocator.TempJob);

            Entities
            .ForEach((Entity e, ref PositionComponentData component) => {
                entitiesWithPosition.Add(e);
            })
            .Schedule();

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // shuffle
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            Job
            .WithCode(() => {
                // https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modern_method
                for (int i = entitiesWithPosition.Length - 1; i >= 1; i--)
                {
                    int j = r.NextInt(0, i + 1);     // max is not inclusive
                    (entitiesWithPosition[i], entitiesWithPosition[j]) =
                        (entitiesWithPosition[j], entitiesWithPosition[i]);
                }
            })
            .Schedule();

            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // do something with the shuffled list and dispose of it
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            Job
            .WithCode(() => {
                if (entitiesWithPosition.IsEmpty)
                {
                    return;
                }

                int index = entitiesWithPosition[0].Index;
                Debug.Log($"Initial shuffled entity index: {index}");
            })
            .WithDisposeOnCompletion(entitiesWithPosition)
            .Schedule();
        }