Beispiel #1
0
    // Update is called once per frame
    void Update()
    {
        for (short z = 0; z < 30; z++)
        {
            Vector3 topRight    = myCamera.ViewportToWorldPoint(new Vector3(1, 1, z));
            Vector3 topLeft     = myCamera.ViewportToWorldPoint(new Vector3(0, 1, z));
            Vector3 bottomRight = myCamera.ViewportToWorldPoint(new Vector3(1, 0, z));
            Vector3 bottomLeft  = myCamera.ViewportToWorldPoint(new Vector3(0, 0, z));

            // short startX = (short)topLeft.x;
            // short startY = (short)bottomLeft.y;
            // short endX = (short)topRight.x;
            // short endY = (short)topLeft.y;

            // short cameraWidth = MathF.abs(endX - startX);
            // short cameraHeight = MathF.abs(endY - startY);



            /*print(topRight);
             * print(topLeft);
             * print(bottomRight);
             * print(bottomLeft);*/
            for (short x = (short)topLeft.x; x < topRight.x; x++)
            {
                for (short y = (short)bottomLeft.y; y < topLeft.y; y++)
                {
                    // for (short z = i; z < 21; z++)
                    // {
                    if (x % sectorWidth == 0 && y % sectorWidth == 0)
                    {
                        ushort posY = (ushort)y;
                        ushort posZ = (ushort)topRight.z;
                        long   seed = (long)x << 32 | (long)posY << 16 | (long)posZ;
                        randGen = new Lehmer(seed);

                        long rand = randGen.randomInt(1, 1000);

                        bool starExists = rand == 1;

                        if (starExists && !Physics.CheckSphere(new Vector3(x, y, (short)topRight.z), sectorWidth / 2f))
                        {
                            GameObject planet = Instantiate(myPrefab, new Vector3(x, y, (short)topRight.z), Quaternion.identity);
                            float      scale  = randGen.randomInt(1, 100) / 100f;
                            planet.transform.localScale = new Vector3(scale * sectorWidth, scale * sectorWidth, scale * sectorWidth);
                            // print(planet.transform.localScale);
                        }
                    }
                    // }
                }
            }
        }
    }
Beispiel #2
0
    void InitProps(bool isAI)
    {
        // init BoldiCount
        SetBoldiCount(isAI ? c_StartBoldiCountForAIs : Lehmer.Range(0, 50));

        // scale according to start BoldiCount
        SetScale(Vector3.one * (1.0f + m_BoldiCount * c_ScalePerBoldi));

        // manage grow rate
        m_GrowRate = 1.0f + m_BoldiCount * c_GrowPerBoldi;
        m_GrowTimer.StartTimer(1.0f / m_GrowRate);
    }
Beispiel #3
0
        void LaunchRandom()
        {
            // find a home which is mine
            IHome[] myHomes    = m_Gameboard.GetHomes(TeamId, true);
            IHome[] theirHomes = m_Gameboard.GetHomes(TeamId, false);

            // launch boldies
            if (myHomes.Length > 0 && theirHomes.Length > 0)
            {
                IHome   from   = myHomes[Lehmer.Range(0, myHomes.Length)];
                IHome   to     = theirHomes[Lehmer.Range(0, theirHomes.Length)];
                EAmount amount = (EAmount)Lehmer.Range(0, (int)EAmount.Count);
                LaunchBoldies(from, to, amount);
            }
        }
Beispiel #4
0
    void CreateHomes(Vector3 bounds)
    {
        // create random buffer
        IntBufferedRandom rnd = new IntBufferedRandom();

        rnd.AddValueRange(0, c_GridSize * c_GridSize);
        rnd.Range = Lehmer.Range;

        // create homes
        int homeCount = Lehmer.Range(c_MinHomeCount, c_GridSize * c_GridSize);

        for (int i = 0; i < homeCount; ++i)
        {
            CreateHome(GetPosition(rnd.DrawValue(), bounds));
        }
    }
Beispiel #5
0
        private void AutoGenerate(object stack)
        {
            uint   multiplier, initialValue, divider;
            bool   correctData, validPeriod;// flags
            int    period, aperiodicity;
            double estimation;
            IEnumerable <double> normalizedSequence;
            Mediator             md;

            do
            {
                (multiplier, initialValue, divider) = Lehmer.GenerateRandomParameters();

                RunCore(out md, multiplier, initialValue, divider, out normalizedSequence,
                        out estimation, out period, out aperiodicity);

                validPeriod = md.CheckIndirectEstimation(estimation, 0.001);
                correctData = period > 50_000;
            } while (!correctData || !validPeriod);

            UpdateTextboxes(multiplier, initialValue, divider);
            UpdateView(md, normalizedSequence, stack, estimation, period, aperiodicity);
        }
