future 1 年之前
父节点
当前提交
acac03301b

+ 10 - 0
assets/data/data.ts

@@ -383,6 +383,8 @@ export class event_item{
     public event_item_scene_ani:event_item_scene_ani = null; //场景动画
     public event_item_delete_drag_other_data:event_item_delete_drag_other = null; //删除其他拖拽的目标
     public event_item_stop_play_loop_sound_data:event_item_stop_play_loop_sound = null; //停止播放一个音效资源
+
+    public event_item_switch_scene_event_data:event_item_switch_scene_event = null; // 切换场景事件
 }
 export class base_event_item{
 
@@ -478,6 +480,14 @@ export class event_item_countdown_over extends base_event_item{ //倒计时结
 export class event_item_be_event extends base_event_item{ // 被动事件
     public binding_widget_id:number = -1; //绑定某一个UI
 }
+
+export class event_item_switch_scene_event extends base_event_item { // 切换场景事件
+    public binding_page_index:number = -1; //多场景-绑定页码索引(真实页数+1)
+    public direction:number = config.switch_scene_page_direction.unknown;
+    public executeOnlyOnce:boolean = true; //只执行一次
+    public delay_time:number = 0;
+}
+
 export class UserData {
     public user_id:string = null; //用户id
     public token:string = "";

+ 9 - 1
assets/script/config.ts

@@ -229,6 +229,7 @@ export class config {
         scene_ani:17,//场景动画
         delete_drag_other_data:18,//删除其他拖拽目标的属性
         stop_play_loop_sound:19,//停止一个音效
+        switch_scene_event:20, //切换场景事件
     }
 
     static top_view_type_map:Map<number,string> = new Map();
@@ -273,7 +274,13 @@ export class config {
         normal:1, //右边 1
         up:2, // 上 1
     }
-
+    static switch_scene_page_direction = { //切换场景分页方向
+        unknown:-1, //未知
+        up:1, //上
+        down:2, //下
+        left:3, //左
+        right:4, //右
+    }
     static EventRun = {
         NOTICE_EVENT:"NOTICE_EVENT",  //通知任务事件
         WIDGET_FINISH:"WIDGET_FINISH", //控件完成了自己本身的任务
@@ -294,6 +301,7 @@ export class config {
         TOGGLE_YIN_YUE:"TOGGLE_YIN_YUE",  //开关音乐
         UPDATE_FREE_TIME_STATUS:"UPDATE_FREE_TIME_STATUS",  //更新免费时间状态
         WIN_LATER_AUTO_UNLOCK_NEXT_LEVEL:"WIN_LATER_AUTO_UNLOCK_NEXT_LEVEL", //获胜后自动解锁下一个关卡
+        MORE_SCENE_DIRECTION_BUTTON_CLICK_FINISH:"MORE_SCENE_DIRECTION_BUTTON_CLICK_FINISH", //多场景方向按钮点击完成
     }
     static MSG_CODE = {
         SUCCESS: 10000,

+ 2 - 0
assets/script/run/TaskSchedule/taskServce.ts

@@ -228,6 +228,8 @@ export class taskServce {
             case config.event_type.stop_play_loop_sound:
                 ClientEvent.dispatchEvent(config.EventRun.NOTICE_EVENT,-11,event)
             break;
+            case config.event_type.switch_scene_event:
+            break;
 
         }
         taskServce.exeNextDelayEvent(event)

+ 10 - 0
assets/script/run/gameManager.ts

@@ -355,6 +355,7 @@ export class gameManager extends Component {
         ClientEvent.offAll(config.EventRun.ON_COUNT_DOWN_START)
         ClientEvent.offAll(config.EventRun.ON_SHOW_RULE_BTN)
         ClientEvent.offAll(config.EventRun.ON_BOSS_HURT)
+        ClientEvent.offAll(config.EventRun.MORE_SCENE_DIRECTION_BUTTON_CLICK_FINISH)
 
         ClientEvent.on(config.EventRun.WIDGET_FINISH,this.onWidgetFinishEvent.bind(this),this)
         ClientEvent.on(config.EventRun.WIDGET_FAIL,this.onWidgetFailEvent.bind(this),this)
@@ -363,6 +364,7 @@ export class gameManager extends Component {
         ClientEvent.on(config.EventRun.TOP_VIEW_FAIL,this.onUiFailEvent.bind(this),this)
         ClientEvent.on(config.EventRun.ON_COUNT_DOWN_FAIL,this.onCountDownFailEvent.bind(this),this)
         ClientEvent.on(config.EventRun.ON_COUNT_DOWN_START,this.onStartCountDownEvent.bind(this),this)
+        ClientEvent.on(config.EventRun.MORE_SCENE_DIRECTION_BUTTON_CLICK_FINISH,this.onMoreSceneDirectionButtonClickEvent.bind(this),this)
     }
 
     public initGR(gr:game_run){
@@ -436,6 +438,10 @@ export class gameManager extends Component {
         }
     }
 
+    public loadSceneTask(data: task_data) {
+        this.mGameRun.loadSceneTask(data)
+    }
+
     public loadScene(pages: scene_item_data[],type:number){
         this.mGameRun.loadSceneLayer(pages,type)
     }
@@ -602,6 +608,10 @@ export class gameManager extends Component {
         taskServce.extEventByEventId(event_id)
     }
 
+    onMoreSceneDirectionButtonClickEvent(event_id:number){
+        taskServce.extEventByEventId(event_id)
+    }
+
     showFindRuleTips(){
         this.mGameRun.showFindRuleTips()
     }

+ 4 - 0
assets/script/run/game_run.ts

@@ -118,6 +118,10 @@ export class game_run extends Component {
         })
     }
 
+    public loadSceneTask(data:task_data) {
+        this.scene_layer.getComponent(scene_layer).initSceneTask(data)
+    }
+
     public loadSceneLayer(pages:scene_item_data[],type:number){
         this.scene_layer.getComponent(scene_layer).initScene(pages,type)
     }

+ 1 - 0
assets/script/run/sceneManager.ts

@@ -103,6 +103,7 @@ export class sceneManager extends Component {
             throw "不可以为空"
         }else{
             this.stopMusic()
+            this.mGameManager.loadSceneTask(data._task_data)
             this.mGameManager.loadScene(this.mPageList,data.type)
             for (let index = 0; index < data.page_list.length; index++) {
                 const element = data.page_list[index];

+ 99 - 2
assets/script/run/scene_layer.ts

@@ -1,23 +1,37 @@
 import { _decorator, AudioSource, Component, instantiate, Node, Prefab, Widget } from 'cc';
-import { event_item, scene_item_data } from '../../data/data';
+import { event_item, event_item_switch_scene_event, scene_item_data, task_data } from '../../data/data';
 import { scene_page } from './scene_page';
 import { scene_page_dir } from './scene_page_dir';
 import { ClientEvent } from '../clientEvent';
 import { config } from '../config';
 import { gameManager } from './gameManager';
+import { taskServce } from './TaskSchedule/taskServce';
 const { ccclass, property } = _decorator;
 
+class EventTarget{
+    event_item: event_item;
+    is_finish:boolean;
+}
+
 @ccclass('scene_layer')
 export class scene_layer extends Component {
     @property(Node) content:Node = null;
     @property(Prefab) scenePagePrefab:Prefab = null;
     @property(Node) scenePageDir:Node = null;
+    protected mSceneTask:task_data = null;
+    private mTaskEventItemList:Map<string,EventTarget> = new Map;
     protected mScenePages:scene_item_data[] =[]
     private mCurPage:number = 0;
     private mAudioList:Map<string,Node> = new Map;
+    private up_id_string = '_up'
+    private next_id_string = '_next'
     protected start(): void {
         this.node.addComponent(AudioSource)
     }
+    public initSceneTask(data:task_data) {
+        this.mSceneTask = data
+        this.getTaskSwitchSceneEventList()
+    }
     public initScene(pages:scene_item_data[],type:number){
         ClientEvent.on(config.EventRun.NOTICE_EVENT,this.beActive.bind(this),this)
         this.mScenePages = pages;
@@ -96,6 +110,10 @@ export class scene_layer extends Component {
     changePage(page:number){
         this.mCurPage = page;
         this.onChangeUpdatePages()
+        this.changeUpNextBtn()
+    }
+
+    changeUpNextBtn() {
         if(this.mScenePages.length>1){
             this.scenePageDir.getComponent(scene_page_dir).showAllBtn()
             if(this.mCurPage<=0){
@@ -105,7 +123,6 @@ export class scene_layer extends Component {
                 this.scenePageDir.getComponent(scene_page_dir).hideNextBtn() 
             }
         }
-     
     }
 
     onChangeUpdatePages(){
@@ -163,6 +180,86 @@ export class scene_layer extends Component {
         }
     }
 
+    onClickCurPageDirectionButton(isUp:boolean) {
+        if(this.mSceneTask == null) {
+            return
+        }
+        let event_id = -1
+        var key = this.mCurPage + ''
+        if(isUp) { 
+            key = key + this.up_id_string 
+        } else {
+            key = key + this.next_id_string 
+        }
+        let eventTarget:EventTarget = this.mTaskEventItemList.get(key)
+        if(eventTarget != null && eventTarget.is_finish == false) {
+            event_id = eventTarget.event_item.event_id
+        }
+        // console.log('event_id=',event_id)
+        if(event_id != -1) {
+            this.scheduleOnce(()=>{ // 切换场景有延时0.7
+                this.checkDelayTimeNextEvent(event_id, eventTarget)
+            },0.7)
+        }
+    }
+
+    checkDelayTimeNextEvent(event_id:number, eventTarget:EventTarget) {
+        if(eventTarget == null) {
+            return
+        }
+        // 当前数据
+        let event_item:event_item = eventTarget.event_item
+        let switch_scene_event_data:event_item_switch_scene_event = event_item.event_item_switch_scene_event_data
+        // 下一个事件成功的id
+        var next_event_id = -1
+        let trigger_event_id = event_item.success.trigger_event_id
+        if(trigger_event_id != -1) {
+            let next_event = taskServce.getEventById(trigger_event_id)
+            next_event_id = next_event.event_id
+        }
+        // 延迟时间
+        let call = (()=> {
+            ClientEvent.dispatchEvent(config.EventRun.MORE_SCENE_DIRECTION_BUTTON_CLICK_FINISH, next_event_id)
+        })
+        if(switch_scene_event_data.delay_time > 0) {
+            this.scenePageDir.getComponent(scene_page_dir).hideAllBtn()
+            let delay_time = switch_scene_event_data.delay_time
+            this.scheduleOnce(()=> {
+                if(event_item.event_item_switch_scene_event_data.executeOnlyOnce) {
+                    eventTarget.is_finish = true
+                }
+                call()
+                this.changeUpNextBtn()
+            },delay_time)
+        } else {
+            call()
+        }
+    }
+
+    getTaskSwitchSceneEventList() {
+        if(this.mSceneTask == null) {
+            return
+        }
+        for(let i = 0; i < this.mSceneTask.event_list.length; i++) {
+            let element:event_item = this.mSceneTask.event_list[i]
+            let element_switch_scene_event_data:event_item_switch_scene_event = element.event_item_switch_scene_event_data
+            if(element.type == config.event_type.switch_scene_event && element_switch_scene_event_data != null) {
+                if(element_switch_scene_event_data.binding_page_index != -1 && element_switch_scene_event_data.direction != config.switch_scene_page_direction.unknown) {
+                    var key = element_switch_scene_event_data.binding_page_index + ''
+                    if(element_switch_scene_event_data.direction == config.switch_scene_page_direction.up || element_switch_scene_event_data.direction == config.switch_scene_page_direction.left) {
+                        key = key + this.up_id_string
+                    } else {
+                        key = key + this.next_id_string 
+                    }
+                    let eventTarget = new EventTarget()
+                    eventTarget.event_item = element
+                    eventTarget.is_finish = false
+                    this.mTaskEventItemList.set(key, eventTarget)
+                }
+            }
+        }
+    }
+
     initSceneDir(type:number){
         if(this.mScenePages.length>1){
             this.scenePageDir.getComponent(scene_page_dir).initView(type,this.onUp.bind(this),this.onNext.bind(this))