示例#1
0
    public bool Split(float c)
    {
        if (ULife == 0)
        {
            //Step 1, initialize

            ULife = RandomFloat.Range(0.5f, 1f);
            BLife = 0;
        }

        float BNext = BLife + h(c, 0.0025f, 0.002f) * (1 - BLife); //Step 2

        if (BNext > ULife)
        {
            //Tumble and return to step 1
            ULife = 0;
            BLife = 0;
            return(true);
        }
        else
        {
            //Keep running, and return to step 2
            BLife = BNext;
            return(false);
        }
    }
示例#2
0
    void Start()
    {
        var time          = GetTime();
        var randomService = new RandomFloat(new System.Random());
        var collisions    = GetCollisions();

        //Create the Hazard Spawner
        var hazardSpawner = new HazardSpawner(
            time,
            spawnInterval,
            randomService,
            minHazardHeight,
            maxHazardHeight,
            initialPosition,
            hazardSpeed
            );

        //Initialize Bird
        bird.Setup(time, collisions);

        //When a collision event occurs, the hazard spawner stop spawning hazards
        collisions.Subscribe(collisionEvent => hazardSpawner.Stop());

        //Every time the HazardSpawner spawns a hazar, create a hazard view
        hazardSpawner.Hazards.Subscribe(hazard => CreateHazard(hazard, collisions));
    }
示例#3
0
    public bool Die(float c)
    {
        if (UDeath == 0)
        {
            //Step 1, initialize
            UDeath = RandomFloat.NextFloat();
            BDeath = 0;
        }

        float BNext = BDeath + h(c, -0.001f, 0.035f) * (1 - BDeath); //Step 2

        if (BNext > UDeath)
        {
            //Tumble and return to step 1
            UDeath = 0;
            BDeath = 0;
            return(true);
        }
        else
        {
            //Keep running, and return to step 2
            BDeath = BNext;
            return(false);
        }
    }
示例#4
0
        public void Init(ISFSObject gameInfo)
        {
            //interval,0.2:0.3#2:4#2:4#3:5#8:20
            if (!gameInfo.ContainsKey("interval"))
            {
                return;
            }
            var info      = gameInfo.GetUtfString("interval");
            var intervals = info.Split('#');
            var len       = intervals.Length;

            _randomFloat = new RandomFloat[len];
            for (var i = 0; i < len; i++)
            {
                var interval = intervals[i];
                var minMax   = interval.Split(':');
                if (minMax.Length < 2)
                {
                    continue;
                }
                var rf = new RandomFloat();
                float.TryParse(minMax[0], out rf.Min);
                float.TryParse(minMax[1], out rf.Max);
                _randomFloat[i] = rf;
            }
            SetInterVal();
        }
示例#5
0
    public HazardSpawner(
        UniRx.IObservable <float> time,
        float spawnInterval,
        RandomFloat randomService,
        float minHazardHeight,
        float maxHazardHeight,
        float initialPosition,
        float hazardSpeed
        )
    {
        this.randomService   = randomService;
        this.minHazardHeight = minHazardHeight;
        this.maxHazardHeight = maxHazardHeight;
        this.initialPosition = initialPosition;
        this.hazardSpeed     = hazardSpeed;
        this.time            = time;
        spawning             = true;

        // Transform the time to emit events every 'spawnInterval' seconds
        Hazards = time
                  .Buffer(Span(spawnInterval))
                  // Put an event at the beginning of the time-line
                  .StartWith(FirstSpawnEvent())
                  // Only spawn if 'spawning' is on
                  .Where(_ => spawning)
                  // transform the spawn events into hazards
                  .Select(l => HazardFactory());
    }
示例#6
0
            /// <summary>
            /// Create a PowerCutAreaGimmickLocator with random values.
            /// </summary>
            /// <param name="randomFloat">Function to generate a random float.</param>
            /// <returns>The generated locator.</returns>
            private static PowerCutAreaGimmickLocator CreateLocator(RandomFloat randomFloat)
            {
                var position = new Vector4(randomFloat(), randomFloat(), randomFloat(), randomFloat());
                var rotation = new Quaternion(randomFloat(), randomFloat(), randomFloat(), randomFloat());
                var locator  = new PowerCutAreaGimmickLocator(position, rotation);

                return(locator);
            }
示例#7
0
 public static Vector3 GetRandomVector(float xRange, float yRange, float zRange)
 {
     return(new Vector3
            (
                RandomFloat.Range(-xRange, xRange),
                RandomFloat.Range(-yRange, yRange),
                RandomFloat.Range(-zRange, zRange)
            ));
 }
