private void Awake() { m_NavMeshAgent = GetComponent <NavMeshAgent>(); m_NetworkCharacterState = GetComponent <NetworkCharacterState>(); m_CharLogic = GetComponent <ServerCharacter>(); m_Rigidbody = GetComponent <Rigidbody>(); m_NavigationSystem = GameObject.FindGameObjectWithTag(NavigationSystem.NavigationSystemTag).GetComponent <NavigationSystem>(); }
// set the class type for an ally - allies are tracked by appearance so you must also provide appearance id public void SetAllyData(NetworkCharacterState netState) { ulong id = netState.NetworkObjectId; int slot = FindOrAddAlly(id); // do nothing if not in a slot if (slot == -1) { return; } SetUIFromSlotData(slot, netState); }
private void SetUIFromSlotData(int slot, NetworkCharacterState netState) { m_PartyHealthSliders[slot].maxValue = GetMaxHPForClass(netState.CharacterType); m_PartyHealthSliders[slot].value = netState.HitPoints; m_PartyNames[slot].text = GetPlayerName(m_PartyIds[slot]); int symbol = (int)netState.CharacterType; if (symbol > m_ClassSymbols.Length) { return; } m_PartyClassSymbols[slot].sprite = m_ClassSymbols[symbol]; }
public void SetHeroData(NetworkCharacterState netState) { // Make sure arrays are initialized InitPartyArrays(); // Hero is always our slot 0 m_PartyIds[0] = netState.NetworkObject.NetworkObjectId; SetUIFromSlotData(0, netState); // Hero also gets a protrait int appearance = netState.CharacterAppearance.Value; if (appearance < m_PortraitAppearances.Length) { m_HeroPortrait.sprite = m_PortraitAppearances[appearance]; } // plus we track their target netState.TargetId.OnValueChanged += OnHeroSelectionChanged; m_ClientSender = netState.GetComponent <Client.ClientInputSender>(); }
/// <inheritdoc /> public override void NetworkStart() { if (!IsClient || transform.parent == null) { enabled = false; return; } m_AliveStateTriggerID = Animator.StringToHash("StandUp"); m_FaintedStateTriggerID = Animator.StringToHash("FallDown"); m_DeadStateTriggerID = Animator.StringToHash("Dead"); m_AnticipateMoveTriggerID = Animator.StringToHash("AnticipateMove"); m_SpeedVariableID = Animator.StringToHash("Speed"); m_HitStateTriggerID = Animator.StringToHash(ActionFX.k_DefaultHitReact); m_ActionViz = new ActionVisualization(this); Parent = transform.parent; m_NetState = Parent.gameObject.GetComponent <NetworkCharacterState>(); m_NetState.DoActionEventClient += PerformActionFX; m_NetState.CancelAllActionsEventClient += CancelAllActionFXs; m_NetState.CancelActionsByTypeEventClient += CancelActionFXByType; m_NetState.NetworkLifeState.OnValueChanged += OnLifeStateChanged; m_NetState.OnPerformHitReaction += OnPerformHitReaction; m_NetState.OnStopChargingUpClient += OnStoppedChargingUp; m_NetState.IsStealthy.OnValueChanged += OnStealthyChanged; //we want to follow our parent on a spring, which means it can't be directly in the transform hierarchy. Parent.GetComponent <ClientCharacter>().ChildVizObject = this; transform.SetParent(null); // sync our visualization position & rotation to the most up to date version received from server var parentMovement = Parent.GetComponent <INetMovement>(); transform.position = parentMovement.NetworkPosition.Value; transform.rotation = Quaternion.Euler(0, parentMovement.NetworkRotationY.Value, 0); // listen for char-select info to change (in practice, this info doesn't // change, but we may not have the values set yet) ... m_NetState.CharacterAppearance.OnValueChanged += OnCharacterAppearanceChanged; // ...and visualize the current char-select value that we know about OnCharacterAppearanceChanged(0, m_NetState.CharacterAppearance.Value); // ...and visualize the current char-select value that we know about SetAppearanceSwap(); // sync our animator to the most up to date version received from server SyncEntryAnimation(m_NetState.NetworkLifeState.Value); if (!m_NetState.IsNpc) { // track health for heroes m_NetState.HealthState.HitPoints.OnValueChanged += OnHealthChanged; // find the emote bar to track its buttons GameObject partyHUDobj = GameObject.FindGameObjectWithTag("PartyHUD"); m_PartyHUD = partyHUDobj.GetComponent <Visual.PartyHUD>(); if (IsLocalPlayer) { ActionRequestData data = new ActionRequestData { ActionTypeEnum = ActionType.GeneralTarget }; m_ActionViz.PlayAction(ref data); gameObject.AddComponent <CameraController>(); m_PartyHUD.SetHeroData(m_NetState); if (Parent.TryGetComponent(out ClientInputSender inputSender)) { inputSender.ClientMoveEvent += OnMoveInput; } } else { m_PartyHUD.SetAllyData(m_NetState); // getting our parent's NetworkObjectID for PartyHUD removal on Destroy var parentNetworkObjectID = m_NetState.NetworkObjectId; // once this object is destroyed, remove this ally from the PartyHUD UI // NOTE: architecturally this will be refactored Destroyed += () => { if (m_PartyHUD != null) { m_PartyHUD.RemoveAlly(parentNetworkObjectID); } }; } } }
public override bool Start() { m_ParentState = m_Parent.Parent.GetComponent <NetworkCharacterState>(); return(true); }
void Awake() { m_NetworkCharacter = GetComponent <NetworkCharacterState>(); m_MainCamera = Camera.main; }
/// <summary> /// We need to get told about the Boss to track their health for game win /// </summary> public void OnBossSpawned(NetworkCharacterState bossCharState) { bossCharState.NetworkLifeState.OnValueChanged += OnBossLifeStateChanged; }