Exemplo n.º 1
0
    protected override void fire(_Shoot3 shoot, _Weapon3 wapon)
    {
        var pos = wapon.tfMuzzle.position;

        var rot = wapon.tfMuzzle.rotation;

        var tfMuzzle = wapon.tf.childCount > 0 ? wapon.tf.GetChild(0) : wapon.tfMuzzle;


        for (var i = 0; i < numberOfBullets; i++)
        {
            Random.seed = i;

            var noiseAngle = Random.insideUnitCircle * lowAccuracy;

            var rotNoize = Quaternion.Euler(-emitAngle + noiseAngle.x, noiseAngle.y, 0.0f);


            bullet.emit(pos, rot * rotNoize, barralFactor, 1.0f, 0, shoot.act, tfMuzzle);
        }


        sound.Play();

        if (flash != null)
        {
            flash.Emit(1);
        }
    }
Exemplo n.º 2
0
    public override _Weapon3.enWaponState excute(_Shoot3 shoot, _Weapon3 wapon, _Weapon3.TriggerUnit trigger)
    {
        if (shoot.isScopeable & trigger.press)
        {
            wapon.sound.PlayOneShot(zoomSound);


            if (isScopeMode)
            {
                zoomOff(shoot);
            }
            else
            {
                zoomOn(shoot);
            }


            return(_Weapon3.enWaponState.excuting);
        }
        else
        {
            var progress = wapon.reloadRemainingTime * wapon.maxReloadTimeR;

            if (progress == 1.0f)
            {
                zoomOff(shoot);
            }


            return(_Weapon3.enWaponState.ready);
        }
    }
Exemplo n.º 3
0
        // 武器それぞれの「表示・表示の位置」をあらかじめ計算して配列に保存しておく。


        public void showVisual(_Weapon3 wapon, int id, bool isToShow)
        // 指定の武器を、指定の視覚状態で表示する。の位置は各自配列に持っているので、そこに移動するだけ。
        {
            var goalpos = isToShow ? visualPositions[id].show : visualPositions[id].hide;

            var nowpos = visualPositions[id].now;


            var isGoaled = (goalpos - nowpos).sqrMagnitude < 0.05f * 0.05f;

            if (isToShow || !isGoaled)
            {
                if (!isGoaled)
                {
                    visualPositions[id].now += (goalpos - nowpos) * 0.5f * GM.t.delta * 30.0f;
                }

                var mt = new Matrix4x4();

                mt.SetTRS(visualPositions[id].now, visualRotation, visualPositions[id].scale);


                Graphics.DrawMesh(wapon.mf.sharedMesh, mt, wapon.mr.material, UserLayer._userInterface, GM.cameras.iface);
            }
        }
Exemplo n.º 4
0
    public override _Weapon3.enWaponState excute(_Shoot3 shoot, _Weapon3 wapon, _Weapon3.TriggerUnit trigger)
    {
        if (wapon.reloadRemainingTime > 0.0f)
        {
            return(_Weapon3.enWaponState.reloading);
        }
        else
        {
            if (bulletRemaining == 0)
            {
                bulletRemaining = maxBullets;
            }


            var state = base.excute(shoot, wapon, trigger);


            if ((state & _Weapon3.enWaponState.enterReload) != 0)
            {
                if (wapon.reloadRemainingTime == 0.0f)
                {
                    wapon.maxReloadTimeR = 1.0f / reloadTime;
                }

                wapon.reloadRemainingTime += reloadTime;
            }


            return(state);
        }
    }
Exemplo n.º 5
0
        void showReloadBar(_Weapon3 wapon)
        {
            //if( !isShowReloadingBar )
            {
                var progress = wapon.reloadRemainingTime * wapon.maxReloadTimeR;

                tfSite.localScale = new Vector3(progress, 0.1f, 1.0f);

                mr.sharedMaterial = matProgress;


                isShowReloadingBar = true;
            }
        }
Exemplo n.º 6
0
    public override _Weapon3.enWaponState excute(_Shoot3 shoot, _Weapon3 wapon, _Weapon3.TriggerUnit trigger)
    {
        if (!shoot.isShootable)
        {
            trigger = new _Weapon3.TriggerUnit();
        }



        if (Time.time > fireReadyTime)
        {
            /*if( wapon.reloadRemainingTime > 0.0f )
             * {
             *
             *      return _Wapon3.enWaponState.reloading;
             *
             * }
             * else */if (triggerRagTime > 0.0f && trigger.press)
            {
                fireReadyTime = Time.time + triggerRagTime;
            }
            else if (trigger.push)
            {
                fire(shoot, wapon);


                if (--bulletRemaining > 0)
                {
                    fireReadyTime = Time.time + nextFireTime;                    // - ( Time.time - fireReadyTime );


                    return(_Weapon3.enWaponState.excuting);
                }
                else
                {
                    fireReadyTime = 0.0f;


                    return(_Weapon3.enWaponState.enterReload | _Weapon3.enWaponState.excuting);
                }
            }
            else
            {
                return(_Weapon3.enWaponState.ready);
            }
        }


        return(_Weapon3.enWaponState.busy);
    }
