WXMC/.svn/pristine/dc/dc88304e3113d41ec46c6605663053e2e3abe9cd.svn-base

373 lines
7.1 KiB
Plaintext
Raw Normal View History

2024-12-04 16:18:46 +08:00
using Sirenix.OdinInspector;
using Spine.Unity;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PHomePlayer : PHomeUnit
{
[SerializeField]
private Camera m_camera;
[SerializeField]
private float m_moveAudioTimeGap;
[SerializeField]
private List<PHomeBuff> m_buffPrefabs;
[SerializeField]
private List<PHomeWeapon> m_weaponPrefabs;
float currTime;
[SerializeField]
private GameObject m_proejctilePrefab;
[SerializeField]
private PHomePlayerScreen m_playerScreen;
public PHomePlayerScreen PlayerScreen
{
get
{
return m_playerScreen;
}
}
[SerializeField]
private int m_killMonsterCount;
public int KillMonsterCount
{
get
{
return m_killMonsterCount;
}
set
{
if (m_killMonsterCount != value)
{
m_killMonsterCount = value;
}
}
}
[SerializeField]
private int m_gemCount;
public PuzzleGameMode.VoidDelegate OnAfterGemCountChanged;
public int GemCount
{
get
{
return m_gemCount;
}
set
{
if (m_gemCount != value)
{
m_gemCount = value;
OnAfterGemCountChanged?.Invoke();
}
}
}
[SerializeField]
private float m_pickRadius;
public float PickRadius
{
get
{
return m_pickRadius;
}
set
{
m_pickRadius = value;
}
}
[SerializeField]
private int m_pickMagnet;
public int PickMagnet
{
get
{
return m_pickMagnet;
}
set
{
m_pickMagnet = value;
}
}
public bool HasPickMagnet
{
get
{
return m_pickMagnet > 0;
}
}
public PHomeInventory Inventory
{
get
{
return PHomeInventory.instance;
}
}
public Transform m_portalPos;
#region Debug
[BoxGroup("Debug")]
[Button]
public void LevelUpPets()
{
foreach (var item in Pets)
{
PHomeGameMode.main.AddPet(this, item.FromPet);
}
}
#endregion
#region Pet
public List<PHomePet> StartPets;
private List<PHomePet> m_pets = new List<PHomePet>();
public PuzzleGameMode.VoidDelegate OnAfterPetsChanged;
public int PetCount
{
get
{
return m_pets.Count;
}
}
public List<PHomePet> Pets
{
get
{
return m_pets;
}
}
public PHomePet GetHavePet(PHomePet testPet)
{
for (int i = 0; i < Pets.Count; i++)
{
if(Pets[i].FromPet == testPet)
{
return Pets[i];
}
}
return null;
}
public void RandomPetLevelUp()
{
int randomPet = Random.Range(0,Pets.Count);
Pets[randomPet].SetMaxLevel();
}
public void AddPet(PHomePet pet)
{
pet.SetPetIndex(m_pets.Count);
m_pets.Add(pet);
OnAfterPetsChanged?.Invoke();
}
public void ClearPets()
{
int count = PetCount;
foreach (PHomePet item in m_pets)
{
Destroy(item.gameObject);
}
m_pets.Clear();
if (count != 0)
{
OnAfterPetsChanged?.Invoke();
}
}
public void ResetPet()
{
for (int i = 0; i < m_pets.Count; i++)
{
m_pets[i].MaxHealth *= PHomeGameMode.main.GetMultiWithType(EventTargetUnitType.Pet,EventCardEffectType.Hp);
}
}
#endregion
#region Movement
// private void Update_Movement()
// {
// #if UNITY_EDITOR
// Vector2 velocity = Vector2.right * Input.GetAxisRaw("Horizontal") + Vector2.up * Input.GetAxisRaw("Vertical");
// Move(velocity);
// #endif
// }
private void OnRightClick()
{
int br = 1;
}
public override void SetAimDirection(Vector2? aimDirection)
{
base.SetAimDirection(aimDirection);
foreach (var pet in m_pets)
{
pet.SetAimDirection(aimDirection);
}
}
#endregion
#region Camera
private void Awake_Camera()
{
m_camera = Camera.main;
m_healthSpW = m_healthSp.size.x;
OnAfterHealthChanged += UpdateHp;
}
private void UpdateHp()
{
m_healthSp.size = new Vector2(Health / MaxHealth * m_healthSpW, m_healthSp.size.y);
}
private void Update_Camera()
{
if (m_camera == null)
{
return;
}
Vector3 newDestPos = transform.position;
newDestPos.z = m_camera.transform.position.z;
m_camera.transform.position = Vector3.Lerp(m_camera.transform.position, newDestPos, 0.9f);
}
#endregion
#region Input
private EysionInputActions m_inputActions;
private EysionInputActions InputActions
{
get
{
m_inputActions = m_inputActions ?? new EysionInputActions();
return m_inputActions;
}
}
private void Awake_Input()
{
//InputActions.Player.Move.performed += ctx => Move(ctx.ReadValue<Vector2>());
}
private void OnEnable_Input()
{
InputActions.Player.Enable();
}
private void OnDisable_Input()
{
InputActions.Player.Disable();
}
void Update_Input()
{
Move(InputActions.Player.Move.ReadValue<Vector2>());
}
//private void AttackOnce(PHomeMonster monster)
//{
// AudioManager.instance.AttackAudio();
// PHomeProjectile proj = PHomeGameMode.main.SpawnProjectile(this, transform.position, m_proejctilePrefab);
// proj.Target = monster;
// EnterCooldown();
//}
//private void Update_Attack()
//{
// if (DuringAttackInterval)
// {
// return;
// }
// PHomeMonster monster = PHomeGameMode.main.FindClosestMonster(transform.position, m_attackRangeBase, this);
// if (monster == null)
// {
// return;
// }
// AttackOnce(monster);
//}
#endregion
#region Callback
public override void OnAfterHitted(PHomeUnit attacker, PHomeUnit victim)
{
base.OnAfterHitted(attacker, victim);
HandheldUtils.Vibrate();
}
#endregion
protected override void VirtualAwake()
{
base.VirtualAwake();
Awake_Camera();
Awake_Input();
}
protected override void VirtualStart()
{
base.VirtualStart();
}
protected override void VirtualUpdate()
{
base.VirtualUpdate();
// Update_Movement();
Update_Camera();
//Update_Attack();
// Update_Anim();
Update_Input();
}
protected override void VirutalOnEnable()
{
base.VirutalOnEnable();
OnEnable_Input();
}
protected override void VirtualOnDisable()
{
base.VirtualOnDisable();
OnDisable_Input();
}
}