Esempio n. 1
0
    public ExplodeObject SpawnShip(int race, int type, int expObjType)
    {
        string expObjTypeString = "";

        if (expObjType == Cannon.leftBullet)
        {
            expObjTypeString = "leftShips";
        }
        else if (expObjType == Cannon.rightBullet)
        {
            expObjTypeString = "rightShips";
        }
        else if (expObjType == Cannon.allBullet)
        {
            expObjTypeString = "allShips";
        }


        string     poolPath = "Prefabs/Airships/" + expObjTypeString + "/race_" + race.ToString() + "/ship_" + type.ToString();
        GameObject newObj   = ObjectsPool.PullObject(poolPath);


        ExplodeObject expObj = newObj.GetComponent <ExplodeObject> ();

        expObj.ExplodeObjectAwake();
        expObj.poolPath = poolPath;
        explodeObjects.Add(expObj);
        return(expObj);
    }
Esempio n. 2
0
    void SpawnMines()
    {
        int   bulletsCount        = 8;
        float bulletLerpPathPart  = 1f / (float)bulletsCount;
        float bulletsLerpPosition = 0;

        float minX      = Camera.main.ScreenToWorldPoint(SpawnerController.instance.bottomSpawner.leftTop.position).x;
        float maxX      = Camera.main.ScreenToWorldPoint(SpawnerController.instance.bottomSpawner.rightTop.position).x;
        float positionY = Camera.main.ScreenToWorldPoint(SpawnerController.instance.bottomSpawner.rightTop.position).y;

        for (int i = 0; i < bulletsCount; i++)
        {
            mineTimer.SetTimer(ship.explodeObject.damageHealthParam.spawnTime2);
            string        path             = "Prefabs/Airships/bullets/race_" + ship.explodeObject.raceType.ToString() + "/mine";
            GameObject    bulletObj        = ObjectsPool.PullObject(path);
            Transform     spawnerTransform = ship.GetRandomSpawner();
            ExplodeObject bulletExpObj     = bulletObj.GetComponent <ExplodeObject> ();
            bulletExpObj.explodeTransform.position = spawnerTransform.position;
            bulletExpObj.poolPath = path;
            ShipsController.instance.explodeObjects.Add(bulletExpObj);
            bulletExpObj.DefaultAwake();
            bulletExpObj.directionPosition = Vector3.Lerp(new Vector3(minX, positionY, 0), new Vector3(maxX, positionY, 0), bulletsLerpPosition);
            bulletExpObj.directionVector   = bulletExpObj.directionPosition - bulletExpObj.explodeTransform.position;
            bulletExpObj.directionVector.Normalize();
            bulletExpObj.SetAngle();

            bulletsLerpPosition += bulletLerpPathPart;
        }
    }
 public virtual void Clear()
 {
     if (_aniParent == null)
     {
         return;
     }
     if (_curColor != DefaultColor)
     {
         _renderer.color = DefaultColor;
     }
     if (_curScale != DefaultScale)
     {
         _trans.localScale = DefaultScale;
     }
     _spList   = null;
     _renderer = null;
     _trans    = null;
     if (_isDefaultPrefab)
     {
         _aniParent.SetActive(false);
         ObjectsPool.GetInstance().RestorePrefabToPool("AniParent", _aniParent);
     }
     _spList         = null;
     _renderer       = null;
     _trans          = null;
     _aniTf          = null;
     _aniObject      = null;
     _aniParent      = null;
     _completeCBFunc = null;
     _completeCBPara = null;
     _cache          = null;
 }
