/// <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); })); } } }
/// <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); }
//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); } } }
/// <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); } }
/// <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() }); } } }
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; } } }