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); } }
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); } }
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); } }
void zoomOff(_Shoot3 shoot) { if (isScopeMode) { shoot.act.zooming(1.0f, false); isScopeMode = false; shoot.available += ShootOpenFlag.reload; // 別の要因でリロード不可にできる場合はコード修正いるな、その要因フラグもみるとか } }
void zoomOn(_Shoot3 shoot) { if (!isScopeMode) { shoot.act.zooming(zoomRatioR, true); isScopeMode = true; shoot.available -= ShootOpenFlag.reload; } }
public virtual bool excute(_Shoot3 shoot, int subId, TriggerUnit trigger) { reload(shoot); // リロードの必要ないユニットの場合もあるので、リロード中でも一応通す。 var statesMain = units.Length > subId ? units[subId].excute(shoot, this, trigger): enWaponState.ready; var isExcuting = ((int)statesMain & (int)enWaponState.excuting) != 0; return(isExcuting); }
// リロード -------------------------------------------------------- public bool reload(_Shoot3 shoot) { if (shoot.isReloadable & isReloading) { reloadRemainingTime -= GM.t.delta; if (reloadRemainingTime < 0.0f) { reloadRemainingTime = 0.0f; } } return(isReloading); }
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); }
// 実行 -------------------------------------------------------- public virtual bool excute(_Shoot3 shoot, TriggerUnit mainTrigger, TriggerUnit subTrigger) { reload(shoot); // リロードの必要ないユニットの場合もあるので、リロード中でも一応通す。 var statesMain = units.Length > 0 ? units[0].excute(shoot, this, mainTrigger): enWaponState.ready; var statesSub = units.Length > 1 ? units[1].excute(shoot, this, subTrigger) : enWaponState.ready; var isExcuting = (((int)statesMain | (int)statesSub) & (int)enWaponState.excuting) != 0; return(isExcuting); }
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); } }
public void releaseBackToChildren(_Shoot3 s) { var tf = s.transform; var pshoot = s as _PlayerShoot3; foreach (var w in weapons) { if (pshoot) { w.unequip(pshoot); } w.GetComponent <Renderer>().enabled = false; w.tf.parent = tf; } weapons = null; }
public override void leave(_Shoot3 shoot, _Weapon3 wapon) { zoomOff(shoot); }
public override void ready(_Shoot3 shoot, _Weapon3 wapon) { var readyTime = Time.time + wapon.readyTime; fireReadyTime = readyTime > fireReadyTime ? readyTime : fireReadyTime; }
public virtual void leave(_Shoot3 shoot, _Weapon3 wapon) { }
public virtual void ready(_Shoot3 shoot, _Weapon3 wapon) { }
public abstract _Weapon3.enWaponState excute(_Shoot3 shoot, _Weapon3 wapon, _Weapon3.TriggerUnit trigger);