示例#8
0
 public static Vector3 GetRandomVector(float xRangeMin, float yRangeMin, float zRangeMin, float xRangeMax, float yRangeMax, float zRangeMax)
 {
     return(new Vector3
            (
                RandomFloat.Range(xRangeMin, xRangeMin),
                RandomFloat.Range(yRangeMin, yRangeMax),
                RandomFloat.Range(zRangeMin, zRangeMax)
            ));
 }
    void ThenHazardsHaveExpectedHeights(List <Hazard> spawnedHazards)
    {
        var randomService = new RandomFloat(new Random(RandomSeed));

        foreach (var hazard in spawnedHazards)
        {
            var randomHeight = randomService.Next(MinHazardHeight, MaxHazardHeight);
            AssertAreApproximatelyEqual(hazard.Height, randomHeight, 0.01f);
        }
    }
示例#10
0
    internal static Vector3 GetRandomPosition(this BoxCollider2D self, PositionSpace space = PositionSpace.World)
    {
        Vector3 pos = (space == PositionSpace.Local) ?
                      self.transform.localPosition
                                        : self.transform.position;

        pos += (Vector3)self.offset + new Vector3(RandomFloat.Range(-self.size.x, self.size.x) / 2, RandomFloat.Range(-self.size.y, self.size.y) / 2, 0);

        return(pos);
    }
示例#11
0
            /// <summary>
            /// Create a NamedGimmickLocator with random values.
            /// </summary>
            /// <param name="randomFloat">Function to generate a random float.</param>
            /// <returns>The generated locator.</returns>
            private static NamedGimmickLocator CreateLocator(RandomFloat randomFloat)
            {
                var position    = new Vector4(randomFloat(), randomFloat(), randomFloat(), randomFloat());
                var rotation    = new Quaternion(randomFloat(), randomFloat(), randomFloat(), randomFloat());
                var locatorName = 424242u;
                var dataSetName = 191919u;
                var locator     = new NamedGimmickLocator(position, rotation, locatorName, dataSetName);

                return(locator);
            }
示例#12
0
            /// <summary>
            /// Create a ScaledGimmickLocator with random values.
            /// </summary>
            /// <param name="randomFloat">Function to generate a random float.</param>
            /// <returns>The generated locator.</returns>
            private static ScaledGimmickLocator CreateLocator(RandomFloat randomFloat)
            {
                var position    = new Vector4(randomFloat(), randomFloat(), randomFloat(), randomFloat());
                var rotation    = new Quaternion(randomFloat(), randomFloat(), randomFloat(), randomFloat());
                var scale       = new WideVector3(randomFloat(), randomFloat(), randomFloat(), 42, 19);
                var locatorName = 424242u;
                var dataSetName = 191919u;
                var locator     = new ScaledGimmickLocator(position, rotation, scale, locatorName, dataSetName);

                return(locator);
            }
 public static CenterObjectV1 NextPosition()
 {
     return(new CenterObjectV1
     {
         Type = "Point",
         Coordinates = new double[]
         {
             RandomFloat.NextFloat(-180, 168), // Longitude
             RandomFloat.NextFloat(-90, 90),   // Latitude
         }
     });
 }
示例#14
0
    public static Color GetRandomHueColor(float saturation, float lightness)
    {
        ColorHSL hsl = new ColorHSL()
        {
            h = RandomFloat.Range(0, 360),
            s = saturation,
            l = lightness
        };
        Color rgb;

        hslToRgb(hsl, out rgb);
        return(rgb);
    }
示例#15
0
    //Simulates numCells many cells with iterations many steps each
    public void CreateCells(int numCells)
    {
        cells[0] = new List <Cell>();
        for (int i = 0; i < numCells; i++)
        {
            float x = RandomFloat.Range(-12f, 12f);
            float z = RandomFloat.Range(-12f, 12f);

            Cell cell = BacteriaFactory.CreateNewCell(x, z, RandomFloat.Range(0, 2 * MathFloat.PI), false);
            cells[0].Add(cell);
            allCells.Add(cell);
        }
    }
