PotObj.ts 1.97 KB
import { tMgr } from "../../../Global";
import { GamePlayTable, TableName } from "../../table/TableDefine";
import { ObjType } from "../BattleConst";
import { IUpdate } from "../inter/IUpdate";
import { MapData } from "./MapData";
import { ObjData } from "./ObjData";

export class PotObj extends ObjData implements IUpdate {

    private _angle: number = 0;
    get angle(): number { return this._angle; }
    private _angleSpeed: number = 0;
    private _speedVec: cc.Vec2 = new cc.Vec2();

    //#region interface

    onUpdate(dt: number) {
        // throw new Error("Method not implemented.");
        this._angle += (this._angleSpeed * dt);
        this._angle = this._angle % 360;

        this._speedVec.x = 0;
        this._speedVec.y = this.map.battle.getPhysiceBallSpeed();

        this._speedVec.rotateSelf(slib.MathUtil.getRadianByDegree(this._angle));
    }

    //#endregion

    //#region event

    onCollisonToBall(collider: cc.Collider): void {
        super.onCollisonToBall(collider);

        // collider.node.setPosition(this.pixelPos); //碰撞过程中无法修改位置
        collider.node.getComponent(cc.RigidBody).linearVelocity = this._speedVec
    }

    //#endregion

    //#region life cycle

    init(map: MapData, type: ObjType, gridX: number, gridY: number): void {
        super.init(map, type, gridX, gridY);

        this._angleSpeed = (tMgr.getConfig(TableName.GAME_PLAY, 11) as GamePlayTable).Value;
        this.canSlide = false;
    }

    onBattleStart(): void {
        super.onBattleStart();
        this.map.battle && this.map.battle.regUpdateObj(this); //预览模式下, map.battle为空
    }

    onDead(): void {
        super.onDead();
        this.map.battle && this.map.battle.unregUpdateObj(this);
    }

    clone(): PotObj {
        return this.cloneValue(new PotObj());
    }

    protected cloneValue(target: PotObj): PotObj {
        super.cloneValue(target);
        target._angleSpeed = this._angleSpeed;
        return target;
    }

    //#endregion
}