Esempio n. 4
0
    public void BulletTriangleSpawn()
    {
        if (bulletTimer.TimeIsOver())
        {
            string bulletPath = "";
            if (cannonType == leftBullet)
            {
                bulletPath = PoolPath.cannonBulletTriangleLeft;
            }
            else if (cannonType == rightBullet)
            {
                bulletPath = PoolPath.cannonBulletTriangleRight;
            }
            GameObject newObj = ObjectsPool.PullObject(bulletPath);

            Vector3 bulletDirection = cannonBulletSpawner.position - cannonCore.position;
            bulletDirection.Normalize();
            newObj.transform.position = cannonBulletSpawner.position;
            Bullet bullet = newObj.GetComponent <Bullet> ();
            bullet.poolPath        = bulletPath;
            bullet.directionVector = bulletDirection;
            bullet.BulletAwake();
            bullet.bulletType = cannonType;

            bulletTimer.SetTimer(damageHealthParam.spawnTime);

            /*string audioEffectPoolPath = "Prefabs/AudioEffects/Cannons/type_3";
             * GameObject audioEffectObj = ObjectsPool.PullObject (audioEffectPoolPath);
             * AudioEffect audioEffect = audioEffectObj.GetComponent<AudioEffect> ();
             * audioEffect.poolPath = audioEffectPoolPath;
             * audioEffect.StartEffect ();*/
        }
    }
Esempio n. 5
0
    public void ShipActive()
    {
        if (ship.explodeObject.isActive)
        {
            /*if (bulletTimer.TimeIsOver ()) {
             *      SpawnBullets ();
             * }*/
            ship.movementController.TranslateByPointsPath();
            if (mineTimer.TimeIsOver())
            {
                SpawnMines();
            }

            if (torpedoTimer.TimeIsOver())
            {
                torpedoTimer.SetTimer(ship.explodeObject.damageHealthParam.spawnTime3);
                string        path             = "Prefabs/Airships/bullets/race_" + ship.explodeObject.raceType.ToString() + "/torpedo";
                GameObject    bulletObj        = ObjectsPool.PullObject(path);
                Transform     spawnerTransform = ship.GetRandomSpawner();
                ExplodeObject bulletExpObj     = bulletObj.GetComponent <ExplodeObject> ();
                bulletExpObj.explodeTransform.position = spawnerTransform.position;
                bulletExpObj.poolPath = path;
                ShipsController.instance.explodeObjects.Add(bulletExpObj);
                bulletExpObj.DefaultAwake();
            }
        }
    }
    public void SetPrefab(string prefabName, LayerId layerId, bool isUsingCache = false)
    {
        _isUsingCache = isUsingCache;
        _effectGoName = prefabName;
        _effectGo     = ObjectsPool.GetInstance().GetPrefabAtPool(_effectGoName);
        if (_effectGo == null)
        {
            GameObject protoType = ObjectsPool.GetInstance().GetProtoType(_effectGoName);
            if (protoType == null)
            {
                protoType      = ResourceManager.GetInstance().GetPrefab("Prefab/Effects/Special", prefabName);
                protoType.name = _effectGoName;
                Transform tf = protoType.transform;
                tf.localPosition = new Vector3(2000, 2000, 0);
                UIManager.GetInstance().AddGoToLayer(protoType, layerId);
                ObjectsPool.GetInstance().AddProtoType(_effectGoName, protoType);
            }
            _effectGo = GameObject.Instantiate <GameObject>(protoType);
            UIManager.GetInstance().AddGoToLayer(_effectGo, layerId);
        }
        _effectTf   = _effectGo.transform;
        _spRenderer = _effectTf.Find("Sprite").GetComponent <SpriteRenderer>();
        // 获取sprite对象的原始尺寸
        Sprite sp = _spRenderer.sprite;

        if (sp != null)
        {
            Vector3 size = sp.bounds.extents * 2 * sp.pixelsPerUnit;
            _originalWidth  = size.x;
            _originalHeight = size.y;
            // 计算实际尺寸
            _curWidth  = _originalWidth;
            _curHeight = _originalHeight;
        }
    }
        public void TestRecycleLater()
        {
            TimerManager timerManager = new TimerManager();

            ObjectsPool <PoolDummy> pool = new ObjectsPool <PoolDummy>(timerManager);
            PoolDummy o1 = pool.NextObject();
            PoolDummy o2 = pool.NextObject();
            PoolDummy o3 = pool.NextObject();

            Assert.AreEqual(pool.size, 0);

            pool.RecycleObjectLater(o1);
            pool.RecycleObjectLater(o2);
            pool.RecycleObjectLater(o3);
            Assert.AreEqual(pool.size, 0);

            timerManager.Update(0.016f);
            Assert.AreEqual(pool.size, 3);

            PoolDummy o4 = pool.NextObject();
            PoolDummy o5 = pool.NextObject();
            PoolDummy o6 = pool.NextObject();

            Assert.AreEqual(pool.size, 0);

            Assert.AreEqual(o1, o4);
            Assert.AreEqual(o2, o5);
            Assert.AreEqual(o3, o6);
        }
