예제 #1
0
    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);
                }
            }
        }
    }
예제 #3
0
    //  // 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());
        }
예제 #5
0
    // 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);
    }
예제 #9
0
    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);
    }
예제 #10
0
    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);
        //    }
        //}
    }
예제 #11
0
    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;
    }
예제 #12
0
    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);
    }
예제 #13
0
 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);
 }
예제 #14
0
 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();
 }
예제 #15
0
    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);
            }
        }
    }
예제 #16
0
    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();
        }
    }
예제 #17
0
    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;
            }
        }
    }
예제 #18
0
    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);
    }
예제 #19
0
 public void SetRiverData(int placeIndex, RiverData data)
 {
     Rivers[placeIndex] = data;
     NotifyObservers();
 }