Exemplo n.º 7
0
        public bool show(_Weapon3 wapon, bool isReloading)
        {
            var toggle = isShowReloadingBar ^ isReloading;


            if (isReloading)
            {
                showReloadBar(wapon);
            }
            else
            {
                showSite();
            }

            return(toggle);
        }
Exemplo n.º 8
0
    protected virtual void fire(_Shoot3 shoot, _Weapon3 wapon)
    {
        var noiseAngle = Random.insideUnitCircle * lowAccuracy;

        var pos = wapon.tfMuzzle.position;

        var rot = wapon.tfMuzzle.rotation * Quaternion.Euler(-emitAngle + noiseAngle.x, noiseAngle.y, 0.0f);

        bullet.emit(pos, rot, barralFactor, 1.0f, 0, shoot.act, wapon.tf.childCount > 0 ? wapon.tf.GetChild(0) : wapon.tfMuzzle);

        sound.Play();

        if (flash != null)
        {
            flash.Emit(1);
        }
    }
Exemplo n.º 9
0
    Vector3 calculateShootLine(_Weapon3 wapon)
    {
        var pos = wapon.tfMuzzle.position;

        var line = migration.targetPoint - pos;



        if (finder.target.isExists)
        {
            var actpos = finder.target.act.tfObservedCenter.position;

            var aline = actpos - pos;

            var reach = figure.bodyRadius * 3.0f;


            if (aline.sqrMagnitude < reach * reach)
            {
                // あまりにも近い場合は誤差なしで

                line = aline;
            }
            else
            {
                var up = rb.rotation * Vector3.up;

                var ad = Vector3.Dot(up, aline);

                if (ad >= 0.0f)
                {
                    // 実際に相手が地面の下にいるわけではない

                    var d = Vector3.Dot(up, line);

                    if (d < 0.0f)
                    {
                        line -= up * d;                                 // 地面にめり込む場合は補正する
                    }
                }
            }
        }


        return(line);
    }
Exemplo n.º 10
0
        public void renewalText(_Weapon3 wapon, bool isRenewal)
        {
            if (isRenewal)
            {
                infoString.Length = 0;


                foreach (var unit in wapon.units)
                {
                    unit.renewalInfoText(infoString);

                    infoString.AppendLine();
                }

                infoString.Append(wapon.waponName);


                infomationText.text = infoString.ToString();
            }
        }
Exemplo n.º 11
0
        public void showVisual(_Weapon3 wapon)
        // 使用していないが、参考として残しておく。シンプルに表示するだけ。
        {
            var mt = new Matrix4x4();


            var scale = new Vector3(1.0f, 1.0f, 0.55f);

            scale = Vector3.Scale(scale, wapon.tf.localScale);

            var x   = (GM.cameras.iface.aspect - 0.05f) - wapon.mf.sharedMesh.bounds.max.z * scale.z * 0.7f; // 左端が -1.0f * aspect 右端が 1.0f * acpect
            var y   = (-1.0f + 0.05f) - wapon.mf.sharedMesh.bounds.min.y * scale.y * 2.0f;                   // 上端が 1.0f 下端が -1.0f 最後の定数値は斜め表示の係数(0.7f と 2.0f)。
            var pos = new Vector3(x, y, 2.0f);

            var rot = Quaternion.Euler(new Vector3(320.0f, 90.0f, 0.0f));

            mt.SetTRS(pos, rot, scale);


            Graphics.DrawMesh(wapon.mf.sharedMesh, mt, wapon.mr.material, UserLayer._userInterface, GM.cameras.iface);
        }
Exemplo n.º 12
0
 public override void leave(_Shoot3 shoot, _Weapon3 wapon)
 {
     zoomOff(shoot);
 }
Exemplo n.º 13
0
    public override void ready(_Shoot3 shoot, _Weapon3 wapon)
    {
        var readyTime = Time.time + wapon.readyTime;

        fireReadyTime = readyTime > fireReadyTime ? readyTime : fireReadyTime;
    }
Exemplo n.º 14
0
 public virtual void leave(_Shoot3 shoot, _Weapon3 wapon)
 {
 }
Exemplo n.º 15
0
 public virtual void ready(_Shoot3 shoot, _Weapon3 wapon)
 {
 }
Exemplo n.º 16
0
 public abstract _Weapon3.enWaponState excute(_Shoot3 shoot, _Weapon3 wapon, _Weapon3.TriggerUnit trigger);