Esempio n. 8
0
    /// <summary>
    /// The Shoot mechanic of the machine gun.
    /// </summary>
    public override void Use()
    {
        if (shootIsAllowed)
        {
            base.Use();
            GameObject prefab = ChooseRandomPrefab();
            GameObject g      = ObjectsPool.Spawn(prefab, Vector3.zero, prefab.transform.rotation);

            Bullet bullet;

            if (g != null && g.GetComponent <MonoBehaviour>() is Bullet)
            {
                bullet                    = g.GetComponent <MonoBehaviour>() as Bullet;
                bullet.OwnerScript        = this.OwnerScript;
                bullet.name               = "TetrisBullet";
                bullet.Damage             = this.WeaponDamage;
                bullet.transform.position = transform.position;
                bullet.transform.rotation = Quaternion.LookRotation(transform.forward);
                //bullet.transform.Rotate(Vector3.forward, Random.Range(0, 360f));
                float speed = bullet.BulletSpeed;

                // Random rotation
                Quaternion rotation       = Quaternion.Euler(0, Random.Range(-weaponAccuracy, weaponAccuracy), 0);
                Vector3    v              = transform.forward;
                Vector3    rotationVector = rotation * v;

                bullet.Shoot(rotationVector, speed);
                bulletRounds.Emit(1);
            }

            shootIsAllowed = false;
            StartCoroutine(WaitForNextShot());
        }
    }
Esempio n. 9
0
    public void MakeDamage(float damage)
    {
        if (DamageMeter.instance.isActive)
        {
            DamageMeter.instance.damage += damage;
        }

        if (ShipsController.instance.doubleDamageActive)
        {
            damage = damage * 2f;
        }
        if (health <= damage)
        {
            if (isActive)
            {
                isActive = false;
                destroyWithPointsAction.Invoke();
                RemoveFromExpObjList();
            }
        }
        else
        {
            health -= damage;
            StartCoroutine(DamageAnimation());

            string      audioEffectPoolPath = "Prefabs/AudioEffects/hitEffect";
            GameObject  audioEffectObj      = ObjectsPool.PullObject(audioEffectPoolPath);
            AudioEffect audioEffect         = audioEffectObj.GetComponent <AudioEffect> ();
            audioEffect.poolPath = audioEffectPoolPath;
            audioEffect.StartEffect();
        }
    }
Esempio n. 10
0
    IEnumerator drawLine()
    {
        yield return(new WaitForSeconds(0.01f));

        //Draws the line
        if (thisTransform.position.x > (lastx + 0.02f))
        {
            if (!GameController.isGameOver)
            {
                skipLine -= 1;
            }
            ObjectsPool.Spawn(Line, thisTransform.position, Quaternion.identity);
            lastx = thisTransform.position.x;
        }

        //If we not drawn enough lines, keep drawing. Else, pause for a bit then start drawing again
        if (skipLine > 0)
        {
            StartCoroutine(drawLine());
        }
        else
        {
            yield return(new WaitForSeconds(0.45f));

            StartCoroutine(drawLine());
            skipLine = Random.Range(150, 250);
        }
    }
    /// <summary>
    /// 创建自定义的simpleBullet
    /// <para>customizedName 自定义的子弹名称</para>
    /// <para>float posX</para>
    /// <para>float posY</para>
    /// <para>args...</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateCustomizedBullet(ILuaState luaState)
    {
        int               numArgs        = luaState.GetTop() - 3;
        string            customizedName = luaState.ToString(-3 - numArgs);
        float             posX           = (float)luaState.ToNumber(-2 - numArgs);
        float             posY           = (float)luaState.ToNumber(-1 - numArgs);
        EnemySimpleBullet bullet         = ObjectsPool.GetInstance().CreateBullet(BulletType.Enemy_Simple) as EnemySimpleBullet;

        bullet.SetPosition(posX, posY);
        // 设置自定义的数据
        BCCustomizedTask bc = bullet.AddOrGetComponent <BCCustomizedTask>();
        int funcRef         = InterpreterManager.GetInstance().GetBulletInitFuncRef(customizedName);

        luaState.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef);
        if (!luaState.IsFunction(-1))
        {
            Logger.LogError("InitFuncRef of " + customizedName + " is not point to a function");
        }
        luaState.PushLightUserData(bullet);
        for (int i = 0; i < numArgs; i++)
        {
            luaState.PushValue(-2 - numArgs);
        }
        luaState.Call(numArgs + 1, 0);
        luaState.PushLightUserData(bullet);
        return(1);
    }
