// 角色类，管理各个动作
var Serve = require("serve")
var Pat = require("pat")
var Idle = require("idle")
var Peel = require("peel")

// 角色的方向
var RoleDir = cc.Enum ({
    Role_Mine_Left: 1,
    Role_Mine_Right: 2,
    Role_Rival_Left: 3,
    Role_Rival_Right: 4
});

cc.Class({
    extends: cc.Component,

    properties: {
        // 发球组件
        serve: {
            default: null,
            type: Serve, 
        },
        // 接球组件
        pat: {
            default: null,
            type: Pat,
        },

        // 等待组件
        idle: {
            default: null,
            type: Idle,
        },

        // 削球组件
        peel: {
            default: null,
            type: Peel,
        },
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        this.initBlocks();
        this.initValues();
    },

    start () {
        this.idle.idle();
    },

    // update (dt) {},

    // 初始化
    // 初始化数据
    initValues:function() {
        this.mineLeft = cc.v2(-137, -176);
        this.mineRight = cc.v2(29, -176);

        this.rivalLeft = cc.v2(-10, 180);
        this.rivalRight = cc.v2(138, 180);
    },
    
    // 初始化各个组件的回调
    initBlocks:function () {
        var self = this;
        // 开始发球的回调
        this.serve.actionStart = function() {
            if (self.serveStart != null) {
                self.serveStart();
            }
        }

        // 发球结束的回调
        this.serve.actionEnd = function() {
            self.idle.idle();
        };

        // 接球结束的回调
        this.pat.actionEnd = function() {
            self.idle.idle();
        };
    },

    // 外部调用
    // 设置位置
    setDir:function(dir) {
        if (dir == RoleDir.Role_Mine_Left) {
            this.node.setPosition(this.mineLeft);
        } else if (dir == RoleDir.Role_Mine_Right) {
            this.node.setPosition(this.mineRight);
        } else if (dir == RoleDir.Role_Rival_Left) {
            this.node.setPosition(this.rivalLeft);
        } else if (dir == RoleDir.Role_Rival_Right) {
            this.node.setPosition(this.rivalRight);
        }
    },

    // 发球
    roleServe:function() {
        this.serve.serve();
    },
});
