123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import bullet from "../bullet";
- import { Utils } from "../common/utils";
- import { ResMgr } from "../res/resMgr";
- import { ResRelease } from "../res/resRelease";
- import { GameSysLogic } from "../update/gameSysLogic";
- import Move from "../update/move";
- import MoveTime from "../update/moveTime";
- /**
- * 1 扇形弹幕: 开始角度(相对于向上), 角度,数量
- * 2 旋转飞行: 半径
- * 3 直线: 开始角度
- * 4 直线后炸开: 时间,开始角度,数量
- */
- export class Barrage extends GameSysLogic{
- parent: cc.Node;
- private static _inst: Barrage;
- public static get inst(): Barrage {
- if (this._inst == null) {
- this._inst = new Barrage();
- }
- return this._inst;
- }
- // 直线
- async createPlayerBullet2(worldPos: cc.Vec2){
- let bulletNode = await ResMgr.inst.loadPrefab('monster/bullet', this.parent);
- let moveCpt = Utils.getCpt(Move, bulletNode);
- moveCpt.dirction = cc.v2(0,1);
- moveCpt.speed = 1000;
- let localPos = this.parent.convertToNodeSpaceAR(worldPos);
- bulletNode.setPosition(localPos);
- }
- async createPlayerBullet(worldPos: cc.Vec2){
- this.createPlayerBullet4(worldPos);
- }
- // 扇形弹幕
- async createPlayerBullet1(worldPos: cc.Vec2){
- let num = 9;
- let angle = 60;
- let leftVec2 = cc.v2(0,1).rotateSelf(Utils.radian(angle/2));
- let prefab = await ResMgr.inst.getPrefab('monster/bullet');
- for (let index = 0; index < num; index++) {
- let bulletNode = ResMgr.inst.createNode(prefab, this.parent)
- let bulletCpt = bulletNode.getComponent(bullet);
- let moveCpt = Utils.getCpt(Move, bulletNode);
- moveCpt.dirction = leftVec2.rotate(Utils.radian(-angle / (num-1) * index));
- moveCpt.speed = 1000;
- bulletCpt.setDirction(moveCpt.dirction);
- let localPos = this.parent.convertToNodeSpaceAR(worldPos);
- bulletNode.setPosition(localPos);
- }
- }
- async createPlayerBullet3(worldPos: cc.Vec2){
- let time = 1;
- let prefab = await ResMgr.inst.getPrefab('monster/bullet');
- let bulletNode = ResMgr.inst.createNode(prefab, this.parent)
- let moveCpt = Utils.getCpt(MoveTime, bulletNode);
- moveCpt.dirction = cc.v2(0,1);
- moveCpt.speed = 500;
- moveCpt.overTime = time;
- moveCpt.call = ()=>{
- bulletNode.destroy();
- let num = 4;
- let angle = 360;
- let leftVec2 = cc.v2(1,1).normalize();
-
- for (let index = 0; index < num; index++) {
- let bulletNode = ResMgr.inst.createNode(prefab, this.parent)
- let bulletCpt = bulletNode.getComponent(bullet);
- let moveCpt = Utils.getCpt(Move, bulletNode);
-
- moveCpt.dirction = leftVec2.rotate(Utils.radian(-angle / (num) * index));
- moveCpt.speed = 500;
- bulletCpt.setDirction(moveCpt.dirction);
- bulletNode.setPosition(bulletNode.getPosition());
- }
- }
- let localPos = this.parent.convertToNodeSpaceAR(worldPos);
- bulletNode.setPosition(localPos);
- }
- async createPlayerBullet4(worldPos: cc.Vec2){
- let num = 8;
- let r = 40;
- let leftVec2 = cc.v2(0,1)
- let angle = 360;
- let prefab = await ResMgr.inst.getPrefab('monster/bullet');
- let node = new cc.Node('cricleBullet');
- this.parent.addChild(node);
- let moveCpt = Utils.getCpt(Move, node);
- moveCpt.dirction = cc.v2(0,1);
- moveCpt.speed = 500;
- let localPos = this.parent.convertToNodeSpaceAR(worldPos);
- node.setPosition(localPos);
- let t = cc.tween(node).by(1, {angle: 360}).repeatForever().start();
- let isOver = ()=>{
- if(cc.isValid(node, true)){
- if(node.childrenCount <= 0){
- t.stop();
- node.destroy();
- }
- }
- }
- for (let index = 0; index < num; index++) {
- let bulletNode = ResMgr.inst.createNode(prefab, node)
- let bulletCpt = bulletNode.getComponent(bullet);
- let dirction = leftVec2.rotate(Utils.radian(-angle / (num) * index));
- bulletNode.setPosition(dirction.mul(r));
- bulletCpt.setDirction(dirction.rotate(Utils.radian(90)));
- bulletNode.addComponent(ResRelease).call = function(){
- setTimeout(() => {
- isOver();
- }, 100);
- }
- }
- }
- }
|