123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import { _decorator, Component, Node, ModelComponent, find, Prefab, loader, instantiate, Mesh, systemEvent, SystemEventType, Quat, Vec2, director, game, view, Touch, LabelComponent, LayoutComponent } from 'cc';
- import { GUIMediator } from '../../../engines/gui/GUIMediator';
- import { DataModelEventType } from '../../../engines/models/DataModelEventType';
- import { SceneManager } from '../../../engines/scenes/SceneManager';
- import GameConfigManager from '../../models/GameConfigManager';
- import { GameModel } from '../../models/GameModel';
- import { GamePropertys } from '../../models/GamePropertys';
- import { WeaponCell } from '../../models/weapons/WeaponCell';
- import { WeaponCellScript } from './WeaponCellScript';
- const { ccclass, property } = _decorator;
- @ccclass('PrepareMediator')
- export class PrepareMediator extends GUIMediator {
-
- @property({
- type:LabelComponent
- })
- glodLabel:LabelComponent=null;
- @property({
- type:LabelComponent
- })
- glodLabel1:LabelComponent=null;
- @property({
- type:LabelComponent
- })
- diamondLabel:LabelComponent=null;
- @property({
- type:LabelComponent
- })
- gunNameLabel:LabelComponent=null;
- /**
- * 武器列表
- */
- @property({
- type:LayoutComponent
- })
- weaponList:LayoutComponent=null;
- private modelView:ModelComponent;
- private prefabInstance:Node;
- private prefabModelComponent:ModelComponent;
- OnShow(data?:any):void{
- super.OnShow(data);
- this.RefreshGunModel();
- this.RefreshGlod();
- this.RefreshDiamond();
- this.AddEvents();
- }
- /**
- * 初始化枪的模型
- */
- private RefreshGunModel():void{
- if(this.modelView==null){
- let modelNode:Node=find("Canvas/ModelView");
- this.modelView=modelNode.getComponent(ModelComponent);
- }
- this.modelView.node.active=true;
- let weaponConfig:any=GameConfigManager.GetWeaponConfig(GameModel.single.currentWeaponId);
- let prefab:Prefab=loader.getRes(weaponConfig.prefab);
- this.prefabInstance=instantiate(prefab);
- this.prefabModelComponent=this.prefabInstance.getComponentInChildren(ModelComponent);
- this.modelView.mesh=this.prefabModelComponent.mesh;
- this.modelView.setMaterial(this.prefabModelComponent.getMaterial(0),0);
- if(this.gunNameLabel!=null){
- this.gunNameLabel.string=weaponConfig.name;
- }
- }
- OnHide():void{
- this.RemoveEvents();
- this.modelView.mesh=null;
- this.modelView.setMaterial(null,0);
- this.prefabInstance.destroy();
- this.modelView.node.active=false;
- }
- private AddEvents():void{
- systemEvent.on(cc.SystemEventType.TOUCH_START,this.TouchStartHandler,this);
- systemEvent.on(cc.SystemEventType.TOUCH_MOVE,this.TouchMoveHandler,this);
- systemEvent.on(cc.SystemEventType.TOUCH_MOVE,this.TouchEndHandler,this);
- GameModel.single.AddEvent(DataModelEventType.PROPERTY_CHANGED,this,this.GameModelPropertyChanged,0);
- }
- private RemoveEvents():void{
- systemEvent.off(SystemEventType.TOUCH_START,this.TouchStartHandler,this);
- systemEvent.off(SystemEventType.TOUCH_MOVE,this.TouchMoveHandler,this);
- systemEvent.off(SystemEventType.TOUCH_MOVE,this.TouchEndHandler,this);
- GameModel.single.RemoveEvent(DataModelEventType.PROPERTY_CHANGED,this,this.GameModelPropertyChanged);
- }
- private GameModelPropertyChanged(key:string):void{
- switch (key) {
- case GamePropertys.gold:
- this.CallNextFrame(this.RefreshGlod.bind(this));
- break;
- case GamePropertys.diamond:
- this.CallNextFrame(this.RefreshDiamond.bind(this));
- break;
- case GamePropertys.currentWeaponId:
- this.CallNextFrame(this.RefreshGunModel.bind(this));
- break;
- case GamePropertys.WeaponCell:
- this.CallNextFrame(this.RefreshWeaponList.bind(this));
- break;
- }
- }
- private RefreshGlod():void{
- if(this.glodLabel!=null){
- this.glodLabel.string=GameModel.single.gold.toString();
- }
- }
- private RefreshDiamond():void{
- if(this.diamondLabel!=null){
- this.diamondLabel.string=GameModel.single.diamond.toString();
- }
- }
-
- private startRotation:Quat=new Quat();
- private currentRotation:Quat=new Quat();
- private startPoint:Vec2=new Vec2();
- private currentPoint:Vec2=new Vec2();
- private TouchStartHandler(touch:Touch,touchEvent):void{
- let pos:Vec2=touch.getLocation();
- this.startPoint.set(pos.x,pos.y);
- this.startRotation.x=this.modelView.node.rotation.x;
- this.startRotation.set(this.modelView.node.rotation.x,this.modelView.node.rotation.y,this.modelView.node.rotation.z,this.modelView.node.rotation.w);
- }
- private TouchMoveHandler(touch,touchEvent):void{
- let pos:Vec2=touch.getLocation();
- this.currentPoint.set(pos.x,pos.y);
- let dis:number=Vec2.distance(this.currentPoint,this.startPoint);
- let value:number=dis/view.getCanvasSize().width;
- Quat.rotateY(this.currentRotation,this.startRotation,value);
-
- Quat.normalize(this.currentRotation,this.currentRotation);
-
- this.modelView.node.setRotation(this.currentRotation);
- }
- /**
- * 刷新武器列表
- */
- private RefreshWeaponList():void{
- let list:WeaponCell[]=GameModel.single.weaponCells;
- let weaponCell:WeaponCell;
- let weaponCellView:Node;
- let weaponCellScript:WeaponCellScript;
- for (let index = 0; index < list.length; index++) {
- weaponCell = list[index];
- weaponCellView
- }
- }
- private TouchEndHandler(...arg):void{
- console.log("拖拽模型结束");
- }
- StartGame():void{
- this.HideSelf();
- SceneManager.single.Swicth("FightingScene");
- }
- }
|