/// <summary>
    /// 连线特效回调函数
    /// </summary>
    /// <param name="obj"></param>
    private void OnLineEffectLoad(EffectController effect, System.Object usedata)
    {
        if (usedata != null)
        {
            SpacecraftAvatarComponent component = (SpacecraftAvatarComponent)usedata;

            uint ownerHeroID = component.m_Property.GetOwner().m_EntityFatherOwnerID;
            if (ownerHeroID != 0 && component.m_Property.GetHeroType() == KHeroType.htDisturbor)
            {
                SpacecraftEntity target = component.m_GameplayProxy.GetEntityById <SpacecraftEntity>(ownerHeroID) as SpacecraftEntity;

                effect.SetBeamTarget(component.m_Property.GetSkinTransform(), target.GetSkinTransform(), Vector3.zero, false, target.GetAllColliders());
                /// TODO.
                /// 时间配合特效里的动画时间
                UIManager.Instance.StartCoroutine(Excute(0.25f, () =>
                {
                    target.SendEvent(ComponentEventName.LineEffectEnd, null);
                }));
            }
        }
    }
예제 #2
0
    /// <summary>
    /// 获取主玩家皮肤节点
    /// </summary>
    /// <returns></returns>
    public Transform GetMainPlayerSkinTransform()
    {
        CfgEternityProxy cfgEternityProxy = GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy;

        if (!cfgEternityProxy.IsSpace())
        {
            HumanEntity humanEntity = GetEntityById <HumanEntity>(GetMainPlayerUID());
            if (humanEntity != null)
            {
                return(humanEntity.GetSkinTransform());
            }
        }
        else
        {
            SpacecraftEntity spacecraftEntity = GetEntityById <SpacecraftEntity>(GetMainPlayerUID());
            if (spacecraftEntity != null)
            {
                return(spacecraftEntity.GetSkinTransform());
            }
        }

        return(null);
    }
예제 #3
0
    //private void OnCollisionEnter(Collision obj)
    //{
    //    OnSpacecraftSlidingEnd();
    //}

    //private void OnCollisionStay(Collision obj)
    //{
    //}

    //private void OnCollisionExit(Collision obj)
    //{
    //}

    //private void OnRelive(IComponentEvent obj)
    //{
    //    m_DeadFxState = DeadState.None;

    //    RealTimerUtil.Instance.Unregister(m_ShowDeadFxTimerId);
    //}

    private void OnDead(IComponentEvent obj)
    {
        DeadEvent deadEvent = obj as DeadEvent;

        if (!m_SpacecraftDeadProperty.IsDead())
        {
            return;
        }

        m_DropInfoList = deadEvent.DropList;

        /// TODO.宝藏特殊处理
        /// 服务器创建后立马死亡
        //if (m_SpacecraftDeadProperty.IsNotHaveAva())
        //{
        //	if (m_DropInfoList != null && m_DropInfoList.Count > 0)
        //	{
        //		DropItemManager.Instance.SetDropItemInfoByDeath(m_SpacecraftDeadProperty.UId(), m_DropInfoList);
        //	}
        //	return;
        //}

        /// npc死亡
        if (m_SpacecraftDeadProperty.GetHeroType() != KHeroType.htPlayer)
        {
            Npc npcVO = m_SpacecraftDeadProperty.GetNPCTemplateVO();
            if (npcVO.SoundDead > 0)
            {
                SendEvent(ComponentEventName.PlaySound, new PlaySound()
                {
                    SoundID = (int)npcVO.SoundDead
                });
            }
            /// 导演死检查音乐盒子
            if (m_SpacecraftDeadProperty.GetHeroType() == KHeroType.htPlotMonster)
            {
                MSAIBossProxy msab = GameFacade.Instance.RetrieveProxy(ProxyName.MSAIBossProxy) as MSAIBossProxy;
                msab.DestroySoundBox(m_SpacecraftDeadProperty.UId());
            }
            /// TODO.干扰器死亡
            else if (m_SpacecraftDeadProperty.GetHeroType() == KHeroType.htDisturbor)
            {
                /// 自己的停掉
                SpacecraftEntity ownerEntity = m_SpacecraftDeadProperty.GetOwner();
                ownerEntity.SendEvent(ComponentEventName.PlaySound, new PlaySound()
                {
                    SoundID   = (int)WwiseMusic.Treasure_Disturbor_Sound5,
                    Transform = ownerEntity.GetSkinTransform()
                });

                TreasureHuntProxy treasure = GameFacade.Instance.RetrieveProxy(ProxyName.TreasureHuntProxy) as TreasureHuntProxy;
                treasure.DisturborSoundEffect(m_SpacecraftDeadProperty.GetOwner().m_EntityFatherOwnerID);
            }
        }

        m_SpacecraftDeadProperty.SetTarget(null, null);

        #region 待服务器在new_hero协议中添加复活状态逻辑后删除
        if (m_SpacecraftDeadProperty.IsMain())
        {
            m_GameplayProxy = GameFacade.Instance.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy;

            if (m_SpacecraftDeadProperty.IsMain())
            {
                CfgEternityProxy eternityProxy = GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy;
                m_GameplayProxy.SetDeadMapID(eternityProxy.GetCurrentMapData().GamingmapId);
            }
        }
        #endregion

        ShowRelivePanel(deadEvent);

        SpacecraftPresentation presentation = m_SpacecraftDeadProperty.GetPresentation();
        if (presentation != null)
        {
            if (presentation.SpacecraftDeadType != SpacecraftPresentation.SpacecraftType.Warship)
            {
                OnDeviceDead(deadEvent);
            }
        }
    }