Esempio n. 12
0
 public void BulletTrigger(ExplodeObject expObj)
 {
     if (Cannon.CheckSuitability(expObj.objectType, bullet.bulletType))
     {
         expObj.MakeDamage(GetValueByState(bullet.damageHealthParams.damage, currentState));
         currentState += 1;
         if (currentState == 3)
         {
             ObjectsPool.PushObject(bullet.poolPath, bullet.gameObject);
         }
         else
         {
             triangle1Transform.localScale = new Vector3(
                 GetValueByState(triangle1Transform.localScale.x, currentState),
                 GetValueByState(triangle1Transform.localScale.y, currentState),
                 GetValueByState(triangle1Transform.localScale.z, currentState)
                 );
             triangle2Transform.localScale = new Vector3(
                 GetValueByState(triangle2Transform.localScale.x, currentState),
                 GetValueByState(triangle2Transform.localScale.y, currentState),
                 GetValueByState(triangle2Transform.localScale.z, currentState)
                 );
         }
     }
 }
Esempio n. 13
0
 void Awake()
 {
     BulletPool = GetComponent <ObjectsPool>();
     GetComponent <CircleCollider2D>().radius = shootRadius;
     ifShoot   = false;
     moveSpeed = 5.0f;
 }
Esempio n. 14
0
        public async Task WhenFirstObjectIsLockedAndSecondCallIsPerformedThenSecondObjectIsCreated()
        {
            var instanceNumber = 0;
            var testPool       = new ObjectsPool <PooledObject>(
                new PooledItemManager <PooledObject>(
                    () => Task.FromResult(new PooledObject(++instanceNumber)),
                    item => Task.CompletedTask),
                _poolsCleaner,
                TimeSpan.MaxValue,
                _testDateTimeProvider,
                new LoggerStub(),
                2);

            var testObject = await testPool.Acquire();

            Assert.NotNull(testObject);
            Assert.Equal(1, testObject.InstanceNumber);

            var secondTestObject = await testPool.Acquire();

            Assert.NotNull(secondTestObject);
            Assert.Equal(2, secondTestObject.InstanceNumber);

            testPool.Release(secondTestObject);

            secondTestObject = await testPool.Acquire();

            Assert.NotNull(secondTestObject);
            Assert.Equal(2, secondTestObject.InstanceNumber);
        }