Beispiel #6
0
    void Update()
    {
        if (!GameManager.Instance.dead)
        {
            while (levelCount < MaxSpawn)
            {
                Level s_Level = Instantiate(g_Level.gameObject, transform).GetComponent <Level>();
                s_Level.name = "Level " + level;
                level++;

                if (curLevel != null)
                {
                    s_Level.Obstacle = true;
                    if (!firstWall)
                    {
                        int j = 0;
                        for (int i = 1; i < 4; i++)
                        {
                            if (i != ((side + 2) % 4) && i != ((side + 2) % 4))
                            {
                                availableSides[j] = i;
                                j++;
                            }
                        }
                        side = availableSides[(int)(Lehmer.Next() * j)];
                    }
                    else
                    {
                        side      = 2;
                        firstWall = false;
                    }

                    Wall_Door prev = GetWall(curLevel, side);
                    Wall_Door next = GetWall(s_Level, (side + 2) % 4);

                    prev.Opened   = true;
                    next.Opened   = true;
                    next.Entrance = true;

                    switch (side)
                    {
                    case 1:
                        pos.x += LevelUnits;
                        break;

                    case 2:
                        pos.z += LevelUnits;
                        break;

                    case 3:
                        pos.x -= LevelUnits;
                        break;
                    }
                }

                s_Level.transform.position = pos;
                curLevel = s_Level;

                levels.Add(s_Level);
                levelCount++;
            }
        }
    }