예제 #4
0
    /// <summary>
    /// 更新UI
    /// </summary>
    private void UpdateUI()
    {
        if (m_NearestTarget)
        {
            m_NearestTarget.GetSkinRootTransform();

            float hp    = (float)m_NearestTarget.GetAttribute(AttributeName.kHP);
            float hpMax = (float)m_NearestTarget.GetAttribute(AttributeName.kHPMax);

            float hpProgress = hpMax <= 0 ? 0 : hp / hpMax;
            //int phase = Mathf.Min(4, Mathf.FloorToInt(hpProgress / (1.0f / 5)));

            m_HpBar.fillAmount = hpProgress;
            m_HpBarLabel.text  = Mathf.FloorToInt(hpProgress * 100) + "%";
            m_HpBarState.text  = "";           // GetLocalization("hud_text_id_" + (1021 + phase));

            if (m_TargetViewer && m_TargetViewer.Camera && m_TargetViewer.ModelArray != null)
            {
                if (m_TargetList.Count > 0)
                {
                    for (int i = 0; i < m_TargetViewer.ModelArray.Length; i++)
                    {
                        SpacecraftEntity entity = m_GameplayProxy.GetEntityById <SpacecraftEntity>(m_TargetList[i]);
                        if (entity != null)
                        {
                            Transform skinTransform = entity.GetSkinTransform();
                            if (skinTransform != null)
                            {
                                for (int k = 0; k < m_TargetViewer.ModelArray[i].transform.childCount; k++)
                                {
                                    Transform child = m_TargetViewer.ModelArray[i].transform;
                                    if (child.GetChild(k).GetComponent <EffectController>() != null)
                                    {
                                        continue;
                                    }
                                    string name = child.GetChild(k).name;
                                    if (skinTransform.Find(name) == null)
                                    {
                                        child.GetChild(k).gameObject.SetActive(false);
                                    }
                                    else
                                    {
                                        child.GetChild(k).gameObject.SetActive(true);
                                    }
                                }
                            }
                        }
                        else
                        {
                            GameObject currentModel = m_TargetViewer.ModelArray[i];
                            for (int j = 0; j < currentModel.transform.childCount; j++)
                            {
                                if (currentModel.transform.GetChild(j).GetComponent <EffectController>() != null)
                                {
                                    continue;
                                }
                                currentModel.transform.GetChild(j).gameObject.SetActive(false);
                            }
                        }
                    }
                }
                Transform skin = m_NearestTarget.GetSkinTransform();
                if (skin)
                {
                    Camera           mainCamera = CameraManager.GetInstance().GetMainCamereComponent().GetCamera();
                    GameplayProxy    sceneProxy = Facade.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy;
                    SpacecraftEntity mainHero   = sceneProxy.GetEntityById <SpacecraftEntity>(sceneProxy.GetMainPlayerUID());

                    float   bestDistance  = m_TargetViewer.ModelBoundsDiagonalLength / 2.0f / Mathf.Tan(mainCamera.fieldOfView * Mathf.Deg2Rad / 2.0f);
                    Vector3 bestDirection = mainCamera.transform.position - mainHero.transform.position;

                    m_TargetViewer.ModelBox.rotation         = skin.rotation;
                    m_TargetViewer.Camera.transform.position = m_TargetViewer.ModelBox.position + bestDirection.normalized * bestDistance;
                    m_TargetViewer.Camera.transform.LookAt(m_TargetViewer.ModelBox);
                }
            }

            if (m_TargetViewer.EffectArray != null)
            {
                foreach (EffectController effect in m_TargetViewer.EffectArray)
                {
                    VFXController effectObject = effect.GetEffectObject();
                    if (effectObject)
                    {
                        Animator animator = effectObject.GetComponent <Animator>();
                        if (animator)
                        {
                            animator.SetFloat("Color", 1 - hpProgress);
                        }
                    }
                }
            }
        }
        else
        {
            m_HpBarState.text = GetLocalization("hud_text_id_" + 1021);
        }
    }
