本文整理汇总了C#中System.Random.Float方法的典型用法代码示例。如果您正苦于以下问题:C# Random.Float方法的具体用法?C# Random.Float怎么用?C# Random.Float使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Random
的用法示例。
在下文中一共展示了Random.Float方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddSectorEntities
private void AddSectorEntities(MySectorObjectCounts asteroidCounts, MyMwcVector3Int sectorPosition, Random random, float entityMinimalSize, int maxEntityCount, List<MySolarSystemMapEntity> entities, bool onlyStaticAsteroids)
{
// Space around asteroid should be at least 1.2x - 2x it's size
float asteroidSpacingCoeficient = 0.7f;
// Asteroid count mean is 40%
float asteroidCountMean = 0.4f;
Dictionary<int, int> entityCounts = new Dictionary<int, int>();
foreach (MySolarSystemEntityEnum t in Enum.GetValues(typeof(MySolarSystemEntityEnum)))
{
entityCounts.Add((int)t, 0);
}
MyDynamicAABBTree prunningStructure = new MyDynamicAABBTree(Vector3.Zero);
foreach (BoundingSphere boundingSphere in m_safeAreas)
{
BoundingBox bb = BoundingBox.CreateFromSphere(boundingSphere);
prunningStructure.AddProxy(ref bb, new Render.MyRenderObject(null, null), 0);
}
// Generate asteroids, check collisions (order asteroids by size)
//var asteroids = GetAsteroids(asteroidCounts, entityMinimalSize);
var asteroids = GetAsteroids(asteroidCounts, entityMinimalSize);
foreach (var info in asteroids)
{
if (info.EntityType != MySolarSystemEntityEnum.StaticAsteroid && onlyStaticAsteroids)
continue;
float radius = info.SizeInMeters / 2;
float count = info.ObjectCount;
float positionOffset = 1.3f;
count = (float)Math.Round(count * random.Float(1 - asteroidCountMean, 1 + asteroidCountMean));
if (info.EntityType == MySolarSystemEntityEnum.VoxelAsteroid)
{
positionOffset = 0.6f; //generate voxels more in center
}
while (entityCounts[(int)info.EntityType] < count && entityCounts[(int)info.EntityType] < maxEntityCount)
{
Vector3? pos = FindEntityPosition(prunningStructure, random, radius, positionOffset, asteroidSpacingCoeficient);
if (pos.HasValue)
{
MySolarSystemMapEntity entity = new MySolarSystemMapEntity(sectorPosition, pos.Value, info.SizeInMeters, info.EntityType.ToString(), info.EntityType);
entities.Add(entity);
if (!MySectorGenerator.IsOutsideSector(pos.Value, radius))
{
entityCounts[(int)info.EntityType]++;
}
BoundingBox bb = new BoundingBox(pos.Value - new Vector3(radius), pos.Value + new Vector3(radius));
prunningStructure.AddProxy(ref bb, new Render.MyRenderObject(null, null), 0);
}
else
entityCounts[(int)info.EntityType]++;
}
}
}
示例2: GenerateBots
private void GenerateBots(MySolarSystemMapSectorData sectorData, List<MyMwcObjectBuilder_Base> addToList, Random rnd, MyDynamicAABBTree prunningStructure)
{
int spawnPt = (int)(rnd.Float(0, 50) /** sectorData.AreaInfluenceMultiplier*/ );
float radius = 100;
for (int i = 0; i < spawnPt; i++)
{
Vector3? pos = FindEntityPosition(prunningStructure, rnd, radius, 0.8f, 0.8f);
if (pos.HasValue)
{
//MyMwcObjectBuilder_FactionEnum faction = MyMwcObjectBuilder_FactionEnum.None;
var faction = MyFactions.GetFactionBySector(sectorData.SectorPosition);
//var builder = new MyMwcObjectBuilder_;
MyMwcObjectBuilder_SpawnPoint spobj = MyMwcObjectBuilder_Base.CreateNewObject(MyMwcObjectBuilderTypeEnum.SpawnPoint, null) as MyMwcObjectBuilder_SpawnPoint;
spobj.BoundingRadius = radius;
spobj.RespawnTimer = 1;
spobj.SpawnCount = 5;
spobj.PositionAndOrientation.Position = pos.Value;
spobj.PositionAndOrientation.Forward = Vector3.Forward;
spobj.PositionAndOrientation.Up = Vector3.Up;
spobj.Faction = faction;
List<MyMwcObjectBuilder_SmallShip_Weapon> weapons = new List<MyMwcObjectBuilder_SmallShip_Weapon>();
List<MyMwcObjectBuilder_SmallShip_Ammo> ammo = new List<MyMwcObjectBuilder_SmallShip_Ammo>();
List<MyMwcObjectBuilder_AssignmentOfAmmo> assignments = new List<MyMwcObjectBuilder_AssignmentOfAmmo>();
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon));
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon));
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Cannon));
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Cannon));
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Shotgun));
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Drilling_Device_Crusher));
weapons.Add(new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Universal_Launcher_Front));
assignments.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Primary, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));
assignments.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Secondary, MyMwcObjectBuilder_AmmoGroupEnum.Cannon, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Basic));
List<MyMwcObjectBuilder_InventoryItem> inventoryItems = new List<MyMwcObjectBuilder_InventoryItem>();
inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Ammo(MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic), 1000f));
inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Ammo(MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Basic), 25));
//spobj.m_shipTemplates.Add(
int numships = rnd.Next(1, 10);
for (int x = 0; x < numships; x++)
{
spobj.ShipTemplates.Add(
//new MyMwcObjectBuilder_SmallShip_Bot(
// MyMwcObjectBuilder_SmallShip_TypesEnum.LIBERATOR,
// weapons,
// new MyMwcObjectBuilder_SmallShip_Engine(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.Chemical_1),
// ammo,
// assignments,
// null,
// faction
// ) as MyMwcObjectBuilder_SmallShip_Bot
new MyMwcObjectBuilder_SmallShip_Bot(
MyMwcObjectBuilder_SmallShip_TypesEnum.LIBERATOR,
new MyMwcObjectBuilder_Inventory(inventoryItems, 32),
weapons,
new MyMwcObjectBuilder_SmallShip_Engine(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.Chemical_1),
assignments,
null,
null,
null,
MyGameplayConstants.HEALTH_RATIO_MAX,
100f,
float.MaxValue,
float.MaxValue,
true,
false,
faction,
MyAITemplateEnum.DEFAULT,
0,
1000,
1000,
MyPatrolMode.CYCLE,
null,
BotBehaviorType.IDLE,
MyLightsConstants.MAX_SPOTLIGHT_SHADOW_RANGE,
0, false, true) as MyMwcObjectBuilder_SmallShip_Bot
);
}
addToList.Add(spobj);
/*
MySolarSystemMapEntity entity = new MySolarSystemMapEntity(sectorData.SectorPosition, pos, size, "Asteroid", MySolarSystemEntityEnum.Asteroid);
sectorData.Entities.Add(entity);
*/
}
}
}
示例3: GenerateSectorObjectBuildersFromSolarEntities
public void GenerateSectorObjectBuildersFromSolarEntities(List<MySolarSystemMapEntity> entities, List<MyMwcObjectBuilder_Base> addToList, Random rnd, MyWeightDictionary<MyMwcVoxelMaterialsEnum> primaryMaterials, MyWeightDictionary<MyMwcVoxelMaterialsEnum> secondaryMaterials, MyStaticAsteroidTypeSetEnum staticAsteroidTypesets, MyMwcVoxelMaterialsEnum? fieldMaterial = null, MySolarSystemArea.AreaEnum? areaType = null)
{
List<MyMwcObjectBuilder_StaticAsteroid_TypesEnum> asteroids = new List<MyMwcObjectBuilder_StaticAsteroid_TypesEnum>(5);
List<MyMwcVoxelFilesEnum> voxelAsteroids = new List<MyMwcVoxelFilesEnum>(10);
int count = addToList.Count;
foreach (var e in entities)
{
if (e.EntityType == MySolarSystemEntityEnum.VoxelAsteroid)
{
int voxelAsteroidSize = FindAsteroidSize(e.Radius, MyVoxelMap.AsteroidSizes);
int rndIndex = rnd.Next(0, voxelAsteroids.Count);
MyVoxelMap.GetAsteroidsBySizeInMeters(voxelAsteroidSize, voxelAsteroids, false);
MyMwcObjectBuilder_VoxelMap builder = GenerateVoxelMap(voxelAsteroidSize, e.PositionInSector, rnd, voxelAsteroids, primaryMaterials, secondaryMaterials);
addToList.Add(builder);
}
else if (e.EntityType == MySolarSystemEntityEnum.StaticAsteroid)
{
float radius = 100;
if (e.Radius == 10000)
radius = rnd.Next(2000, 11000);
if (e.Radius == 1000)
radius = rnd.Next(100, 1100);
if (e.Radius == 100)
radius = rnd.Next(10, 100);
MyMwcVoxelMaterialsEnum asteroidMaterial = MyMwcVoxelMaterialsEnum.Stone_01;
if (primaryMaterials.Count > 0)
primaryMaterials.GetRandomItem(rnd);
MyStaticAsteroidTypeSetEnum asteroidType = MyStaticAsteroidTypeSetEnum.A;
//for (int i = 0; i < 40000000; i++)
{
asteroidType = (MyStaticAsteroidTypeSetEnum)rnd.Item(Enum.GetValues(typeof(MyStaticAsteroidTypeSetEnum)));
}
if ((staticAsteroidTypesets & MyStaticAsteroidTypeSetEnum.A) == MyStaticAsteroidTypeSetEnum.A)
asteroidType = MyStaticAsteroidTypeSetEnum.A;
if ((staticAsteroidTypesets & MyStaticAsteroidTypeSetEnum.B) == MyStaticAsteroidTypeSetEnum.B)
asteroidType = MyStaticAsteroidTypeSetEnum.B;
if ((staticAsteroidTypesets & MyStaticAsteroidTypeSetEnum.All) == MyStaticAsteroidTypeSetEnum.All)
asteroidType = rnd.Float(0, 1) > 0.5f ? MyStaticAsteroidTypeSetEnum.A : MyStaticAsteroidTypeSetEnum.B;
var builder = GenerateStaticAsteroid(radius, asteroidType, asteroidMaterial, e.PositionInSector, rnd, asteroids);
builder.AsteroidMaterial1 = fieldMaterial;
if (areaType == MySolarSystemArea.AreaEnum.Sun)
{
builder.FieldDir = MinerWars.AppCode.Game.GUI.MyGuiScreenGamePlay.Static.GetDirectionToSunNormalized();
}
builder.Generated = true;
addToList.Add(builder);
//MyEntity ent = MyEntities.CreateFromObjectBuilderAndAdd(null, new MyMwcObjectBuilder_StaticAsteroid(asteroids[rndIndex], mat),
// Matrix.CreateWorld(e.PositionInSector, rnd.Vector(1), rnd.Vector(1)));
}
else if (e.EntityType == MySolarSystemEntityEnum.LargeShip)
{
var shipType = rnd.Enum<MyMwcObjectBuilder_PrefabLargeShip_TypesEnum>();
MyMwcObjectBuilder_Prefab_AppearanceEnum appearance = rnd.Enum<MyMwcObjectBuilder_Prefab_AppearanceEnum>();
var ship = new MyMwcObjectBuilder_PrefabLargeShip(shipType, appearance, new MyMwcVector3Short(0, 0, 0), rnd.Vector(1), null, rnd.FloatNormal(), "Abandoned large ship", 0, false, 0);
var gamePlayProperties = MyGameplayConstants.GetGameplayProperties(MyMwcObjectBuilderTypeEnum.PrefabLargeShip, (int)shipType, MyMwcObjectBuilder_FactionEnum.Euroamerican);
ship.PrefabHealthRatio = MyGameplayConstants.HEALTH_RATIO_MAX;
ship.PrefabMaxHealth = gamePlayProperties.MaxHealth;
var prefabs = new List<MyMwcObjectBuilder_PrefabBase>();
prefabs.Add(ship);
var container = new MyMwcObjectBuilder_PrefabContainer(0, MyMwcObjectBuilder_PrefabContainer_TypesEnum.INSTANCE, prefabs, 0, rnd.Enum<MyMwcObjectBuilder_FactionEnum>(), null);
container.PositionAndOrientation = new MyMwcPositionAndOrientation(e.PositionInSector, Vector3.Forward, Vector3.Up);
addToList.Add(container);
}
else if (e.EntityType == MySolarSystemEntityEnum.DebrisField)
{
MyMwcObjectBuilder_LargeDebrisField objectBuilder = new MyMwcObjectBuilder_LargeDebrisField(MyMwcObjectBuilder_LargeDebrisField_TypesEnum.Debris84);
objectBuilder.PositionAndOrientation = new MyMwcPositionAndOrientation(e.PositionInSector, rnd.Vector(1), rnd.Vector(1));
addToList.Add(objectBuilder);
}
}
}
示例4: GenerateStations
private void GenerateStations(MyMwcVector3Int sector, MySolarSystemMapData solarData, MySolarSystemMapSectorData sectorData, List<MyMwcObjectBuilder_Base> addToList, Random rnd, MyDynamicAABBTree prunningStructure)
{
Dictionary<MyMwcVector3Int, MyMwcObjectBuilder_SectorObjectGroups> groupCache = new Dictionary<MyMwcVector3Int, MyMwcObjectBuilder_SectorObjectGroups>();
//List<MyImportantSolarObject>
var objects = solarData.ImportantObjects.Where(o => o.NavigationMark.Sector.Equals(sector));
foreach(var obj in objects)
{
var size = MyPrefabContainerConstants.MAX_DISTANCE_FROM_CONTAINER_CENTER / 1000;
Vector3? pos = FindEntityPosition(prunningStructure, rnd, size);
if (pos.HasValue)
{
var templateSector = MyTemplateGroups.GetGroupSector(obj.TemplateGroup);
MyMwcObjectBuilder_SectorObjectGroups groups;
if (!groupCache.TryGetValue(templateSector, out groups))
{
groups = LoadObjectGroups(templateSector);
if (groups == null)
{
return;
}
groupCache.Add(templateSector, groups);
}
sectorData.Entities.Add(new MySolarSystemMapEntity(sector, pos.Value, size, "", MySolarSystemEntityEnum.OutpostIcon));
var group = rnd.Item(groups.Groups);
IEnumerable<MyMwcObjectBuilder_PrefabBase> prefabs = group.GetPrefabBuilders(groups.Entities);
IEnumerable<MyMwcObjectBuilder_Base> rootObjects = group.GetRootBuilders(groups.Entities);
var objects3d = rootObjects.OfType<MyMwcObjectBuilder_Object3dBase>();
var faction = MyFactions.GetFactionBySector(sector);
var objectPos = pos.Value;
if (objects3d.Any())
{
var firstPos = objects3d.First().PositionAndOrientation.Position;
var offset = objectPos - firstPos;
foreach (var o in objects3d)
{
// Clone
var clone = o.Clone() as MyMwcObjectBuilder_Object3dBase;
clone.PositionAndOrientation.Position += offset;
clone.ClearEntityId();
if (clone is MyMwcObjectBuilder_PrefabContainer)
{
((MyMwcObjectBuilder_PrefabContainer)clone).Faction = faction;
}
if (clone is MyMwcObjectBuilder_SpawnPoint)
{
((MyMwcObjectBuilder_SpawnPoint)clone).Faction = faction;
}
addToList.Add(clone);
}
}
else if(prefabs.Any())
{
MyMwcObjectBuilder_PrefabContainer container = new MyMwcObjectBuilder_PrefabContainer(null, MyMwcObjectBuilder_PrefabContainer_TypesEnum.INSTANCE,
prefabs.ToList(), 0, faction, null);
var clone = container.Clone() as MyMwcObjectBuilder_PrefabContainer; // To clone children easily
clone.ClearEntityId(); // Clear childs ids
clone.PositionAndOrientation = new MyMwcPositionAndOrientation(objectPos, Vector3.Forward, Vector3.Up);
addToList.Add(clone);
}
} //end of station generation
if (pos.HasValue && rnd.Float(0, 1) < 0.5f)
{ //Create mysterious cube at 1% of stations
var sizeMyst = size * 1.5f;
Vector3? posMyst = FindEntityPosition(prunningStructure, rnd, sizeMyst, 1.0f, 1.0f, pos.Value);
if (posMyst.HasValue)
{
CreateMysteriousCubes(posMyst.Value, addToList, rnd);
}
//Create some more
int count = rnd.Next(5);
for (int i = 0; i < count; i++)
{
var size2 = MyMwcSectorConstants.SECTOR_SIZE / 2;
Vector3? pos2 = FindEntityPosition(prunningStructure, rnd, size2);
if (pos2.HasValue)
{
CreateMysteriousCubes(pos2.Value, addToList, rnd);
}
}
}
}
}
示例5: AddUniverseEntities
public override void AddUniverseEntities(MySolarSystemMapData data)
{
if (MyMissions.ActiveMission == null && MyMissions.GetAvailableMissions().Count == 0)
{
AddTemplateGroups(data);
}
const float maxObjCenterFromOrbit = 0.25f;
Random rnd = new Random(0);
float orbitRadius = OrbitProperties.AreaCenter.Length();
float baseAngle = MyMath.AngleTo(OrbitProperties.AreaCenter, Vector3.UnitZ).Y;
//count of groups per orbit side
float step = CalculateStep((OrbitProperties.MaxDistanceFromOrbitHigh + OrbitProperties.MaxDistanceFromOrbitLow) / 2);
int testMaxCount = 0;
for (float i = baseAngle - HalfAngle; i < baseAngle + HalfAngle; i += step)
{
float interpolator = 1 - Math.Abs((i - baseAngle) / HalfAngle); // (i + halfLen) / halfLen / 2;
float maxDistFromOrbitAtAngle = MathHelper.SmoothStep(OrbitProperties.MaxDistanceFromOrbitLow, OrbitProperties.MaxDistanceFromOrbitHigh, interpolator);
step = CalculateStep((OrbitProperties.MaxDistanceFromOrbitHigh + maxDistFromOrbitAtAngle) / 2);
//Vector3 centerPos = new Vector3((float)Math.Sin(i) * distance, 0, (float)Math.Cos(i) * distance);
//5 = billboards count in smaller group
for (int j = 0; j < 2; j++)
{
Vector2 distFromOrbit = Vector2.Normalize(new Vector2(rnd.Float(-1, 1), rnd.Float(-1, 1)));
//distFromOrbit = new Vector2();
distFromOrbit *= maxDistFromOrbitAtAngle * maxObjCenterFromOrbit;
float dist = orbitRadius + distFromOrbit.X;
float i2 = i + rnd.FloatCubic(-step * maxObjCenterFromOrbit, step * maxObjCenterFromOrbit);
float x = (float)Math.Sin(i2) * dist;
float z = (float)Math.Cos(i2) * dist;
float y = distFromOrbit.Y;
Vector3 pos = OrbitProperties.OrbitCenter + new Vector3(x, y, z);
Vector3 offset;
MyMwcVector3Int sector = MySolarSystemUtils.KmToSectors(pos, out offset);
float size = maxDistFromOrbitAtAngle * (1 - maxObjCenterFromOrbit);
if (this.SolarMapData != null)
{
Vector4 clr = new Vector4(this.SolarMapData.DustColor, 1.0f);
Color color = rnd.Color(new Color(clr - this.SolarMapData.DustColorVariability), new Color(clr + this.SolarMapData.DustColorVariability));
data.Entities.Add(new MySolarSystemMapEntity(sector, offset, 2 * size, "Dust", MySolarSystemEntityEnum.DustField, color));
testMaxCount++;
}
if ((AreaType & AreaEnum.PostPlanet) != 0 && j % 2 == 0)
{
data.Entities.Add(new MySolarSystemMapEntity(sector, offset, size * (1 - maxObjCenterFromOrbit), "Asteroids", MySolarSystemEntityEnum.AsteroidField, Color.White));
testMaxCount++;
}
//AddEntity(m_data, pos, radius * wide * 4, name + " dust", MySolarSystemEntityEnum.Test1_Dust, rnd.Color(baseColor, colorVariation));
}
}
//Do not allow to solar area to add more than 1000 objects
//System.Diagnostics.Debug.Assert(testMaxCount < 3000);
MySolarAreaBorderLine newLine = new MySolarAreaBorderLine();
newLine.AreaCenter = OrbitProperties.AreaCenter;
newLine.DistanceHigh = OrbitProperties.MaxDistanceFromOrbitHigh;
newLine.DistanceLow = OrbitProperties.MaxDistanceFromOrbitLow;
newLine.Spread = OrbitProperties.LongSpread;
newLine.col = new Vector4(SolarMapData.DustColor, 1f);
data.AreasBorderLines.Add(newLine);
}