public void RemoveWeapon(IShipWeapon weapon) { ShipWeaponGroup group = WeaponGroups.Find((WeaponGroup) => WeaponGroup.num == weapon.GetDefaultOperation()); group.shipWeapons.Remove(weapon); if (group.shipWeapons.Count == 0) { WeaponGroups.Remove(group); } }
public void AddWeapon(IShipWeapon weapon) { ShipWeaponGroup group = WeaponGroups.Find((WeaponGroup) => WeaponGroup.num == weapon.GetDefaultOperation()); if (group == null) { group = new ShipWeaponGroup(); WeaponGroups.Add(group); if (WeaponGroups.Count == 1) { currentWeaponIndex = WeaponGroups[0]; } group.shipWeapons.Add(weapon); group.num = weapon.GetDefaultOperation(); group.operationMode = weapon.GetOperationMode(); } else { group.shipWeapons.Add(weapon); } }
private void Update() { #region 飞船控制状态机 float v = 0, h = 0, t = 0; //各自由度引擎功率 if (!SpColding) { if (mode == ShipControlMode.Player) //手控模式 { #region 飞船形体控制 v = Input.GetAxis("Vertical"); h = Input.GetAxis("Horizontal"); t = Input.GetAxis("Torque"); if (Input.GetButtonDown("Dash")) { dashTimer = dashTime; } //紧急回避代码 if (dashTimer > 0) { dashTimer -= Time.fixedDeltaTime; v *= dashRate; h *= dashRate; } #endregion #region 武器处理 //武器选择 foreach (var weaponGroup in WeaponGroups) { if (Input.GetButtonDown(NumToButton.NumToKey(weaponGroup.num))) { currentWeaponIndex = WeaponGroups.Find((ShipWeaponGroup g) => g.num == weaponGroup.num); } } //武器使用 if (currentWeaponIndex != null) { if (WeaponGroups.Count > 0 && currentWeaponIndex.operationMode == ShipWeaponDefaultOperationMode.Impulse) { if (Input.GetButtonDown("Fire1")) { foreach (var weapon in currentWeaponIndex.shipWeapons) { weapon.WeaponWork(); } } if (Input.GetButtonDown("Fire2")) { foreach (var weapon in currentWeaponIndex.shipWeapons) { weapon.WeaponSkill(); } } } if (WeaponGroups.Count > 0 && currentWeaponIndex.operationMode == ShipWeaponDefaultOperationMode.Continuous) { if (Input.GetButton("Fire1")) { foreach (var weapon in currentWeaponIndex.shipWeapons) { weapon.WeaponWork(); } } if (Input.GetButton("Fire2")) { foreach (var weapon in currentWeaponIndex.shipWeapons) { weapon.WeaponSkill(); } } } } #endregion } } #endregion #region 引擎处理 /*****************************************************************/ if (v == 0) { VM = 0; } else { VM = (int)Mathf.Sign(v); } //************************** if (h == 0) { HM = 0; } else { HM = (int)Mathf.Sign(h); } //************************** if (t == 0) { TM = 0; } else { TM = (int)Mathf.Sign(t); } //************************** for (int i = VT.Count - 1; i > -1; i--) { if (VT[i] == null) { VT.RemoveAt(i); continue; } VT[i].SetWorkState(v, t); Sp -= VT[i].GetSPConsume() * Time.deltaTime; } for (int i = HT.Count - 1; i > -1; i--) { if (HT[i] == null) { HT.RemoveAt(i); continue; } HT[i].SetWorkState(h, t); Sp -= HT[i].GetSPConsume() * Time.deltaTime; } #endregion #region SP处理 if (SpColding == false && Sp == 0) { SpColding = true; if (currentWeaponIndex != null && WeaponGroups.Count > 0) { foreach (var weapon in currentWeaponIndex.shipWeapons) { weapon.End(); } } } if (SpColding == true && Sp / MaxSP > SpOutColdingRate) { SpColding = false; } Sp += SpRecoverSpeed * Time.deltaTime; #endregion #region 武器取消 if (currentWeaponIndex != null && WeaponGroups.Count > 0) { if (Input.GetButtonUp("Fire1") || Input.GetButtonUp("Fire2")) { foreach (var weapon in currentWeaponIndex.shipWeapons) { weapon.End(); } } } #endregion #region 镜头 float deltaScroll = Input.GetAxis("Mouse ScrollWheel"); if (!deltaScroll.Equals(0f)) { CameraController.Instance.DefaultFreeSize -= Input.GetAxis("Mouse ScrollWheel") * 20; CameraController.Instance.SetSize(CameraController.Instance.DefaultFreeSize); } #endregion }