public bool compareTerrain(RTGWorld rtgWorld, TerrainBase oldTerrain) { OpenSimplexNoise simplex = new OpenSimplexNoise(4444); SimplexCellularNoise cell = new SimplexCellularNoise(4444); Random rand = new Random(4444); float oldNoise; TerrainBase newTerrain = this.initTerrain(); float newNoise; for (int x = -64; x <= 64; x++) { for (int z = -64; z <= 64; z++) { oldNoise = oldTerrain.generateNoise(rtgWorld, x, z, 0.5f, 0.5f); newNoise = newTerrain.generateNoise(rtgWorld, x, z, 0.5f, 0.5f); //Logger.info("%s (%d) = oldNoise = %f | newNoise = %f", this.baseBiome.getBiomeName(), Biome.getIdForBiome(this.baseBiome), oldNoise, newNoise); if (oldNoise != newNoise) { throw new Exception( "Terrains do not match in biome ID " + this.baseBiome.getBiomeID() + " (" + this.baseBiome.ToString() + ")." ); } } } return(true); }
public HeroBase Fight(HeroBase hero1, HeroBase hero2, TerrainBase terrain) { terrain.ApplyEffects(new List <HeroBase> { hero1, hero2 }); return(Fight(hero1, hero2)); }
private void OnTriggerExit2D(Collider2D coll) { if (coll.gameObject.CompareTag(terr) && !(DragFlag || ReTurn)) { //DragFlag = false; GOTarget = null; } }
private void init() { initConfig(); this.terrain = initTerrain(); this.surface = initSurface(); this.surfaceRiver = new SurfaceRiverOasis(config); this.surfaceGeneric = new SurfaceGeneric(config, this.surface.getTopPixel(), this.surface.getFillerPixel()); }
public override float Added(OverworldGeneratorV2 generator, float x, float y) { float noise = generator.SimplexInstance(Octave).GetValue(x / Wavelength, y / Wavelength); noise = Math.Abs(noise); noise = TerrainBase.BlendedHillHeight(noise, MinimumSimplex); noise = TerrainBase.UnsignedPower(noise, Power); return(noise * Spiked.Added(generator, x, y)); }
public void PaintTerrain(ChunkColumn column, int i, int j, int x, int z, int depth, OverworldGeneratorV2 generator, float[] noise, float river, BiomeBase[] biomes) { float c = TerrainBase.CalcCliff(x, z, noise); bool cliff = c > 1.4f; for (int k = 255; k > -1; k--) { Block b = column.GetBlockObject(x, k, z); if (b is Air) { depth = -1; } else if (b is Stone) { depth++; if (cliff) { if (depth > -1 && depth < 2) { if (_rnd.Next(3) == 0) { column.SetBlock(x, k, z, CliffCobbleBlock); } else { column.SetBlock(x, k, z, CliffStoneBlock); } } else if (depth < 10) { column.SetBlock(x, k, z, CliffStoneBlock); } } else { if (depth == 0 && k > 61) { column.SetBlock(x, k, z, TopBlock); } else if (depth < 4) { column.SetBlock(x, k, z, FillerBlock); } } } } }
//占領後 private void AfterArrivalFunc(bool flag) { TerrainBase _before; if (flag) { _before = NowPos as TerrainBase; NowPos = GOTarget; } else { _before = NowPos; } if (FriendArmy.Count > 0) { for (int i = 1; i < FriendArmy.Count; i++) { //Debug.Log(flag); _before.MoveGarrison.Remove(FriendArmy[i]); FriendArmy[i].NowPos = NowPos; FriendArmy[i].startpos = NowPos.transform.localPosition; NowPos.Garrison.Add(FriendArmy[i]); FriendArmy[i].transform.parent = null; FriendArmy[i].ForFrinedATKInit(); } FriendArmy.Clear(); } startpos = NowPos.transform.localPosition; _before.MoveGarrison.Remove(this); //元の場所の移動兵力枠から消去 GOTarget = null; ReTurn = false; FirstFlag = false; NowPos.Garrison.Add(this); //NowPos.ArmmyArrival(); NowPos.SortArmy(); //ソートする if ((CompareTag(mytag) && NowPos.ISOCCUPATION) || (CompareTag(enetag) && !NowPos.ISOCCUPATION)) { NowPos.ISOCCUPATION = !NowPos.ISOCCUPATION; } NowPos.ArmmyArrival(); }
public override float Added(OverworldGeneratorV2 generator, float x, float y) { var evaluateAt = new Vector2(x / PointWavelength, y / PointWavelength); var points = generator.CellularInstance(1).Eval2D(evaluateAt.X, evaluateAt.Y); float raise = (float)(points.InteriorValue); // now we're going to get an adjustment value which will be the same // for all points on a given vector from the voronoi basin center var adjustAt = points.ToLength(evaluateAt, AdjustmentRadius); float multiplier = 1.3f; float noZeros = 0.1f; float adjustment = (float)generator.CellularInstance(2).Eval2D(adjustAt.X, adjustAt.Y).InteriorValue *multiplier + noZeros; float reAdjustment = (float)generator.CellularInstance(3).Eval2D(adjustAt.X, adjustAt.Y).InteriorValue *multiplier + noZeros; // 0 to 1 which is currently undesirable so increase to average closer to 1 adjustment = TerrainBase.BayesianAdjustment(adjustment, reAdjustment); raise = TerrainBase.BayesianAdjustment(raise, adjustment); return(raise); }
public void MoveFunc(TerrainBase Home, TerrainBase _GoTarget, int NodeNum) { float _speed = SPEED; GOTarget = _GoTarget; Target_dis = Home.Way[NodeNum]; DragFlag = true; if (FriendArmy.Count > 0) { //速度でソート for (int i = 0; i < FriendArmy.Count; i++) { _speed = FriendArmy[i].SPEED; FriendArmy[i].transform.parent = transform; FriendArmy[i].transform.localPosition += new Vector3(GoudouPos_X[(i + 1) % 3], Mathf.Floor((i + 1) / 3)); } } MoveTime = Target_dis / _speed; //残り時間計算 Vector2 move_vec = GOTarget.transform.localPosition - transform.localPosition; transform.localRotation = Quaternion.FromToRotation(Vector2.up, move_vec); }
/// <inheritdoc /> public override void PaintTerrain(ChunkColumn column, int blockX, int blockZ, int x, int z, int depth, OverworldGeneratorV2 generator, float[] noise, float river, BiomeBase[] biomes) { FastRandom rand = new FastRandom(); var simplex = generator.SimplexInstance(0); float c = TerrainBase.CalcCliff(x, z, noise); bool cliff = c > 1.4f; for (int y = 255; y > -1; y--) { Block b = column.GetBlockObject(x, y, z); if (b is Air) { depth = -1; } else if (b is Stone) { depth++; if (cliff) { if (depth > -1 && depth < 2) { if (rand.Next(3) == 0) { column.SetBlock(x, y, z, CliffCobbleBlock); } else { column.SetBlock(x, y, z, CliffStoneBlock); } } else if (depth < 10) { column.SetBlock(x, y, z, CliffStoneBlock); } } else { if (depth == 0 && y > 61) { if (simplex.GetValue(blockX / width, blockZ / width) > height) // > 0.27f, i / 12f { column.SetBlock(x, y, z, mixBlock); } else { column.SetBlock(x, y, z, TopBlock); } } else if (depth < 4) { column.SetBlock(x, y, z, FillerBlock); } } } } }
/// <inheritdoc /> public override void PaintTerrain(ChunkColumn column, int blockX, int blockZ, int x, int z, int depth, OverworldGeneratorV2 generator, float[] noise, float river, BiomeBase[] biomes) { float c = TerrainBase.CalcCliff(x, z, noise); bool cliff = c > 1.3f; Block b; for (int k = 255; k > -1; k--) { b = column.GetBlockObject(x, k, z); if (b is Air) { depth = -1; } else if (b is Stone) { depth++; if (cliff) { column.SetBlock(x, k, z, PlateauBlocks[k % PlateauBlocks.Length]); } else { if (k > 74 + grassRaise) { if (depth == 0) { if (Rnd.Next(5) == 0) { column.SetBlock(x, k, z, mix2Block); } else { column.SetBlock(x, k, z, TopBlock); } } else if (depth < 4) { column.SetBlock(x, k, z, FillerBlock); } } else if (depth == 0 && k > 61) { int r = (int)((k - (62 + grassRaise)) / 2f); if (Rnd.Next(r + 2) == 0) { column.SetBlock(x, k, z, mixBlock); } else if (Rnd.Next((int)(r / 2f) + 2) == 0) { column.SetBlock(x, k, z, mix2Block); } else { column.SetBlock(x, k, z, TopBlock); } } else if (depth < 4) { column.SetBlock(x, k, z, FillerBlock); } } } } }
public override float Added(OverworldGeneratorV2 generator, float x, float y) { return(TerrainBase.GetGroundNoise(x, y, amplitude, generator)); }
//初期化 public void ClearMove() { GOTarget = null; transform.localRotation = Quaternion.identity; }
/// <inheritdoc /> public override void PaintTerrain(ChunkColumn column, int blockX, int blockZ, int x, int z, int depth, OverworldGeneratorV2 generator, float[] noise, float river, BiomeBase[] biomes) { var simplex = generator.SimplexInstance(0); float p = simplex.GetValue(blockX / 8f, blockZ / 8f) * 0.5f; float c = TerrainBase.CalcCliff(x, z, noise); int cliff = 0; Block b; for (int y = 255; y > -1; y--) { b = column.GetBlockObject(x, y, z); if (b is Air) { depth = -1; } else if (b is Stone) { depth++; if (depth == 0) { if (c > 0.45f && c > 1.5f - ((y - 60f) / 65f) + p) { cliff = 1; } if (c > 1.5f) { cliff = 2; } if (y > 110 + (p * 4) && c < 0.3f + ((y - 100f) / 50f) + p) { cliff = 3; } if (cliff == 1) { if (Rnd.Next(3) == 0) { column.SetBlock(x, y, z, CliffCobbleBlock); } else { column.SetBlock(x, y, z, CliffStoneBlock); } } else if (cliff == 2) { column.SetBlock(x, y, z, ShadowStoneBlock); } else if (cliff == 3) { column.SetBlock(x, y, z, new Snow()); } else if (simplex.GetValue(blockX / 50f, blockZ / 50f) + p * 0.6f > 0.24f) { column.SetBlock(x, y, z, MixBlock); } else { column.SetBlock(x, y, z, new Grass()); } } else if (depth < 6) { if (cliff == 1) { column.SetBlock(x, y, z, CliffStoneBlock); } else if (cliff == 2) { column.SetBlock(x, y, z, ShadowStoneBlock); } else if (cliff == 3) { column.SetBlock(x, y, z, new Snow()); } else { column.SetBlock(x, y, z, new Dirt()); } } } } }
public void BattleCalculate(List <UniteBase> _Diffender, List <UniteBase> _Attacker, TerrainBase BattleZone) { //Debug.Log("dddd"); //初期化 Attacker.Clear(); Diffender.Clear(); //キャッシュ Diffender = new List <UniteBase>(_Diffender); Attacker = new List <UniteBase>(_Attacker); for (int i = 0; i < Attacker.Count; i++) { A[i] = Attacker[i].UnitAtkCalculate() * ((100 - BattleZone.B_DEF) / 100); //攻撃側攻撃力計算 バフはダメージカット } for (int i = 0; i < Diffender.Count; i++) { D[i] = Diffender[i].UnitAtkCalculate() * ((BattleZone.B_ATK + 100) / 100); //防御側攻撃力計算 バフは攻撃力上昇 } //このへん攻撃受ける側が少ないとダメージが変に減ってる気がする //防御側ダメージ計算 for (int i = 0; i < Diffender.Count; i++) { for (int j = 0; j < Attacker.Count; j++) { if (Diffender.Count == 1) { //一人のときは当然すべて受ける Battle(Diffender[i], A[j]); } else if (i < 2) { //0番目は攻撃力の2/3を受ける Battle(Diffender[i], (A[j] / 3) * (2 - i)); } else { Debug.Log("aaaaaa"); //処理なし } } } //攻撃側ダメージ計算 for (int i = 0; i < Attacker.Count; i++) { for (int j = 0; j < Diffender.Count; j++) { if (i < 2) { //0番目は攻撃力の2/3を受ける Battle(Attacker[i], (A[j] / 3) * (2 - i)); } else { Debug.Log("bbbbbbbb"); } if (Attacker.Count == 1) { Debug.Log("戦闘システムに以上あり"); } } } _Diffender.Clear(); _Attacker.Clear(); //値を返却 for (int i = 0; i < Diffender.Count; i++) { if (Diffender[i]._NUMBER > 0) { _Diffender.Add(Diffender[i]); } } for (int i = 0; i < Attacker.Count; i++) { if (Attacker[i]._NUMBER > 0) { _Attacker.Add(Attacker[i]); } } }
//戦闘場所と攻撃者のデータ public BattleObserve(TerrainBase Current) { //_base = Current; }
//一人攻撃用 public void BattleCalculate(List <UniteBase> _Diffender, UniteBase _Attacker, TerrainBase BattleZone) { //Debug.Log("oson"); //初期化 Attacker.Clear(); Diffender.Clear(); //キャッシュ Diffender = new List <UniteBase>(_Diffender); Attacker.Add(_Attacker); A[0] = Attacker[0].UnitAtkCalculate() * ((100 - BattleZone.B_DEF) / 100); //攻撃側攻撃力計算 バフはダメージカット for (int i = 0; i < Diffender.Count; i++) { if (Diffender[i] != null) { D[i] = Diffender[i].UnitAtkCalculate() * ((BattleZone.B_ATK + 100) / 100); //防御側攻撃力計算 バフは攻撃力上昇 } else { D[i] = 0; } } //Debug.Log("D0:" + D[0] + ",D1:" + D[1]); //防御側ダメージ計算 for (int i = 0; i < Diffender.Count; i++) { //0番目は攻撃力の2/3を受ける Battle(Diffender[i], (A[0] / 3) * (2 - i)); } //攻撃側ダメージ計算 for (int j = 0; j < 3; j++) { //0番目は攻撃力の2/3を受ける Battle(Attacker[0], D[j]); } _Diffender.Clear(); //_Attacker.Clear(); //Debug.Log(Diffender.Count); //値を返却 for (int i = 0; i < Diffender.Count; i++) { //Debug.Log(Diffender[i].name); if (Diffender[i] && Diffender[i]._HP > 0) { _Diffender.Add(Diffender[i]); } } //for (int i = 0; i < Attacker.Count; i++) //{ // if (Attacker[i] && Attacker[i]._HP > 0) // _Attacker.Add(Attacker[i]); //} //HPが0なら攻撃者をnullで返す if (Attacker[0]._HP < 0) { //_Attacker = null; Debug.Log("やられたー"); } }
/// <inheritdoc /> public override void PaintTerrain(ChunkColumn column, int blockX, int blockZ, int x, int z, int depth, OverworldGeneratorV2 generator, float[] noise, float river, BiomeBase[] biomes) { var simplex = generator.SimplexInstance(0); float c = TerrainBase.CalcCliff(x, z, noise); int cliff = 0; bool m = false; Block b; for (int k = 255; k > -1; k--) { b = column.GetBlockObject(x, k, z); if (b is Air) { depth = -1; } else if (b is Stone) { depth++; if (depth == 0) { float p = simplex.GetValue(blockX / 8f, blockZ / 8f, k / 8f) * 0.5f; if (c > min && c > sCliff - ((k - sHeight) / sStrength) + p) { cliff = 1; } if (c > cCliff) { cliff = 2; } if (cliff == 1) { if (Rnd.Next(3) == 0) { column.SetBlock(x, k, z, CliffCobbleBlock); } else { column.SetBlock(x, k, z, CliffStoneBlock); } } else if (cliff == 2) { column.SetBlock(x, k, z, ShadowStoneBlock); } else if (k < 63) { if (k < 62) { column.SetBlock(x, k, z, FillerBlock); } else { column.SetBlock(x, k, z, TopBlock); } } else if (simplex.GetValue(blockX / 12f, blockZ / 12f) > mixHeight) { column.SetBlock(x, k, z, mixBlock); m = true; } else { column.SetBlock(x, k, z, TopBlock); } } else if (depth < 6) { if (cliff == 1) { column.SetBlock(x, k, z, CliffStoneBlock); } else if (cliff == 2) { column.SetBlock(x, k, z, ShadowStoneBlock); } else { column.SetBlock(x, k, z, FillerBlock); } } } } }
private int[] CalculateBiomes(ChunkCoordinates coordinates, ChunkLandscape landscape) { // var biomes = BiomeProvider.GetBiomes().ToArray(); int worldX = coordinates.X << 4; int worldZ = coordinates.Z << 4; float[] weightedBiomes = new float[256]; var biomeData = new int[SampleArraySize * SampleArraySize]; for (int x = -SampleSize; x < SampleSize + 5; x++) { for (int z = -SampleSize; z < SampleSize + 5; z++) { var xx = worldX + ((x * 8f)); var zz = worldZ + ((z * 8f)); var temp = TemperatureNoise.GetValue(xx, zz); //Note for self: The temperature noise returns a value between -1 & 1 however we need the value to be between 0 & 2. //We do this by getting the absolute value (0 to 1) and multiplying it by 2. temp = MathF.Abs(temp) * 2f; var rain = MathF.Abs(RainfallNoise.GetValue(xx, zz)); if (temp < _lowestTemp) { _lowestTemp = temp; } if (temp > _highestTemp) { _highestTemp = temp; } if (rain < _lowestHumidity) { _lowestHumidity = rain; } if (rain > _highestHumidity) { _highestHumidity = rain; } _totalTemp += temp; _totalHumidity += rain; _totalLookups++; if (_totalLookups % 1024 == 0) { /* Console.Clear(); * * Console.WriteLine( * $"Average temperature: {_totalTemp / _totalLookups} Highest: {_highestTemp} Lowest: {_lowestTemp}"); * * Console.WriteLine( * $"Average humidity: {_totalHumidity / _totalLookups} Highest: {_highestHumidity} Lowest: {_lowestHumidity}"); * * Console.WriteLine($"Unique biomes: {_uniqueBiomes.Count}");*/ } biomeData[(x + SampleSize) * SampleArraySize + (z + SampleSize)] = (BiomeProvider.GetBiome( (float)temp, (float)rain).Id); } } for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { int index = NoiseMap.GetIndex(x, z); float totalWeight = 0; for (int mapX = 0; mapX < SampleArraySize; mapX++) { for (int mapZ = 0; mapZ < SampleArraySize; mapZ++) { float weight = _weightings[mapX * SampleArraySize + mapZ][(x << 4) + z]; if (weight > 0) { totalWeight += weight; weightedBiomes[biomeData[mapX * SampleArraySize + mapZ]] += weight; } } } // normalize biome weights for (int biomeIndex = 0; biomeIndex < weightedBiomes.Length; biomeIndex++) { weightedBiomes[biomeIndex] /= totalWeight; } // combine mesa biomes // mesaCombiner.adjust(weightedBiomes); landscape.Noise[index] = 0f; float river = TerrainBase.GetRiverStrength(new BlockCoordinates(worldX + x, 0, worldZ + z), this); landscape.River[index] = -river; float maxWeight = 0f; for (int i = 0; i < weightedBiomes.Length; i++) { var value = weightedBiomes[i]; if (value > 0f) { var biome = BiomeProvider.GetBiome(i); landscape.Noise[index] += biome.RNoise( this, worldX + x, worldZ + z, value, river + 1f) * value; weightedBiomes[i] = 0f; if (value > maxWeight) { maxWeight = value; landscape.Biome[index] = biome; if (!_uniqueBiomes.Contains(biome.Id)) { _uniqueBiomes.TryAdd(biome.Id); // Console.WriteLine($"Unique biomes: {uniqueBiomes.Count}"); } } } } //landscape.Biome[index] = weightedBiomes.; // landscape.Biome[index] = BiomeProvider.GetBiome(i); //landscape.Biome[index] = BiomeProvider.GetBiome(); } } return(biomeData); }
private int[] CalculateBiomes(ChunkCoordinates coordinates, ChunkLandscape landscape) { int worldX = coordinates.X * 16; int worldZ = coordinates.Z * 16; float[] weightedBiomes = new float[256]; var biomeData = new int[SampleArraySize * SampleArraySize]; for (int x = -SampleSize; x < SampleSize + 5; x++) { for (int z = -SampleSize; z < SampleSize + 5; z++) { var temp = TemperatureNoise.GetValue(worldX + ((x * 8)), worldZ + ((z * 8))); var rain = RainfallNoise.GetValue(worldX + ((x * 8)), worldZ + ((z * 8))); biomeData[(x + SampleSize) * SampleArraySize + (z + SampleSize)] = (BiomeProvider.GetBiome((float)temp, (float)rain).Id); } } for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { int index = NoiseMap.GetIndex(x, z); float totalWeight = 0; for (int mapX = 0; mapX < SampleArraySize; mapX++) { for (int mapZ = 0; mapZ < SampleArraySize; mapZ++) { float weight = _weightings[mapX * SampleArraySize + mapZ][x * 16 + z]; if (weight > 0) { totalWeight += weight; weightedBiomes[biomeData[mapX * SampleArraySize + mapZ]] += weight; } } } // normalize biome weights for (int biomeIndex = 0; biomeIndex < weightedBiomes.Length; biomeIndex++) { weightedBiomes[biomeIndex] /= totalWeight; } // combine mesa biomes // mesaCombiner.adjust(weightedBiomes); landscape.Noise[index] = 0f; float river = TerrainBase.GetRiverStrength(new BlockCoordinates(worldX + x, 0, worldZ + z), this); landscape.River[index] = -river; for (int i = 0; i < 256; i++) { var value = weightedBiomes[i]; if (value > 0f) { var biome = BiomeProvider.GetBiome(i); landscape.Noise[index] += biome.RNoise(this, worldX + x, worldZ + z, value, river + 1f) * value; landscape.Biome[index] = biome; // 0 for the next column weightedBiomes[i] = 0f; } } // landscape.Biome[index] = BiomeProvider.GetBiome(i); //landscape.Biome[index] = BiomeProvider.GetBiome(); } } for (int x = 0; x < 16; x++) { for (int z = 0; z < 16; z++) { BlockCoordinates pos = new BlockCoordinates(worldX + (x - 7) * 8 + 4, 0, worldZ + (z - 7) * 8 + 4); // landscape.Biome[x * 16 + z] = BiomeProvider.GetBiome(pos.X, pos.Z); } } return(biomeData); }
public void SetTerrain(TerrainBase terrain) { this.terrain = terrain; }