地形

package com.youbt.game.tbg.vo
{
    import com.youbt.utils.Array2DByteArray;

    import flash.utils.ByteArray;

    /**
     *
     * @author Administrator
     *
     *
     *
     *  地图逻辑设置 :   JCSXXXXX
     *           J   C     S XXXXX
     *           0   0     0 00001
     *              可跳 可穿 非安全      可走
     *
     *  地图显示设置:    TTTTAAAA
     *              TTTT        AAAA
     *           0000        1010
     *               地形0     ALPHA10
     */
    public class Map2DSetting
    {

        public var ba:ByteArray

        public var w:int

        public var h:int

        public function Map2DSetting(source:Array2DByteArray, del:Boolean=true)
        {
            if (source)
            {
                ba=source.ba;
                if (del)
                {
                    source.ba=null;
                }
                w=source.w
                h=source.h
            }
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * 0 不可走
         * 1 可走
         */
        public function getWalk(x:int, y:int):int
        {
            var d:int=y * w + x;
            if (d < 0)
            {
                return 0;
            }
            else if (d > ba.length)
            {
                return 0;
            }
            else
            {
                return ba[y * w + x] & 1;
            }
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * 0 非安全
         * 1 安全
         * JCSXXXXX
         *
         */
        public function getSafety(x:int, y:int):int
        {
            /*     var vl:int = ba[y * w + x]
                 vl = (vl >> 5) & 1*/
            return ba[y * w + x] >> 5 & 1
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * 0 可穿
         * 1 不可穿
         * JCSXXXXX
         */
        public function getCross(x:int, y:int):int
        {
            return ba[y * w + x] >> 6 & 1
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * JCSX???X
         */
        public function getActivity(x:int, y:int):int
        {
            return (ba[y * w + x] & 15) >> 1
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * 0 可跳
         * 1 不可跳
         * JCSXXXXX
         */
        public function getJump(x:int, y:int):int
        {
            return ba[y * w + x] >> 7
        }

        /**
         * 获取地形
         * @param x
         * @param y
         * @return
         * TTTTAAAA
         */
        public function getTerrianType(x:int, y:int):int
        {
            return ba[y * w + x] >> 4
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * ALPHA值0-10
         * TTTTAAAA
         */
        public function getAlpha(x:int, y:int):int
        {
            return ba[y * w + x] & 15
        }

        /**
         *
         * @param x
         * @param y
         * @param value
         *
         * XXXXXXX? ?代表权值 范围0-1
         * 11111110 254
         * 0 不可走
         * >1  可走
         */
        public function setWalk(x:int, y:int, value:int):void
        {
            if (value > 1 || value < 0)
            {
                throw new RangeError()
            }

            var old:int=ba[y * w + x]
            var n:int=old & 254 | value
            ba[y * w + x]=n
        }

        /**
         *
         * @param x
         * @param y
         * @return
         * XX?XXXXX
         * 11011111 223
         * 0 非安全
         * 1 安全
         *
         */
        public function setSafety(x:int, y:int, value:int):void
        {
            if (value == 0 || value == 1)
            {
                var old:int=ba[y * w + x]
                var n:int=(old & 223) | (value << 5)
                ba[y * w + x]=n
            }
            else
            {
                throw new RangeError()
            }

        }

        /**
         *
         * @param x
         * @param y
         * @param value
         * X?XXXXXX
         * 10111111 191
         * 0 为可穿
         * 1 为不可穿
         */
        public function setCross(x:int, y:int, value:int):void
        {
            if (value == 0 || value == 1)
            {
                var old:int=ba[y * w + x]
                var n:int=(old & 191) | (value << 6)
                ba[y * w + x]=n

            }
            else
            {
                throw new RangeError()
            }

        }

        /**
         * 设置活动区域,支持 3位 0-7
         * @param x
         * @param y
         * @param value
         * XXXX???X
         * 11110001 241
         *
         *
         */
        public function setActivity(x:int, y:int, value:int):void
        {

            if (value > 7 || value < 0)
            {
                throw new RangeError()
            }
            else
            {
                var old:int=ba[y * w + x];
                var endV:int=old
                var n:int=(old & 241) | (value << 1)
                ba[y * w + x]=n
            }

        }


        /**
         *
         * @param x
         * @param y
         * @param value
         * 0 可跳
         * 1   不可跳
         * ?XXXXXXX
         * 01111111 127
         */
        public function setJump(x:int, y:int, value:int):void
        {
            if (value == 0 || value == 1)
            {
                var old:int=ba[y * w + x]
                var n:int=(value << 7) | (old & 127)
                ba[y * w + x]=n
            }
            else
            {
                throw new RangeError()
            }
        }

        /**
         *
         * @param x
         * @param y
         * @param value
         * 地形设置  XXXX1111 支持四位,0-15
         *
         */
        public function setTerrian(x:int, y:int, value:int):void
        {
            if (value > 15 || value < 0)
            {
                throw new RangeError()
            }
            var old:int=ba[y * w + x]

            ba[y * w + x]=(value << 4) | (old & 15)

        }

        /**
         *
         * @param x
         * @param y
         * @param value
         * 透明度设置 1111XXXX ,0-10
         */
        public function setAlpha(x:int, y:int, value:int):void
        {
            if (value > 15 || value < 0)
            {
                throw new RangeError()
            }
            var old:int=ba[y * w + x]
            ba[y * w + x]=old & 240 | value

        }

    /*    public function print(sx:int=0, sy:int=0, sw:int=0, sh:int=0):void
        {
            if (sw == 0)
            {
                sw=w
            }
            if (sh == 0)
            {
                sh=h
            }

            var str:String
            for (var i:int=sy; i < sh; i++)
            {
                str=""
                for (var j:int=sx; j < sw; j++)
                {

                    str+=getInt(j, i) + ","
                }
                trace(str.slice(0, str.length - 1))
            }
            trace("/////////////////")
        }

        public function getInt(x:int, y:int):int
        {
            return ba[y * w + x] // 安全,性能提示50%
        }*/
    }
}

 

posted @ 2016-03-22 17:08  泥潭里的金鱼  阅读(184)  评论(0)    收藏  举报