123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- import FqLogin from "../../../../login/FqLogin";
- import { AudioMgr } from "../../../../main/ViewManage";
- import BaseEvent from "../base/BaseEvent";
- import WOneByone from "../map1/WOneByone";
- import FOpenDoorCheck from "./FOpenDoorCheck";
- /**
- * 对话开门
- */
- const {ccclass, property} = cc._decorator;
- @ccclass
- export default class FOpenDoorChat extends BaseEvent{
- @property(cc.Prefab)
- mMapDialog: cc.Prefab = null;
- @property({
- displayName:'对话内容',
- type:[cc.String]
- })
- text: Array<string> = [];
- @property({
- displayName: '完成后的对话',
- type:[cc.String]
- })
- finish: Array<string> = [];//完成后的对话
- @property({
- displayName: '靠近的提示',
- type:cc.Node
- })
- icon: cc.Node = null;
-
- @property({
- displayName: '提示图标',
- type:cc.SpriteFrame
- })
- mTipsIcon: cc.SpriteFrame = null;
- @property({
- displayName: '驱赶条件对象',
- type:FOpenDoorCheck
- })
- mCheck: FOpenDoorCheck = null;
- @property({
- displayName: '需要打开的门',
- type:cc.Node
- })
- mOpenDoor: cc.Node = null;
- @property({
- displayName: '精灵动画',
- type:sp.Skeleton
- })
- spine: sp.Skeleton = null;
- onLoad(){
- super.onLoad()
- }
- onBegin(tag:number){
- if(!this.mOpenDoor.active){
- return
- }
- if(tag == 1){
- this.showOpt(this.mTipsIcon,()=>{
- this.closeOpt()
- this.pause()
- this.startDialog()
- })
- }
- }
- onEnd(tag:number){
- if(tag == 1){
- this.closeOpt()
- }
- }
- public startDialog(){
- if(this.mCheck.mDriveNode.active){
- this.dialog1(0);
- }else{
- this.dialog2(0);
- }
- }
- private dialog1(index:number){
- if(index >= this.text.length){
- this.resume()
- return;
- }
- let texts = this.text[index].split('|')
- let mid = parseInt(texts.shift());
- if(mid == -1){//主角
- let my = this.ff.mainSprite.node;
- this.showDialog(my,texts,()=>{
- index ++;
- this.dialog1(index);
- });
- }else{
- this.showDialog(this.node,texts,()=>{
- index ++;
- this.dialog1(index);
- });
- }
- }
- private dialog2(index:number){
- if(index >= this.finish.length){
- this.spine.setCompleteListener(()=>{
- this.spine.setCompleteListener(null)
- this.spine.destroy()
- this.moveCamera(this.mOpenDoor.getPosition(),1,()=>{
- this.openGear()
- })
- })
- this.spine.setAnimation(0,'escape2',false)
- return;
- }
- let texts = this.finish[index].split('|')
- let mid = parseInt(texts.shift());
- if(mid == -1){//主角
- let my = this.ff.mainSprite.node;
- this.showDialog(my,texts,()=>{
- index ++;
- this.dialog2(index);
- });
- }else{
- this.showDialog(this.node,texts,()=>{
- index ++;
- this.dialog2(index);
- });
- }
- }
- private openGear() {
- if(this.icon){
- this.icon.active = false;
- }
- let nodes = this.mOpenDoor.children;
- nodes.forEach(element => {
- let spine = element.getComponent(sp.Skeleton);
- if (spine) {
- spine.setCompleteListener(() => {
- element.active = false;
- });
- spine.setAnimation(0, 'close', false);
- }
- });
- this.ff.main.playerEffectByPath(AudioMgr.openDoor);
- cc.tween(this.ff.mMap.node).sequence(
- cc.delayTime(1),
- cc.callFunc(() => {
- this.mOpenDoor.active = false;
- this.resume()
- this.node.destroy()
- FqLogin.commitEvent(this.node.name,'','');
- })
- ).start()
- }
- }
|