Exemple #1
0
    public override void initConfig(Dictionary <string, object> data = null)
    {
        if (data.ContainsKey("speed"))
        {
            this._speed = (int)(data["speed"]);
        }
        if (data.ContainsKey("accSpeed"))
        {
            this._accSpeed = (int)(data["accSpeed"]);
        }
        if (data.ContainsKey("atk"))
        {
            this.atk = (int)(data["atk"]);
        }
        if (data.ContainsKey("aoe"))
        {
            this._aoe = (int)(data["aoe"]);
        }
        if (data.ContainsKey("lifeTime"))
        {
            this._lifeTime = (int)(data["lifeTime"]);
        }
        if (data.ContainsKey("angle"))
        {
            this._angle = Math2.angleToRadian(Convert.ToSingle(data["angle"]));
        }
        if (data.ContainsKey("seek"))
        {
            this.seekData = (Dictionary <string, object>)data["seek"];
        }
        if (data.ContainsKey("backForce"))
        {
            this.backForce = (int)(data["backForce"]);
        }
        if (data.ContainsKey("preTime"))
        {
            this._preTime = (int)(data["preTime"]);
        }
        //bang伤害。
        if (data.ContainsKey("bangCount"))
        {
            this.bangCount = (int)(data["bangCount"]);
        }
        if (data.ContainsKey("bangRadiusMax"))
        {
            this.bangRadiusMax = (int)(data["bangRadiusMax"]);
        }
        if (data.ContainsKey("bangRateMax"))
        {
            this.bangRateMax = Convert.ToDouble(data["bangRateMax"]);
        }
        if (data.ContainsKey("bangRadiusMin"))
        {
            this.bangRadiusMin = (int)(data["bangRadiusMin"]);
        }
        if (data.ContainsKey("bangRateMin"))
        {
            this.bangRateMin = Convert.ToDouble(data["bangRateMin"]);
        }
        //zoom增幅。
        if (data.ContainsKey("zoomCount"))
        {
            this.zoomCount = (int)(data["zoomCount"]);
        }
        if (data.ContainsKey("zoomRadius"))
        {
            this.zoomRadius = (int)(data["zoomRadius"]);
        }
        if (data.ContainsKey("zoomDamage"))
        {
            this.zoomDamage = (int)(data["zoomDamage"]);
        }
        if (data.ContainsKey("zoomStun"))
        {
            this.zoomStun = (int)(data["zoomStun"]);
        }


        //检查障碍物。
        this.checkBarrier = Utils.equal(data, "checkBarrier", 1);
        this._repeat      = Utils.equal(data, "repeat", 1);

        if (null != seekData)
        {
            this.seekRange = Collision.createGeom(this, (object[])this.seekData["range"], (object[])this.seekData["offset"]);
        }
        this.atk = Mathf.CeilToInt(Convert.ToSingle(this.owner.getProperty(ConfigConstant.PROPERTY_ATK_RATE) * this.atk));

        this._shape = Collision.createGeom(this, (object[])data["range"]);

        if (this.zoomRadius != 0)
        {
            this.zoomScale = Convert.ToDouble(this.zoomRadius) / this._shape.radius;
        }

        if (data.ContainsKey("offset"))
        {
            Vector2D offset = Vector2D.createVector3((object[])data["offset"]);
            offset.angle += this.owner.angle;
            this._position.add(offset);
            offset.clear();
        }

        if (data.ContainsKey("reactionForce"))
        {
            this.owner.velocity.length = 1;
            this.owner.addForce(Vector2D.createVector2(Convert.ToSingle(data["reactionForce"]), Math.PI + this.owner.angle));
        }
        this.id          = "";
        this.ownerPlayer = this.owner.ownerPlayer;

        this.isFree = !Utils.equal(data, "posTarget", 1);
        PersonEntity target = this.isFree ? this.owner : this.lockTarget;

        this._angle += target.angle;
        this._position.add(target.position);
        //根据飞船大小 偏移。
        if (data.ContainsKey("offsetType") && (int)data["offsetType"] != 0)
        {
            Vector2D v = target.getVertexPosition((int)data["offsetType"]).clone();
            v.angle += target.angle;
            this._position.add(v);
            v.clear();
        }

        this._velocity.length = this._speed;
        this._velocity.angle  = this._angle;

        this.changeDir();
        //TODO:优化修改。
        this.applyPosition();
        //hitCd
        if (data.ContainsKey("hitCDMax"))
        {
            if (0 != (int)data["hitCDMax"])
            {
                this._hitAction = new IntervalAction(this._map).init((int)data["hitCDMax"], this._lifeTime, this.checkHit);
            }
        }
        else
        {
            this._hitAction = new IntervalAction(this._map).init(66 * 2, this._lifeTime, this.checkHit);
        }

        if (data.ContainsKey("bangCDMax"))
        {
            this._bombAction = new IntervalAction(this._map).init((int)data["bangCDMax"], this._lifeTime, this.bomb);
        }


        base.initConfig(data);
    }