예제 #5
0
    /// <summary>
    /// 干扰器与封印守卫的音效
    /// 和干扰器数量相关
    /// </summary>
    public void DisturborSoundEffect(uint ownerHeroID)
    {
        if (ownerHeroID == 0)
        {
            return;
        }

        SpacecraftEntity ownerEntity = m_GameplayProxy.GetEntityById <SpacecraftEntity>(ownerHeroID);

        /// WwiseUtil.PlaySound((int)WwiseMusic.Treasure_Disturbor_Sound5, false, ownerEntity.GetSkinTransform());
        ownerEntity.SendEvent(ComponentEventName.PlaySound, new PlaySound()
        {
            SoundID   = (int)WwiseMusic.Treasure_Disturbor_Sound5,
            Transform = ownerEntity.GetSkinTransform()
        });

        List <SpacecraftEntity> entites      = m_GameplayProxy.GetEntities <SpacecraftEntity>();
        List <SpacecraftEntity> entitesCache = new List <SpacecraftEntity>();
        int count = 0;

        for (int i = 0; i < entites.Count; i++)
        {
            SpacecraftEntity entity = entites[i];
            if (!entity.IsDead() && entity.GetHeroType() == KHeroType.htDisturbor && entity.m_EntityFatherOwnerID == ownerHeroID)
            {
                count++;
                entitesCache.Add(entity);
            }
        }

        Debug.Log("KHeroType.htDisturbor count" + count);
        /// TODO.
        int soundId = 0;

        if (count == 6)
        {
            soundId = (int)WwiseMusic.Treasure_Disturbor_Sound1;
        }
        else if (count == 5 || count == 4)
        {
            soundId = (int)WwiseMusic.Treasure_Disturbor_Sound2;
        }
        else if (count == 3 || count == 2)
        {
            soundId = (int)WwiseMusic.Treasure_Disturbor_Sound3;
        }
        else if (count == 1)
        {
            soundId = (int)WwiseMusic.Treasure_Disturbor_Sound4;
        }

        if (soundId != 0)
        {
            entitesCache.Add(ownerEntity);
            for (int i = 0; i < entitesCache.Count; i++)
            {
                /// WwiseUtil.PlaySound(soundId, false, entitesCache[i].GetSkinTransform());
                entitesCache[i].SendEvent(ComponentEventName.PlaySound, new PlaySound()
                {
                    SoundID   = soundId,
                    Transform = entitesCache[i].GetSkinTransform()
                });
            }
        }
    }
