예제 #1
0
    public void SendCheckPos()
    {
        if (++SendInterval < 60 * 6)
        {
            return;
        }
        SendInterval = 0;

        NetCmdCheckBulletPos pp = new NetCmdCheckBulletPos();

        pp.SetCmdType(NetCmdType.CMD_CHECK_BULLET_POS);
        List <CheckBulletPos> pl = new List <CheckBulletPos>();

        for (int i = 0; i < m_PlayerBullets.Length; ++i)
        {
            PlayerBullets pb = m_PlayerBullets[i];
            foreach (Bullet bullet in pb.BulletList.Values)
            {
                CheckBulletPos bb = new CheckBulletPos();
                bb.Pos = new NetCmdVector3(bullet.Position.x, bullet.Position.y, bullet.Position.z);
                bb.ID  = bullet.ServerID;
                pl.Add(bb);
            }
        }
        pp.Count   = (ushort)pl.Count;
        pp.Bullets = pl.ToArray();
        SceneRuntime.Send <NetCmdCheckBulletPos>(pp);
    }
예제 #2
0
    // 弾発射関数
    void ShotBullets()
    {
        if (shotCT <= 0)
        {
            if (ControllSetting.GetKey("Shot"))
            {
                audio.PlayOneShot(AudioManager.Instance.se_shot);
                // 共通ショット
                Vector3[] shotPos = new Vector3[2];
                shotPos[0] = this.transform.position + new Vector3(0.4f, 0, 0);
                shotPos[1] = this.transform.position + new Vector3(-0.4f, 0, 0);
                for (int i = 0; i < 2; i++)
                {
                    GameObject    bullet = Instantiate(bulletObj, shotPos[i], Quaternion.identity);
                    PlayerBullets pb     = bullet.GetComponent <PlayerBullets>();
                    pb.SetSpeed(param.defaultShot_speed);
                }

                if (!slowMove)
                {
                    TypeShot(shotType_Primary, slowMove);
                }
                else
                {
                    TypeShot(shotType_Secondary, slowMove);
                }

                shotCT = param.shotInterval;
            }
        }
        else
        {
            shotCT -= Time.deltaTime;
        }
    }
예제 #3
0
    // デモ発射関数
    public void ShotBullets_Demo(bool prim)
    {
        if (shotCT <= 0)
        {
            // 共通ショット
            Vector3[] shotPos = new Vector3[2];
            shotPos[0] = this.transform.position + new Vector3(0.4f, 0, 0);
            shotPos[1] = this.transform.position + new Vector3(-0.4f, 0, 0);
            for (int i = 0; i < 2; i++)
            {
                GameObject    bullet = Instantiate(bulletObj, shotPos[i], Quaternion.identity);
                PlayerBullets pb     = bullet.GetComponent <PlayerBullets>();
                pb.SetSpeed(param.defaultShot_speed);
            }

            if (prim)
            {
                TypeShot(shotType_Primary, !prim);
            }
            else
            {
                TypeShot(shotType_Secondary, !prim);
            }

            shotCT = param.shotInterval;
        }
        else
        {
            shotCT -= Time.deltaTime;
        }
    }
예제 #4
0
파일: Engine.cs 프로젝트: qjn85127/wp7game
 protected override void Initialize()
 {
     base.Initialize();
     _player.InitializeDrawing(@"Plane\Player", 1f);
     _btns = new ControlButtons(this.Content, this.spriteBatch);
     _playerBullets = new PlayerBullets(this.Content, this.spriteBatch);
     enimies = new Enemies(this.Content, this.spriteBatch);
 }
예제 #5
0
    public void PlayerLeave(byte seat)
    {
        PlayerBullets pb = m_PlayerBullets[seat];

        foreach (Bullet bullet in pb.BulletList.Values)
        {
            bullet.Destroy();
        }
        pb.BulletList.Clear();
    }
