public override void Init() { base.Init(); _isEliminating = false; BulletsManager.GetInstance().RegisterPlayerBullet(this); _movableObject = ObjectsPool.GetInstance().GetPoolClassAtPool <MovableObject>(); }
public override void Init() { base.Init(); _isSized = false; _curPos = Vector2.zero; _existDuration = -1; BulletsManager.GetInstance().RegisterEnemyBullet(this); _isDirty = false; _pathCount = 0; _clearFlag = 0; _isHeadEnable = false; _isSourceEnable = false; _isInitSourcePos = true; _laserSegmentCount = 0; _isCachedCollisionSegment = false; _collidedSegmentCount = 0; _isInitAngle = false; _laserLen = 0; _renderObjPos = true; _timeSinceLastVChanged = 0; _preV = 0; _isSourceEliminated = false; if (_movableObj == null) { _movableObj = ObjectsPool.GetInstance().GetPoolClassAtPool <MovableObject>(); } }
protected override void CheckCollisionWithPlayerBullet() { // 计算碰撞盒参数 Vector2 lbPos = new Vector2(_curPos.x - _radius, _curPos.y - _radius); Vector2 rtPos = new Vector2(_curPos.x + _radius, _curPos.y + _radius); int i, bulletCount; List <PlayerBulletBase> bulletList = BulletsManager.GetInstance().GetPlayerBulletList(); PlayerBulletBase bullet; bulletCount = bulletList.Count; for (i = 0; i < bulletCount; i++) { bullet = bulletList[i]; // 判断是否要进行碰撞检测 if (bullet != null && bullet.ClearFlag == 0 && bullet.DetectCollision() && bullet.CheckBoundingBoxesIntersect(lbPos, rtPos)) { if (DetectCollisionWithPlayerBullet(bullet)) { _collidedByPlayerBullet?.Invoke(this, bullet); } } } }
protected override void CheckCollisionWithEnemyBullet() { float maxHalfSize = Mathf.Max(_halfWidth, _halfHeight); // 计算碰撞盒参数 Vector2 lbPos = new Vector2(_curPos.x - maxHalfSize, _curPos.y - maxHalfSize); Vector2 rtPos = new Vector2(_curPos.x + maxHalfSize, _curPos.y + maxHalfSize); int i, bulletCount; List <EnemyBulletBase> bulletList = BulletsManager.GetInstance().GetEnemyBulletList(); EnemyBulletBase bullet; bulletCount = bulletList.Count; for (i = 0; i < bulletCount; i++) { bullet = bulletList[i]; // 判断是否要进行碰撞检测 if (bullet != null && bullet.ClearFlag == 0 && bullet.CanBeEliminated(eEliminateDef.HitObjectCollider) && bullet.CheckBoundingBoxesIntersect(lbPos, rtPos)) { if (DetectCollisionWithEnemyBullet(bullet)) { _collidedByEnemyBullet?.Invoke(this, bullet); } } } }
public override void SetStyleById(string id) { EnemyCurveLaserCfg cfg = BulletsManager.GetInstance().GetCurveLaserCfgById(id); if (cfg == null) { Logger.LogError("Bullet ChangeStyle Fail! SysId " + id + " is not exist!"); return; } if (_bullet != null) { ObjectsPool.GetInstance().RestorePrefabToPool(_prefabName, _bullet); } _cfg = cfg; _bullet = BulletsManager.GetInstance().CreateBulletGameObject(BulletType.Enemy_CurveLaser, cfg.id); _prefabName = cfg.id; _trans = _bullet.transform; Transform laserTrans = _trans.Find("LaserObject"); _mesh = laserTrans.GetComponent <MeshFilter>().mesh; if (_cfg.aniCount == 0) { int index = cfg.colorIndex; _textureIndex = 16 - index; _vUnit = 1f / cfg.colorsCount; _startV = _vUnit * (_textureIndex - 1); _endV = _vUnit * _textureIndex; } _isPosModified = true; }
/// <summary> /// 根据Id创建SimpleBullet原型 /// </summary> /// <param name="bulletId"></param> /// <returns></returns> private GameObject CreateEnemySimpleProtoType(string bulletId) { GameObject original = Resources.Load <GameObject>("BulletPrefab/SimpleBullet"); GameObject protoType = GameObject.Instantiate <GameObject>(original); EnemyBulletDefaultCfg cfg = BulletsManager.GetInstance().GetBulletDefaultCfgById(bulletId); string protoTypeName = "EnemySimpleBullet" + bulletId; // 设置sprite以及material protoType.name = protoTypeName; SpriteRenderer sp = protoType.transform.Find("BulletSprite").GetComponent <SpriteRenderer>(); if (cfg.aniFrameCount == 0) { sp.sprite = ResourceManager.GetInstance().GetSprite(Consts.STGBulletsAtlasName, cfg.spriteName); } else { sp.sprite = ResourceManager.GetInstance().GetSprite(Consts.STGBulletsAtlasName, cfg.spriteName + "_0"); } if (cfg.blendMode != eBlendMode.Normal) { sp.material = ResourceManager.GetInstance().GetSpriteMatByBlendMode(cfg.blendMode); } UIManager.GetInstance().AddGoToLayer(protoType, LayerId.EnemyBarrage); // 添加原型到缓存池中 ObjectsPool.GetInstance().AddProtoType(bulletId, protoType); #if LogCreateBulletProto Logger.Log("Create Bullet ProtoType " + protoTypeName); #endif return(protoType); }
public void Init() { // 游戏本体边界 Global.GameLBBorderPos = new Vector2(-Consts.GameWidth / 2, -Consts.GameHeight / 2); Global.GameRTBorderPos = new Vector2(Consts.GameWidth / 2, Consts.GameHeight / 2); // 弹幕边界 Global.BulletLBBorderPos = new Vector2(Global.GameLBBorderPos.x - 100, Global.GameLBBorderPos.y - 100); Global.BulletRTBorderPos = new Vector2(Global.GameRTBorderPos.x + 100, Global.GameRTBorderPos.y + 100); // 玩家坐标边界 Global.PlayerLBBorderPos = new Vector2(Global.GameLBBorderPos.x + 10, Global.GameLBBorderPos.y + 10); Global.PlayerRTBorderPos = new Vector2(Global.GameRTBorderPos.x - 10, Global.GameRTBorderPos.y - 10); InterpreterManager.GetInstance().Init(); STGStageManager.GetInstance().Init(); AnimationManager.GetInstance().Init(); BulletsManager.GetInstance().Init(); EnemyManager.GetInstance().Init(); ItemManager.GetInstance().Init(); ColliderManager.GetInstance().Init(); ExtraTaskManager.GetInstance().Init(); EffectsManager.GetInstance().Init(); STGEliminateEffectManager.GetInstance().Init(); BackgroundManager.GetInstance().Init(); #if ShowCollisionViewer CollisionViewer.Instance.Init(); #endif }
//"Current Frame : {0}\n" + //"Current Frame : {0}\n" + //"Current Frame : {0}\n" + //"Current Frame : {0}\n" + //"Current Frame : {0}\n"; private void UpdateDebugInfo() { string info = String.Format(DebugInfo, STGStageManager.GetInstance().GetFrameSinceStageStart(), BulletsManager.GetInstance().GetEnemyBulletsCount() ); _debugInfoText.text = info; }
public static int ClearEnemyBulletsInRange(ILuaState luaState) { float centerX = (float)luaState.ToNumber(-3); float centerY = (float)luaState.ToNumber(-2); float radius = (float)luaState.ToNumber(-1); BulletsManager.GetInstance().ClearEnemyBulletsInRange(new Vector2(centerX, centerY), radius); return(0); }
public override void Init() { base.Init(); BulletsManager.GetInstance().RegisterPlayerBullet(this); _isCached = false; _isCachedCollisionSegments = false; _curLaserLen = 0; _isActive = false; }
public override void SetStyleById(string id) { // 根据传入的id读取配置,重新生成数据 EnemyBulletDefaultCfg cfg = BulletsManager.GetInstance().GetBulletDefaultCfgById(id); if (cfg == null) { Logger.LogError("Bullet ChangeStyle Fail! SysId " + id + " is not exist!"); return; } if (_bullet != null) { // 回收现有的prefab ObjectsPool.GetInstance().RestorePrefabToPool(_prefabName, _bullet); } _cfg = cfg; _prefabName = _cfg.id; _bullet = BulletsManager.GetInstance().CreateBulletGameObject(_type, _cfg.id); _trans = _bullet.transform; _spRenderer = _trans.Find("BulletSprite").GetComponent <SpriteRenderer>(); SetPosition(_curPos.x, _curPos.y); SetRotatedByVelocity(cfg.isRotatedByVAngle); SetSelfRotation(cfg.selfRotationAngle); GrazeDetectParas grazeParas = new GrazeDetectParas { type = GrazeDetectType.Rect, halfWidth = cfg.grazeHalfWidth, halfHeight = cfg.grazeHalfHeight, }; _collisionHalfWidth = cfg.collisionRadius * _scaleX; _collisionHalfHeight = cfg.collisionRadius * _scaleY; _collisionRadius = cfg.collisionRadius * _scaleX; // 计算用于擦弹以及碰撞检测的两个数值 // 擦弹 float value = Global.PlayerGrazeRadius + _collisionRadius; _detGrazeValue = value * value; // 碰撞 value = Global.PlayerCollisionVec.z + _collisionRadius; _detCollisonValue = value * value; SetGrazeDetectParas(grazeParas); _aniFrameCount = _cfg.aniFrameCount; _aniFrameInterval = _cfg.aniFrameInterval; _curAniTimeCounter = 0; _curAniIndex = 0; }
public override void SetStyleById(string id) { _cfg = BulletsManager.GetInstance().GetLinearLaserCfgById(id); if (_cfg == null) { Logger.LogError("LinearLaserCfg with id " + id + " is not exist!"); return; } _prefabName = _cfg.id.ToString(); _laserObj = BulletsManager.GetInstance().CreateBulletGameObject(BulletType.Enemy_LinearLaser, _cfg.id); _objTrans = _laserObj.transform; // 发射源 _laserSourceTf = _objTrans.Find("Source"); _laserSourceGo = _laserSourceTf.gameObject; // segment原型 _laserSegmentProtoType = _objTrans.Find("Segment").gameObject; }
public override void Init() { base.Init(); _isMoving = false; _isMovingStraight = false; _isMovingCurve = false; _vx = _vy = _dvx = _dvy = _curVelocity = _curAcce = 0; _curVAngle = _curAccAngle = 0; _maxVelocity = -1; _isInitVelocity = false; _isMovingTo = false; _isMovingTowards = false; ResetExtraSpeedParas(); _reCalV = true; _reCalVAngle = false; BulletsManager.GetInstance().RegisterEnemyBullet(this); }
public override void ChangeStyleById(string id) { if (_bullet != null) { UIManager.GetInstance().HideGo(_bullet); ObjectsPool.GetInstance().RestorePrefabToPool(_bulletCfg.textureName, _bullet); } _bulletCfg = BulletsManager.GetInstance().GetPlayerBulletCfgById(id); _prefabName = id; _bullet = BulletsManager.GetInstance().CreateBulletGameObject(BulletType.Player_Simple, id); _trans = _bullet.transform; _renderer = _trans.Find("BulletSprite").GetComponent <SpriteRenderer>(); _trans.localPosition = _curPos; _isRotatedByVAngle = _bulletCfg.isRotatedByVAngle; _selfRotationAngle = _bulletCfg.selfRotationAngle; // 碰撞相关参数 _collisionRadius = _bulletCfg.collisionRadius; }
public override void ChangeStyleById(string id) { if (_bullet != null) { UIManager.GetInstance().HideGo(_bullet); ObjectsPool.GetInstance().RestorePrefabToPool(_bulletCfg.textureName, _bullet); } _bulletCfg = BulletsManager.GetInstance().GetPlayerBulletCfgById(id); _prefabName = id; _bullet = BulletsManager.GetInstance().CreateBulletGameObject(BulletType.Player_Laser, id); _trans = _bullet.transform; _laserTf = _trans.Find("Laser"); _laserSr = _laserTf.GetComponent <SpriteRenderer>(); _laserSr.sprite = ResourceManager.GetInstance().GetSprite(_bulletCfg.packName, _bulletCfg.textureName); UIManager.GetInstance().AddGoToLayer(_bullet, LayerId.PlayerBarage); _texWidth = 256; _repeatCount = 2f; _laserTf.localPosition = new Vector3(_texWidth * _repeatCount / 2, 0, 0); }
/// <summary> /// 创建PlayerLaser的原型 /// </summary> /// <param name="bulletId"></param> /// <returns></returns> private GameObject CreatePlayerLaserProtoType(string bulletId) { GameObject original = Resources.Load <GameObject>("BulletPrefab/PlayerLaser"); GameObject protoType = GameObject.Instantiate <GameObject>(original); // 读取配置 PlayerBulletCfg cfg = BulletsManager.GetInstance().GetPlayerBulletCfgById(bulletId.ToString()); // 设置sprite以及material protoType.name = "PlayerLaser " + cfg.id; SpriteRenderer sp = protoType.transform.Find("Laser").GetComponent <SpriteRenderer>(); sp.sprite = ResourceManager.GetInstance().GetSprite(cfg.packName, cfg.textureName); UIManager.GetInstance().AddGoToLayer(protoType, LayerId.PlayerBarage); // 添加原型到缓存池中 ObjectsPool.GetInstance().AddProtoType(bulletId, protoType); #if LogCreateBulletProto Logger.Log("Create ProtoType " + protoType.name); #endif return(protoType); }
private void RenderPlayerBullet() { Color col = new Color(127f / 255, 127f / 255, 192f / 255); List <PlayerBulletBase> list = BulletsManager.GetInstance().GetPlayerBulletList(); //int count = list.Count; foreach (var bullet in list) { if (bullet != null && bullet.DetectCollision()) { int nextIndex = 0; do { CollisionDetectParas para = bullet.GetCollisionDetectParas(nextIndex); RenderCollisionGraphic(para, col); nextIndex = para.nextIndex; } while (nextIndex != -1); } } }
public override void Init() { base.Init(); _curPos = Vector2.zero; _existTime = 0; _existDuration = -1; BulletsManager.GetInstance().RegisterEnemyBullet(this); _isChangingWidth = false; _isChangingLength = false; _isChangingAlpha = false; _curWidth = _laserHalfWidth = 0; _curAlpha = 0; _isDirty = false; _collisionFactor = 0.5f; _isRotating = false; _isSourceEnable = false; _isTurningOn = false; _resistEliminateFlag |= (int)(eEliminateDef.HitPlayer | eEliminateDef.PlayerSpellCard); _movableObject = ObjectsPool.GetInstance().GetPoolClassAtPool<MovableObject>(); }
public void Clear() { PlayerInterface.GetInstance().Clear(); _char = null; OperationController.GetInstance().Clear(); ColliderManager.GetInstance().Clear(); BulletsManager.GetInstance().Clear(); EnemyManager.GetInstance().Clear(); ItemManager.GetInstance().Clear(); EffectsManager.GetInstance().Clear(); ExtraTaskManager.GetInstance().Clear(); BackgroundManager.GetInstance().Clear(); STGStageManager.GetInstance().Clear(); InterpreterManager.GetInstance().Clear(); SoundManager.GetInstance().Clear(true); #if ShowCollisionViewer CollisionViewer.Instance.Clear(); #endif STGEliminateEffectManager.GetInstance().Clear(); }
public override void Init() { base.Init(); _isMoving = false; _curTrailLen = 0; _laserHalfWidth = 5; _collisionRadius = 3; _availableCount = 0; _eliminateRangeListCount = 0; _isCachedCollisionSegments = false; _collisionSegmentsList = new List <Vector2>(); _collisionSegmentsCount = 0; _isPosModified = false; _isInitPos = false; _isSourceEliminated = false; if (_movableObj == null) { _movableObj = ObjectsPool.GetInstance().GetPoolClassAtPool <MovableObject>(); } BulletsManager.GetInstance().RegisterEnemyBullet(this); }
public override void SetStyleById(string id) { EnemyLinearLaserCfg cfg = BulletsManager.GetInstance().GetLinearLaserCfgById(id); if (cfg == null) { Logger.LogError("LaserCfg with id " + id + " is not exist!"); return; } if ( _laserObj != null ) { ObjectsPool.GetInstance().RestorePrefabToPool(_prefabName, _laserObj); } _cfg = cfg; _prefabName = _cfg.id; _laserObj = BulletsManager.GetInstance().CreateBulletGameObject(BulletType.Enemy_Laser, _cfg.id); _objTrans = _laserObj.transform; _laserTrans = _objTrans.Find("LaserSprite"); _laser = _laserTrans.GetComponent<SpriteRenderer>(); _sourceTf = _objTrans.Find("Source"); _sourceSp = _sourceTf.GetComponent<SpriteRenderer>(); _isDirty = true; }
protected override void CheckCollisionWithEnemyBullet() { // 计算碰撞盒参数 Vector2 lbPos = new Vector2(_curPos.x - _radius, _curPos.y - _radius); Vector2 rtPos = new Vector2(_curPos.x + _radius, _curPos.y + _radius); int i, bulletCount; List <EnemyBulletBase> bulletList = BulletsManager.GetInstance().GetEnemyBulletList(); EnemyBulletBase bullet; bulletCount = bulletList.Count; for (i = 0; i < bulletCount; i++) { bullet = bulletList[i]; // 判断是否要进行碰撞检测 if (bullet != null && bullet.ClearFlag == 0 && bullet.CanBeEliminated(_eliminateType) && bullet.CheckBoundingBoxesIntersect(lbPos, rtPos)) { DetectCollisionWithEnemyBullet(bullet); } } }
public static int ClearAllEnemyBullets(ILuaState luaState) { BulletsManager.GetInstance().ClearAllEnemyBullets(); return(0); }
public void Update() { CommandManager.GetInstance().RunCommand(CommandConsts.STGFrameStart); #if CheckSTGFrameTime int index = 0; long[] timeArr = new long[20]; long frameBeginTime = Stopwatch.GetTimestamp(); _opController.Update(); STGStageManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); ColliderManager.GetInstance().UpdateFields(); timeArr[index++] = Stopwatch.GetTimestamp(); ExtraTaskManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); _char.Update(); timeArr[index++] = Stopwatch.GetTimestamp(); EnemyManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); BulletsManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); ItemManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); ColliderManager.GetInstance().UpdateColliders(); timeArr[index++] = Stopwatch.GetTimestamp(); EffectsManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); BulletsManager.GetInstance().Render(); timeArr[index++] = Stopwatch.GetTimestamp(); AnimationManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); BackgroundManager.GetInstance().Update(); timeArr[index++] = Stopwatch.GetTimestamp(); frameNode++; long frameEndTime = Stopwatch.GetTimestamp(); if (frameEndTime - frameBeginTime >= 50000) { string logStr = "Frame " + STGStageManager.GetInstance().GetFrameSinceStageStart() + " cost time " + (frameEndTime - frameBeginTime) * 0.0001d + "ms\n"; index = 0; logStr += "STGStageManager Update Cost Time = " + (timeArr[index] - frameBeginTime) * 0.0001d + "ms\n"; logStr += "GravitationFields Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "ExtraTaskManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "Character Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "EnemyManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "BulletsManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "ItemManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "Colliders Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "EffectsManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "BulletsManager Render Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "AnimationManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; logStr += "BackgroundManager Update Cost Time = " + (timeArr[++index] - timeArr[index - 1]) * 0.0001d + "ms\n"; Logger.LogWarn(logStr); CommandManager.GetInstance().RunCommand(CommandConsts.LogFrameStatistics); Logger.Log("------------------------------------------------"); } #else //if (frameNode == 200) //{ // _lastFrameTicks = System.DateTime.Now.Ticks; //} //else if (frameNode > 200 && frameNode <= 300) //{ // long currentTicks = System.DateTime.Now.Ticks; // Logger.Log("Frame Interval = " + (currentTicks - _lastFrameTicks) * 0.0001f); // _lastFrameTicks = currentTicks; //} // 每帧开始 BulletsManager.GetInstance().OnSTGFrameStart(); // 逻辑部分 _opController.Update(); STGStageManager.GetInstance().Update(); ExtraTaskManager.GetInstance().Update(); ColliderManager.GetInstance().UpdateFields(); _char.Update(); EnemyManager.GetInstance().Update(); BulletsManager.GetInstance().Update(); ItemManager.GetInstance().Update(); ColliderManager.GetInstance().UpdateColliders(); EffectsManager.GetInstance().Update(); // 渲染部分 BulletsManager.GetInstance().Render(); EnemyManager.GetInstance().Render(); STGEliminateEffectManager.GetInstance().Render(); ItemManager.GetInstance().Render(); AnimationManager.GetInstance().Update(); BackgroundManager.GetInstance().Update(); #if ShowCollisionViewer CollisionViewer.Instance.Render(); #endif //if (frameNode == 0) // FPSController.GetInstance().Restart(true); frameNode++; //if (frameNode % 60 == 0) //{ // STGBulletEliminateEffect1 effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.BulletEliminate) as STGBulletEliminateEffect1; // effect.SetColor(1, 0, 0, 1); //} #endif //if ( frameNode == 200 ) //{ // List<object> datas = new List<object>(); // float centerX = -130; // float centerY = 180; // float radius = 70; // float distortFactor = 0.1f; // Color effectColor = new Color(0.62f, 0.22f, 0.61f, 1f); // datas.Add(centerX); // datas.Add(centerY); // datas.Add(radius); // datas.Add(distortFactor); // datas.Add(effectColor); // CommandManager.GetInstance().RunCommand(CommandConsts.UpdateBgDistortEffectProps, datas.ToArray()); //} //if ( frameNode == 200 ) //{ // STGBurstEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.BurstEffect) as STGBurstEffect; // effect.SetSize(128); // effect.SetToPos(0, 150); //} //if (frameNode == 200) //{ // TimeUtil.BeginSample(); // STGChargeEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.ChargeEffect) as STGChargeEffect; // effect.SetToPos(0, 100); // TimeUtil.EndSample(); //} //if (frameNode >= 200 && frameNode % 2 == 0 ) //{ // STGBulletEliminateEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.BulletEliminate) as STGBulletEliminateEffect; // effect.SetToPos(Random.Range(-8, 8), Random.Range(-8, 8)); // effect.SetColor(Random.value, Random.value, Random.value, 1); //} }