private void DrawRivers() { for (int x = 0; x < world.Width; x++) { for (int y = 0; y < world.Height; y++) { Tile tile = world.tiles[x][y]; if (tile.hasWaterBasin) { DrawCircle(tile.position, tile.waterBasinSize * waterBasinScale, new Color(0.2f, 0.2f, .6f)); } else if (tile.hasRiver) { RiverData river = world.rivers[$"{tile.position.ToString()}"]; if (riverAlpha) { DrawLine(river.position, river.toPosition, new Color(0.2f, 0.2f, .6f, river.size * riverAlphaScale), river.size * riverWidthScale); } else { DrawLine(river.position, river.toPosition, new Color(0.2f, 0.2f, .6f, 1), river.size * riverWidthScale); } } } } }
private void GenFromNew(RiverData data) { kNoiseVector = new Dictionary <Vector3, Vector3>(); for (int i = 0, iMax = data.kOrigins.Count; i < iMax; ++i) { var river = data.kOrigins[i]; if ((river.type & RiverData.RiverBoundsType.EndPoint) == 0) { kCurE = river; kPre = null; while (kCurE != null && (kCurE.type & RiverData.RiverBoundsType.EndPoint) == 0) { GenNoiseVector(kCurE, kPre); } } } for (int i = 0, iMax = data.kOrigins.Count; i < iMax; ++i) { var river = data.kOrigins[i]; if ((river.type & RiverData.RiverBoundsType.EndPoint) == 0) { kCurE = river; kPre = null; while (kCurE != null && (kCurE.type & RiverData.RiverBoundsType.EndPoint) == 0) { GenFromOriginBounds(kCurE, kPre); } } } }
// // Called every frame. 'delta' is the elapsed time since the previous frame. // public override void _Process(float delta) // { // // } public override void _Draw() { base._Draw(); //Console.WriteLine("Updating map"); for (int x = 0; x < world.Width; x++) { for (int y = 0; y < world.Height; y++) { Tile tile = world.tiles[x][y]; if (tile.hasWaterBasin) { DrawCircle(tile.position, tile.waterBasinSize * waterBasinScale, new Color(0.2f, 0.2f, .6f)); } else if (tile.hasRiver) { RiverData river = world.rivers[$"{tile.position.ToString()}"]; if (riverAlpha) { DrawLine(river.position, river.toPosition, new Color(0.2f, 0.2f, .6f, river.size * riverAlphaScale), river.size * riverWidthScale); } else { DrawLine(river.position, river.toPosition, new Color(0.2f, 0.2f, .6f, 1), river.size * riverWidthScale); } } } } }
private static RiverData[] ProcessRiverData(USGSRiverDataValueCollection dataSet, string units) { var dataList = new List <RiverData>(); foreach (var val in dataSet.Value) { var data = new RiverData(); if (units.Equals("ft")) { data = new RiverData() { DateTime = DateTime.Parse(val.DateTime), Value = val.Value, Level = val.Value, Flow = null }; dataList.Add(data); } else { data = new RiverData() { DateTime = DateTime.Parse(val.DateTime), Flow = val.Value, Level = null }; dataList.Add(data); } } return(dataList.ToArray()); }
// Use this for initialization void Awake() { //Calculate spawning x positions initialX = new float[5]; for (int i = 0; i < 5; i++) { initialX[i] = lowerX + unit * i; } //Create all enemy types here EnemyTypes = new List <EnemyData>(); EnemyData goomba = new EnemyData("Goomba", 50.0f, 20); EnemyTypes.Add(goomba); EnemyData spaceinvader = new EnemyData("SpaceInvader", 50.0f, 30); EnemyTypes.Add(spaceinvader); EnemyData ghost = new EnemyData("Ghost", 50.0f, 400); EnemyTypes.Add(ghost); EnemyData bomb = new EnemyData("Bomb", 50.0f, 100); EnemyTypes.Add(bomb); CollectibleTypes = new List <CollectibleData>(); CollectibleData coin = new CollectibleData("Coin", 50.0f, 10, 0); CollectibleTypes.Add(coin); CollectibleData banana = new CollectibleData("Banana", 50.0f, 20, 5); CollectibleTypes.Add(banana); CollectibleData cherry = new CollectibleData("Cherry", 50.0f, 25, 10); CollectibleTypes.Add(cherry); RiverTypes = new List <RiverData>(); RiverData river = new RiverData("River", 50.0f, 100); RiverTypes.Add(river); buffer = new Dictionary <string, Stack <GameObject> >(); foreach (EnemyData e in EnemyTypes) { buffer.Add(e.name, new Stack <GameObject>()); } foreach (CollectibleData c in CollectibleTypes) { buffer.Add(c.name, new Stack <GameObject>()); } foreach (RiverData r in RiverTypes) { buffer.Add(r.name, new Stack <GameObject>()); } StartSpawning(); }
private void GenFromOld(RiverData data) { List <RiverData.Bounds> cached = new List <RiverData.Bounds>(); Dictionary <RiverData.Bounds, int> gened = new Dictionary <RiverData.Bounds, int>(); cached.Add(data.kOrigin); while (cached.Count > 0) { GenBounds(cached, gened, ref verticesOffset); } }
private Vector3 PointSDir(Vector3 ori, RiverData.Direction a, RiverData.Direction b) { Vector3 result = new Vector3(ori.x, ori.y, ori.z); var amodify = RiverData.GetDirectionDir(a); var bmodify = RiverData.GetDirectionDir(b); result += amodify / 2; result += bmodify / 2; return(result); }
private Vector3 DownRightEx(Vector3 center, RiverData.Direction dir) { Vector3 result = new Vector3(); var vector = RiverData.GetDirectionDir(dir); var noiseDir = (NoiseVector(center)).normalized; var direx = (-vector + noiseDir).normalized; var dirleft = Vector3.Cross(direx, Vector3.up); result = center + (direx + dirleft) * 0.5f; return(result); }
public static RiverControl Create(RiverData data, Vector3 initialPos) { GameObject river = Instantiate(Resources.Load("Prefabs/" + data.name)) as GameObject; river.transform.position = initialPos; RiverControl rc = river.GetComponent <RiverControl>(); rc.speed = data.speed; rc.damage = data.damage; rc.name = data.name; return(rc); }
public void Gen(RiverData data) { vertices = new List <Vector3>(); colors = new List <Color>(); uvs = new List <Vector2>(); triangles = new List <int>(); kBoundsPoints = new List <Vector3>(); tangles = new List <Vector4>(); verticesOffset = 0; beginCount = 0; endCount = 0; //GenFromOld(data); GenFromNew(data); //GenFromNewEx(data); //GenFromBzier(data); //if (beginCount != endCount) //{ // bshowLog = true; // Debug.Log("Begin : " + beginCount + " EndCount : " + endCount); // Dictionary<Color, int> cs = new Dictionary<Color, int>(); // data.SearchRiver((bounds) => // { // if((bounds.type & RiverData.RiverBoundsType.BeginPoint) !=0 // || (bounds.type & RiverData.RiverBoundsType.EndPoint) != 0) // { // var cor = bounds.cor; // int count = 0; // if (cs.TryGetValue(cor, out count)) // { // cs[cor] = count + 1; // } // else // { // cs.Add(cor, 1); // } // } // }); // foreach(var coc in cs) // { // Debug.Log("color : " + coc.Key + " has count : " + coc.Value); // } //} }
public IEnumerator GenRiverIE() { if (kRiverMap != null) { var xsize = (int)kRiverMap.width; var zsize = (int)kRiverMap.height; bool[][] Gened = new bool[xsize][]; ObjectPool <RiverData> pool = new ObjectPool <RiverData>(); LC_Helper.Loop(xsize, (i) => { Gened[i] = new bool[zsize]; LC_Helper.Loop(zsize, (j) => { Gened[i][j] = false; RiverData.SearMap(kRiverMap.GetPixel(i, j)); }); }); for (int i = 0, iMax = xsize; i < iMax; ++i) { Exi = i; for (int j = 0, jMax = zsize; j < jMax; ++j) { bool hasmarked = Gened[i][j]; if (hasmarked) { continue; } var tex = kRiverMap.GetPixel(i, j); if (RiverData.isRiverTex(tex)) { Vector3 pos = new Vector3(i, 0, j); var newRiver = pool.New(); newRiver.PointGenRiver(pos, kRiverMap, Gened, rivers.Count); rivers.Add(newRiver); } RiverCount = rivers.Count; yield return(null); } } } yield break; }
private Vector3 BorderLeftEx(Vector3 center, RiverData.Direction dir) { Vector3 result = new Vector3(); var vector = RiverData.GetDirectionDir(dir); var noiseModify = NoiseModify(center); //Vector3 noiseDir = new Vector3(noiseModify.x - center.x, 0, noiseModify.z - center.z); var noiseDir = (NoiseVector(center)).normalized; var direx = (vector + noiseDir).normalized; var dirleft = Vector3.Cross(direx, Vector3.up); result = center + (direx + dirleft) * 0.5f; return(result); }
public ClientRoundStatus(int playerIndex, string gameSetting) { LocalPlayerIndex = playerIndex; AssignSettings(gameSetting); TotalPlayers = GameSetting.MaxPlayer; Places = new int[4]; PlayerNames = new string[4]; TileCounts = new int[4]; Points = new int[4]; RichiStatus = new bool[4]; LastDraws = new Tile?[4]; Rivers = new RiverData[4]; LocalPlayerHandTiles = new List <Tile>(); LocalSettings = new ClientLocalSettings(); AssignPlaces(playerIndex); }
public void NewRound(int oyaPlayerIndex, int dice, int field, int extra, int richiSticks) { OyaPlayerIndex = oyaPlayerIndex; Dice = dice; Field = field; Extra = extra; RichiSticks = richiSticks; RichiStatus = new bool[4]; LastDraws = new Tile?[4]; Rivers = new RiverData[4]; BeiDoras = new int[4]; WaitingTiles = null; PossibleWaitingTiles = null; LocalSettings.Reset(); CurrentPlaceIndex = -1; NotifyObservers(); }
private void GenFromNewEx(RiverData data) { List <Vector3> centerpoints = new List <Vector3>(); BoundsCount = 0; for (int i = 0, iMax = data.kOrigins.Count; i < iMax; ++i) { var river = data.kOrigins[i]; if ((river.type & RiverData.RiverBoundsType.BeginPoint) != 0) { centerpoints.Clear(); GenCenter(river, centerpoints); BoundsCount += centerpoints.Count; GenFromCenter(centerpoints); } } }
private void GenFromBzier(RiverData data) { List <Vector3> aPoints = new List <Vector3>(); List <Vector3> bPoints = new List <Vector3>(); var cur = data.kOrigin; var next = cur.GetNext(); var predir = RiverData.Direction.NotExist; while (next != null) { var curdir = cur.flowDir; GetPointsFromFlowDirAtTwo(predir, curdir, cur.pos, ref aPoints, ref bPoints); predir = curdir; cur = next; next = cur.GetNext(); } }
private void GetPointsFromFlowDirAtTwo(RiverData.Direction predir, RiverData.Direction curdir, Vector3 pos, ref List <Vector3> left, ref List <Vector3> right) { if (predir == curdir || predir == RiverData.Direction.NotExist) { var r1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Right)); var r2 = PointSDir(pos, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Right), RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); var l1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Left)); var l2 = PointSDir(pos, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Left), RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); left.Add(l2); left.Add(l1); right.Add(r2); right.Add(r1); } else { var diffdir = RiverData.ThisDirisOrisDirsDir(curdir, predir); switch (diffdir) { case RiverData.Direction.Left: { var r1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Right)); var r2 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); var r3 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Left)); var l1 = PointSDir(pos, curdir, RiverData.GetTargetDirsDir(curdir, RiverData.Direction.Down)); } break; case RiverData.Direction.Right: { } break; } } }
private void GenFromOriginBounds(RiverData.Bounds kCur, RiverData.Bounds before) { if (kCur == null) { Debug.Log("CC"); } kCur.bHasGend = true; var dir = kCur.flowDir; if (before == null)// 这是原点 { //if (kCur != null) { kCur.widthModify = kxModify; float centerx = kCur.pos.x + 0.5f; float centerz = kCur.pos.z + 0.5f; Vector3 center = new Vector3(centerx, 0, centerz); var borderleft = BorderLeft(center, kCur.flowDir); var borderright = BorderRight(center, kCur.flowDir); var downleft = DownLeft(center, kCur.flowDir); var downRight = DownRight(center, kCur.flowDir); var mid = ModifyVector(LerpPos(downleft, downRight, 0.5f)); var ldir = RiverData.GetTargetDirsDir(kCur.flowDir, RiverData.Direction.Left); var rdir = RiverData.GetTargetDirsDir(kCur.flowDir, RiverData.Direction.Right); var l = ModifyVector(LerpPos(borderleft, borderright, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); var r = ModifyVector(LerpPos(borderright, borderleft, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); AddEightVertice(mid, l, r, mid, Color.white); } } else { //var dir = kCur.flowDir; if (kPre.flowDir == kCur.flowDir) { kCur.widthModify = Mathf.Clamp(kPre.widthModify + kxModify, 0f, 1.0f); float centerx = kCur.pos.x + 0.5f; float centerz = kCur.pos.z + 0.5f; Vector3 center = new Vector3(centerx, 0, centerz); var borderleft = BorderLeft(center, dir); var borderright = BorderRight(center, dir); var downl = kBoundsPoints[0]; var downr = kBoundsPoints[1]; var ldir = RiverData.GetTargetDirsDir(dir, RiverData.Direction.Left); var rdir = RiverData.GetTargetDirsDir(dir, RiverData.Direction.Right); var l = ModifyVector(LerpPos(borderleft, borderright, 0.5f + 0.5f * kRiverPercent * kCur.widthModify), kCur.diffModify, dir); var r = ModifyVector(LerpPos(borderright, borderleft, 0.5f + 0.5f * kRiverPercent * kCur.widthModify), kCur.diffModify, dir); AddEightVertice(downl, l, r, downr, Color.white); } else { kCur.widthModify = Mathf.Clamp(kPre.widthModify + kxModify, 0f, 1.0f); float centerx = kCur.pos.x + 0.5f; float centerz = kCur.pos.z + 0.5f; Vector3 center = new Vector3(centerx, 0, centerz); var borderleft = BorderLeft(center, dir); var borderright = BorderRight(center, dir); var downl = kBoundsPoints[0]; var downr = kBoundsPoints[1]; var diff = RiverData.ThisDirisOrisDirsDir(kCur.flowDir, kPre.flowDir); var l = ModifyVector(LerpPos(borderleft, borderright, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); var r = ModifyVector(LerpPos(borderright, borderleft, 0.5f + 0.5f * kRiverPercent * kCur.widthModify)); AddEightVertice(downl, l, r, downr, Color.white, diff); } } kPre = kCurE; kCurE = kCur.GetLink(kCur.flowDir); }
public void SetRiverData(int placeIndex, RiverData data) { Rivers[placeIndex] = data; NotifyObservers(); }