Beispiel #7
0
 void StartTimer()
 {
     m_Timer.StartTimer(Lehmer.Range(2.0f, 5.0f));
 }
        void CommmitDirtyData(DirtyData dirtyData, CommitItems commitItems)
        {
            lock (_revenueLock)
            {
                foreach (var tick in dirtyData.DirtyRevenueTicks)
                {
                    var revenues = GetRevenueReceivers(tick);

                    _revenueReceiversStroage.UpdateEntry(tick, revenues.ToByteArray());
                    _revenueReceiversStroage.LastAvailableTick = Math.Max(tick, _revenueReceiversStroage.LastAvailableTick);
                }

                var last = GetRevenueReceivers(_revenueReceiversStroage.LastAvailableTick);
                if (last != null)
                {
                    var previous      = GetRevenueReceivers(last.PreviousTick);
                    var lastProcessed = _revenueReceiversStroage.LastProcessedTick;

                    while (previous != null)
                    {
                        if (previous.Tick <= lastProcessed)
                        {
                            break;
                        }

                        var tick        = previous.Tick;
                        var accounts    = previous.Accounts;
                        var count       = accounts.Count;
                        var revenueInfo = previous.RevenueInfo;

                        var tickRevenue    = revenueInfo.Revenue * revenueInfo.AccountRevenueFactor;
                        var accountRevenue = tickRevenue / count;
                        var maxCount       = tickRevenue / Currency.OneCen;

                        if (count > maxCount)
                        {
                            var list = new List <long>(accounts);
                            list.Sort((a, b) => a.CompareTo(b));

                            var rand = new Lehmer(count);
                            for (var i = 0; i < count; i++)
                            {
                                var a = rand.Next(count);

                                var tmp = list[i];
                                list[i] = list[a];
                                list[a] = tmp;
                            }

                            for (var i = 0; i < maxCount; i++)
                            {
                                var accountId = list[i];
                                var account   = GetMaintainAccount(accountId);
                                account.AddRevenue(tick, (int)Currency.OneCen);
                                commitItems.DirtyAccounts.Add(accountId);
                            }
                        }
                        else
                        {
                            foreach (var accountId in accounts)
                            {
                                var account = GetMaintainAccount(accountId);
                                account.AddRevenue(tick, accountRevenue);
                                commitItems.DirtyAccounts.Add(accountId);
                            }
                        }

                        previous = GetRevenueReceivers(previous.PreviousTick);
                    }

                    _revenueReceiversStroage.LastProcessedTick = last.PreviousTick;
                }
            }

            foreach (var accountId in commitItems.DirtyAccounts)
            {
                var account = GetMaintainAccount(accountId);
                _maintainAccountStorage.UpdateEntry(accountId, account.ToByteArray());
            }
        }
    GameObject OffsetPrefab(PrefabSet sectionItem, GameObject obs)
    {
        Vector3 ori = obs.transform.position;
        Vector3 pos = ori;

        if (sectionItem.Origin != OriginPara.Center)
        {
            float xo = 0;
            float yo = 0;

            switch (sectionItem.Origin)
            {
            case OriginPara.NorthEast:
                xo = levelUnits / 2;
                yo = levelUnits / 2;
                break;

            case OriginPara.NorthWest:
                xo = -levelUnits / 2;
                yo = levelUnits / 2;
                break;

            case OriginPara.SouthEast:
                xo = levelUnits / 2;
                yo = -levelUnits / 2;
                break;

            case OriginPara.SouthWest:
                xo = -levelUnits / 2;
                yo = -levelUnits / 2;
                break;

            case OriginPara.RandomCorner:
                xo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                yo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                break;

            case OriginPara.Random:
                if (Lehmer.Next() > 0.5)
                {
                    xo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                    yo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                }
                break;
            }

            float ao = (start == 1 || start == 3) ? yo : xo;
            float bo = (start == 1 || start == 3) ? xo : yo;

            switch (start)
            {
            case 1:
                ao *= -1;
                break;

            case 2:
                ao *= -1;
                bo *= -1;
                break;

            case 3:
                bo *= -1;
                break;
            }

            pos.x += ao;
            pos.z += bo;
        }

        Vector2 d = Vector2.zero;

        if (sectionItem.UseCustomPos)
        {
            d = (sectionItem.EndPos - sectionItem.StartPos);
        }
        else
        {
            d = (levelUnits * Vector2.one) - sectionItem.Size;
        }

        float x = (int)(Lehmer.Next() * d.x);
        float y = (int)(Lehmer.Next() * d.y);

        float a = (start == 1 || start == 3) ? y : x;
        float b = (start == 1 || start == 3) ? x : y;

        switch (start)
        {
        case 1:
            a *= -1;
            break;

        case 2:
            a *= -1;
            b *= -1;
            break;

        case 3:
            b *= -1;
            break;
        }

        a -= ((pos - ori).x == 0.0f) ? a : (((pos - ori).x > 0) ? (sectionItem.Size.x / 2) : -(sectionItem.Size.y / 2));
        b -= ((pos - ori).z == 0.0f) ? b : (((pos - ori).z > 0) ? (sectionItem.Size.y / 2) : -(sectionItem.Size.y / 2));

        pos.x += a;
        pos.z += b;

        if (sectionItem.Offset != OffsetPara.None)
        {
            float offset = 4.0f;
            int   dir    = 0;

            switch (sectionItem.Offset)
            {
            case OffsetPara.Closer:
                dir = 1;
                break;

            case OffsetPara.Further:
                dir = -1;
                break;

            case OffsetPara.Random:
                dir = (Lehmer.Next() > 0.5) ? -1 : 1;
                break;
            }

            switch (start)
            {
            case 0:
                pos.z -= offset * dir;
                break;

            case 1:
                pos.x += offset * dir;
                break;

            case 2:
                pos.z += offset * dir;
                break;

            case 3:
                pos.x -= offset * dir;
                break;
            }
        }

        pos.y = 0.0f;
        obs.transform.position = pos;

        if (start == 1 || start == 3)
        {
            obs.transform.rotation = Quaternion.AngleAxis(90.0f, Vector3.up);
        }

        return(obs);
    }
    public void GenerateObstacles()
    {
        if (obstacles.Count > 0)
        {
            foreach (GameObject obj in obstacles)
            {
                Destroy(obj);
            }
            obstacles.Clear();
        }

        if (enemies.Count > 0)
        {
            foreach (GameObject obj in enemies)
            {
                Destroy(obj);
            }
            enemies.Clear();
        }

        for (int i = 0; i < 4; i++)
        {
            Wall_Door wall = GetWall(i);
            if (wall.Opened)
            {
                if (wall.Entrance)
                {
                    start = i;
                }
                else
                {
                    end = i;
                }
            }
        }

        int        selection;
        PrefabSet  sectionItem;
        GameObject item;
        GameObject obs;

        if (Lehmer.Next() > 0.5)
        {
            selection   = Mathf.FloorToInt((float)Lehmer.Next() * Sections.Length);
            sectionItem = Sections[selection];

            item = sectionItem.Prefab;
            obs  = Instantiate(item, transform);
            obs  = OffsetPrefab(sectionItem, obs);

            obstacles.Add(obs);
        }

        if (Lehmer.Next() > 0.5)
        {
            selection   = Mathf.FloorToInt((float)Lehmer.Next() * Enemies.Length);
            sectionItem = Enemies[selection];

            item = sectionItem.Prefab;
            obs  = Instantiate(item, transform);
            obs  = OffsetPrefab(sectionItem, obs);

            enemies.Add(obs);
        }
    }