예제 #6
0
    public void LaunchBullet(ushort bulletID, byte launcherType, byte rateIndex, short angle, float time, byte reboundCount, ushort lockfishid /*, byte collidCount = 0, float pauseTime = 0, float speedScaling = 0*/)
    {
        byte clientSeat, id;

        SceneRuntime.BuuletIDToSeat(bulletID, out clientSeat, out id);
        Bullet  bullet = new Bullet();
        Vector3 startpos;
        Vector3 dir;
        float   volume  = 1;
        float   curtime = Time.time;

        byte[] type = { 9, 9, 10, 11, 12 };
        if (SceneRuntime.PlayerMgr.GetPlayer(clientSeat) == null)
        {
            return;
        }

        if (SceneRuntime.PlayerMgr.GetPlayer(clientSeat) == SceneRuntime.PlayerMgr.MySelf)
        {
            volume   = 1;
            lastTime = curtime;
            GlobalAudioMgr.Instance.PlayOrdianryMusic((Audio.OrdianryMusic)type[launcherType], false, false, volume);
        }
        else
        {
            volume = 0.30f;
            if ((lastTime + 0.1f) < curtime)
            {
                GlobalAudioMgr.Instance.PlayOrdianryMusic((Audio.OrdianryMusic)type[launcherType], false, false, volume);
            }
        }

        SceneRuntime.GetBulletPosAndDir(clientSeat, angle, out dir, out startpos);
        SceneRuntime.PlayerMgr.ChangeLauncherAngle(dir, clientSeat);        //改变炮台角度
        bullet.Init(clientSeat, id, launcherType, rateIndex, startpos, dir, reboundCount, lockfishid);
        bullet.InitAngle(Utility.ShortToFlaot(angle));
        //bullet.SetCollidData(collidCount, pauseTime, speedScaling);
        PlayerBullets pb = m_PlayerBullets[clientSeat];

        if (pb != null)
        {
            Bullet findBullet;
            if (pb.BulletList.TryGetValue(id, out findBullet))
            {
                Debug.Log("相同的子弹ID:" + id);
                findBullet.Destroy();
                pb.BulletList.Remove(id);
            }
            if (time > 0)
            {
                bullet.Update(time);
            }
            pb.BulletList.Add(id, bullet);
        }
    }
예제 #7
0
 public void ClearAllBullet()
 {
     for (int i = 0; i < m_PlayerBullets.Length; ++i)
     {
         PlayerBullets pb = m_PlayerBullets[i];
         foreach (Bullet bullet in pb.BulletList.Values)
         {
             bullet.Destroy();
         }
         pb.BulletList.Clear();
     }
 }
예제 #8
0
    public void RemoveBullet(byte clientSeat, byte id)
    {
        PlayerBullets pb = m_PlayerBullets[clientSeat];
        Bullet        bullet;

        if (pb.BulletList.TryGetValue(id, out bullet))
        {
            InnerRemoveBullet(clientSeat, bullet);
            bullet.Destroy();
            pb.BulletList.Remove(id);
        }
    }
예제 #9
0
 public FireController(IDirected player, IUserFireInputProxy fireInput, BulletData data, IBulletFactory bulletFactory)
 {
     CanExecute               = true;
     _player                  = player;
     _fireInput               = fireInput;
     _playerTransform         = player.GetPosition();
     _data                    = data;
     _fireInput.FireOnEnable += FireInput;
     _currentCooldown         = 0;
     _bulletFactory           = bulletFactory;
     _playerBullets           = new PlayerBullets();
     _fire                    = false;
 }
예제 #10
0
 // 衝突判定
 protected void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.tag == "PlayerBullet" && this.hp > 0)
     {
         PlayerBullets pb = collision.GetComponent <PlayerBullets>();
         if (pb != null)
         {
             Damage(pb.GetDamage());
             GameObject eff = EffectManager.Instance.InstantiateEffect(EffectManager.Effects.Hit, collision.transform.position);
             eff.transform.localScale = new Vector2(0.5f, 0.5f);
             Destroy(collision.gameObject);
         }
     }
 }
예제 #11
0
    // タイプ別ショット
    private void TypeShot(ShotType type, bool slow)
    {
        switch (type)
        {
        case ShotType.FourWay:
            if (!slow)
            {
                NWayShot(4, 0.0f, param.fourWay_betweenAngle, param.fourWay_speed);
            }
            else
            {
                NWayShot(4, 0.0f, param.fourWay_betweenAngle_slow, param.fourWay_speed);
            }
            break;

        case ShotType.Homing:
            for (int i = 0; i < 4; i++)
            {
                if (!slow)
                {
                    Instantiate(homingObj, this.transform.position, Quaternion.Euler(0.0f, 0.0f, (i - 2) * 30.0f - 180.0f + 15.0f));
                }
                else
                {
                    Instantiate(homingObj, this.transform.position, Quaternion.Euler(0.0f, 0.0f, (i - 2) * 20.0f - 180.0f + 10.0f));
                }
            }
            break;

        case ShotType.Spread:
            for (int i = 0; i < 4; i++)
            {
                float a;
                if (!slow)
                {
                    a = param.spread_betweenAngle;
                }
                else
                {
                    a = param.spread_betweenAngle_slow;
                }
                float         zAngle = (i - 2) * a + (a / 2.0f) + Random.Range(-(a / 2.0f), (a / 2.0f));
                GameObject    bullet = Instantiate(bulletObj_s, this.transform.position, Quaternion.Euler(0.0f, 0.0f, zAngle));
                PlayerBullets pb     = bullet.GetComponent <PlayerBullets>();
                pb.SetSpeed(Random.Range(param.spread_minSpeed, param.spread_maxSpeed));
            }
            break;
        }
    }
