JS - 私人医生(想看哪里点哪里)

/**
 * Created by lgy on 2020/10/14.
 */
var CustomGames = cc.Layer.extend({
    init:function(){
        this.bg = getUI(this, "bg");
        this.bg.setPositionY(SH/2);

        this.nTop = getUI(this, "nTop");
        this.nTop.setPositionY(SH);
        this.nTop.setBlangs(true);
        this.nodeTalk1 = getUI(this.nTop, "nodeTalk1");
        this.nodeTalk1.setVisible(false);
        this.nodeTalk2 = getUI(this.nTop, "nodeTalk2");
        this.nodeTalk2.setVisible(false);

        this.nContents = getUI(this,"nContents");
        this.cureText = getUI(this,"cureText");
        UIUtil.setOutline(this.cureText, ColorDefine.ARMOUR_OUTLINE_COLOR_1, ColorDefine.OUTLINE_SIZE_ONE_PIXEL);
        this.cureText.setString(G_S.CUSTOMGAME_JS_10);
        this.cureText.setVisible(false);

        this.nBottom = getUI(this, "nBottom");
        this.nBottom.setBlangs();
        this.sprTingZhenQi = getUI(this, "sprTingZhenQi");
        this.sprTingZhenQi.setVisible(false);

        this.timeNode = getUI(this,"timeNode");
        this.timeNode.setVisible(true);
        this.nCDTime = CountDown.getCom(this, "nCDTime");
        this.nCDTime.setMyTextColor(ColorDefine.ARMOUR_TEXT_COLOR_1,ColorDefine.ARMOUR_TEXT_COLOR_2);
        this.nCDTime.setMyOutline(ColorDefine.ARMOUR_OUTLINE_COLOR_1, ColorDefine.OUTLINE_SIZE_ICON_TXTNAME);

        var btInfo = getUI(this.nTop, "btInfo");
        btInfo.addClickEventListener(this.onIntroduce.bind(this));

        this.btBack = getUI(this.nTop, "btBack");
        this.btBack.addTouchEventListener(this.onClickBack.bind(this));

        TextureUtil.isNeedReleaseUIShenmiaoEffect = true;

        this.sprHeartBg = getUI(this, "sprHeartBg");
        this.sprHeartBg.setVisible(false);
        this.sptHeartBgHeight = this.sprHeartBg.getContentSize().height;
        this.txtHeart = getUI(this.sprHeartBg, "txtHeart");
        this.txtHeart.ignoreContentAdaptWithSize(true);
        this.heartNode = getUI(this.sprHeartBg, "heartNode");

        this.lightNode = getUI(this,"lightNode");

        this.ScrollView = getUI(this, "ScrollView");
        this.ScrollView.setPositionY(BOTTOM_H + this.sptHeartBgHeight);
        this.ScrollView.setContentSize(SW, SH-156-BLANGS_TOP-BOTTOM_H - this.sptHeartBgHeight);
        this.ScrollView.setScrollBarEnabled(false);
        this.ScrollView_Width = this.ScrollView.getContentSize().width;
        this.ScrollView_Height = this.ScrollView.getContentSize().height;
        this.ScrollView.setTouchEnabled(true);
        this.posSV = this.ScrollView.getPosition();
        // this.incoSVPosY = this.ScrollView.getInnerContainerPosition();

        this.nextClickType = -1;//下一个点击类型
        this.nextClickBody = -1;//下一个点击部位
        this.realClickCount = 0;//触发真实部位点击次数
        this.gameStatus = 0;//游戏状态 0:普通 1:克制 2:被克制
        this.armature_zi_aniname = "start6";
        this.iSendData = false;
        this.score = 0;//得分
        this.heartNum = 0;//心跳指数
        this.leftTime = 0;
        this.isAchieve = false;//是否完成
        this._armature_heart_name = "start13";
        this.fzSize = cc.size(640,1600);
    },

    showContents:function (){
        this.createCustomMaidSpine();//创建定制少女spine
        this.createConcubineTouch(); //给妃子添加点击效果
        this.showTipSpine();//播放提示spine
    },

    //给妃子添加点击效果
    createConcubineTouch: function () {
        this.createTouchLayer();//创建点击层
        this.createGrid();//创建栅格
        this.createTipEffect();//创建部位提示特效节点
    },

    createCustomMaidSpine: function () {
        this.feiZiEftNode = new cc.Node();
        this.feiZiEftNode.removeAllChildren();
        var girlInfo = DD[T.AIGirlInfo];
        var customMaidSpine = new CustomMaidSpine();
        // customMaidSpine.setSkinData(mCustomMaid.getPartSkinConfigs());
        customMaidSpine.setSkinData(mCustomMaid.getPartSkinConfigs({
            useHairstyle: girlInfo.useHairstyle,
            useMakeUp: girlInfo.useMakeUp,
            useShoes: girlInfo.useShoes,
            useUnderwear: girlInfo.useUnderwear}));
        this.feiZiEftNode.addChild(customMaidSpine);
    },

    showTipSpine:function() {
        var self = this;
        //start1听诊器点一点,start2听诊器长按,start3长按,start4点一点,start5手指点一点 start7向上箭头,start8向下箭头,start9精神不佳,start10身体不适
        //start13 心电图默认 start14 心电图暧昧 start15 心电图悸动 start16 心电图兴奋 start17 心电图痴迷
        var path = C_RES_SPINE + "spine_dingzhishaonv/spine_yiwushi_000/spine_yiwushi_000.json";
        // var path = C_RES_SPINE + "hongyan/hongyan001_a/hongyan001_a.json";
        preloadEffectsWithCallback([path], function () {
            self._armature_gesture = showEffect(self.touchControl, path, "start1", 1, null, self, null, cc.p(0, 0));
            self._armature_gesture.setVisible(false);
            self._armature_long = showEffect(self.touchControl, path, "start2", 1, null, self, null, cc.p(0, 0));
            self._armature_long.setVisible(false);
            self._armature_gesture_zi = showEffect(self, path, "start3", 1, null, self, null, cc.p(SW / 2, 360));
            self._armature_gesture_zi.setVisible(false);
            self._armature_upDown = showEffect(self, path, "start7", 1, null, self, null, cc.p(SW - 50, SH / 2));
            self._armature_upDown.setVisible(false);
            self._armature_zi = showEffect(self, path, "start9", 0, null, self, null, cc.p(SW / 2, COTENT_H - 70));
            self._armature_zi.setVisible(false);


            self._armature_heart = showEffect(self.heartNode, path, "start13", 1, null, self, null, cc.p(0, 0));
            var aniName = self.getCurAniName();
            if (aniName != "-1"){
                self._armature_heart_name = aniName;
                self._armature_heart.setVisible(true);
                self._armature_heart.setAnimation(0, aniName, 1);
            }else{
                self._armature_heart.setVisible(false);
            }


            //少女放大
            var path2 = "res/image/effects/eft_hougong_chongxing01/eft_hougong_chongxing01.ExportJson";
            preloadEffectsWithCallback([path2], function () {
                self._armature_light = showEffect(self.lightNode, path2, "start", 0, null, self, null, cc.p(0, SH / 2));
                self._armature_light.setVisible(false);
            });

        });
    },

    //创建栅格
    createGrid: function () {
        var lines = 28;              //栅格行
        var columns = 16;              //栅格列
        this.isFinish = true;           //点击效果是否全部展示完
        this.rectList = [];
        var rectWidth = this.ScrollView_Width / columns;
        var rectHeight = this.fzSize.height / lines;
        for (var i = 0; i < lines; i++) {
            for (var j = 0; j < columns; j++) {
                var posX = j * rectWidth;
                var posY = i * rectHeight;
                var rect = cc.rect(posX, posY, rectWidth, rectHeight);
                this.rectList.push(rect);
            }
        }
    },

    createTipEffect:function (){
        this.tipsEffectNode = [];
        for (var i in this.infoList){
            var eventCoordinates = this.infoList[i].eventCoordinates;
            var rect = this.getCoordinateRectById(parseInt(eventCoordinates));
            var node = new cc.Node();
            this.touchControl.addChild(node);
            node.setPosition(cc.p(rect.x,rect.y));
            this.tipsEffectNode.push(node);
        }
    },

    //创建点击层
    createTouchLayer: function () {
        var innerHeight = this.fzSize.height;
        if(innerHeight < this.ScrollView_Height){
            innerHeight = this.ScrollView_Height;
        }
        this.ScrollView.setInnerContainerSize(cc.size(this.ScrollView_Width, innerHeight));
        this.ScrollView.jumpToTop();

        this.touchControl = new ccui.Layout();
        this.touchControl.setBackGroundColorType(ccui.Layout.BG_COLOR_NONE);//BG_COLOR_SOLID
        this.touchControl.setBackGroundColor(ColorDefine.LOADLAYER_BACKGROUND_BGCOLOR);
        this.touchControl.setBackGroundColorOpacity(180);
        this.touchControl.setContentSize(cc.size(this.ScrollView_Width,innerHeight));
        this.touchControl.setTouchEnabled(true);
        this.touchControl.setSwallowTouches(false);
        this.touchControl.addTouchEventListener(this.onTouch, this);
        this.ScrollView.addChild(this.touchControl);
        this.touchControl.setAnchorPoint(cc.p(0.5,1.0));
        this.touchControl.setPosition(this.ScrollView_Width / 2, this.fzSize.height);

        this.feiZiEftNode.setPosition(cc.p(320,0));
        this.touchControl.addChild(this.feiZiEftNode);
        //栅格测试
        // this.createGrideTest();
    },

    //少女点击事件
    onConcubineTouch:function (clickType) {
        var sender = this.sender;
        this.touchData = null;
        var touchData = this.judgeTouchPosOfBody(sender);
        if(touchData.isTouch){
            this.touchData = touchData;
            this.showTouchEft(sender,touchData);
            this.playBodySound(touchData.info.partEffect);//部位音效
            var duiBaiData = this.getRandomDuiBaiIndex(touchData.info.partLine);//部位台词
            var normalDuiBai = Config.X3Duibai[duiBaiData.duiBaiId];
            var text = mCustomMaid.formatDuiBaiStringByCall(normalDuiBai.text);
            this._showTalk(text);
            this.onDiagnosis(clickType);
            this.isFinish = false;
        }
    },

    //判断点击了妃子哪个部位
    judgeTouchPosOfBody: function (sender) {
        // var touchWorldPos = sender.getTouchBeganPosition();
        // touchNodePos = this.touchControl.convertToNodeSpace(sender.getTouchEndPosition());
        touchNodePos = sender.convertToNodeSpace(sender.getTouchEndPosition());
        this.touchWorldPos = sender.getTouchEndPosition();
        this.touchNodePos = touchNodePos;
        var touchData = {};
        touchData.isTouch = false;                                  //是否点中了妃子有效部位
        for (var i in this.infoList) {
            var info = this.infoList[i];
            var bodyList = info.coordinate.split(";");
            for (var key in bodyList) {
                var touchRect = this.getCoordinateRectById(bodyList[key]);
                if (touchRect != null && cc.rectContainsPoint(touchRect, touchNodePos)) {
                    touchData.info = info;
                    touchData.isTouch = true;
                    return touchData;
                }
            }
        }
        return touchData;
    },

    getCoordinateRectById: function (id) {
        var curId = parseInt(id) - 1;
        var rect = null;
        for (var key in this.rectList) {
            if (parseInt(key) == curId) {
                rect = this.rectList[key];
                return rect;
            }
        }
        return rect;
    },

    //显示点击特效
    showTouchEft: function (sender,touchData) {
        var self = this;
        var pos = sender.convertToNodeSpace(sender.getTouchEndPosition());
        var path = "res/image/effects/eft_hougong_dianji/eft_hougong_dianji.ExportJson";
        preLoadEffect(path, null, function () {
            var node = showEffect(sender, path, "start", 0, null, null, true, cc.p(pos.x, pos.y));
            node.getAnimation().setMovementEventCallFunc(function (armature, movementType, movementID) {
                if (movementType == ccs.MovementEventType.complete) {
                    armature.removeFromParent();
                }
            }, self);
        });
    },

    _showTalk: function (sayInfo) {
        var self = this;
        var nodeTalk;
        if (Math.random() < 0.5) {
            nodeTalk = this.nodeTalk1;
            this.nodeTalk2.setVisible(false);
            this.nodeTalk1.setVisible(true);
        } else {
            nodeTalk = this.nodeTalk2;
            this.nodeTalk1.setVisible(false);
            this.nodeTalk2.setVisible(true);
        }

        if (!sayInfo)
            sayInfo = G_S.CUSTOMGAME_JS_9;

        nodeTalk.stopAllActions();
        nodeTalk.setScale(0.1);
        nodeTalk.setVisible(true);

        getUI(nodeTalk, "talkLabel").setString(sayInfo);
        nodeTalk.runAction(cc.sequence(cc.scaleTo(0.2, 1.2), cc.scaleTo(0.1, 1), cc.delayTime(3), cc.callFunc(function (node) {
            self.nodeTalk1.setVisible(false);
            self.nodeTalk2.setVisible(false);
        })))
    },

    /**
     * 处理诊断
     * @param clickType CLICK_TYPE_
     */
    onDiagnosis:function(clickType) {
        var offset = 5;
        var act = cc.sequence(
            cc.moveBy(0.05,cc.p(offset, offset)),
            cc.moveBy(0.05,cc.p(-offset, -offset)),
            cc.moveBy(0.05,cc.p(0, -offset)),
            cc.moveBy(0.05,cc.p(0, offset))
        );
        this.ScrollView.setPosition(this.posSV);
        this.ScrollView.stopAllActions();
        this.ScrollView.runAction(act.easing(cc.easeSineOut()));

        this.iSendData = true;
        this.curClickType = clickType;
        this.showGameStatus();
        this.diagnosisBody();//诊断身体
        this.unschedule(this.sendClickAIGirl);
        this.schedule(this.sendClickAIGirl,1.0);
    },

    sendClickAIGirl: function () {
        if(!this.iSendData) {
            return;
        }
        DC.wsData("ClickAIGirl/" + this.score + "/" + this.heartNum);
        cc.log("已经发送数据:score ,heartNum",this.score,this.heartNum);
        this.iSendData = false;
    },

    onIntroduce: function(){
        var data = {};
        data.title = G_S.CUSTOMGAME_JS_11;
        data.content = [

            G_S.CUSTOMGAME_JS_1,
            G_S.CUSTOMGAME_JS_2,
            G_S.CUSTOMGAME_JS_3,
            G_S.CUSTOMGAME_JS_4,
            G_S.CUSTOMGAME_JS_5
        ];
        data.isTouchEnable = true;
        HUD.showLayer(HUD_LIST.Tip_CommonRuleInfo, HUD.getTipLayer(), null ,true, function(tip){
            tip.setData(data);
        }, this);
    },

    onClickBack: function (sender, type) {
        var ok = touch_process_bt(sender, type);
        if(ok) {
            this.hide();
        }
    },

    /**
     * 添加划一划支持
     */
    createStreak:function(){
        if(this._streak != null)
            this._streak.removeFromParent();

        if (!(!cc.sys.isNative && cc._renderType == cc.game.RENDER_TYPE_CANVAS)) {

            this._streak = new cc.MotionStreak(0.5, 1, 20, ColorDefine.GODSEXPERIMENT_STREAK_COLOR, "res/image/ui/common/disable/streak.png");
            this.addChild(this._streak);
        }
    },


    onTouch:function (sender, type) {
        this.sender = sender;
        switch (type) {
            case ccui.Widget.TOUCH_BEGAN:
                this.ScrollView.setTouchEnabled(true);
                this.sprTingZhenQi.setVisible(false);
                this.pt1 = sender.getTouchBeganPosition();
                // this.createStreak();
                this._doStreak = false;//滑动
                this._doLongPress = false;//长按
                this.schedule(this.showLongPress, 0.2);
                break;
            case ccui.Widget.TOUCH_MOVED:
                var pt = sender.getTouchMovePosition();
                if(this._streak){
                    this._streak.setPosition(pt);
                }

                if( cc.pDistance(this.pt1, pt) > 10){
                    this.unschedule(this.showLongPress);
                    this.pt1 = pt;
                    this._doStreak = true;
                    //指引
                    this.showTipUpDown(0);//type 0:move 1:end
                }
                break;
            case ccui.Widget.TOUCH_ENDED:
                this.ScrollView.setTouchEnabled(true);
                this.unschedule(this.showLongPress);
                if ( !this._doStreak && !this._doLongPress) {
                    this.pt1 = sender.getTouchEndPosition();
                    this.onConcubineTouch(this.CLICK_TYPE_POLITE);
                }
                this._doLongPress = false;//长按
                this._armature_long.setVisible(false);
                //指引特效
                this.showTipUpDown(1);//type 1:move 0:end
                //部位特效
                this.showTipGesture();
                break;
            case ccui.Widget.TOUCH_CANCELED:
                break;
            default:
                break;
        }
    },

    showTipUpDown:function (type){
        if(this.nextClickBody != -1 && this._armature_heart_name != "-1"){
            var info = this.infoList[this.nextClickBody];
            var eventCoordinates = info.eventCoordinates;
            var rect = this.getCoordinateRectById(parseInt(eventCoordinates));
            var eftNode = this.tipsEffectNode[this.nextClickBody];
            var eftNodeWorldPos = eftNode.convertToWorldSpace(cc.p(0,0));
            var svNodePos = this.ScrollView.convertToNodeSpace(eftNodeWorldPos);
            var rect2 = cc.rect(eftNodeWorldPos.x, eftNodeWorldPos.y-rect.height, rect.width, rect.height*3);
            var isIntersect = cc.rectIntersectsRect(this.ScrollView.getBoundingBox(), rect2);
            var aniName;
            if (svNodePos.y <=0){
                aniName = "start8";
            }else{
                aniName = "start7";
            }
            if (type==1){
                this.isIntersect = isIntersect
                if (!isIntersect){
                    this._armature_upDown.setAnimation(0, aniName, true);
                    this._armature_upDown.setVisible(true);
                }else{
                    this._armature_upDown.setVisible(false);
                }
            }else{
                if(this.isIntersect != isIntersect){
                    this.isIntersect = isIntersect
                    if (!isIntersect){
                        this._armature_upDown.setAnimation(0, aniName, true);
                        this._armature_upDown.setVisible(true);
                    }else{
                        this._armature_upDown.setVisible(false);
                    }
                }
            }

        }else{
            this._armature_upDown.setVisible(false);
        }
    },

    showTipGesture:function (){
        if(this.nextClickBody != -1 && this._armature_heart_name != "-1"){
            this._armature_gesture.setVisible(true);
            var eftNode = this.tipsEffectNode[this.nextClickBody];
            var aniName;
            if (this.gameStatus == 1){//点击
                aniName = "start5";
            }else if(this.gameStatus == 2){//长按
                aniName = "start1";
            }
            if (this._armature_gesture.getPosition() != eftNode.getPosition() || this._armature_gesture_aniname != aniName){
                this._armature_gesture.setAnimation(0, aniName, true);
                this._armature_gesture.setPosition(eftNode.getPosition());
            }
        }else{
            this._armature_gesture.setVisible(false);
        }

        if (this.iHideNode){
            this._armature_gesture.setVisible(false);
        }
    },

    showLongPress:function(){
        this._doLongPress = true;//长按
        this.ScrollView.setTouchEnabled(false);
        // this.unschedule(this.showLongPress);
        this.onConcubineTouch(this.CLICK_TYPE_LONG);
    },

    showDiagnosisMessage:function(msg, fontSize, color){
        var node = new cc.Node();
        HUD.getTipLayer().addChild(node);
        var txt = createLabel(msg, UIUtil.getFontName(), fontSize, color, null, ColorDefine.OUTLINE_COLOR_GODSEXPERIMENT_HURTMESSAGE, ColorDefine.OUTLINE_SIZE_GODSEXPERIMENT_HURTMESSAGE);
        txt.setPosition(0, 0);

        node.addChild(txt);
        node.setPosition(cc.p(SW*0.5, SH*0.5));
        node.setOpacity(255);

        var moveTo = cc.moveBy(0.3, cc.p(0, 180));
        var fadeOut = cc.fadeOut(1);
        var act = cc.spawn(moveTo, fadeOut);
        var clean = cc.removeSelf();
        var actSeq = cc.sequence(act, clean);
        node.runAction(actSeq);
        node.setGlobalZOrder(100);
    },

    diagnosisBody: function(){
        if(!this.touchData || !this.touchData.isTouch) return;
        var info = this.touchData.info;
        var value, fontSize, msg, score,heartNum;
        var color = ColorDefine.GODSEXPERIMENT_HURTMESSAGE1_COLOR;
        switch (this._diagnosisType) {
            case this.GAME_STATUS.ORIDINART:
                fontSize = 36;
                msg = "";
                score = info.averageScore;//普攻得分
                heartNum = info.cardiacIndex;//普攻指数
                break;
            case this.GAME_STATUS.RESTRAINT:
                fontSize = 54;
                msg = G_S.CUSTOMGAME_JS_7.format(parseInt(info.restraintIndex));
                score = info.restraintScore;//克制得分
                heartNum = info.restraintIndex;//克制指数
                break;
            case this.GAME_STATUS.RESTRAINED:
                fontSize = 54;
                msg = G_S.CUSTOMGAME_JS_8.format(parseInt(info.unrestrainIndex));
                color = ColorDefine.GODSEXPERIMENT_HURTMESSAGE2_COLOR;
                score = info.unrestrainScore;//被克制得分
                heartNum = info.unrestrainIndex;//被克制指数
                break;
        }

        this.score += parseInt(score);
        this.heartNum += parseInt(heartNum);
        this.showDiagnosisMessage(msg, fontSize, color);
        this.showHeartEffect();
        this.showSpineBigger();

    },

    //播放点击部位音效
    playBodySound:function(soundStr){
        if(soundStr == null) return;
        if(this.BodyAudio){
            mAudio.stopEffect(this.BodyAudio);
            this.BodyAudio = null;
        }
        this.BodyAudio =  mAudio.playEffect(res_sound_root + "zhubo/" + soundStr + ".mp3");
    },

    playDelayEffect:function (){
        // mAudio.stopEffect(this.BodyAudio);
        this.BodyAudio = null;
    },

    //对白
    getRandomDuiBaiIndex: function (duibaiList) {

        if (!duibaiList || duibaiList == "") {
            cc.log("warning,getRandomDuiBaiIndex config data has no this duibai array");
            return null;
        }

        var duiBaiData = {};
        var dataList = [];
        dataList = duibaiList.split(";");
        if(dataList.length <= 0) return null
        var duiBaiIndex = GetRandomNum(0, (dataList.length - 1));
        duiBaiData.duiBaiId = dataList[duiBaiIndex];
        duiBaiData.duiBaiIndex = duiBaiIndex;
        return duiBaiData;
    },

    showGameStatus: function (){
        var status = this.getGameStatus();
        if (this.gameStatus != status){
            this.gameStatus = status;
        }
        var aniName1;
        var aniName2;
        var aniName3;
        switch (status) {
            case 0:
                this._armature_gesture.setVisible(false);
                this._armature_gesture_zi.setVisible(false);
                this._armature_zi.setVisible(false);
                break;
            case 1:
                aniName1 = "start5";
                aniName2 = "start4";
                aniName3 = "start9";
                this._armature_gesture.setVisible(true);
                this._armature_gesture_zi.setVisible(true);
                this._armature_zi.setVisible(true);
                break;
            case 2:
                aniName1 = "start1";
                aniName2 = "start3";
                aniName3 = "start10";
                this._armature_gesture.setVisible(true);
                this._armature_gesture_zi.setVisible(true);
                this._armature_zi.setVisible(true);
                break;
        }

        if(this._doLongPress){//长按
            var pos = this.touchControl.convertToNodeSpace(this.pt1);
            this._armature_long.setPosition(pos);
            this._armature_long.setVisible(true);
            this._armature_gesture.setVisible(false);
        }

        if(this._armature_gesture.isVisible() && this._armature_gesture_aniname != aniName1){
            this._armature_gesture_aniname = aniName1;
            this._armature_gesture.setAnimation(0, aniName1, true);
        }

        if(this._armature_gesture_zi.isVisible() && this._armature_gesture_zi_aniname != aniName2 ){
            this._armature_gesture_zi_aniname = aniName2;
            this._armature_gesture_zi.setAnimation(0, aniName2, true);
        }

        if(this._armature_zi.isVisible() && this._armature_zi_aniname != aniName2 ){
            this._armature_zi_aniname = aniName3;
            this._armature_zi.setAnimation(0, aniName3, true);
        }

    },

    getGameStatus: function () {
        var status = 0;
        if(!this.touchData || !this.touchData.isTouch) return status;
        if (this.nextClickBody != -1){
            this.realClickCount++;
            // cc.log("lgy1----------this.nextClickBody:this.realClickCount:",this.nextClickBody,this.realClickCount);
            if(this.touchData.info.id == this.infoList[this.nextClickBody].id && this.nextClickType == this.curClickType){
                this._diagnosisType = this.GAME_STATUS.RESTRAINT;//克制
            }else{
                this._diagnosisType = this.GAME_STATUS.RESTRAINED;//被克制
            }

            if (this.realClickCount >= parseInt(this.infoList[this.nextClickBody].eventNum)){
                this.realClickCount = 0;
                this.nextClickBody = -1;
                this.nextClickType = -1;
                status = 0;
            }else{
                status = this.gameStatus;
            }
        }else{
            status = 0;
            var info = this.touchData.info;
            var triggerEventWeight = info.triggerEventWeight;//触发事件权重
            var random1 = GetRandomNum(1,100);
            if (random1 <= triggerEventWeight){
                var ewList = info.eventWeight.split(";");//事件权重(点一点还是长按)
                var ewTotal = parseInt(ewList[0]) + parseInt(ewList[1]);
                var cur = 0;
                var bodyWeight = [];
                for (var i in this.infoList){
                    cur += parseInt(this.infoList[i].triggerPositionWeight);
                    bodyWeight.push(cur);//2,5,8,10
                }
                var random2 = GetRandomNum(1,bodyWeight[bodyWeight.length-1]);
                var idx;
                for (idx in bodyWeight) {
                    if (random2 <= bodyWeight[idx]) {
                        this.nextClickBody = parseInt(idx);//下一个点击部位
                        // cc.log("lgy2----------this.nextClickBody:this.realClickCount:",this.nextClickBody,this.realClickCount);
                        break;
                    }
                };
                var random3 = GetRandomNum(1,ewTotal);
                if(random3 <= parseInt(ewList[0])){//点一点
                    this.nextClickType = this.CLICK_TYPE_POLITE;//下一个点击类型
                    status = 1;
                }else{//长按
                    this.nextClickType = this.CLICK_TYPE_LONG;//下一个点击类型
                    status = 2;
                }
                // cc.log("lgy----------this.nextClickBody:",this.nextClickBody);
            }
            this._diagnosisType = this.GAME_STATUS.ORIDINART;//普通
        }

        return status;
    },

    randGodPractice: function (max) {
        var multiplier = Math.pow(5, 5);
        var moder = Math.pow(2, 35) - 31;
        var random_seed = 1;

        var next_seed = random_seed * multiplier % moder;
        var next_seed_int = Math.floor(next_seed);
        var ret = next_seed_int / moder;
        this.random_seed = parseInt(next_seed_int);

        ret = Math.ceil(ret*max);
        return parseInt(ret);
    },

    onEnter: function () {
        this._super();

        this.addCustomListener(P.TypeAIGirlDoctor, this.onAIGirlDoctor.bind(this));
        this.addCustomListener(P.TypeAIGirlDoctorResult, this.onAIGirlDoctorResult.bind(this));

        DC.wsData("GetAIGirlDoctor");


    },

    onExit: function () {
        this._super();
        this.releaseCustomListener();
    },

    cleanup:function(){

    },

    //显示心率
    showHeartEffect:function (){
        this.txtHeart.setString(G_S.CUSTOMGAME_JS_6.format(this.heartNum));
        var aniName = this.getCurAniName();
        if (this._armature_heart_name != aniName){
            this._armature_light.setVisible(true);
            this._armature_light.getAnimation().play("start",-1,0);
            if(aniName != "-1"){
                this._armature_heart.setAnimation(0, aniName, 1);
            }
        }
    },

    getCurAniName:function (){
        var heartNumTotal = parseInt(getConstValue(2000130));//定制少女心动指数最大值
        var percent = Math.floor(this.heartNum*100/heartNumTotal);
        var aniName = "start13";
        if (percent >= 100){
            aniName = "-1";
        }else if (percent >= 80){
            aniName = "start17";
        }else if (percent >= 60){
            aniName = "start16";
        }else if (percent >= 40){
            aniName = "start15";
        }else if (percent >= 20){
            aniName = "start14";
        }
        return aniName;
    },

    showSpineBigger:function() {
        var aniName = this.getCurAniName();
        if (this._armature_heart_name != aniName){
            this.unschedule(this.showLongPress);
            var innerPosition = this.ScrollView.getInnerContainerPosition();
            this.iHideNode = true;
            this._armature_heart_name = aniName;
            this.timeNode.setVisible(false);
            this.touchControl.setTouchEnabled(false);
            this.ScrollView.setTouchEnabled(false);
            this.ScrollView.setPositionY(BOTTOM_H);
            this.ScrollView.setContentSize(SW, SH-156-BLANGS_TOP-BOTTOM_H+70);
            this.sprHeartBg.setVisible(false);
            var scale = this.touchData.info.magnification;//点击部位缩放比例
            this.feiZiEftNode.setScale(scale);
            var centerPos = this.getTouchCenterPosByTouchPos();
            this.feiZiEftNode.setPosition(centerPos);

            if (aniName == "-1") {
                this._showTalk();
            }else{
                this.nodeTalk1.setVisible(false);
                this.nodeTalk2.setVisible(false);
            }

            var visible1 = this.nextClickBody != -1;
            var visible2 = this._armature_gesture_zi.isVisible();
            var visible3 = this._armature_zi.isVisible();
            var visible4 = this._armature_upDown.isVisible();

            this._armature_long.setVisible(false);
            this._armature_gesture.setVisible(false);
            this._armature_gesture_zi.setVisible(false);
            this._armature_zi.setVisible(false);
            this._armature_upDown.setVisible(false);
            this.scheduleOnce(function(){
                this.iHideNode = false;
                if (aniName == "-1"){
                    this.gameOver();
                }else{
                    this.timeNode.setVisible(true);
                    this.feiZiEftNode.setScale(1);
                    this.feiZiEftNode.setPosition(cc.p(320,0));
                    this.touchControl.setTouchEnabled(true);
                    this.ScrollView.setTouchEnabled(true);
                    this.ScrollView.setPositionY(BOTTOM_H + this.sptHeartBgHeight);
                    this.ScrollView.setContentSize(SW, SH-156-BLANGS_TOP-BOTTOM_H-this.sptHeartBgHeight);
                    this.sprHeartBg.setVisible(true);

                    this._armature_gesture.setVisible(visible1);
                    this._armature_gesture_zi.setVisible(visible2);
                    this._armature_zi.setVisible(visible3);
                    this._armature_upDown.setVisible(visible4);

                    this.ScrollView.setInnerContainerPosition(innerPosition);
                    this.showTipUpDown(1);
                }
            }.bind(this),4.0);
        }

    },

    //通过触摸点获取pine实际点放大后位于(ScrollView中心点或屏幕中心点)的位置
    getTouchCenterPosByTouchPos:function (){
        var info = this.touchData.info;
        var scale = info.magnification;//点击部位缩放比例
        var pos = this.feiZiEftNode.getPosition();
        var dx = this.touchNodePos.x - pos.x;
        var x = pos.x - dx * (scale - 1);
        var y = pos.y - this.touchNodePos.y * (scale - 1);
        var pos1 = cc.p(x, y);
        // var touchCenterPos = this.ScrollView.convertToNodeSpace(this.touchWorldPos);
        // var svCenterPos = cc.p(this.ScrollView.getContentSize().width/2,this.ScrollView.getContentSize().height/2);
        // var pos2 = cc.pSub(svCenterPos,touchCenterPos);
        var touchCenterPos = this.touchControl.convertToNodeSpace(cc.p(SW/2,SH/2));
        var pos2 = cc.pSub(touchCenterPos, this.touchNodePos);

        return cc.pAdd(pos1, pos2);
    },

    gameOver:function (){
        this.nextClickBody = -1;
        this.cureText.setVisible(true);
        this.timeNode.setVisible(true);
        this.ScrollView.removeAllChildren();
        HUD.showLayer(HUD_LIST.CustomGameReward, HUD.getTipLayer(), null, true,function(tip){
            tip.setData();
        },null,false);
    },

    onAIGirlDoctorResult: function () {

    },

    onAIGirlDoctor: function () {
        var data = DD[T.AIGirlDoctor];
        if (data){
            this.heartNum = data.heartNum;
            this.score = data.score;
            this.leftTime = data.leftTime;
            this.isAchieve = data.isAchieve;//是否完成
            this.nCDTime.setData(Math.floor(this.leftTime/1000));
            this.txtHeart.setString(G_S.CUSTOMGAME_JS_6.format(this.heartNum));
        }

        if (this.isAchieve){
            this.sprTingZhenQi.setVisible(false);
            this.sprHeartBg.setVisible(false);
            this.cureText.setVisible(true);
            this.timeNode.setVisible(true);
            this.ScrollView.removeAllChildren();
        }else{
            this.sprTingZhenQi.setVisible(true);
            this.sprHeartBg.setVisible(true);
            this.infoList = mCustomMaid.getCustomGameListByType(1);
            //创建妃子点击效果
            this.showContents();
        }

    },

    //栅格测试代码
    createGrideTest:function (){
        // 测试代码,点击妃子的栅格显示
        var lines = 28;              //栅格行
        var columns = 16;              //栅格列
        var rectWidth = this.ScrollView_Width / columns;
        var rectHeight = this.fzSize.height / lines;
        for (var i = 0; i < lines; i++) {
            var drawNode =new cc.DrawNode();
            drawNode.drawSegment(cc.p(0, i * rectHeight), cc.p(this.ScrollView_Width, i * rectHeight), 1, cc.color(255,0,0));
            drawNode.setPosition(cc.p(0, 0));
            this.touchControl.addChild(drawNode);
        }
        for (var i = 0; i < columns; i++) {
            var drawNode =new cc.DrawNode();
            drawNode.drawSegment(cc.p(i * rectWidth, 0), cc.p(i * rectWidth, this.fzSize.height), 1, cc.color(255,0,0));
            drawNode.setPosition(cc.p(0, 0));
            this.touchControl.addChild(drawNode);
        }
        var idx = 1;
        for (var i = 0; i < lines; i++) {
            for (var j = 0; j < columns; j++) {
                var posX = j * rectWidth;
                var posY = i * rectHeight;
                var txtIdx = new ccui.Text(idx, UIUtil.getFontName(), 18);
                UIUtil.setOutline(txtIdx, cc.color(0,0,0),2);
                txtIdx.setPosition(posX + rectWidth / 2, posY + rectHeight / 2);
                this.touchControl.addChild(txtIdx);
                ++idx;
            }
        }
    },

});

CustomGames.prototype.CLICK_TYPE_LONG = 1;  //长按

CustomGames.prototype.CLICK_TYPE_POLITE = 0;//点一点

CustomGames.prototype.GAME_STATUS = {
    ORIDINART: 0,  //普通
    RESTRAINT: 1,   //克制
    RESTRAINED: 2  //被克制
};

你可能感兴趣的:(JS,前端)