Beispiel #11
0
    void Start()
    {
        minMoonMass = (int)(minPlanetMass * moonMassSacle);
        maxMoonMass = (int)(maxPlanetMass * moonMassSacle);

        x = gameInfoObject.GetComponent <GameInfo>().x;
        y = gameInfoObject.GetComponent <GameInfo>().y;
        z = gameInfoObject.GetComponent <GameInfo>().z;
        GameObject star = Instantiate(starPrefab, starPoisiton, Quaternion.identity);

        ushort posY = (ushort)y;
        ushort posZ = (ushort)z;

        nLehmer       = (long)x << 32 | (long)posY << 16 | (long)posZ;
        randGenerator = new Lehmer(nLehmer);

        bool starExists = randGenerator.randomInt(0, 15) == 1;

        scale      = randGenerator.randomInt(1, 100) / 100f;
        numPlanets = (int)randGenerator.randomInt(0, maxNumPlanets);
        // numPlanets = 1;

        planetsGameObjects = new GameObject[numPlanets];
        rigidBodies        = new Rigidbody[numPlanets];
        planets            = new Planet[numPlanets];
        moons            = new Moon[numPlanets, maxNumMoons];
        moonsGameObjects = new GameObject[numPlanets, maxNumMoons];
        orbits           = new EllipseOrbit[numPlanets, maxNumMoons];



        for (int i = 0; i < numPlanets; i++)
        {
            int     maxPlanetScaleToInt = (int)(maxPlanetScale * 100);
            float   planetScale         = (maxPlanetScaleToInt - 1 - (uint)randGenerator.randomInt(1, maxPlanetScaleToInt - 1)) / 100f;
            Vector3 planetPosition      = new Vector3(randGenerator.randomInt(-maxPlanetRadiusDistance, maxPlanetRadiusDistance),
                                                      randGenerator.randomInt(-maxPlanetRadiusDistance, maxPlanetRadiusDistance),
                                                      randGenerator.randomInt(-maxPlanetRadiusDistance, maxPlanetRadiusDistance));

            GameObject planet = Instantiate(planetPrefab, planetPosition, Quaternion.identity);
            planetsGameObjects[i] = planet;
            planets[i]            = new Planet();
            // startVelocity = (starPoisiton - planetPosition).normalized;
            // planets[i].setVelocity(startVelocity);
            planets[i].setMass((float)randGenerator.randomInt(minPlanetMass, maxPlanetMass));

            //MOOOOOOOOOOOOOOOOOOOOON
            numMoons = (int)randGenerator.randomInt(0, maxNumMoons);
            planets[i].setNumMoons(numMoons);



            for (int j = 0; j < numMoons; j++)
            {
                Vector3 moondistance = new Vector3(randGenerator.randomInt(-maxMoonRadiusDistance, maxMoonRadiusDistance),
                                                   randGenerator.randomInt(-maxMoonRadiusDistance, maxMoonRadiusDistance),
                                                   randGenerator.randomInt(-maxMoonRadiusDistance, maxMoonRadiusDistance));

                Vector3 moonPosition = moondistance + planetPosition;

                float minMagnitude = moonPosition.magnitude + planetRadius + 1;
                float maxMagnitude = minMagnitude + maxVectorMagFromPlanet;
                float mag          = (float)randGenerator.randomInt((int)minMagnitude, (int)maxMagnitude);
                float b            = mag / 2;

                Vector3 ellipseEndpoint = (mag * -1 * moondistance) + moonPosition;
                Vector3 midPoint        = (b * -1 * moonPosition) + moonPosition;

                Vector3 normal = moondistance;
                Vector3 tangent;
                Vector3 t1 = Vector3.Cross(normal, Vector3.forward);
                Vector3 t2 = Vector3.Cross(normal, Vector3.up);
                if (t1.magnitude > t2.magnitude)
                {
                    tangent = t1;
                }
                else
                {
                    tangent = t2;
                }

                float a = (float)randGenerator.randomInt((int)minMagnitude, (int)maxMagnitude);
                orbits[i, j] = new EllipseOrbit(a * .2f, b * .2f, midPoint);
                orbits[i, j].setTheta((float)randGenerator.randomInt(0, 90));



                GameObject moon = Instantiate(moonPrefab, moonPosition, Quaternion.identity);
                moonsGameObjects[i, j] = moon;
                moons[i, j]            = new Moon();
                //moons[i, j].setVelocity(startVelocity);
                moons[i, j].setMass((float)randGenerator.randomInt(minMoonMass, maxMoonMass));
            }
        }
    }