|
@@ -12,7 +12,7 @@ public class Player : EntityBase {
|
|
|
internal override bool isPressingLeft() => InputM.GetKeyEvent(InputM.KeyType.Left);
|
|
internal override bool isPressingLeft() => InputM.GetKeyEvent(InputM.KeyType.Left);
|
|
|
internal override bool isPressingRight() => InputM.GetKeyEvent(InputM.KeyType.Right);
|
|
internal override bool isPressingRight() => InputM.GetKeyEvent(InputM.KeyType.Right);
|
|
|
|
|
|
|
|
- // ����
|
|
|
|
|
|
|
+ // 生命
|
|
|
public RectTransform[] hearts;
|
|
public RectTransform[] hearts;
|
|
|
private int _hp = 3;
|
|
private int _hp = 3;
|
|
|
private int hp {
|
|
private int hp {
|
|
@@ -42,7 +42,7 @@ public class Player : EntityBase {
|
|
|
Camera.current.DOShakePosition(0.3f, 0.3f, 20).SetId("ScreenShake");
|
|
Camera.current.DOShakePosition(0.3f, 0.3f, 20).SetId("ScreenShake");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // ����
|
|
|
|
|
|
|
+ // 治疗
|
|
|
public float healTime = 4f; private float currentHealTime = 0f;
|
|
public float healTime = 4f; private float currentHealTime = 0f;
|
|
|
private void RefreshHearts() {
|
|
private void RefreshHearts() {
|
|
|
float totalHp = Mathf.Clamp(hp + Mathf.Pow(currentHealTime / healTime, 7f) * 0.7f + currentHealTime / healTime * 0.3f, 0, 3);
|
|
float totalHp = Mathf.Clamp(hp + Mathf.Pow(currentHealTime / healTime, 7f) * 0.7f + currentHealTime / healTime * 0.3f, 0, 3);
|
|
@@ -51,14 +51,14 @@ public class Player : EntityBase {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // ���
|
|
|
|
|
|
|
+ // 射击
|
|
|
public int maxBullet = 20, currentBullet = 20;
|
|
public int maxBullet = 20, currentBullet = 20;
|
|
|
public float shootDelay = 0.15f; private float currentShootDelay = 0f;
|
|
public float shootDelay = 0.15f; private float currentShootDelay = 0f;
|
|
|
public float reloadDelay = 1.5f; private float currentReloadDelay = 0f;
|
|
public float reloadDelay = 1.5f; private float currentReloadDelay = 0f;
|
|
|
public float bulletSpeed = 50f, bulletKnockback = 1f;
|
|
public float bulletSpeed = 50f, bulletKnockback = 1f;
|
|
|
public GameObject bullet; public TMPro.TextMeshProUGUI textBullet;
|
|
public GameObject bullet; public TMPro.TextMeshProUGUI textBullet;
|
|
|
internal override void OnUpdate() {
|
|
internal override void OnUpdate() {
|
|
|
- // ����
|
|
|
|
|
|
|
+ // 治疗
|
|
|
if (isPressingCrouch() && hp < 3 && isLand) {
|
|
if (isPressingCrouch() && hp < 3 && isLand) {
|
|
|
currentHealTime += Time.deltaTime;
|
|
currentHealTime += Time.deltaTime;
|
|
|
if (currentHealTime > healTime) {
|
|
if (currentHealTime > healTime) {
|
|
@@ -70,7 +70,7 @@ public class Player : EntityBase {
|
|
|
currentHealTime = 0f;
|
|
currentHealTime = 0f;
|
|
|
RefreshHearts();
|
|
RefreshHearts();
|
|
|
}
|
|
}
|
|
|
- // װ��
|
|
|
|
|
|
|
+ // 装填
|
|
|
if (InputM.GetKeyEvent(InputM.KeyType.Reload) && currentBullet < maxBullet && currentReloadDelay <= 0f) {
|
|
if (InputM.GetKeyEvent(InputM.KeyType.Reload) && currentBullet < maxBullet && currentReloadDelay <= 0f) {
|
|
|
AudioM.Play("reload");
|
|
AudioM.Play("reload");
|
|
|
currentReloadDelay = reloadDelay;
|
|
currentReloadDelay = reloadDelay;
|
|
@@ -79,8 +79,7 @@ public class Player : EntityBase {
|
|
|
} else if (currentReloadDelay > 0) {
|
|
} else if (currentReloadDelay > 0) {
|
|
|
currentReloadDelay -= Time.deltaTime;
|
|
currentReloadDelay -= Time.deltaTime;
|
|
|
}
|
|
}
|
|
|
- // ����
|
|
|
|
|
- bool autoReload = false;
|
|
|
|
|
|
|
+ // 开火
|
|
|
if (InputM.GetKeyEvent(InputM.KeyType.Fire) && currentBullet > 0 && currentShootDelay <= 0f && currentReloadDelay <= 0f) {
|
|
if (InputM.GetKeyEvent(InputM.KeyType.Fire) && currentBullet > 0 && currentShootDelay <= 0f && currentReloadDelay <= 0f) {
|
|
|
AudioM.Play("fire");
|
|
AudioM.Play("fire");
|
|
|
currentBullet--; currentShootDelay = shootDelay;
|
|
currentBullet--; currentShootDelay = shootDelay;
|
|
@@ -90,23 +89,16 @@ public class Player : EntityBase {
|
|
|
GameObject newBullet = Instantiate(bullet, fromPos, Quaternion.identity);
|
|
GameObject newBullet = Instantiate(bullet, fromPos, Quaternion.identity);
|
|
|
newBullet.GetComponent<Rigidbody2D>().velocity = bulletSpeed * shootVector;
|
|
newBullet.GetComponent<Rigidbody2D>().velocity = bulletSpeed * shootVector;
|
|
|
newBullet.transform.eulerAngles = (shootVector.x > 0 ? -1 : 1) * Vector2.Angle(shootVector, Vector2.up) * Vector3.forward;
|
|
newBullet.transform.eulerAngles = (shootVector.x > 0 ? -1 : 1) * Vector2.Angle(shootVector, Vector2.up) * Vector3.forward;
|
|
|
- // ������
|
|
|
|
|
|
|
+ // 后座力
|
|
|
rb.velocity += bulletKnockback * -shootVector;
|
|
rb.velocity += bulletKnockback * -shootVector;
|
|
|
} else if (currentShootDelay > 0) {
|
|
} else if (currentShootDelay > 0) {
|
|
|
currentShootDelay -= Time.deltaTime;
|
|
currentShootDelay -= Time.deltaTime;
|
|
|
- }else if (autoReload && InputM.GetKeyEvent(InputM.KeyType.Fire) && currentBullet == 0 && currentShootDelay <= 0f && currentReloadDelay <= 0f)
|
|
|
|
|
- {
|
|
|
|
|
- AudioM.Play("reload");
|
|
|
|
|
- currentReloadDelay = reloadDelay;
|
|
|
|
|
- }
|
|
|
|
|
- {
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
- // ���� UI
|
|
|
|
|
|
|
+ // 更新 UI
|
|
|
textBullet.text = currentReloadDelay > 0f ?
|
|
textBullet.text = currentReloadDelay > 0f ?
|
|
|
- "".PadLeft(maxBullet - Mathf.RoundToInt(currentReloadDelay / reloadDelay * maxBullet), "|".ToCharArray().First()) :
|
|
|
|
|
|
|
+ "".PadLeft(maxBullet - Mathf.RoundToInt(currentReloadDelay / reloadDelay * maxBullet), "|".ToCharArray().First()) :
|
|
|
"".PadLeft(currentBullet, "|".ToCharArray().First());
|
|
"".PadLeft(currentBullet, "|".ToCharArray().First());
|
|
|
textBullet.color = currentReloadDelay > 0f ? new Color(0.6f, 0.6f, 0.6f) : new Color(0.6588235f, 1f, 0.6941177f);
|
|
textBullet.color = currentReloadDelay > 0f ? new Color(0.6f, 0.6f, 0.6f) : new Color(0.6588235f, 1f, 0.6941177f);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+}
|