예제 #12
0
    // N Way ショット
    private void NWayShot(int num, float baseAngle, float betweenAngle, float speed)
    {
        for (int i = 0; i < num; i++)
        {
            float zAngle = (i * betweenAngle) + baseAngle - ((num / 2) * betweenAngle);
            if (num % 2 == 0)
            {
                zAngle += betweenAngle / 2.0f;
            }

            Quaternion    quat   = Quaternion.Euler(0.0f, 0.0f, zAngle);
            GameObject    bullet = Instantiate(bulletObj, this.transform.position, quat);
            PlayerBullets pb     = bullet.GetComponent <PlayerBullets>();
            pb.SetSpeed(speed);
        }
    }
예제 #13
0
    //   uint        m_BulletCount = 0;
    public void Init()
    {
        m_PlayerBullets = new PlayerBullets[ConstValue.PLAYER_MAX_NUM];
        for (int i = 0; i < m_PlayerBullets.Length; ++i)
        {
            m_PlayerBullets[i] = new PlayerBullets();
        }

        for (int j = 0; j < m_BulletObj.Length; ++j)
        {
            string str = string.Format("LauncherBullet{0}", j);
            m_BulletObj[j] = ResManager.Instance.LoadObject(str, "SceneRes/Prefab/Effect/Launcher/Bullet/", ResType.SceneRes);

            str = string.Format("LauncherPar{0}", j);
            m_BulletParObj[j] = ResManager.Instance.LoadObject(str, "SceneRes/Prefab/Effect/Launcher/Par/", ResType.SceneRes);
        }
    }
예제 #14
0
 public void Update(float delta)
 {
     for (int i = 0; i < m_PlayerBullets.Length; ++i)
     {
         PlayerBullets pb      = m_PlayerBullets[i];
         List <Bullet> bullets = new List <Bullet>(pb.BulletList.Values);
         for (int j = 0; j < bullets.Count; ++j)
         {
             Bullet bullet = bullets[j];
             if (!bullet.Update(delta))
             {
                 InnerRemoveBullet((byte)i, bullet);
                 bullet.Destroy();
                 pb.BulletList.Remove(bullet.ID);
             }
         }
     }
     //SendCheckPos();
 }
예제 #15
0
    public CatchBulletData GetBullet(byte clientSeat, byte id)
    {
        PlayerBullets   pb  = m_PlayerBullets[clientSeat];
        CatchBulletData cbd = new CatchBulletData();

        if (pb.BulletList.TryGetValue(id, out cbd.BulletObj) == false)
        {
            DestroyBulletData dbd;
            if (pb.DestroyBulletList.TryGetValue(id, out dbd))
            {
                cbd.LauncherType = dbd.LauncherType;
                cbd.RateIndex    = dbd.RateIndex;
            }
            else
            {
                cbd.LauncherType = 255;
                LogMgr.Log("不存在的子弹, Seat:" + clientSeat + ", id:" + id);
            }
        }
        return(cbd);
    }
예제 #16
0
    void Update()
    {
        //Commands movement

        if (Input.GetKey(KeyCode.D) && transform.position.x < maxWidth)
        {
            transform.Translate(Vector3.right * speed * Time.deltaTime);
        }

        if (Input.GetKey(KeyCode.Q) && transform.position.x > minWidth)
        {
            transform.Translate(-Vector3.right * speed * Time.deltaTime);
        }

        if (Input.GetKey(KeyCode.Z) && transform.position.y < maxHeight)
        {
            transform.Translate(Vector3.up * speed * Time.deltaTime);
        }

        if (Input.GetKey(KeyCode.S) && transform.position.y > minHeight)
        {
            transform.Translate(-Vector3.up * speed * Time.deltaTime);
        }

        //Return to the menu
        if (Input.GetKey(KeyCode.Escape))
        {
            SceneManager.LoadScene(0);
        }

        //Pause
        if (Input.GetKeyDown(KeyCode.P))
        {
            pauseGame();
        }

        //Shooting
        bool shoot = Input.GetKey(KeyCode.Space);

        if (shoot)
        {
            PlayerBullets weapon = GetComponent <PlayerBullets>();
            if (weapon != null)
            {
                weapon.Attack(false);
            }
        }

        //Death
        if (health <= 0)
        {
            SceneManager.LoadScene(1);
            ScoreScript.scoreValue = 0;
        }

        //Goal transition
        if (ScoreScript.scoreValue == ScoreGoal)
        {
            SceneManager.LoadScene(SceneNameToLoad);
            RoundScript.fieverValue += 0.5f;
        }


        void pauseGame()
        {
            if (isPaused)
            {
                Time.timeScale = 1;
                isPaused       = false;
            }
            else
            {
                Time.timeScale = 0;
                isPaused       = !isPaused;
            }
        }
    }
예제 #17
0
    public bool HaveBullet(byte byseat)
    {
        PlayerBullets pb = m_PlayerBullets[byseat];

        return(pb != null && pb.BulletList.Count != 0 || SceneRuntime.EffectMgr.HaveFlyGold(byseat));
    }