Merge branch 'develop' into feature/else-player

# Conflicts:
#	Assets/Scenes/a61.unity
This commit is contained in:
NguyenVanDat
2025-11-04 13:51:24 +07:00
30 changed files with 1100 additions and 578 deletions
+25 -30
View File
@@ -28,13 +28,11 @@ using Scene = UnityEngine.SceneManagement.Scene;
public class CECHostPlayer : CECPlayer
{
[SerializeField] private TextMeshProUGUI txtName;
[SerializeField] private CharacterController controller;
[SerializeField] private Joystick joystick;
[SerializeField] private Button btnJump;
[SerializeField] private Button btnRun;
[SerializeField] private Transform parentModel;
PlayerStateMachine _playerStateMachine;
PlayerMoveState _moveState;
@@ -110,16 +108,6 @@ public class CECHostPlayer : CECPlayer
RoleInfo RoleInfo = UnityGameSession.Instance.GetRoleInfo();
}
public void SetModelHostPlayer()
{
_pPlayerModel = NPCManager.Instance.GetModelPlayer();
Scene scene = SceneManager.GetSceneByName("a61");
SceneManager.MoveGameObjectToScene(_pPlayerModel, scene);
_pPlayerModel.transform.SetParent(parentModel);
_pPlayerModel.transform.localPosition = Vector3.zero;
_pPlayerModel.SetActive(true);
}
private void Start()
{
mainCam = Camera.main;
@@ -588,25 +576,23 @@ public class CECHostPlayer : CECPlayer
// Add item to inventory
EC_Inventory.SetItem(byPackage, bySlot, newItem);
//Debug.Log($"[Inventory] Successfully added item {tid} to package {byPackage}, slot {bySlot} with count {iAmount}");
//Debug.Log($"[Inventory] Successfully added item {tid} to package {byPackage}, slot {bySlot} with count {iAmount}");
// Trigger UI refresh if an EC_InventoryUI is present in scene
var ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null)
{
ui.RefreshAll();
}
}
else
// Trigger UI refresh if an EC_InventoryUI is present in scene
var ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null)
{
Debug.LogWarning("[Inventory] PICKUP_ITEM: Invalid data length");
ui.RefreshAll();
}
break;
}
else
{
Debug.LogWarning("[Inventory] PICKUP_ITEM: Invalid data length");
}
break;
}
}
}
public void OnMsgHstItemOperation(ECMSG Msg)
{
var data = Msg.dwParam1 as byte[];
@@ -879,24 +865,31 @@ public class CECHostPlayer : CECPlayer
public void InitCharacter(cmd_self_info_1 role)
{
SetUpPlayer();
string roleName = Encoding.Unicode.GetString(UnityGameSession.Instance.GetRoleInfo().name.ByteArray);
controller = GetComponent<CharacterController>();
if (!controller)
{
BMLogger.LogError("HostPlayer InitCharacter no CharacterController");
}
//if (role.name != null && role.name.ByteArray != null)
//{
// roleName = Encoding.UTF8.GetString(role.name.ByteArray, 0, role.name.Length);
//}
SetPlayerInfor(new INFO(role.cid, role.crc_e, role.crc_c));
SetModelHostPlayer();
Vector3 pos = new Vector3(role.pos.x, role.pos.y, role.pos.z);
string roleName = Encoding.Unicode.GetString(UnityGameSession.Instance.GetRoleInfo().name.ByteArray);
if (txtName != null) txtName.text = roleName;
EventBus.Publish(new InfoHostPlayer(roleName));
transform.position = pos;
SetModelHostPlayer();
m_dwResFlags = (uint)PlayerResourcesReadyFlag.RESFG_ALL;
joystick = FindAnyObjectByType<Joystick>();
EventBus.Subscribe<JoystickRealeaseEvent>(JoystickRelease);
EventBus.Subscribe<JoystickPressEvent>(JoystickStartDrag);
if (TryGetComponent<PlayerVisual>(out var visual))
{
visual.InitHostPlayerEventDoneHandler();
visual.InitPlayerEventDoneHandler();
}
m_aabb.Center = GPDataTypeHelper.g_vOrigin;
@@ -937,7 +930,7 @@ public class CECHostPlayer : CECPlayer
if (txtName != null) txtName.text = roleName;
transform.position = pos;
SetModelHostPlayer();
Debug.LogError("Pos Character = " + pos);
//Debug.LogError("Pos Character = " + pos);
}
#region Task
@@ -1787,12 +1780,14 @@ public struct NPCINFO
public string Name; // Movement properties
public int CurrentHealth;
public int MaxHealth; // Attacking properties
public int IDNPC; // Attacking properties
public NPCINFO(string name, int currentHealth, int maxHealth)
public NPCINFO(string name, int currentHealth, int maxHealth,int idnpc)
{
Name = name;
CurrentHealth = currentHealth;
MaxHealth = maxHealth;
IDNPC = idnpc;
}
};
+10 -1
View File
@@ -12,25 +12,34 @@ public class CECUIManager : MonoSingleton<CECUIManager>
[SerializeField] private HUDNPC npsUI;
[SerializeField] private int currentTargetNPCID;
protected override void Awake()
{
base.Awake();
EventBus.Subscribe<NPCINFO>(ShowUINPC);
//EventBus.Subscribe<NPCDiedEvent>(TryHideUINPC);
}
private void OnDestroy()
{
EventBus.Unsubscribe<NPCINFO>(ShowUINPC);
EventBus.Unsubscribe<NPCDiedEvent>(TryHideUINPC);
}
private void ShowUINPC(NPCINFO obj)
{
BMLogger.LogError("HoangDEv: ShowUINPC");
npsUI.gameObject.SetActive(true);
npsUI.SetText($"{obj.CurrentHealth}/{obj.MaxHealth}",obj.Name,"");
npsUI.SetHealthImage((float)obj.CurrentHealth / (float)obj.MaxHealth);
currentTargetNPCID = obj.IDNPC;
}
private void HideUINPC(NPCINFO obj)
private void TryHideUINPC(NPCDiedEvent obj)
{
if (obj.NPCID != currentTargetNPCID) return;
npsUI.gameObject.SetActive(false);
}
+3 -4
View File
@@ -10,7 +10,7 @@ public class GameController : MonoBehaviour
{
private static GameController instance;
[SerializeField] private CECHostPlayer characterPrefab;
[SerializeField] private GameObject characterPrefab;
[SerializeField] private CECMonster monsterPrefab;
[SerializeField] private CECNPCServer npcServerPrefab;
[SerializeField] private CinemachineCamera cinemachineCamera;
@@ -62,7 +62,7 @@ public class GameController : MonoBehaviour
return;
}
CECPlayer.InitStaticRes();
hostPlayer = Instantiate(characterPrefab, transform);
hostPlayer = Instantiate(characterPrefab, transform).AddComponent<CECHostPlayer>();
hostPlayer.InitCharacter(info);
cinemachineCamera.Follow = hostPlayer.transform;
cinemachineCamera.ForceCameraPosition(hostPlayer.transform.position, Quaternion.identity);
@@ -99,8 +99,7 @@ public class GameController : MonoBehaviour
Debug.LogError("null prefab");
return null;
}
CECHostPlayer character = Instantiate(characterPrefab, transform);
character.InitCharacter(info);
GameObject character = Instantiate(characterPrefab, transform);
return character.gameObject;
}
private void OnDestroy()
+6 -2
View File
@@ -15,6 +15,7 @@ public class PlayerVisual : MonoBehaviour
[SerializeField] private AnimancerState _currentState;
[SerializeField] private Queue<string> _animationQueue = new Queue<string>();
[SerializeField] private bool isHit;
[SerializeField] private int id;
QueueActionEvent queueActionEvent;
@@ -26,12 +27,12 @@ public class PlayerVisual : MonoBehaviour
BMLogger.LogError("HoangDev: PlayActionEventHandler Failed " + @event.AnimationName);
}
}
public void InitHostPlayerEventDoneHandler()
public void InitPlayerEventDoneHandler()
{
namedAnimancer = GetComponentInChildren<NamedAnimancerComponent>();
if (namedAnimancer == null)
{
BrewMonster.BMLogger.LogError("animancer == null");
BrewMonster.BMLogger.LogError("InitPlayerEventDoneHandler animancer == null");
return;
}
var player = GetComponentInParent<CECPlayer>();
@@ -40,7 +41,10 @@ public class PlayerVisual : MonoBehaviour
BrewMonster.BMLogger.LogError("player == null");
return;
}
BrewMonster.BMLogger.LogError("HoangDev: player:"+ player);
_playerInfo = player.GetPlayInfo();
id = _playerInfo.cid;
EventBus.SubscribeChannel<PlayActionEvent>(_playerInfo.cid, PlayActionEventHandler);
EventBus.SubscribeChannelClass<QueueActionEvent>(_playerInfo.cid, QueueActionEventHandler);
EventBus.SubscribeChannel<CleearComActFlagAllRankNodesEvent>(_playerInfo.cid, CleearComActFlagAllRankNodesEventHandler);