const PlayerStateStatic = require('PlayerState');
const GameStatesStatic = require('GameStates');
const MOVE_RIGHT = 2;

cc.macro.ENABLE_TILEDMAP_CULLING = false;

cc.Class({
    extends: cc.Component,

    properties: {
        InitialPositionY: 0,
        PlayerStateScript: null,
        jumps: 2,
        acceleration: 2500,
        jumpSpeed: 600,
        drag: 600,
        CharactorScript: null,
        javelinTag: false,
        PerfectGrade: 0,
        isPlayingBoos: false,
        CameraNode: {
            default: null,
            type: cc.Node
        },
        Cushion30AndBunker1M: {//标枪起跳
            default: null,
            type: cc.Prefab
        },
        javetemp_Hero: {//标枪起跳
            default: null,
            type: cc.Prefab
        },
        javetemp_Rivel: {//标枪起跳
            default: null,
            type: cc.Prefab
        },
        sendFrameDataTag: false,
        longJumpCount: 0,//跳远加的距离
        takeOffDistance: 0,//跳远开始的距离。

        isChangeSpeed: false,//是否正在改变速度
        timer: 0.3,//计时时间

        HeroIsStop: false,//hero是否停止状态

        isJumpOver: false,//如果是黑屏瞬移过去的，加上这个限制

       
        getGameStates:null,
    },
    onEnable: function () {
        cc.director.getPhysicsManager().attachDebugDrawToCamera(this);
    },
    onDisable: function () {
        cc.director.getPhysicsManager().detachDebugDrawFromCamera(this);
    },
    onLoad: function () {
        this.javeCount = 0;// parseInt(Math.random()*10+30);
        this.node.setLocalZOrder(1000);
        this.body = this.getComponent(cc.RigidBody);
        this.speed = cc.p(0, 0);
        this._moveFlags = -1;
        this.PlayerStateScript = this.node.getComponent("PlayerState");
        var Player = this.node.getChildByName('Player');
        this.CharactorScript = Player.getComponent("Charactor");
        //踉跄 被拽过去的tag 如果是 true 就不重置速度  如果是 如果是 false  就充值速度

        this.getGameStates = cc.find('Canvas').getComponent('GameStates');
 

    },
    SetCurrentSpeed: function (SpeedValue) {
        var GameMode = cc.find('Canvas').getComponent('GameMode');
        if (GameMode.isEndGame)
            return;

        if (SpeedValue > this.PlayerStateScript.MaxSpeed) return;

        if (SpeedValue < 0) return;

        this.PlayerStateScript.CurrentSpeed = SpeedValue;
        return SpeedValue;
    },
    SetCurrentSpeed_noRestrictions: function (SpeedValue) {

        this.PlayerStateScript.CurrentSpeed = SpeedValue;
    },
    SetCurrentSpeed_max: function (SpeedValue) {
        var seed = (SpeedValue * 420) / this.PlayerStateScript.MaxSpeed;
        this.PlayerStateScript.CurrentSpeed = seed + 1800;
        return this.PlayerStateScript.CurrentSpeed * (SpeedValue / this.PlayerStateScript.MaxSpeed);
    },
    SetCurrentSpeed_max_jumpLong: function (SpeedValue) {
        var seed = (SpeedValue * 200) / this.PlayerStateScript.MaxSpeed;
        this.PlayerStateScript.CurrentSpeed = seed + 800;
        return this.PlayerStateScript.CurrentSpeed * (SpeedValue / this.PlayerStateScript.MaxSpeed);
    },
    SetCurrentSpeedInitialSpeed: function () {
        this.PlayerStateScript.CurrentSpeed = this.PlayerStateScript.InitialSpeed;
    },
    SetSpeedToZeroAndIdle: function () {
        this.HeroIsStop = true;//玩家停止
        this.SetCurrentSpeed(0);
        this.idle();
    },
    SetCurrentSpeedAndAnimation: function (SpeedValue) {
        this.CharactorScript.setType();
        var CurrentSpeed = this.SetCurrentSpeed(SpeedValue);

        var state = PlayerStateStatic.SpeedRangeForAnimation;
        if (CurrentSpeed >= state.SlowSpeed[0] && CurrentSpeed <= state.SlowSpeed[1]) {
            this.CharactorScript.SetCurrentAnimationIdx(0);
        }
        if (CurrentSpeed >= state.MiddleSpeed[0] && CurrentSpeed <= state.MiddleSpeed[1]) {
            this.CharactorScript.SetCurrentAnimationIdx(1);
        }
        if (CurrentSpeed >= state.HightSpeed[0] && CurrentSpeed <= state.HightSpeed[1]) {
            this.CharactorScript.SetCurrentAnimationIdx(2);
        }
    },
    SetCurrentSpeed_set: function (SpeedValue) {
        this.CharactorScript.setType();
        if (SpeedValue > this.PlayerStateScript.MaxSpeed) return;

        if (SpeedValue < 0) return;
        this.SetCurrentSpeed(SpeedValue);

        var CurrentSpeed = this.PlayerStateScript.CurrentSpeed;
        // cc.log("设置 速度",CurrentSpeed ,cc.find('Canvas').getComponent('GameStates').bServer);
        var state = PlayerStateStatic.SpeedRangeForAnimation;
        if (CurrentSpeed >= state.SlowSpeed[0] && CurrentSpeed <= state.SlowSpeed[1]) {
            this.CharactorScript.SetCurrentAnimationIdx_set(0);
        }
        if (CurrentSpeed >= state.MiddleSpeed[0] && CurrentSpeed <= state.MiddleSpeed[1]) {
            this.CharactorScript.SetCurrentAnimationIdx_set(1);
        }
        if (CurrentSpeed >= state.HightSpeed[0] && CurrentSpeed <= state.HightSpeed[1]) {
            this.CharactorScript.SetCurrentAnimationIdx_set(2);
        }
    },
    //就是跑步 加上速度
    SetCurrentSpeed_noType: function (SpeedValue) {
        if (SpeedValue > this.PlayerStateScript.MaxSpeed) return;

        if (SpeedValue < 0) return;
        this.SetCurrentSpeed(SpeedValue);
        this.CharactorScript.type = 0;
        this.CharactorScript.SetCurrentAnimationIdx_set(0);
    },
    SpeedUp: function (SpeedUpValue) {
        if (cc.find('Canvas').getComponent('GameStates').bStopAllAnimationAndSchedule) return;
        // return;
        var ToSpeed = this.PlayerStateScript.CurrentSpeed + SpeedUpValue;

        this.SetCurrentSpeedAndAnimation(ToSpeed);

        var data = { FunctionName: 'SetCurrentSpeedAndAnimation', Speed: ToSpeed, "CurrentPositionX": this.node.position.x };
        cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
    },
    SpeedDown: function (SpeedUpValue) {
        if (cc.find('Canvas').getComponent('GameStates').bStopAllAnimationAndSchedule) return;
        var ToSpeed = this.PlayerStateScript.CurrentSpeed - SpeedUpValue;

        if (ToSpeed <= this.PlayerStateScript.InitialSpeed) {
            ToSpeed = this.PlayerStateScript.InitialSpeed;
        }
        // return;
        this.SetCurrentSpeedAndAnimation(ToSpeed);
        // cc.log("当前速度是 踉跄",this.PlayerStateScript.CurrentSpeed);
    },
    ResetSpeed: function () {
        if (cc.find('Canvas').getComponent('GameStates').bStopAllAnimationAndSchedule) return;
        var ASpeed = this.PlayerStateScript.InitialSpeed;
        this.SetCurrentSpeedAndAnimation(ASpeed);
    },
    ResetSpeed_noType_lerp: function (dt) {
        if (this.isChangeSpeed) {
            var ASpeed = this.PlayerStateScript.InitialSpeed;
            var CSpeed = this.PlayerStateScript.CurrentSpeed;
            var speedFactor = (ASpeed - CSpeed) * 0.4;

            this.timer -= dt;//timer =0.3
            if (this.timer <= 0) {
                this.timer = 0.3;
                CSpeed += speedFactor;
                if (CSpeed <= ASpeed) {
                    this.unschedule(this.resetSpeedCallBack);
                    CSpeed = ASpeed;
                    this.isChangeSpeed = false;
                }
                console.log("ResetSpeed_noType", CSpeed);
                this.SetCurrentSpeed_noType(CSpeed);
            }

        }

    },

    ResetSpeed_noType_lerp_Stop: function () {
        this.isChangeSpeed = false;
    },

    ResetSpeed_noType: function () {
        if (this.HeroIsStop) {
           // console.log('当前玩家是停止状态，不能设置ResetSpeed_noType！');
            return;
        }
        var ASpeed = this.PlayerStateScript.InitialSpeed;
        this.SetCurrentSpeed_noType(ASpeed);
    },
    ResetSpeed_set: function () {
        this.SetCurrentSpeed_set(this.PlayerStateScript.InitialSpeed);
    },
    //todo 根据当前 速度设置 动作
    SetCurrentSpeedAction: function () {
        // if(!bDebug) return;
        if (!cc.find('Canvas').getComponent('GameStates').bServer) return;
        this.SetCurrentSpeedAndAnimation(this.PlayerStateScript.CurrentSpeed);
    },
    HeroJump: function (callBack) {
        if ("camera_ai" == cc.director.getScene().name) {
            this.HeroJumpAnimation(callBack);
            return;
        }
        var Hero = cc.find("Hero");
        var NetworkSocket = Hero.getComponent('NetworkSocket');
        var data = {};
        if (this.node.name === 'Hero') {
            data = { FunctionName: 'HeroJumpHeroAnimation' };
            NetworkSocket.sendSyncData(JSON.stringify(data));
        }

        this.HeroJumpAnimation(callBack);
    },
    HeroJumpAnimation: function (callBack) {
        var Player = this.node.getChildByName('Player');
        Player.getComponent("Charactor").setOnHurdlingListener(callBack);
        this.playAudioByName("Hei");
    },
    EnableHeroMoving: function (bMoving) {
        if (bMoving) {
            this._moveFlags = MOVE_RIGHT;
        }
        else {
            this._moveFlags = -1;
        }
    },
    WriggleControl: function (dt) {
        if (this.WriggleTag) {
            // cc.log("减速",this.PlayerStateScript.CurrentSpeed);
            if (this.PlayerStateScript.CurrentSpeed >= this.PlayerStateScript.InitialSpeed) {
                this.PlayerStateScript.CurrentSpeed -= dt * 300;
            } else {
                this.WriggleTag = false;
                this.SetCurrentSpeed_set(this.PlayerStateScript.CurrentSpeed);
            }
        }
    },
    //todo 开启加速
    addSeendTempControl: function () {
        if (this.addSeendTempTag) {
            return;
        }
        if (this.PlayerStateScript.CurrentSpeed <= 400) {

            this.addSeendCurrentSpeed = this.PlayerStateScript.CurrentSpeed;
            this.PlayerStateScript.CurrentSpeed += 400;
            // cc.log("加速了吗",this.PlayerStateScript.CurrentSpeed);
            this.addSeendTempTag = true;
        }
    },
    addSeendTemp: function (dt) {
        if (this.addSeendTempTag) {
            // cc.log("减速",this.PlayerStateScript.CurrentSpeed);
            if (this.addSeendCurrentSpeed <= this.PlayerStateScript.CurrentSpeed) {
                this.PlayerStateScript.CurrentSpeed -= dt * 200;
                // cc.log("加速了吗-",dt);
            } else {
                this.addSeendTempTag = false;
            }
        }
    },
    HeroLongJump: function (name) {
        // console.log("HeroLongJump==", this.longJumpCount);
        var Hero = cc.find("Hero");
        var NetworkSocket = Hero.getComponent('NetworkSocket');
        var data = {};

        var longJumpData = {
            name: "Hero",
            longJumpCount: this.longJumpCount,//跳的距离
            takeOffDistance: this.takeOffDistance,//蓝区域跳的距离范围
        }

        // cc.log("当前玩家是 跳远发送",cc.find('Canvas').getComponent('GameStates').bServer);
        if (this.node.name === 'Hero') {
            data = { FunctionName: 'HeroLongJumpHeroAnimation', netData: longJumpData };
            NetworkSocket.sendSyncData(JSON.stringify(data));
        }

        this.HeroLongJumpAnimation(longJumpData);
        this.playAudioByName("Hei");
    },
    HeroLongJumpAnimation: function (tempData) {
        var Player = this.node.getChildByName('Player');
        var Hero = cc.find(tempData.name);

        this.PlayerStateScript.TouchControlEnableTouch = false;
        this.SetCurrentSpeed(0);

        // this.javelinTag = true;
        var jumpDistance = 3 + tempData.longJumpCount; //跳了多少米
        var jumpPixelSpeed = jumpDistance > 4 ? 900 : 600;
        var jumpDistancePixel = jumpDistance * 240 + tempData.takeOffDistance;//1m约等于 240像素,并且加上 开始的距离
        var jumpTimer = jumpDistancePixel / jumpPixelSpeed;//跳远的时间

        // var actionMoveBy = cc.moveBy(jumpTimer, cc.p(jumpDistancePixel, 0));

        var data = {
            duration: jumpTimer,
            position: jumpDistancePixel,
            y: 0
        };
        // if (!this.javelinTag) {
        //     return;
        // }
        this.javelinmove(data, this.node, function () {

        }.bind(this), function () {
            // if (!this.javelinTag) {
            //     return;
            // }
            this.SetCurrentSpeed(200);
        }.bind(this));
        // this.node.runAction(actionMoveBy);

        var jumpHeight = (jumpDistance - 3) * 10 + 100;//100是固定高度
        var actionBy = cc.jumpBy(jumpTimer, 0, 0, jumpHeight, 1);
        // console.log("跳远的距离====：", tempData.name, jumpDistance, this.takeOffDistance);

        // console.log("跳远的距离：",jumpDistance);
        this.PlayerStateScript.EndDistance = jumpDistance;//记录位置信息
        this.PlayerStateScript.JumpTimer = jumpTimer;
        // if (!this.javelinTag) {
        //     return;
        // }
        Player.getComponent("Charactor").node.runAction(actionBy);
        //跳远开始
        Player.getComponent("Charactor").setOnLongJumpListener(jumpTimer);

        if (Hero.name == "Hero") {
            //扔标枪 计数算法 todo
            var UIControl = cc.find("UIControl").getComponent("UIControl");
            UIControl.startDistance_Hero(0, Hero, true);
        }

        // if (!this.javelinTag) {
        //     return;
        // }
        //跳远结束
        Player.getComponent("Charactor").setTimeOutLongJumpListener(function () {
            // return;
            // console.log('跳远结束了，我是来自hero的setTimeOutLongJumpListener，tag是 '+this.javelinTag);
            // if (!this.javelinTag) {
            //     return;
            // }
            setTimeout(function () {
                if (this.isJumpOver) {
                    return;
                }
                Player.getComponent("Charactor").spine.setAnimation(0, Player.getComponent("Charactor").statusArr_longjump[6], false);
                Player.getComponent("Charactor").spine.timeScale = 1;
                // this.SetCurrentSpeed(0);
                setTimeout(function () {
                    // this.SetSpeedToZeroAndIdle();
                    this.ResetSpeed_noType();
                }.bind(this), 300);
            }.bind(this), jumpTimer + 300);

            setTimeout(function () {

                if (this.isJumpOver || this.node.name == 'Rivel') {
                    return;
                }

                //加分
                // this.GameMode = cc.find('Canvas').getComponent('GameMode');
                // this.GameMode.addScore(cc.find('Hero'));
                if (!cc.find('Canvas').getComponent('GameStates').bServer) {
                    var data = { FunctionName: 'addScore', PlayerName: 'Hero', value: jumpDistance };
                    cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
                    // cc.log("--我是client，我发送给server请求加分--longJump当前项目是"+cc.find('Canvas').getComponent('GameStates').strCureentLevel);
                }
                else {
                    cc.find('Canvas').getComponent('GameMode').addScore(cc.find('Hero'), jumpDistance, true);
                }

                CustomLog("跳远 加分");
            }.bind(this), 700);
            //
            this.playAudioByName("JumpDown");
            // this.resetPerfectGrade();//踉跄则重置perfect等级
        }.bind(this));
    },
    FromLongJumpToHurdle: function () {
        setTimeout(function () {

            var GameMode = cc.find('Canvas').getComponent('GameMode');
            var GameStates = cc.find('Canvas').getComponent('GameStates');

            CustomLog("跳远 黑屏 进入", cc.find("Shade").getComponent('Shade').FadeTag);
            //跳远结束

            var data = {
                gameLv: 1,
                startPositionX: 50000
            }
            // console.log('跳远结束了，准备初始化跨栏项目setStart');
            cc.find("Level").getComponent("LevelControl").setStart(data);

            GameStates.StartLinePositionX = cc.find("Level").getComponent("LevelControl").tempStartNode.x + 720;

            GameMode.CheckPlayersDistance();
            var data = { FunctionName: 'CheckPlayersDistance', StartLinePositionX: GameStates.StartLinePositionX };
            GameMode.SynchronizationFun(data);


        }.bind(this), 500);
    },
    StopPlayerAllSchedule: function () {

        // var GameMode = cc.find('Canvas').getComponent('GameMode');
        var GameStates = cc.find('Canvas').getComponent('GameStates');
        var Hero = cc.find('Hero');
        var Rivel = cc.find('Rivel');
        var HeroControl = Hero.getComponent('HeroControl');
        var RivelControl = Rivel.getComponent('HeroControl');
        var HeroCharactor = Hero.getChildByName('Player').getComponent('Charactor');
        var RivelCharactor = Rivel.getChildByName('Player').getComponent('Charactor');
        var HeroPlayerState = Hero.getComponent('PlayerState');
        var RivelPlayerState = Rivel.getComponent('PlayerState');

        HeroCharactor.unscheduleAllCallbacks();
        RivelCharactor.unscheduleAllCallbacks();
        HeroPlayerState.unscheduleAllCallbacks();
        RivelPlayerState.unscheduleAllCallbacks();

        Hero.stopAllActions();
        Rivel.stopAllActions();
        //cc.log("！！！！！！！！！！！！rival明明停止了stopAllActions");

        HeroControl.javelinTag = false;
        RivelControl.javelinTag = false;
        HeroControl.CameraNode.parent = Hero;

        GameStates.bStopAllAnimationAndSchedule = true;
        HeroControl.SetSpeedToZeroAndIdle();
        RivelControl.SetSpeedToZeroAndIdle();
        this.schedule(function () {
            GameStates.bStopAllAnimationAndSchedule = false;
        }, 1, 0);
    },
    Stagger: function () {
        // return;
        this.StaggerAnimation();
        // cc.log("踉跄 本地",this.node);
        var data = { FunctionName: 'StaggerAnimation', PositionX: this.node.convertToWorldSpaceAR(cc.Vec2.ZERO).x };
        cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
        this.playAudioByName("Boos");
        // this.resetPerfectGrade();
    },
    StaggerAnimation: function () {
        //console.log("进来 踉跄",this.PlayerStateScript.BStagger,cc.find('Canvas').getComponent('GameStates').bStopAllAnimationAndSchedule);
        if (cc.find('Canvas').getComponent('GameStates').bStopAllAnimationAndSchedule) return;
        if (this.PlayerStateScript.BStagger) return;
        this.PlayerStateScript.BStagger = true;


        //踉跄+减速
        var Player = this.node.getChildByName('Player');
        Player.getComponent("Charactor").setOnTripListener();
        this.PlayerStateScript.LastSpeed = this.PlayerStateScript.CurrentSpeed;
        this.ResetSpeed();
        this.schedule(this.StaggerAnimationSchedule, 0.7, 0);
    },
    StaggerAnimationSchedule: function () {
        if (cc.find('Canvas').getComponent('GameStates').bStopAllAnimationAndSchedule) return;
        this.PlayerStateScript.BStagger = !this.PlayerStateScript.BStagger;
        // cc.log("this.LastSpeed is "+this.PlayerStateScript.LastSpeed+"  this.CurrentSpeed is "+this.PlayerStateScript.CurrentSpeed);
        if (this.PlayerStateScript.CurrentSpeed != 0) {

            this.SpeedDown(this.PlayerStateScript.DownSpeed);
        }

        // this.CurrentSpeed = this.LastSpeed;
        if (this.PlayerStateScript.BStagger) {
            return;
        }
        var ToSpeed = this.PlayerStateScript.LastSpeed;//-this.PlayerStateScript.CurrentSpeed;
        this.SetCurrentSpeedAndAnimation(ToSpeed);
    },
    unSchedules: function () {
        this.unschedule(this.StaggerAnimationSchedule);
    },
    StaggerAnimationUnch: function () {
        this.unschedule(this.StaggerAnimationSchedule);
    },
    SendSyncHeroPosition: function () {
        var Hero = cc.find("Hero");
        var PositionStr = Hero.position.x.toString();
        var data = { FunctionName: 'Hero', PositionX: PositionStr, Speed: Hero.getComponent('PlayerState').CurrentSpeed };
        cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
    },
    SendSyncRivelPosition: function () {
        var Rivel = cc.find("Rivel");
        var PositionStr = Rivel.position.x.toString();

        var Hero = cc.find("Hero");
        var data = { FunctionName: 'Rivel', PositionX: PositionStr, Speed: Hero.getComponent('PlayerState').CurrentSpeed };
        cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
    },
    // called every frame, uncomment this function to activate update callback
    update: function (dt) {

        var PlayerCollisionLine = this.node.getChildByName('Player').getChildByName('PlayerCollisionLine');

        if (PlayerCollisionLine) {
            if (!PlayerCollisionLine.active) {
                if (this.node.position.x - this.node.getComponent('PlayerState').AtStartLinePositionX > 100) {
                    PlayerCollisionLine.active = true;
                }
            }
        }
        var Hero = this.getGameStates.getHero;
        var Rivel = this.getGameStates.getRivel;
        var HeroControl = this.getGameStates.getHeroControl;
        var RivelControl = this.getGameStates.getRivelControl;

        var DistanceBetweenMeAndRival = Rivel.x - Hero.x;

        // var absDistanceBetweenMeAndRival = Math.abs(Math.floor(DistanceBetweenMeAndRival));

        // if (cc.find('LeftRivalHead') != null) {
        //     cc.find('LeftRivalHead').getChildByName("RivalDistance").getComponent('RivalDistance').setRivalDistanceNum(absDistanceBetweenMeAndRival.toString());
        // }
        // if (cc.find('RightRivalHead') != null) {
        //     cc.find('RightRivalHead').getChildByName("RivalDistance").getComponent('RivalDistance').setRivalDistanceNum(absDistanceBetweenMeAndRival.toString());
        // }
        // cc.log("这是多少",dt);
        //这里注释一下，屏幕宽720，一半为360，人物宽65，相加为425，也就是说对手与自己距离425像素外则需显示头像
        if (DistanceBetweenMeAndRival > 425) {//大于425，则头像在右边
            if (!cc.find('LeftRivalHead')) {
                cc.find('UIControl').getComponent('GameUI').displayRivalHead(false);
            }
        }
        if (DistanceBetweenMeAndRival < -425) {//小于-425，则头像在左边
            if (!cc.find('RightRivalHead')) {
                cc.find('UIControl').getComponent('GameUI').displayRivalHead(true);
            }
        }
        if (DistanceBetweenMeAndRival >= -425 && DistanceBetweenMeAndRival <= 425) {
            if (cc.find('RightRivalHead') || cc.find('LeftRivalHead')) {
                cc.find('UIControl').getComponent('GameUI').hideRivalHead();
            }
        }

        // this.speed = this.body.linearVelocity;
        // this.speed = cc.p(-50,0);
        // cc.log("刚体X",this.speed);
        // var Level = cc.find("Level");
        if(this.getGameStates.getLevelControl)
           this.getGameStates.getLevelControl.SetDistance(this.node.getPosition().x);

        if (this._moveFlags === MOVE_RIGHT) {
            if (this.node.scaleX < 0) {
                this.node.scaleX *= -1;
            }

            var PlayerPositionX = this.node.getPositionX();
            PlayerPositionX += 1 * dt * this.PlayerStateScript.CurrentSpeed;
            this.node.setPositionX(PlayerPositionX);
        }

        if (this.jumps > 0 && this._up) {
            this.speed.y = this.jumpSpeed;
            this.jumps--;
        }

        //Stop at start line

        var PlayerState = this.node.getComponent('PlayerState');
        var StartLineStopPositionArray = PlayerState.StartLineStopPositionArray;
        if (StartLineStopPositionArray.length != 0) {
            // var StartLineStopPositionOriginalX = PlayerState.StartLineStopPositionArray[0].x;
            var StartLineStopPositionX = PlayerState.StartLineStopPositionArray[0].x;
            if (this.node.name == 'Hero') {
                StartLineStopPositionX -= 30;
            }
            if ((this.node.position.x - StartLineStopPositionX) > -10) {

                if (this.node.name == 'Hero') {
                    // console.log("Hero 停！！");
                    this.node.setPositionX(StartLineStopPositionX);
                    cc.find('Rivel').setPositionX(StartLineStopPositionX + 30);
                    if (PlayerState.StartLineStopPositionArray[0].type == 2) {
                        //设置 重要的 当前项目是什么
                        cc.find('Canvas').getComponent('GameStates').CurrentProgress = PlayerState.StartLineStopPositionArray[0].type;
                    }
                    PlayerState.StartLineStopPositionArray.shift();
                }
            }
        }

        //Reduce speed at Finish line
        var FinishLineReduceSpeedPositionArray = PlayerState.FinishLineReduceSpeedPositionArray;
        if (FinishLineReduceSpeedPositionArray.length != 0) {
            //单车项目是终点，不处理减速
            var FinishLineStopPositionX = PlayerState.FinishLineReduceSpeedPositionArray[0];

            if ((this.node.position.x - FinishLineStopPositionX) > -10) {
                if (cc.find('Canvas').getComponent('GameStates').strCureentLevel == "RideBike") {
                    // console.log('自行车部分')
                    return;
                }
                if (!this.HeroIsStop) {//当前玩家是停止状态，不能设置ResetSpeed_noType
                    this.ResetSpeed_noType();
                    if (this.node.name == 'Hero') {
                        var NetworkSocket = cc.find('Hero').getComponent('NetworkSocket');
                        var data = {};
                        data = { FunctionName: 'FinishLineReduceSpeedPositionArray' };
                        // console.log("hero 减速！！！");
                        NetworkSocket.sendSyncData(JSON.stringify(data));
                    }
                }
                // console.log("Name:",this.node.name);
                // this.isChangeSpeed = true;//开启减速
                PlayerState.FinishLineReduceSpeedPositionArray.shift();
            }
        }


        this._up = false;
        this.body.linearVelocity = this.speed;
        this.WriggleControl(dt);

        this.addSeendTemp(dt);
        // if (!cc.find('Canvas').getComponent('GameStates').BStartGame) return;
        if (this.node.name != 'Rivel') return;
        var SyschroAtionArray = this.PlayerStateScript.SyschroAtionArray;
        if (SyschroAtionArray.length > 0) {
            // CustomLog("现在里面有设么没处理的", SyschroAtionArray);

            if (SyschroAtionArray[0].FunctionName === 'StaggerAnimation') {
                // cc.log("踉跄 通知",this.PlayerStateScript.CurrentSpeed);
                if (this.PlayerStateScript.CurrentSpeed != 0) {

                    this.StaggerAnimation();
                }


                // cc.log("踉跄 网络",this.node);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'SetCurrentSpeedAndAnimation') {
                this.SetCurrentSpeedAndAnimation(SyschroAtionArray[0].Speed);
                SyschroAtionArray.shift();
            }
            else if ('ResetSpeed' === SyschroAtionArray[0].FunctionName) {
                this.ResetSpeed_noType();
                SyschroAtionArray.shift();
            }
            else if ('SetSpeedToZeroAndIdle' === SyschroAtionArray[0].FunctionName) {
                this.SetSpeedToZeroAndIdle();
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'HeroLongJumpHeroAnimation') {//todo 跳远
                // cc.log("当前玩家是 跳远接收",cc.find('Canvas').getComponent('GameStates').bServer);
                // cc.log('这里执行了几次。。。。。。。。。');
                var tempData = SyschroAtionArray[0].netData;
                var longJumpData = {
                    name: "Rivel",
                    longJumpCount: tempData.longJumpCount,//跳的距离
                    takeOffDistance: tempData.takeOffDistance,//蓝区域跳的距离范围
                }
                RivelControl.HeroLongJumpAnimation(longJumpData);
                // console.log("我现在 处理 跳远 2 ", SyschroAtionArray[0].FunctionName, tempData);
                // CustomLog("我现在 处理 跳远 2 ", SyschroAtionArray[0].FunctionName);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'SetCurrentSpeed_max_jumpLong') {
                // CustomLog("跳远设置速度");
                //todo 标记2
                this.seend = this.PlayerStateScript.CurrentSpeed;
                this.SetCurrentSpeed_max_jumpLong(this.seend);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'HeroJumpHeroAnimation') {

                this.HeroJumpAnimation();
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'PerfectHurdleBandRailing') {
                // CustomLog("跨栏 撞倒","PerfectHurdleBandRailing");
                var data = SyschroAtionArray[0];
                var NetworkSocket = Hero.getComponent('NetworkSocket');
                // CustomLog("跨栏 撞倒", data);
                var Obj = NetworkSocket.GetSyncObj(data.ParentName, data.ObjName, data.PositionX);
                SyschroAtionArray.shift();

                if (Obj == null) {
                    return;
                }
                Obj.getComponent("Barrier").FallingDown();
            }
            else if (SyschroAtionArray[0].FunctionName === 'PerfectHurdleBandBarrier') {
                // CustomLog("跨栏 撞倒","PerfectHurdleBandBarrier");
                var data = SyschroAtionArray[0];
                var NetworkSocket = Hero.getComponent('NetworkSocket');
                // CustomLog("跨栏 撞倒",data);
                var Obj = NetworkSocket.GetSyncObj(data.ParentName, data.ObjName, data.PositionX);
                SyschroAtionArray.shift();

                if (Obj == null) {
                    return;
                }
                Obj.getComponent("Barrier").FallingDown();
            }
            else if (SyschroAtionArray[0].FunctionName === 'ShakeBarrier') {
                // CustomLog("跨栏 撞倒","PerfectHurdleBandBarrier");
                var data = SyschroAtionArray[0];
                var NetworkSocket = Hero.getComponent('NetworkSocket');
                // CustomLog("跨栏 晃",data);
                var Obj = NetworkSocket.GetSyncObj(data.ParentName, data.ObjName, data.PositionX);
                SyschroAtionArray.shift();

                if (Obj == null) {
                    return;
                }
                Obj.getComponent("Barrier").Shake();
            }
            else if (SyschroAtionArray[0].FunctionName === 'upBike') {
                // CustomLog("跨栏 撞倒","PerfectHurdleBandBarrier");
                // cc.log("上车 网络", this.node);
                this.SetCurrentSpeed(0);
                this.upBike();
                var Charactor = this.node.getChildByName('Player');
                var CharactorScript = Charactor.getComponent("Charactor");
                setTimeout(function () {
                    CharactorScript.spine.timeScale = 1;
                    cc.find('Canvas').getComponent('GameStates').CurrentProgress = GameStatesStatic.GameProgress.RideBike;
                    this.SetCurrentSpeed(PlayerStateStatic.SpeedRangeForAnimation.SlowSpeed[1]);
                }.bind(this), 600);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'downBikeHero') {
                // CustomLog("跨栏 撞倒","PerfectHurdleBandBarrier");
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'upJavelinHeroAnimation') {
                var data = SyschroAtionArray[0];
                var NetworkSocket = Hero.getComponent('NetworkSocket');
                CustomLog("捡起来标枪");
                var Obj = NetworkSocket.GetSyncObj(data.ParentName, data.ObjName, data.PositionX);
                this.upJavelin();
                this.SetCurrentSpeed(PlayerStateStatic.SpeedRangeForAnimation.SlowSpeed[1]);
                if (Obj != null) {
                    Obj.active = false;
                }
                cc.find('Canvas').getComponent('GameStates').CurrentProgress = GameStatesStatic.GameProgress.Javelin;
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'Restrictions') {
                this.SetCurrentSpeed_noRestrictions(600);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'FinishLineReduceSpeedPositionArray') {
                this.ResetSpeed_noType();
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'PlayersStartToRun') {
                // console.log("PlayersStartToRun!!!");
                Hero.getComponent('HeroControl').playAudioByName('StartGun');//项目开始时哨声
                //项目开始时，UI比分淡出
                if (cc.find('UIPKScore')) {
                    cc.find('UIControl').getComponent('GameUI').hideMiddlePKScore();
                }

                this.PlayerStateScript.TouchControlEnableTouch = false;

                HeroControl.HeroIsStop = false;
                RivelControl.HeroIsStop = false;

                HeroControl.ResetSpeed_noType();
                RivelControl.ResetSpeed_noType();
                // cc.log("被拉过来的起点位置",cc.find('Canvas').getComponent('GameStates').StartLinePositionX);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'StopPlayerAllSchedule') {
                HeroControl.StopPlayerAllSchedule();
                RivelControl.StopPlayerAllSchedule();
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'upJavelinend') {
                this.SetCurrentSpeed_noRestrictions(SyschroAtionArray[0].Speed);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'JavelinData') {
                this.javelinRivel("Rivel", SyschroAtionArray[0].JavelinData, SyschroAtionArray[0].JaveCount);
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'resetHero') {

                this.resetHero();
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'resetHerojavelin') {
                this.stopAudioByName("JavelinFlying");//停止标枪飞的声音
                // this.resets();
                this.SetSpeedToZeroAndIdle();
                SyschroAtionArray.shift();
            }
            else if (SyschroAtionArray[0].FunctionName === 'endGame') {

                var HeroControl = Hero.getComponent("HeroControl");
                var NetworkSocket = Hero.getComponent("NetworkSocket");
                NetworkSocket.endGameAll(2);
                //console.log('退出游戏时候的数据上报 ==',NetworkSocket.isReported);

                if (!NetworkSocket.isReported) {

                    if(SyschroAtionArray[0].showText){
                        NetworkSocket.setToast(SyschroAtionArray[0].showText);
                    }

                    var data = {
                        isSelf: SyschroAtionArray[0].num
                    }
                    NetworkSocket.quitGame(data);
                }

                SyschroAtionArray.shift();
            }
        }
    },
    upJavelin: function () {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");
        CharactorScript.upJavelin();
        this.SetCurrentSpeedAction();
    },

    upBike: function () {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");
        CharactorScript.upBike();
        this.SetCurrentSpeedAction();
    },
    upJavelin_go: function (callBack) {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");

        CharactorScript.upJavelin_go(callBack);
        this.playAudioByName("Hei");
    },
    idle: function (callBack) {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");
        CharactorScript.idle(callBack);
    },
    readyRun: function (callBack) {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");
        CharactorScript.readyRun(callBack);
    },
    addidle: function (callBack) {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");
        CharactorScript.addidle(callBack);
    },
    idleadd: function (callBack) {
        var Charactor = this.node.getChildByName('Player');
        var CharactorScript = Charactor.getComponent("Charactor");
        CharactorScript.idleadd(callBack);
    },
    playAudioByName: function (AudioName) {
        var AudioSource = this.getAudioSourceByName(AudioName);
        if (AudioSource != null) {
            // if (AudioName == "Boos") {//踉跄时的音效：若正在播放此音效则不能播放；
            //     if (this.isPlayingBoos == false) {
            //         this.isPlayingBoos = true;
            //         AudioSource.play();
            //         this.scheduleOnce(function () {
            //             this.isPlayingBoos = false;
            //         }, AudioSource.getDuration());
            //     }
            // } else {
            AudioSource.play();
            // }
        }
    },
    stopAudioByName: function (AudioName) {
        // cc.log("我明明stop了啊！！！！！！"+AudioName);
        var AudioSource = this.getAudioSourceByName(AudioName);
        if (AudioSource != null) {
            AudioSource.stop();
            // cc.log("我明明stop了啊！！！！！！222222");
        }
    },
    getAudioSourceByName: function (AudioName) {
        var HeroPlayer = null;
        // cc.log(AudioName);
        if (this.node.name == "Hero") {
            if (cc.find('Hero').getChildByName('Player') != null) {
                HeroPlayer = cc.find('Hero').getChildByName('Player');
                if (HeroPlayer.getChildByName("MyAudio") != null) {
                    var AudioControlScript = HeroPlayer.getChildByName('MyAudio').getComponent("AudioControl");
                    if (AudioControlScript.getAudioSourceByName(AudioName) != null) {
                        var AudioSource = AudioControlScript.getAudioSourceByName(AudioName);
                        return AudioSource;
                    }
                }
            }
        }
    },
    addPerfectGradeAndPlay: function () {
        if (this.PerfectGrade < 10) {
            this.PerfectGrade += 1;
        }
        this.playAudioByName("Perfect" + this.PerfectGrade);
    },
    resetPerfectGrade: function () {
        this.PerfectGrade = 0;
    },
    javelin: function () {
        //获取场景
        var scene = cc.director.getScene();
        // cc.log("父亲",scene);
        var charactor = scene.getChildByName("Hero").getChildByName("Player").getComponent("Charactor");
        // cc.log("有么",charactor);
        var HeroControl = scene.getChildByName("Hero").getComponent("HeroControl");

        // console.log("javelin");
        if (HeroControl != null) {
            var Player = scene.getChildByName("Hero").getChildByName("Player");
            //扔标枪
            HeroControl.upJavelin_go();
            this.seend = HeroControl.PlayerStateScript.CurrentSpeed;

            setTimeout(function () {
                // cc.log("标枪预制 1",this.javelin_prefab);
                var tPrefab = this.tPrefabs = cc.instantiate(this.javelin_prefab);
                // cc.log("标枪预制 2",tPrefab);
                var Level = cc.find("Level");

                var Hero = cc.find("Hero");
                //扔标枪 计数算法 todo
                var UIControl = cc.find("UIControl").getComponent("UIControl");
                UIControl.startDistance(1, Hero, true);
                tPrefab.parent = Hero;
                tPrefab.zIndex = 999;
                tPrefab.setPosition(100, -50);

                var HeroControl = scene.getChildByName("Hero").getComponent("HeroControl");
                var data = {
                    duration: 3.5,
                    position: 0,
                    y: -70,
                    height: 500,
                    jumps: 1
                };
                tPrefab.getComponent("Charactor_javeLin").javelin(data, function () {
                    var datas = {
                        duration: 1,
                        position: -1000,
                        y: 0
                    };
                    this.javelinmoveHero(datas, Player);
                    HeroControl.SetCurrentSpeed(this.seend + 1000);
                    console.log("Start Javelin;")
                }.bind(this), function () {
                    console.log("End Javelin;")
                    var Level = cc.find("Level");

                    HeroControl.SetCurrentSpeed(0);

                    var datas = {
                        duration: 2,
                        position: 1000,
                        y: 0
                    };
                    charactor.readyRun();
                    //人物进场
                    this.javelinmoveHero(datas, Player, null, function () {
                        var p = tPrefab.getBoundingBoxToWorld();
                        tPrefab.parent = Level;

                        tPrefab.setPosition(p.x - 360, p.y - 640);
                        // CustomLog("现在坐标 父类",p,p1,tPrefab.getBoundingBoxToWorld());
                        HeroControl.SetCurrentSpeed(500);
                        UIControl.startDistance(1, Hero, false);
                    }.bind(this));
                }.bind(this));
                this.node.destroy();
            }.bind(this), 500);
        }
    },
    javelinmove: function (data, view, starListener, endListener) {
        var actionBy = cc.moveBy(data.duration, data.position, data.y);

        var start = cc.callFunc(function () {
            if (starListener != null) {
                starListener();
            }
        }.bind(this), this);

        var stop = cc.callFunc(function () {
            if (endListener != null) {
                endListener();
            }
        }.bind(this), this);
        var myAction = cc.sequence(start, actionBy, stop);
        view.runAction(myAction);
    },
    javelinRivel: function (name, javalinData, JaveCount) {
        // console.log("javelin rivel;");
        //获取场景
        var scene = cc.director.getScene();
        // cc.log("父亲",scene);
        var charactor = scene.getChildByName(name).getChildByName("Player").getComponent("Charactor");
        // cc.log("有么",charactor);
        var HeroControl = scene.getChildByName(name).getComponent("HeroControl");

        HeroControl.javelinTag = true;
        //console.log("javelin rivel;");
        if (HeroControl != null) {
            var Hero = scene.getChildByName(name);

            //扔标枪
            HeroControl.upJavelin_go();


            HeroControl.idleadd();

            HeroControl.SetCurrentSpeed(0);

            // return;
            setTimeout(function () {
                HeroControl = scene.getChildByName(name).getComponent("HeroControl");
                if (!HeroControl.javelinTag) {
                    return;
                }
                var tPrefab = cc.instantiate(this.javetemp_Rivel);
                tPrefab.parent = cc.director.getScene();//中部PK积分显示后隐藏
                cc.find("Level").getComponent("LevelControl").addJaveLin(tPrefab);
                this.addCamera(tPrefab);
                tPrefab.active = true;
                tPrefab.isTag = true;
                tPrefab.zIndex = 999;
                tPrefab.setPosition(Hero.x, Hero.y + 100);
                var HeroControl = scene.getChildByName(name).getComponent("HeroControl");
                var x = 1440 + JaveCount * 72;
                var data = javalinData;
                tPrefab.javeTime = data.duration;

                if (cc.find('Canvas').getComponent('GameStates').bServer) {//如果是服务器，扔标枪后记录在自己的GameMode上面
                    var TempGameMode = cc.find('Canvas').getComponent('GameMode');
                    TempGameMode.isClientJaveDis = x;
                }

                var datas = {
                    duration: data.duration,
                    position: x,
                    y: 0
                };
                tPrefab.getChildByName("jave").getComponent("Charactor_javeLin").javelin(data, function () {
                    if (!HeroControl.javelinTag) {
                        tPrefab.isTag = null;
                        return;
                    }

                    HeroControl.javelinmoveHero(datas, tPrefab);


                }.bind(this), function () {
                    // return;
                    // tPrefab.isTag = null;
                    // if (!HeroControl.javelinTag) {
                    //     tPrefab.isTag = null;
                    //     return;
                    // }
                    // HeroControl.javelinmoveHero_act(datas);
                    // if (tPrefab.x - this.node.x > 3000) {
                    //     this.node.x = tPrefab.x-720;
                    // }

                    // charactor.readyRun();

                }.bind(this));
            }.bind(this), 150);
        }
    },
    //计算height，和duration
    javelinData: function (x) {
        var MiddleX = x / 2;
        var highest = Math.sqrt(x * x - MiddleX * MiddleX) - x;
        highest = highest < 0 ? -highest : highest;
        highest += 0.2;
        // console.log("标枪的x值=", x, "this.javeCount=", this.javeCount, "highest==", highest);
        // console.log("扔多高",highest);
        var tempDuration = x > 5000 ? 4 : 2;
        var data = {
            duration: tempDuration,
            position: 0,
            y: -70,
            height: 600,//600
            jumps: 1
        };

        return data;
    },
    javelinHero: function (name) {
        //获取场景
        // var scene = cc.director.getScene();
        // cc.log("父亲",scene);
        var charactor = this.CharactorScript;//scene.getChildByName(name).getChildByName("Player").getComponent("Charactor");
        // cc.log("有么",charactor);
        var HeroControl = this;//scene.getChildByName(name).getComponent("HeroControl");

        var Hero = this.node;//cc.find(name);
        var NetworkSocket = Hero.getComponent('NetworkSocket');
        // cc.log("有没有",HeroControl.javelinTag);
        HeroControl.javelinTag = true;
        if (HeroControl != null) {

            //扔标枪
            HeroControl.upJavelin_go();
            var UIControl = cc.find("UIControl").getComponent("UIControl");

            HeroControl.idleadd();
            HeroControl.SetCurrentSpeed(0);

            // HeroControl.HeroIsStop = true;//玩家停止

            var x = 1440 + this.javeCount * 72;
            var data = this.javelinData(x);
            //同步数据给rivel
            var NetData = { FunctionName: 'JavelinData', JavelinData: data, JaveCount: this.javeCount, HeroPosition: Hero.position.x };
            NetworkSocket.sendSyncData(JSON.stringify(NetData));

            if (cc.find('Canvas').getComponent('GameStates').bServer) {//如果是服务器，扔标枪后记录在自己的GameMode上面
                var TempGameMode = cc.find('Canvas').getComponent('GameMode');
                TempGameMode.isSeverJaveDis = x;
            }
            // return;
            setTimeout(function () {
                // HeroControl = scene.getChildByName(name).getComponent("HeroControl");
                // cc.log("到终点",HeroControl.javelinTag);
                if (!HeroControl.javelinTag) {
                    return;
                }

                var tPrefab = cc.instantiate(this.javetemp_Hero);
                tPrefab.parent = cc.director.getScene();//中部PK积分显示后隐藏
                cc.find("Level").getComponent("LevelControl").addJaveLin(tPrefab);
                tPrefab.active = true;
                tPrefab.isTag = true;
                HeroControl.CameraNode.parent = tPrefab;
                this.addCamera(tPrefab);
                tPrefab.zIndex = 999;
                tPrefab.setPosition(Hero.x, Hero.y);

                // var HeroControl = scene.getChildByName(name).getComponent("HeroControl");

                var datas = {
                    duration: data.duration,
                    position: x,
                    y: 0
                };
                tPrefab.getChildByName("jave").getComponent("Charactor_javeLin").javelin(data, function () {
                    if (!HeroControl.javelinTag) {
                        tPrefab.isTag = null;
                        return;
                    }
                    tPrefab.javeTime = data.duration;
                    UIControl.startDistance_Hero(1, tPrefab, true);
                    HeroControl.javelinmoveHero(datas, tPrefab);
                    // cc.log("变速 扔标枪1", HeroControl.PlayerStateScript.CurrentSpeed);
                }.bind(this), function () {
                    this.stopAudioByName("JavelinFlying");//停止标枪飞的声音
                    this.playAudioByName("JavelinDown");//播放标枪落地的声音

                    if (!HeroControl.javelinTag) {
                        tPrefab.isTag = null;
                        return;
                    }

                    //加分
                    setTimeout(function () {
                        UIControl.setCallBack_Hero(function (m) {

                        }.bind(this));

                        // if (!cc.find('Canvas').getComponent('GameStates').bServer) {
                        //     var data = { FunctionName: 'reqAddScore'};
                        //     cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
                        // }
                        // else {
                        //     cc.find('Canvas').getComponent('GameMode').SyncJaveEndAddScore();
                        // }

                        //加分
                        if (!cc.find('Canvas').getComponent('GameStates').bServer) {
                            var data = { FunctionName: 'addScore', PlayerName: 'Hero', value: x };
                            cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
                        }
                        else {
                            cc.find('Canvas').getComponent('GameMode').addScore(cc.find('Hero'), x, true);
                        }

                        tPrefab.isTag = null;
                        charactor.readyRun();

                        // var p1 = tPrefab.getPosition();

                    }.bind(this), 1000);

                }.bind(this));
            }.bind(this), 150);

        }
    },

    resets: function () {//这个是加分后执行的

        setTimeout(function () {
            var GameMode = cc.find('Canvas').getComponent('GameMode');
            var GameStates = cc.find('Canvas').getComponent('GameStates');

            this.SetSpeedToZeroAndIdle();

            //标枪结束
            var data = {
                gameLv: 2,
                startPositionX: 150000
            }
            cc.find("Level").getComponent("LevelControl").setStart(data);

            GameStates.StartLinePositionX = cc.find("Level").getComponent("LevelControl").tempStartNode.x + 720;

            GameMode.CheckPlayersDistance();
            var data = { FunctionName: 'CheckPlayersDistance', StartLinePositionX: GameStates.StartLinePositionX };
            GameMode.SynchronizationFun(data);


        }.bind(this), 1000);
    },

    javelinmoveRivel: function (data, view, starListener, endListener) {
        var actionBy = cc.moveBy(data.duration, data.position, data.y);

        var start = cc.callFunc(function () {
            if (starListener != null) {
                starListener();
            }
        }.bind(this), this);

        var stop = cc.callFunc(function () {
            if (endListener != null) {
                endListener();
            }
        }.bind(this), this);
        var myAction = cc.sequence(start, actionBy, stop);
        view.runAction(myAction);
    },
    javelinmoveHero: function (data, view, starListener, endListener) {
        // console.log("javelinMoveHero = ", data);
        var actionBy = cc.moveBy(data.duration, data.position, data.y);

        var start = cc.callFunc(function () {
            if (starListener != null) {
                starListener();
            }
        }.bind(this), this);

        var stop = cc.callFunc(function () {
            if (endListener != null) {
                endListener();
            }
        }.bind(this), this);
        var myAction = cc.sequence(start, actionBy, stop);
        view.runAction(myAction);
    },
    javelinmoveHero_act: function (data) {
        var speed = data.position / (data.duration + 1);
        // cc.log("速度是",speed);
        this.SetCurrentSpeed_noRestrictions(speed);
    },
    stopBikeHero: function (name) {
        var charactor = cc.find(name).getChildByName("Player").getComponent("Charactor");
        if (charactor != null) {
            // charactor.stop();
            cc.find(name).getComponent('HeroControl').SetCurrentSpeed(0);
            cc.find(name).getComponent("PlayerState").enableTouch = false;
        }

    },
    downBikeHero: function (name) {
        var charactor = cc.find(name).getChildByName("Player").getComponent("Charactor");
        // console.log(name, "：当前目标1");

        if (charactor != null) {
            charactor.downBike(function () {
                //todo
            }.bind(this));
            charactor.idleadd();
            cc.find(name).getComponent('HeroControl').SetCurrentSpeed(0);

            cc.find(name).getComponent("PlayerState").enableTouch = false;
            // console.log(name, "：当前目标2");
        }
    },
    downBikeRivel: function (name) {

        var charactor = cc.find(name).getChildByName("Player").getComponent("Charactor");

        if (charactor != null) {
            charactor.downBike(function () {
            }.bind(this));
            charactor.idleadd();
            cc.find(name).getComponent('HeroControl').SetCurrentSpeed(0);
            cc.find(name).getComponent("PlayerState").enableTouch = false;
        }
    },
    addCamera: function (node) {
        // var CameraNode = cc.find("Hero").getChildByName("CameraNode");
        var Hero;
        var CameraNode;
        var javetemp_Hero;
        if (cc.find("Hero").getChildByName("CameraNode") != null) {
            Hero = cc.find("Hero").getChildByName("CameraNode").getComponent("cc.Camera")
        }
        if (cc.find("CameraNode") != null) {
            CameraNode = cc.find("CameraNode").getComponent("cc.Camera");
        }
        if (cc.find("javetemp_Hero") != null) {
            if (cc.find("javetemp_Hero").getChildByName("CameraNode") != null) {
                javetemp_Hero = cc.find("javetemp_Hero").getChildByName("CameraNode").getComponent("cc.Camera");
            }
        }


        if (Hero != null) {
            var Camera = cc.find("Hero").getChildByName("CameraNode").getComponent("cc.Camera");
            Camera.addTarget(node);
        }
        else if (CameraNode != null) {
            var Camera = cc.find("CameraNode").getComponent("cc.Camera");
            Camera.addTarget(node);
        }
        else if (javetemp_Hero != null) {
            var Camera = cc.find("javetemp_Hero").getChildByName("CameraNode").getComponent("cc.Camera");
            Camera.addTarget(node);
        }
    },
 

    resetHero: function (data) {
        var Hero = cc.find('Hero');
        var Rivel = cc.find('Rivel');
        var HeroHeroControl = Hero.getComponent("HeroControl");
        var RivelHeroControl = Rivel.getComponent("HeroControl");
        HeroHeroControl.SetSpeedToZeroAndIdle();
        RivelHeroControl.SetSpeedToZeroAndIdle();
        HeroHeroControl.javelinTag = false;
        RivelHeroControl.javelinTag = false;
        Hero.getChildByName('Player').stopAllActions();
        Rivel.getChildByName('Player').stopAllActions();
        Hero.getChildByName('Player').setPositionY(-132);
        Rivel.getChildByName('Player').setPositionY(-37);

        HeroHeroControl.CameraNode.parent = Hero;

        RivelHeroControl.isJumpOver = true;
        HeroHeroControl.isJumpOver = true;

        //重置人物踉跄判定
        var PlayerStateScript = Rivel.getComponent("PlayerState");
        PlayerStateScript.CurrentInZoneType = PlayerStateStatic.ZoneType.None;
        PlayerStateScript.BTouchedScreenInTheZone = false;
        PlayerStateScript.BStagger = false;

        if (data != null) {
            Hero.setPositionX(data.node.x + 700);
            Rivel.setPositionX(data.node.x + 730);
        }

    },

});
