コード例 #1
0
    public override void onInit(TileDat Tile)
    {
        Tile.metaData = new JCMeta();

        if (Tile.metaData == null)
        {
            lastUpdate = 0;
            prevTime   = 0;
            tick       = 0.5f;
            doneUpdate = false;
            updateTick = false;
        }
    }
コード例 #2
0
    public override void onUpdate(TileDat Tile, float fTime)
    {
        //Debug.Log("Behaviour Updated");

        // Detect new frame
        if (prevTime != fTime)
        {
            // new frame
            prevTime = fTime;
            if (doneUpdate)
            {
                this.lastUpdate = fTime;
                updateTick      = !updateTick;
                doneUpdate      = false;
            }
        }

        // Time.time is same when in same frame -> not updated
        if (this.lastUpdate + tick < fTime)
        {
            doneUpdate = true;
            //prevTime = fTime;
            //this.lastUpdate = fTime;
            // Get the tile map this tile resides on
            TileMap map = Tile.TileMap;

            // Get the block meta
            JCMeta meta = (JCMeta)Tile.metaData;

            // update alive state!, do logic next update
            if (updateTick)
            {
                if (meta.diedLastTick)
                {
                    // Chunk. set tile is more efficient
                    Tile.parent.setTile(Tile.position, map.getTile(0));
                    meta.diedLastTick = false;
                }

                if (meta.bornLastTick)
                {
                    Tile.parent.setTile(Tile.position, map.getTile(1));
                    meta.bornLastTick = false;
                }

                Tile.metaData = meta;
                return;
            }


            int alive = 0;
            if (Tile.left != null)
            {
                if (Tile.left.tile == map.getTile(1))
                {
                    alive++;
                }

                // diag
                if (Tile.left.up != null)
                {
                    if (Tile.left.up.tile == map.getTile(1))
                    {
                        alive++;
                    }
                }

                if (Tile.left.down != null)
                {
                    if (Tile.left.down.tile == map.getTile(1))
                    {
                        alive++;
                    }
                }
            }

            if (Tile.right != null)
            {
                if (Tile.right.tile == map.getTile(1))
                {
                    alive++;
                }

                //diag
                if (Tile.right.up != null)
                {
                    if (Tile.right.up.tile == map.getTile(1))
                    {
                        alive++;
                    }
                }

                if (Tile.right.down != null)
                {
                    if (Tile.right.down.tile == map.getTile(1))
                    {
                        alive++;
                    }
                }
            }

            if (Tile.up != null)
            {
                if (Tile.up.tile == map.getTile(1))
                {
                    alive++;
                }
            }
            if (Tile.down != null)
            {
                if (Tile.down.tile == map.getTile(1))
                {
                    alive++;
                }
            }

            // Death condition
            if ((alive < 2 || alive > 3) && Tile.tile == map.getTile(1))
            {
                meta.diedLastTick = true;
            }

            if ((alive == 3) && Tile.tile == map.getTile(0))
            {
                meta.bornLastTick = true;
            }

            Tile.metaData = meta;
        }
    }
コード例 #3
0
 public override void onDestroy(TileDat Tile)
 {
     //Tile.metaData = null;
 }