Esempio n. 15
0
    void RelocatePosition()
    {
        string     path   = "Prefabs/Effects/warp";
        GameObject expObj = ObjectsPool.PullObject(path);
        Effect     exp    = expObj.GetComponent <Effect>();

        exp.poolPath           = path;
        exp.transform.position = this.transform.position;
        exp.main.Play();
        exp.DestoyOverTime(exp.main.main.duration);



        int random = Random.Range(0, 3);

        if (random == 0)
        {
            ship.explodeObject.explodeTransform.position = SpawnerController.instance.topElusiveSpawner.GetRandomPositionInWorld();
        }
        else if (random == 1)
        {
            ship.explodeObject.explodeTransform.position = SpawnerController.instance.topLeftElusiveSpawner.GetRandomPositionInWorld();
        }
        else if (random == 2)
        {
            ship.explodeObject.explodeTransform.position = SpawnerController.instance.topRightElusiveSpawner.GetRandomPositionInWorld();
        }



        GeneratePath();
        ship.movementController.PathByPointsRebind();
    }
        public void TestNextObject2()
        {
            TimerManager timerManager = new TimerManager();

            ObjectsPool <PoolDummy> pool = new ObjectsPool <PoolDummy>(timerManager);
            PoolDummy o1 = pool.NextObject();
            PoolDummy o2 = pool.NextObject();
            PoolDummy o3 = pool.NextObject();

            Assert.AreEqual(pool.size, 0);

            pool.RecycleObject(o1);
            pool.RecycleObject(o2);
            Assert.AreEqual(pool.size, 2);

            PoolDummy o4 = pool.NextObject();
            PoolDummy o5 = pool.NextObject();
            PoolDummy o6 = pool.NextObject();

            Assert.AreEqual(pool.size, 0);

            Assert.AreEqual(o1, o4);
            Assert.AreEqual(o2, o5);
            Assert.AreNotEqual(o3, o6);
        }
 public override void Clear()
 {
     ClearTasks();
     if (_isUsingCache)
     {
         _effectTf.localScale    = Vector3.one;
         _effectTf.localRotation = Quaternion.Euler(0, 0, 0);
         _spRenderer.color       = new Color(1, 1, 1, 1);
         ObjectsPool.GetInstance().RestorePrefabToPool(_effectGoName, _effectGo);
     }
     else
     {
         GameObject.Destroy(_effectGo);
     }
     ObjectsPool.GetInstance().RestorePoolClassToPool <MovableObject>(_movableObject);
     _movableObject = null;
     _effectGo      = null;
     _effectTf      = null;
     _spRenderer    = null;
     if (_attachmentsCount > 0)
     {
         _attachmentsList.Clear();
         _attachmentsCount = 0;
     }
     _master = null;
 }
 void Awake()
 {
     audioSources = new ObjectsPool <AudioSource>(
         () => Instantiate(audioSourcePrefab),
         source => source.gameObject.SetActive(true),
         source => source.gameObject.SetActive(false));
 }
Esempio n. 19
0
    public void Clear()
    {
        int        i;
        BulletBase bullet;

        // 己方子弹
        for (i = 0; i < _playerBulletsCount; i++)
        {
            bullet = _playerBullets[i];
            if (bullet != null)
            {
                bullet.Clear();
                ObjectsPool.GetInstance().RestoreBullet(bullet);
            }
        }
        _playerBullets.Clear();
        _playerBulletsCount = 0;
        // 敌方子弹
        for (i = 0; i < _enemyBulletsCount; i++)
        {
            bullet = _enemyBullets[i];
            if (bullet != null)
            {
                bullet.Clear();
                ObjectsPool.GetInstance().RestoreBullet(bullet);
            }
        }
        _enemyBullets.Clear();
        _enemyBulletsCount = 0;
    }
Esempio n. 20
0
 public void SetSoundEffect()
 {
     if (type != 7 && type != 8 && type != 9)
     {
         string audioEffectPoolPath = "";
         if (
             type == 1 ||
             type == 2 ||
             type == 3 ||
             type == 6)
         {
             int expIndex = Random.Range(0, 5);
             audioEffectPoolPath = "Prefabs/AudioEffects/Explodes/exp" + expIndex.ToString();
         }
         else if (type == 4 || type == 5)
         {
             int expIndex = Random.Range(0, 4);
             audioEffectPoolPath = "Prefabs/AudioEffects/Explodes/texp" + expIndex.ToString();
         }
         GameObject  audioEffectObj = ObjectsPool.PullObject(audioEffectPoolPath);
         AudioEffect audioEffect    = audioEffectObj.GetComponent <AudioEffect> ();
         audioEffect.poolPath = audioEffectPoolPath;
         audioEffect.StartEffect();
     }
 }
Esempio n. 21
0
    /// <summary>
    /// 创建EnemyLaser的原型
    /// </summary>
    /// <param name="bulletId"></param>
    /// <returns></returns>
    private GameObject CreateEnemyLaserProtoType(string bulletId)
    {
        GameObject original  = Resources.Load <GameObject>("BulletPrefab/Laser");
        GameObject protoType = GameObject.Instantiate <GameObject>(original);
        // 读取配置
        EnemyLinearLaserCfg cfg = GetLinearLaserCfgById(bulletId);
        string protoTypeName    = "EnemyLaser" + bulletId;

        // 设置sprite以及material
        protoType.name = protoTypeName;
        // 激光发射源
        SpriteRenderer sp = protoType.transform.Find("Source").GetComponent <SpriteRenderer>();

        sp.sprite = ResourceManager.GetInstance().GetSprite(Consts.STGBulletsAtlasName, "Bullet" + cfg.laserSourceTexId);
        // 激光本体
        sp        = protoType.transform.Find("LaserSprite").GetComponent <SpriteRenderer>();
        sp.sprite = ResourceManager.GetInstance().GetSprite(cfg.laserAtlasName, cfg.laserTexName);
        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);
    }