示例#16
0
    public static Vector3 GetRandomPointInVolume(this Bounds self)
    {
        Vector3 point   = self.center;
        Vector3 extents = self.extents;

        point += new Vector3
                 (
            RandomFloat.Range(-extents.x, extents.x),
            RandomFloat.Range(-extents.y, extents.y),
            RandomFloat.Range(-extents.z, extents.z)
                 );
        return(point);
    }
 public static BeaconV1 NextBeacon(int siteCount = 100)
 {
     return(new BeaconV1()
     {
         Id = IdGenerator.NextLong(),
         SiteId = NextSiteId(siteCount),
         Udi = IdGenerator.NextShort(),
         Label = RandomString.NextString(10, 25),
         Type = NextBeaconType(),
         Radius = RandomFloat.NextFloat(3, 150),
         Center = NextPosition()
     });
 }
    protected float CalculateTumbleAngle()
    {
        //Tumble angle based on article (Edgington)
        float newAngle = RandomFloat.Range(18f, 98f);
        float rand     = RandomFloat.Range(0.0f, 1.0f);

        if (rand > 0.5)
        {
            newAngle *= -1;
        }
        newAngle *= MathFloat.PI / 180;
        newAngle += this.angle;
        return(newAngle);
    }
示例#19
0
    internal static Vector3 GetRandomPosition(this CircleCollider2D self, PositionSpace space = PositionSpace.World)
    {
        Vector3 pos = (space == PositionSpace.Local) ?
                      self.transform.localPosition
                                        : self.transform.position;

        Vector3 point = new Vector3(RandomFloat.Range(-self.radius, self.radius), 0, 0);

        point = point.RotateZ(RandomFloat.Range(0, 360));

        pos += (Vector3)self.offset + point;

        return(pos);
    }
    void GivenAHazardSpawner()
    {
        var randomService = new RandomFloat(new Random(RandomSeed));

        hazardSpawner = new HazardSpawner(
            time,
            SpawnHazardsEvery,
            randomService,
            MinHazardHeight,
            MaxHazardHeight,
            HazardInitialPosition,
            HazardsSpeed
            );
    }
示例#21
0
    public bool DecideState(float c)
    {
        SolveStiff(c);
        double r = RandomFloat.NextFloat();

        if (S > U)
        {
            S = 0.0f;
            U = RandomFloat.Range(0f, 0.8f);
            return(false); //Tumbling
        }
        else
        {
            return(true); //Running
        }
    }
示例#22
0
            public void SetValue(Type type, object value)
            {
                if (type == Type.Bool)
                {
                    m_Bool = (bool)value;
                }
                else if (type == Type.Int)
                {
                    m_Int = (Int)value;
                }
                else if (type == Type.Float)
                {
                    m_Float = (Float)value;
                }
                else if (type == Type.FloatRange)
                {
                    m_FloatRange = (FloatRange)value;
                }
                else if (type == Type.IntRange)
                {
                    m_IntRange = (IntRange)value;
                }
                else if (type == Type.RandomFloat)
                {
                    m_RandomFloat = (RandomFloat)value;
                }
                else if (type == Type.RandomInt)
                {
                    m_RandomInt = (RandomInt)value;
                }
                else if (type == Type.String)
                {
                    m_String = (string)value;
                }
                else if (type == Type.None)
                {
                    return;
                }

                Changed.Send(this);
            }
示例#23
0
    internal virtual void TakeDamage()
    {
        if (state == MonsterState.Living)
        {
            Vector3 splashVector = (transform.position - Player.Instance.transform.position).normalized;

            life -= 1;
            if (life == 0)
            {
                ApplySound();
                state = MonsterState.Dying;

                GoTweenChain chain = new GoTweenChain();
                chain.insert(0,
                             transform
                             .scaleTo(0.5f, 0.75f, true)
                             .eases(GoEaseType.QuartOut)
                             );
                chain.insert(0,
                             transform
                             .localEularAnglesTo(0.5f, new Vector3(0, 0, RandomFloat.Range(-180, 180)))
                             .eases(GoEaseType.QuadOut)
                             );
                chain.insert(0.25f,
                             gameObject
                             .alphaTo(0.25f, 0, GoEaseType.QuartOut)
                             );
                chain.setOnCompleteHandler(c => gameObject.DestroySelf());
                chain.Start();
            }

            transform.position += splashVector * 25;

//          bool isDying = ( life == 0 );
//          transform.position += splashVector * ( isDying ? 100 : 25 );
        }
    }
示例#24
0
    public bool DecideState(float c)
    {
        float dC = c - l;

        l = c;
        if (U == 0)
        { //Step 1, initialize
            U = RandomFloat.NextFloat();
            B = 0;
        }
        float BNext = B + h(dC) * (1 - B); //Step 2

        if (BNext > U)
        { //Tumble and return to step 1
            U = 0;
            B = 0;
            return(false); //Tumble
        }
        else
        {                 //Keep running, and return to step 2
            B = BNext;
            return(true); //Run
        }
    }