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>();
        }
Exemple #5
0
        /// <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;
 }
Exemple #8
0
 /// <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;
 }