Esempio n. 22
0
    private GameObject CreateEnemyCurveLaserProtoType(string bulletId)
    {
        GameObject original  = Resources.Load <GameObject>("BulletPrefab/CurveLaser");
        GameObject protoType = GameObject.Instantiate <GameObject>(original);
        // 读取配置
        EnemyCurveLaserCfg cfg           = GetCurveLaserCfgById(bulletId);
        string             protoTypeName = "EnemyCurveLaser" + cfg.id;

        // 设置sprite以及material
        protoType.name = protoTypeName;
        // 设置曲线激光的材质
        Transform    laserObjectTf = protoType.transform.Find("LaserObject");
        MeshRenderer meshRenderer  = laserObjectTf.GetComponent <MeshRenderer>();

        if (cfg.materialName != "CurveLaserMat000")
        {
            meshRenderer.material = Resources.Load <Material>("materials/" + cfg.materialName);
        }
        meshRenderer.sortingLayerName = "STG";
        // 将原型放置在敌机弹幕层
        UIManager.GetInstance().AddGoToLayer(protoType, LayerId.EnemyBarrage);
        // 添加原型到缓存池中
        ObjectsPool.GetInstance().AddProtoType(bulletId, protoType);
#if LogCreateBulletProto
        Logger.Log("Create CurveLaser ProtoType " + protoTypeName);
#endif
        return(protoType);
    }
Esempio n. 23
0
 public override void Clear()
 {
     if ( _laserObj != null )
     {
         _laser.size = Vector2.zero;
         if ( !_isOriginalColor )
         {
             _laser.color = new Color(1, 1, 1, 1);
         }
         ObjectsPool.GetInstance().RestorePrefabToPool(_prefabName, _laserObj);
     }
     _laserObj = null;
     _objTrans = null;
     _laser = null;
     _laserTrans = null;
     if (_isSourceEnable)
     {
         _sourceTf.gameObject.SetActive(false);
     }
     _sourceTf = null;
     _sourceSp = null;
     ObjectsPool.GetInstance().RestorePoolClassToPool<MovableObject>(_movableObject);
     _movableObject = null;
     base.Clear();
 }
Esempio n. 24
0
    /// <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);
    }
Esempio n. 25
0
 public void Update()
 {
     // 符卡尚未开始
     if (!_isSCTaskStarted)
     {
         for (int i = 0; i < _bossCount; i++)
         {
             InterpreterManager.GetInstance().AddPara(_bossList[i], LuaParaType.LightUserData);
         }
         InterpreterManager.GetInstance().CallTaskCoroutine(_scTask, _bossCount);
         _isSCTaskStarted = true;
         Logger.Log("Call SpellCard Task");
     }
     // update
     else
     {
         _frameLeft--;
         object[] data = { _frameLeft };
         CommandManager.GetInstance().RunCommand(CommandConsts.UpdateSpellCardTime, data);
         if (_scTask != null && !_scTask.isFinish)
         {
             InterpreterManager.GetInstance().CallTaskCoroutine(_scTask);
             if (_scTask.isFinish)
             {
                 Logger.Log("SpellCard " + _scName + " task finish!");
                 ObjectsPool.GetInstance().RestorePoolClassToPool <Task>(_scTask);
                 _scTask = null;
             }
         }
     }
 }
Esempio n. 26
0
 // Update is called once per frame
 void Update()
 {
     FPSController.GetInstance().SleepToNextFrame();
     //if (_isFirst)
     //{
     //    _isFirst = false;
     //    _lastFrameTime = TimeUtil.GetTimestamp();
     //}
     //else
     //{
     //    long curFrameTime = TimeUtil.GetTimestamp();
     //    Logger.Log("FrameDuration = " + 1000f * (curFrameTime - _lastFrameTime) / 10000000);
     //    _lastFrameTime = curFrameTime;
     //}
     _fsm.Update();
     TimerManager.GetInstance().Update();
     TweenManager.GetInstance().Update();
     UIManager.GetInstance().Update();
     SoundManager.GetInstance().Update();
     // 销毁检测
     if (Global.SysBusyValue < Consts.SysBusyValue)
     {
         ObjectsPool.GetInstance().CheckDestroyPoolObjects();
         if (Global.SysBusyValue == 0)
         {
             ObjectsPool.GetInstance().DestroyProtoTypes();
         }
     }
 }