예제 #6
0
    private void SpeekWarnVoiceNearbyAI(ulong ServerTime)
    {
        if (m_CurrentAIUid <= 0)
        {
            return;
        }

        if (IsInAIArea())
        {
            bool isHave = m_NearbyAIVoicTimeDic.ContainsKey(m_CurrentAIUid);
            if (isHave && m_NearbyAIVoicTimeDic[m_CurrentAIUid].times >= 3)
            {
                return;
            }
            BaseEntity       main = m_GameplayProxy.GetEntityById <BaseEntity>(m_GameplayProxy.GetMainPlayerUID());
            SpacecraftEntity AI   = m_GameplayProxy.GetEntityById <SpacecraftEntity>((uint)m_CurrentAIUid);
            if (main == null || main.transform == null || AI == null || AI.GetSkinTransform() == null)
            {
                return;
            }

            // TODO.
            // 先放这
            if (!m_IsPlayIngEff && m_AIBossState[m_CurrentAIUid].m_AIPlotState > AIPlotState.Idle && m_AIBossState[m_CurrentAIUid].m_AIPlotState < AIPlotState.BeginCallingBoss)
            {
                Vector3 targetPosition = AI.transform.position;
                Vector3 viewportPoint  = Camera.main.WorldToViewportPoint(targetPosition);
                bool    inScreen       = viewportPoint.x >= 0 && viewportPoint.y >= 0 &&
                                         viewportPoint.x <= 1 && viewportPoint.y <= 1 && viewportPoint.z > Camera.main.nearClipPlane;
                if (inScreen)
                {
                    m_IsPlayIngEff = true;
                    PlayFoundEnemyPanel();
                }
            }
            float targetDistance = Vector3.Distance(AI.transform.position, main.transform.position) * GameConstant.METRE_PER_UNIT;
            if (targetDistance <= DISTANCE_FROM_AI)
            {
                if (isHave)
                {
                    if (!m_NearbyAIVoicTimeDic[m_CurrentAIUid].isStayInAI)
                    {
                        m_NearbyAIVoicTimeDic[m_CurrentAIUid].times     += 1;
                        m_NearbyAIVoicTimeDic[m_CurrentAIUid].serverTime = ServerTime;
                        int times = m_NearbyAIVoicTimeDic[m_CurrentAIUid].times;
                        SendNotification(m_NearbyVoices[times - 1]);
                    }
                    else if (m_NearbyAIVoicTimeDic[m_CurrentAIUid].isStayInAI &&
                             ServerTime - m_NearbyAIVoicTimeDic[m_CurrentAIUid].serverTime > WARN_VOICE_INTERVAL_RANGLE)
                    {
                        m_NearbyAIVoicTimeDic[m_CurrentAIUid].times     += 1;
                        m_NearbyAIVoicTimeDic[m_CurrentAIUid].serverTime = ServerTime;
                        int times = m_NearbyAIVoicTimeDic[m_CurrentAIUid].times;
                        SendNotification(m_NearbyVoices[times - 1]);
                    }
                }
                else
                {
                    AI_Distance_Info AIiNFO = new AI_Distance_Info(1, ServerTime, true);
                    m_NearbyAIVoicTimeDic.Add(m_CurrentAIUid, AIiNFO);
                    SendNotification(m_NearbyVoices[0]);
                }
            }
            else if (isHave)
            {
                m_NearbyAIVoicTimeDic[m_CurrentAIUid].isStayInAI = false;
            }
        }
    }