123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- import { AnimationComponent, ButtonComponent, director, EventTouch, GraphicsComponent, instantiate, LabelComponent, loader, Node, Prefab, ProgressBarComponent, SpriteComponent, SpriteFrame, _decorator } from 'cc';
- import { GUIManager } from '../../../engines/gui/GUIManager';
- import { GUIMediator } from '../../../engines/gui/GUIMediator';
- import { LoadingView } from '../../../engines/loadingView/LoadingView';
- import { DataModelEventType } from '../../../engines/models/DataModelEventType';
- import { SceneManager } from '../../../engines/scenes/SceneManager';
- import { SoundManager } from '../../../engines/sounds/SoundManager';
- import GameConfigManager from '../../models/GameConfigManager';
- import { GameModel } from '../../models/GameModel';
- import { GamePropertys } from '../../models/GamePropertys';
- import { UIConst } from '../UIConst';
- import { GameController } from './GameController';
- import { WeaponBase } from './weapons/WeaponBase';
- const { ccclass, property } = _decorator;
- @ccclass('FightingMediator')
- export class FightingMediator extends GUIMediator {
-
- @property({
- type:GraphicsComponent
- })
- DrawingBoard:GraphicsComponent=null;
- @property({
- type:SpriteComponent
- })
- SkillIcon:SpriteComponent=null;
- @property({
- type:LabelComponent
- })
- SkillLabel:LabelComponent=null;
- @property({
- type:Prefab
- })
- BulletUIPrefab:Prefab=null;
- @property({
- type:Node
- })
- BulletClip:Node=null;
- /**
- * 子弹数量
- */
- @property({
- type:LabelComponent
- })
- BulletCount:LabelComponent=null;
- @property({
- type:ButtonComponent
- })
- leftFireButton:ButtonComponent=null;
- @property({
- type:ButtonComponent
- })
- middleFireButton:ButtonComponent=null;
- @property({
- type:ButtonComponent
- })
- rightFireButton:ButtonComponent=null;
- @property({
- type:Node
- })
- killCountGroup:Node=null;
- @property({
- type:LabelComponent
- })
- killCountText:LabelComponent=null;
- /**
- * 怪物数量
- */
- @property({
- type:LabelComponent
- })
- monsterCountText:LabelComponent=null;
- /**
- * 积分
- */
- @property({
- type:LabelComponent
- })
- integralLabel:LabelComponent=null;
- /**
- * 怒气值进度条
- */
- @property({
- type:ProgressBarComponent
- })
- angerCountProgrssBar:ProgressBarComponent=null;
- /**
- * 怒气值技能按钮
- */
- @property({
- type:ButtonComponent
- })
- angerSkillButton:ButtonComponent=null;
- /**
- * 栅栏血量进度条
- */
- @property({
- type:ProgressBarComponent
- })
- fenceHpProgrssBar:ProgressBarComponent=null;
- /**
- * 栅栏血量文字
- */
- @property({
- type:LabelComponent
- })
- fenceHpLabel:LabelComponent=null;
- /**
- * 换弹动画
- */
- @property({
- type:ProgressBarComponent
- })
- reloadProgrssBar:ProgressBarComponent=null;
- /**
- * 怪物血条层
- */
- @property({
- type:Node
- })
- monsterHPUILayer:Node=null;
- /**
- * 第几天
- */
- @property({
- type:LabelComponent
- })
- levelLabel:LabelComponent=null;
- @property({
- type:Node
- })
- BowLeft:Node=null;
- @property({
- type:Node
- })
- BowMid:Node=null;
- @property({
- type:Node
- })
- BowRight:Node=null;
- @property({
- type:AnimationComponent
- })
- DropBoxAnimation:AnimationComponent=null;
- /**
- * 弹夹子弹池
- */
- bulletPool:Node[]=[];
- /**
- * 资源引用
- */
- private assetsRef:Prefab[];
-
- /**
- * 显示状态
- */
- private onShowed:boolean=false;
- start () {
- // Your initialization goes here.
- }
- constructor(){
- super();
- console.log("创建!");
- }
- OnShow():void{
- this.onShowed=false;
- this.BowLeft.active=false;
- this.BowMid.active=false;
- this.BowRight.active=false;
- this.LoadAssets();
- }
- private __OnShow():void{
- GameController.single.monsterHPUILayer=this.monsterHPUILayer;
- GameController.single.Init(this);
- this.AddEvents();
- this.RefreshView();
- SoundManager.single.PlayMusic("sounds/combat");
- SoundManager.single.PlaySound("zombie","sounds/zombie",true);
- this.InitSkillIcon();
- this.onShowed=true;
- }
- private LoadAssets():void{
- //先清理老资源
- if(this.assetsRef){
- let deps:string[];
- this.assetsRef.forEach(element => {
- deps=loader.getDependsRecursively(element);
- loader.release(deps);
- });
- this.assetsRef.length=0;
- this.assetsRef=null;
- }
- let urls:string[]=[];
- //武器
- let weaponConfig:any=GameConfigManager.GetWeaponConfig(GameModel.single.currentWeaponId);
- urls.push(weaponConfig.prefab);
- //栅栏
- // let fenceConfig:any=GameConfigManager.GetFenceConfig(GameModel.single.fenceId);
- // urls.push(fenceConfig.prefab);
-
- //本关用到的怪物资源
- let levelConfig:any=GameConfigManager.GetLevelConfig(GameModel.single.currentLevel);
- let monsterConfig:any;
- levelConfig.monsters.forEach(element => {
- monsterConfig=GameConfigManager.GetMonsterConfig(element.monsterId);
- if(urls.indexOf(monsterConfig.prefab)<0){
- urls.push(monsterConfig.prefab);
- urls.push(monsterConfig.damageParticle);
- }
- });
- //枪口火焰
- urls.push(weaponConfig.fireSpark);
- //怪物血条
- urls.push("ui/components/MonsterHPUI");
- //加载
- loader.loadResArray(urls,Prefab,this.LoadAssetsProgress.bind(this),this.LoadAssetsComplete.bind(this));
- }
- private LoadAssetsProgress(index:number,total:number,item):void{
- LoadingView.single.UpdateProgress(index/total);
- }
- private LoadAssetsComplete(error:Error,assets):void{
- if(error){
- console.error(error);
- }
- this.assetsRef=assets;
- this.__OnShow();
- }
- OnHide():void{
- this.onShowed=false;
- this.RemoveEvents();
- SoundManager.single.PlayMusic("sounds/main");
- SoundManager.single.StopSound("Weapon");
- SoundManager.single.StopSound("WeaponLeft");
- SoundManager.single.StopSound("WeaponRight");
- SoundManager.single.StopSound("zombie");
- }
- private AddEvents():void{
- this.leftFireButton.node.on(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
- this.middleFireButton.node.on(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
- this.rightFireButton.node.on(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
- this.leftFireButton.node.on(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
- this.middleFireButton.node.on(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
- this.rightFireButton.node.on(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
- GameController.single.weapon.AddEvent(WeaponBase.EVENT_BULLET_CHANGE,this,this.bulletCountChanged,0);
- GameModel.single.AddEvent(DataModelEventType.PROPERTY_CHANGED,this,this.GameModelPropertyEventHandler,0);
- }
- private RemoveEvents():void{
- this.leftFireButton.node.off(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
- this.middleFireButton.node.off(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
- this.rightFireButton.node.off(Node.EventType.TOUCH_START,this.FireButtonTouchStart,this);
- this.leftFireButton.node.off(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
- this.middleFireButton.node.off(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
- this.rightFireButton.node.off(Node.EventType.TOUCH_END,this.FireButtonTouchEnd,this);
- GameController.single.weapon.RemoveEvent(WeaponBase.EVENT_BULLET_CHANGE,this,this.bulletCountChanged);
- GameModel.single.RemoveEvent(DataModelEventType.PROPERTY_CHANGED,this,this.GameModelPropertyEventHandler);
- }
- private GameModelPropertyEventHandler(key:string):void{
- switch (key) {
- case GamePropertys.killCount://杀死怪物
- this.CallNextFrame(this.KillCountChangedHandler.bind(this));
- break;
- case GamePropertys.angerCount://怒气值变化
- this.CallNextFrame(this.AngerCountChangedHandler.bind(this));
- break;
- case GamePropertys.integral://积分变化
- this.CallNextFrame(this.RefreshIntegral.bind(this));
- break;
- default:
- break;
- }
- }
- private KillCountChangedHandler():void{
- this.RefreshKillCount();
- this.RefreshMonsterCount();
- }
-
- private AngerCountChangedHandler():void{
- this.RefreshAngerCount();
- }
- private InitSkillIcon():void{
- let skillConfig:any=GameConfigManager.GetSkillConfig(GameController.single.weapon.weaponConfig.skill);
- loader.loadRes(skillConfig.icon+"/spriteFrame",SpriteFrame,(err,asset:SpriteFrame)=>{
- if(err!=null){
- console.log("技能图标加载失败")
- return;
- }
- this.SkillIcon.spriteFrame=asset;
- });
- this.SkillLabel.string=skillConfig.name.toString();
- }
- /**
- * 刷新弹夹
- */
- RefreshBulletClip():void{
- let max:number=Math.min(10,GameController.single.weapon.bulletCount);
- while(this.BulletClip.children.length!=max){
- let bullet:Node;
- //增加
- if(this.BulletClip.children.length<max){
- bullet=this.CreateBullet();
- this.BulletClip.addChild(bullet);
- }else{//删除
- bullet=this.BulletClip.children[0];
- this.BulletClip.removeChild(bullet);
- this.DisposeBullet(bullet);
- }
- }
- if(GameController.single.currentSkill!=null&&GameController.single.currentSkill.infiniteAmmo){
- this.BulletCount.string="∞";
- }else{
- this.BulletCount.string=GameController.single.weapon.bulletCount.toString();
- }
- }
- RefreshView():void{
- this.RefreshBulletClip();
- this.RefreshKillCount();
- this.RefreshAngerCount();
- this.RefreshFenceHp();
- this.RefreshMonsterCount();
- this.RefreshIntegral();
- this.levelLabel.string="第"+GameModel.single.currentLevel+"天";
- }
-
- /**
- * 连杀
- */
- RefreshKillCount():void{
- this.killCountText.string=GameModel.single.killCount.toString();
- }
- /**
- * 怒气值
- */
- RefreshAngerCount():void{
- if(GameModel.single.angerCount<GameController.single.weapon.weaponConfig.maxAnger){
- this.angerSkillButton.node.active=false;
- }else{
- this.angerSkillButton.node.active=true;
- }
- this.angerCountProgrssBar.progress=GameModel.single.angerCount/GameController.single.weapon.weaponConfig.maxAnger;
- }
-
- /**
- * 栅栏HP
- */
- RefreshFenceHp():void{
- if(GameController.single.GameOver||GameController.single.paused){
- return;
- }
- this.fenceHpProgrssBar.progress=GameController.single.fence.hp/GameController.single.fence.maxHp;
- this.fenceHpLabel.string=GameConfigManager.GetFenceConfig(GameModel.single.currentFenceId).name+" "+GameController.single.fence.hp+"/"+GameController.single.fence.maxHp;
- }
- /**
- * 怪物数量
- */
- RefreshMonsterCount():void{
- this.monsterCountText.string=GameModel.single.killCount+"/"+GameController.single.monsterTotalCount;
- }
- /**
- * 积分
- */
- RefreshIntegral():void{
- this.integralLabel.string=GameModel.single.integral.toString();
- }
-
- private fenceHp:number=0;
- update (deltaTime: number) {
- if(this.onShowed==false){
- return;
- }
- super.update(deltaTime);
- //空投
- let currentTime:number=director.getCurrentTime();
- if(currentTime-GameModel.single.lastDropBoxTime>30000){
- this.DropBoxAnimation.node.active=true;
- this.DropBoxAnimation.play("KongtouTip");
- GameModel.single.lastDropBoxTime=currentTime;
- }
- if(GameController.single.fence!=null&&GameController.single.fence.node!=null){
- this.RefreshFenceHp();
- this.fenceHp=GameController.single.fence.hp;
- }
- if(GameController.single.weapon.reloadProgress<0||GameController.single.weapon.reloadProgress>=1){
- this.reloadProgrssBar.node.active=false;
- }else{
- this.reloadProgrssBar.node.active=true;
- this.reloadProgrssBar.progress=GameController.single.weapon.reloadProgress;
- }
- //射击提示
- this.BowLeft.active=GameController.single.FireTip(1);
- this.BowMid.active=GameController.single.FireTip(2);
- this.BowRight.active=GameController.single.FireTip(3);
- }
- private currentFireButtonNode:Node;
- FireButtonTouchStart(e:EventTouch):void{
- this.currentFireButtonNode=e.target as Node;
- if(e.target==this.leftFireButton.node){
- GameController.single.TryFire(1);
- }else if(e.target==this.middleFireButton.node){
- GameController.single.TryFire(2);
- }else{
- GameController.single.TryFire(3);
- }
- }
- FireButtonTouchEnd(e:EventTouch):void{
- if(e.target!=this.currentFireButtonNode){
- return;
- }
- GameController.single.TryFire(0);
- }
- /**
- * 使用技能
- */
- UseSkill():void{
- if(GameModel.single.angerCount<GameController.single.weapon.weaponConfig.maxAnger){
- return;
- }
- GameController.single.UseSkill();
- }
- /**
- * 返回主界面
- */
- BackToPrepareScene():void{
- GameController.single.OnGameOver(2);
- SceneManager.single.Swicth("PrepareScene");
- this.HideSelf();
- }
- private bulletCountChanged():void{
- this.RefreshBulletClip();
- }
- /**
- * 从池中创建子弹
- */
- private CreateBullet():Node{
- if(this.bulletPool.length>0){
- return this.bulletPool.shift();
- }
- return instantiate(this.BulletUIPrefab);
- }
- private DisposeBullet(bullet:Node){
- if(this.bulletPool.indexOf(bullet)<0){
- this.bulletPool.push(bullet);
- }else{
- console.error("重复回收弹夹子弹");
- }
- }
- /**
- * 获取空投
- */
- GetDropBox():void{
- GameController.single.PauseGame();
- this.DropBoxAnimation.node.active=false;
- GUIManager.single.Show(UIConst.DROP_BOX_UI,true);
- }
- ChangeFence():void{
- GameController.single.PauseGame();
- GUIManager.single.Show(UIConst.FREE_FENCE_UI,true);
- }
- /**
- * 跳过教学
- */
- SkipTeaching():void{
-
- }
- }
|