Esempio n. 27
0
    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;
    }
Esempio n. 28
0
    public void SetRightCannon(int id)
    {
        if (rightCannon != null)
        {
            ObjectsPool.PushObject(rightCannon.poolPath, rightCannon.gameObject);
        }
        string     poolPath = "Prefabs/Cannons/type_" + id.ToString() + "/right";
        GameObject cannon   = ObjectsPool.PullObject(poolPath);

        rightCannon               = cannon.GetComponent <Cannon> ();
        rightCannon.poolPath      = poolPath;
        cannon.transform.position = rightCannonTransform.position;

        string cannonKey = Cannon.rightBullet.ToString() + "_" + id.ToString();

        LevelController.instance.currentRightButtonKey = cannonKey;
        if (LevelController.instance.cannonButtonsStatus.ContainsKey(cannonKey))
        {
            LevelController.instance.cannonButtonsStatus [cannonKey] = true;
        }
        else
        {
            LevelController.instance.cannonButtonsStatus.Add(cannonKey, true);
        }
    }
Esempio n. 29
0
    public void SetInactive()
    {
        LevelController.instance.levelActive = false;
        isDead = true;
        ShipSpawner.instance.StopSpawn();

        /*foreach (ExplodeObject obj in ShipsController.instance.explodeObjects) {
         *      obj.DefaultDestroy ();
         * }*/
        Dictionary <int, ExplodeObject> expObjDict = new Dictionary <int, ExplodeObject> ();

        for (int i = 0; i < ShipsController.instance.explodeObjects.Count; i++)
        {
            expObjDict.Add(i, ShipsController.instance.explodeObjects[i]);
        }
        for (int i = 0; i < expObjDict.Count; i++)
        {
            expObjDict [i].DefaultDestroy();
        }
        //ShipsController.instance.explodeObjects.Clear ();

        List <Bullet> bulletObjects = new List <Bullet> (FindObjectsOfType <Bullet> ());

        foreach (Bullet bullObj in bulletObjects)
        {
            ObjectsPool.PushObject(bullObj.poolPath, bullObj.gameObject);
        }
        AudioController.instance.currentSong.Stop();
        //Advertising.TryShowInterstitial ();
    }
Esempio n. 30
0
 public override void Clear()
 {
     ObjectsPool.GetInstance().RestorePrefabToPool("BulletEliminateEffect1", _effectGo);
     _effectGo   = null;
     _effectTf   = null;
     _spRenderer = null;
 }
Esempio n. 31
0
        /// <summary>
        /// Initilize service, creating threads for socket and start listening
        /// </summary>
        public void Initialize()
        {
            _connectionsPool = new ObjectsPool<ClientConnection>(_maxConnectionsCount);

            EndPoint endPoint = new IPEndPoint(IPAddress.Parse(_host), _port);

            _listeningSocket.Bind(endPoint);
            _listeningSocket.Listen(40);

            for (int i = 0; i < 10; i++)
            {
                var th = new Thread(() => _listeningSocket.BeginAccept(AcceptCallback, null));
                th.Start();
                _listeningThreads.Add(th);
            }

            Debug.Print($"Tcp server started at {_host}:{_port}");
        }
Esempio n. 32
0
 private void Start()
 {
     poolObj = ObjectsPool.Instance;
     StartCoroutine(RandomSpawning());
 }
	// Use this for initialization
	void Start () {
        shipInfo = GetComponent<ShipCombatInfo>();
        bulletsPool = new ObjectsPool(bulletPrefab, transform, true);
        waitBetweenShoots = new WaitForSeconds(shipInfo.TimeBetweenShoots);
        StartCoroutine(ShootCountdown()); // iniciar coroutina de disparo
	}