public override void OnLateUpdate() { if (Input.GetKey(KeyCode.KeypadMinus)) { ExternOBCameraMoveSpeed -= MoveSpeedUpdateDealt; } if (Input.GetKey(KeyCode.KeypadPlus)) { ExternOBCameraMoveSpeed += MoveSpeedUpdateDealt; } if (Input.GetKey(KeyCode.PageDown)) { ExternOBCamerFOV -= FOVUpdateDealt; } if (Input.GetKey(KeyCode.PageUp)) { ExternOBCamerFOV += FOVUpdateDealt; } if (Input.GetKey(KeyCode.KeypadDivide)) { ExternOBCameraRoateSpeed -= RoateSpeedUpdateDealt; } if (Input.GetKey(KeyCode.KeypadMultiply)) { ExternOBCameraRoateSpeed += RoateSpeedUpdateDealt; } float FinalMoveSpeed = moveSpeed + ExternOBCameraMoveSpeed; float RoateSpeed = 30 + ExternOBCameraRoateSpeed; if (soldierController != null && CameraEffectUtil.MainInstance.canPlayControl) { setFPS(false); if (InputManager.GetKey(KeyCode.Keypad4)) { setFPS(true); this.mouseCtrl.fMouseAxisX = -Time.deltaTime * RoateSpeed; } else if (InputManager.GetKey(KeyCode.Keypad6)) { setFPS(true); this.mouseCtrl.fMouseAxisX = Time.deltaTime * RoateSpeed; } GetInputOBMode(curCameraModeParam.pitchAngleRange); } Vector3 cOffset = new Vector3(0, curCameraModeParam.targetOffset, 0); UpdateTransformOBMode(cOffset); //计算摄像机具体参数 inputMoveDelta = InputManager.GetAxis(InputAxisSet.Axis_Horizontal) * camTransform.right + InputManager.GetAxis(InputAxisSet.Axis_Vertical) * camTransform.forward; inputMoveDelta.Normalize(); inputMoveDelta *= FinalMoveSpeed * Time.deltaTime; camTransform.position += inputMoveDelta; if (InputManager.GetKey(KeyCode.Keypad8)) { camTransform.position += Vector3.up * FinalMoveSpeed * Time.deltaTime / 3; } else if (InputManager.GetKey(KeyCode.Keypad2)) { camTransform.position -= Vector3.up * FinalMoveSpeed * Time.deltaTime / 3; } if (InputManager.GetKeyDown(KeyCode.F1)) { soldierCam.SwitchLookAtOBSolider(false); UpdateCamera(cOffset); } else if (InputManager.GetKeyDown(KeyCode.F2)) { soldierCam.SwitchLookAtOBSolider(true); UpdateCamera(cOffset); } GodEyeFocusPosCheckTime += deltaTime; if (GodEyeFocusPosCheckTime > 1.0f) { cmd_entity_master_eye_focus data; data.isGodMode = 1; data.x = camTransform.position.x; data.y = camTransform.position.y; data.z = camTransform.position.z; IntPtrHelper helper = new IntPtrHelper(); System.IntPtr ptr = helper.toPtr <cmd_entity_master_eye_focus>(ref data); int len = System.Runtime.InteropServices.Marshal.SizeOf(data); GameLogicAPI.onEntityEvent(EntityFactory.MainHeroID, (int)EntityLogicDef.ENTITY_CMD_MASTER_EYE_FOCUS, len, "", ptr, len); GodEyeFocusPosCheckTime = 0; } }
// 设置排位信息 public void setRankInfo(cmd_entity_end_player_data selfData) { Debug.Log(String.Format("{0}({1}),{2},当前分:{3},上次分:{4}本局分:{5}", selfData.nMatchType, selfData.szMatchTypeName, selfData.nUpgradeRank, selfData.nPlayerMatchScore, selfData.nPreMatchTypeScore, selfData.nMatchScore)); // 胜利且是排位赛才显示 if ((EMMatchType)selfData.nMatchType == EMMatchType.MatchType_Rank) { // todo 战场的要单独处理下 王者段位以上的 只加分了 段位是单独换算的 int nBaseKingRankScore = GameLogicAPI.getMatchtTypeBaseKingRankScore(selfData.nMatchType); int nMatchType = selfData.nMatchType; int nCurRankScore = selfData.nPlayerMatchScore; int nRankIconID = GameLogicAPI.getActorRankIconID(nMatchType, nCurRankScore); int nRankStar = 0; string strRankName = ""; if (nCurRankScore >= nBaseKingRankScore) { if (selfData.nPreMatchTypeScore >= nBaseKingRankScore) { // 本来就是王者段位的就取以前的等级 nRankIconID = GameLogicAPI.getRankIconIDByGrade(nMatchType, selfData.nPreMatchTypeGrade); nRankStar = GameLogicAPI.getActorRankStar(nMatchType, nBaseKingRankScore); // 段位名称 IntPtr ptr = GameLogicAPI.getActorRankNameByGrade(nMatchType, selfData.nPreMatchTypeGrade); if (ptr != IntPtr.Zero) { strRankName = IntPtrHelper.Ptr2Str(ptr); } // 升星级个数 int nDiff = 0; if (selfData.nCurStarSection > 0) { nDiff = selfData.nMatchScore / selfData.nCurStarSection; } //当前星级 + if (nDiff < 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级:{0} 本局星级{1}", nRankStar, nDiff); } else if (nDiff > 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级:{0} 本局星级+{0}", nRankStar, nDiff); } else { StarUpDesc.gameObject.SetActive(false); } } else { // 新升级到王者段位的 nRankIconID = GameLogicAPI.getActorRankIconID(nMatchType, nCurRankScore); nRankStar = GameLogicAPI.getActorRankStar(nMatchType, nCurRankScore); // 段位名称 IntPtr ptr = GameLogicAPI.getActorRankName(nMatchType, nCurRankScore); if (ptr != IntPtr.Zero) { strRankName = IntPtrHelper.Ptr2Str(ptr); } if (selfData.nUpgradeRank > 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级+{0}", 1); } } GradeDesc.text = strRankName; } else { nRankStar = GameLogicAPI.getActorRankStar(nMatchType, nCurRankScore); int nMaxRankStar = GameLogicAPI.getActorCurRankMaxStar(nMatchType, nCurRankScore); int nOldRankScore = selfData.nPreMatchTypeScore; int nOldRankStar = GameLogicAPI.getActorRankStar(nMatchType, nOldRankScore); // 段位名称 IntPtr ptr = GameLogicAPI.getActorRankName(nMatchType, nCurRankScore); if (ptr != IntPtr.Zero) { strRankName = IntPtrHelper.Ptr2Str(ptr); } GradeDesc.text = strRankName; // 当前段位所有星级 m_RankIconList = new Image[nMaxRankStar]; for (int i = 0; i < nMaxRankStar; ++i) { GameObject RankIconItem = ResNode.InstantiateRes(RankIconDefaultItem); RankIconItem.transform.SetParent(RankIconDefaultItem.transform.parent, false); RankIconItem.SetActive(true); m_RankIconList[i] = RankIconItem.GetComponent <Image>(); } // 当前拥有星级 for (int j = 0; j < nRankStar; ++j) { m_RankIconList[j].sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_RankStarImage, WndID.WND_ID_WAR_RECORDTABLE_END, 2); } if (selfData.nUpgradeRank == 0) // 段位未发生改变 { // 升星级个数 int nDiff = nRankStar - nOldRankStar; if (nDiff < 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级{0}", nDiff); } else if (nDiff > 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级+{0}", nDiff); } else { StarUpDesc.gameObject.SetActive(false); } } else if (selfData.nUpgradeRank < 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级-{0}", 1); } else if (selfData.nUpgradeRank > 0) { StarUpDesc.gameObject.SetActive(true); StarUpDesc.text = String.Format("星级+{0}", 1); } } } else { RankScoreTip.gameObject.SetActive(false); } SSchemeWarStatisticMapConfig warStatConfig = ASpeedGame.Data.WarStatisticMap.WarStatisticMapConfig.Instance.getWarStatMapConfig(selfData.nMatchType); if (warStatConfig != null) { MatchTypeText.text = warStatConfig.strName; } else { MatchTypeText.text = ""; } }
public void SetBuffInfo(UIMsgCmdData uiBuffData) { cmd_creature_setBuff data = IntPtrHelper.toData <cmd_creature_setBuff>(uiBuffData.ptrParam); SetHeroBuff(data); }
// // The overlapped function called (either by the thread pool or the socket) // when IO completes. (only called on Win9x) // private void OverlappedCallback(object stateObject, bool Signaled) { #if DEBUG // GlobalLog.SetThreadSource(ThreadKinds.Worker); Because of change 1077887, need logic to determine thread type here. using (GlobalLog.SetThreadKind(ThreadKinds.System)) { #endif BaseOverlappedAsyncResult asyncResult = (BaseOverlappedAsyncResult)stateObject; GlobalLog.Assert(!asyncResult.InternalPeekCompleted, "AcceptOverlappedAsyncResult#{0}::OverlappedCallback()|asyncResult.IsCompleted", ValidationHelper.HashString(asyncResult)); // // the IO completed asynchronously, see if there was a failure the Internal // field in the Overlapped structure will be non zero. to optimize the non // error case, we look at it without calling WSAGetOverlappedResult(). // uint errorCode = (uint)Marshal.ReadInt32(IntPtrHelper.Add(asyncResult.m_UnmanagedBlob.DangerousGetHandle(), Win32.OverlappedInternalOffset)); uint numBytes = errorCode != 0 ? unchecked ((uint)-1) : (uint)Marshal.ReadInt32(IntPtrHelper.Add(asyncResult.m_UnmanagedBlob.DangerousGetHandle(), Win32.OverlappedInternalHighOffset)); // // this will release the unmanaged pin handles and unmanaged overlapped ptr // asyncResult.ErrorCode = (int)errorCode; object returnObject = asyncResult.PostCompletion((int)numBytes); asyncResult.ReleaseUnmanagedStructures(); asyncResult.InvokeCallback(returnObject); #if DEBUG } #endif }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_COMMON_BATTLESTATE_ENTER: { this.SetVisible(true); } break; case WndMsgID.WND_MSG_COMMOM_WARHEROMAXSKILLSTATE: { if (m_wndView == null) { return; } UIMsgCmdData uiMaxSkillData = (UIMsgCmdData)msgData; cmd_player_skill_state data = IntPtrHelper.toData <cmd_player_skill_state>(uiMaxSkillData.ptrParam); SetMyTeamSkillIcon(data); } break; case WndMsgID.WND_MSG_TEAMRIGHT_INITMYTEAMUID: { UIMsgCmdData uiUIDData = (UIMsgCmdData)msgData; SaveUIDAndPBUID(uiUIDData.ptrParam, uiUIDData.nPtrLen); } break; case WndMsgID.WND_MSG_COMMON_WAREND: case WndMsgID.WND_MSG_COMMON_BATTLESTATE_LEAVE: { this.UnloadView(); LogicDataCenter.recordTableDataManager.m_bUpdateTeamInfo = true; } break; case WndMsgID.WND_MSG_WAR_XPSKILL_SET_XP_SKILL_SELF: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; cmd_creature_ShowPromptUI data = IntPtrHelper.toData <cmd_creature_ShowPromptUI>(uiData.ptrParam); SetXpSkillFireEffect(data); } break; case WndMsgID.WND_MSG_WAR_XPSKILL_SET_XP_SKILL_OTHER: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; cmd_creature_ShowPromptUI data = IntPtrHelper.toData <cmd_creature_ShowPromptUI>(uiData.ptrParam); SetXpSkillFireEffect(data); } break; case WndMsgID.WND_MSG_TEAMMATEINFO_UPDATETEAMINFO: { if (m_wndView == null) { return; } m_wndView.SetData(); } break; case WndMsgID.WND_MSG_BATTLEWAR_LIFESTATE: { if (m_wndView != null) { m_wndView.OnUpdateLifeState(msgData as UBattleWarLifeState); } } break; case WndMsgID.WND_MSG_WAR_UPDATE_HEROICON: { if (m_wndView != null) { m_wndView.updateHeroIcon(msgData as UIWarUpdateHeroIcon); } } break; default: break; } }
/// <summary> /// 异步PostMessage /// </summary> /// <param name="hwnd"></param> /// <param name="msg"></param> /// <param name="wparam"></param> /// <param name="lparam"></param> /// <returns></returns> public async static Task <int> PostMessageAsync(IntPtrHelper hwnd, IntHelper msg, IntHelper wparam, IntPtrHelper lparam) { return(await Task.Factory.StartNew <int>(() => { return PostMessage(hwnd, msg, wparam, lparam); })); }
public void ActorInfoChangeUpdate(IntPtr ptrParam, int nPtrLen, int nActorID = nDefaultSelfActorID) { CheckGetSelfPDBID(ref nActorID); if (!actorPlayer.ContainsKey(nActorID)) { return; } cmd_actor_info_change data = IntPtrHelper.toData <cmd_actor_info_change>(ptrParam); switch (data.nType) { case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_LEVEL: { actorPlayer[nActorID].playerInfo.nLv = data.nValue1; } break; case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_PKWINNUM: { actorPlayer[nActorID].playerInfo.nPKWinNum = data.nValue1; } break; case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_PKTOTALNUM: { actorPlayer[nActorID].playerInfo.nPKTotalNum = data.nValue1; } break; case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_EXP: { actorPlayer[nActorID].playerInfo.ulCurrentExp = (uint)data.nValue1; actorPlayer[nActorID].playerInfo.ulNeedExp = (uint)data.nValue2; } break; case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_NAME: { actorPlayer[nActorID].playerInfo.chPlayerName = data.str1; if (EntityFactory.MainHeroView != null) { CreatureProperty property = EntityFactory.MainHeroView.Property; if (property != null) { property.CreatureName = data.str1; } } } break; case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_GLORY: { for (int i = 0; i < (int)ENACHIEVE.ENACHIEVE_MAX; i++) { actorPlayer[nActorID].playerInfo.nGlory[i] = data.nGlory[i]; actorPlayer[nActorID].playerInfo.llWarID[i] = data.llWarID[i]; } } break; case (int)ENPLAYERINFOTYPE.ENPLAYERINFOTYPE_RANKNUM: { actorPlayer[nActorID].playerInfo.nRankMatchNum = data.nValue1; actorPlayer[nActorID].playerInfo.nRankWinNum = data.nValue2; } break; default: break; } }
public void addMonsterEffect(U3D_Render.EntityView dieEv, ulong uMurderID) { if (dieEv == null || dieEv.CampFlag != SPELL.CampFlag.CampFlag_Enemy || !CheckMonsterType(dieEv)) { return; } U3D_Render.EntityView mainEv = EntityFactory.getMainPlayer(); if (mainEv == null || mainEv.StateMachine.GetState() == GameLogic.EntityState.Dead) { return; } Vector3 monsterLoc = dieEv.gameObject.transform.position; Vector3 heroLoc = mainEv.gameObject.transform.position; int effectCount = 0; bool needPlayMoneyEffect = false; //根据死亡对象类型控制光效数量 int vocationID = dieEv.createinfo.nHeroID; string dieEffectMsg = ""; IntPtr strPtr = GameLogicAPI.toCoinLighting(vocationID, (int)ENTITY_TYPE.TYPE_MONSTER); if (strPtr != null) { dieEffectMsg = IntPtrHelper.Ptr2Str(strPtr); } if (dieEffectMsg.Contains(GameLogicConfigApi.MoneyEffect.ToString())) { needPlayMoneyEffect = true; } if ((ulong)mainEv.ID == uMurderID && GameLogicAPI.isInWarScene() != 0) { //如果是怪物类型 if (dieEv.Type == ENTITY_TYPE.TYPE_MONSTER) { //中立野怪 //if ((int)MONSTER_SUB_TYPE.MONSTER_SUB_TYPE_WILD_MONSTER == dieEv.Flag) effectCount = 3; //小兵和野怪都是3个 } else if (dieEv.Type == ENTITY_TYPE.TYPE_PLAYER_ROLE) { effectCount = 6; //英雄6个 } if (effectCount > 0 && needPlayMoneyEffect) { LightingEffectBehavior moneyEff = EffectHelper.PlayAndReturnEffect(ref mainEv, GameLogicConfigApi.MoneyEffect, mainEv.ID, mainEv.ID, monsterLoc, 0, 2); if (moneyEff != null) { LightingEffectBehavior_Area effect = (LightingEffectBehavior_Area)moneyEff; effect.SetEffectCount(effectCount); } } LightingEffectBehavior deadEff = EffectHelper.PlayAndReturnEffect(ref dieEv, GameLogicConfigApi.MonsterDeadEffect, dieEv.ID, dieEv.ID, monsterLoc, 0, 2); return; } int nMonsterDistance = GameLogicConfigApi.MonsterDistance; int nTowerDistance = GameLogicConfigApi.TowerDistance; if ((monsterLoc - heroLoc).sqrMagnitude > (nMonsterDistance * nMonsterDistance)) { return; } IList <U3D_Render.EntityView> monster_Entities = MapFinderManager.Nearest(monsterLoc, /*nTowerDistance*/ nMonsterDistance, SPELL.CampFlag.CampFlag_Self); if (monster_Entities == null) { return; } int nMainID = 0; float fMinDis = 0.0f; foreach (U3D_Render.EntityView monsterEv in monster_Entities) { if (HeroDistanceMgr.CheckDistance(dieEv, monsterEv, nMonsterDistance) == false || monsterEv == null) { continue; } if ((int)MONSTER_SUB_TYPE.MONSTER_SUB_TYPE_DEFENSIVE_TOWER == monsterEv.Flag) { //return; } else if (ENTITY_TYPE.TYPE_PLAYER_ROLE == monsterEv.Type) { float fEntityDistance = (monsterLoc - monsterEv.gameObject.transform.position).sqrMagnitude; if (fMinDis == 0 || fEntityDistance < fMinDis) { fMinDis = fEntityDistance; nMainID = monsterEv.ID; } } } U3D_Render.EntityView view = EntityFactory.getEntityViewByID((int)uMurderID); if (nMainID == mainEv.ID && (ulong)nMainID != uMurderID && (int)MONSTER_SUB_TYPE.MONSTER_SUB_TYPE_DEFENSIVE_TOWER != view.Flag) { if ((view.InitMaskFlag & (int)ENTITY_MASKFLAG.MASKFLAG_DIE_NO_COMMONLIGHT) != (int)ENTITY_MASKFLAG.MASKFLAG_DIE_NO_COMMONLIGHT) { EffectHelper.Play(ref dieEv, GameLogicConfigApi.MonsterDeadEffect, dieEv.ID, mainEv.ID, monsterLoc); } } }
// 进入状态 public bool OnEnter(IntPtr lParam) { //if (m_pFSM.animator) //{ // m_pFSM.animator.SetTrigger("BreakAttack"); // m_pFSM.animator.SetBool("isDead", true); // m_pFSM.animator.Play("Dead"); //} cmd_creature_die cmdDie = IntPtrHelper.toData <cmd_creature_die>(lParam); ulong uMurderID = cmdDie.uMurderID; m_pFSM.SetAnimatorTrigger("BreakAttack"); m_pFSM.SetAnimatorBool("isDead", true); m_pFSM.AnimatorPlay("Dead"); m_pFSM.outLineCount = m_pFSM.outLineCount - 1; m_pFSM.setHightLight(false); //关闭死亡时要求关闭的光效 LightingEffectManager light = m_pFSM.GetComponent <LightingEffectManager>(); if (light) { light.CloseLightingWhenDead(); } ////暂时让角色死亡不让射线检测该层 //nOldLayer = m_pFSM.gameObject.layer; //GameUtil.SetLayer(LayerMask.NameToLayer(Config.LayerNeutrality), m_pFSM.gameObject, true); //if (m_pFSM.SkinConfig) //{ // if (m_pFSM.SkinConfig.ScreenCastObject) // { // m_pFSM.SkinConfig.ScreenCastObject.layer = LayerMask.NameToLayer(Config.LayerPlayerFriend); // } //} //else //{ // Debug.Log(m_pFSM.entityID.ToString()); //} if (m_pFSM.SkinConfig != null && m_pFSM.SkinConfig.ColliderShape != null) { m_pFSM.SkinConfig.ColliderShape.enabled = false; } m_pFSM.pickableCount--; //GfxBloodManager.OnEntityDead(m_pFSM.entityID,ENTITY_TYPE.TYPE_MONSTER); USpeedUI.Blood.UBloodManager.Instance.OnEntityDead(m_pFSM.entityID, ENTITY_TYPE.TYPE_MONSTER); //TopNameManager.OnEntityDead(m_pFSM.entityID, ENTITY_TYPE.TYPE_MONSTER); isOnThisState = true; MaxDeadTimeCounter = 0.0f; int nEntityID = m_pFSM.entityID; U3D_Render.EntityView ev = EntityFactory.getMonsterViewByID(nEntityID); addMonsterEffect(ev, uMurderID); //死亡通知引导,死亡时间不确定,目前只想到在这硬编码了 if (ev.CampFlag == SPELL.CampFlag.CampFlag_Enemy && ev.Type == ENTITY_TYPE.TYPE_MONSTER && ev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SEX) == (int)MONSTER_TYPE.MONSTER_TYPE_TOWER) { GUIDE.GuideManager.Instance.SetBBValue(GUIDE.EGuideBBKey.DeadEntityID, ev.ID); } if (ev != null) { MapFinderManager.RemoveObject(ref ev); } return(true); }
public void SetData(UListWarMainModeItem item) { HeadIcon.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_WarMainMode, WndID.WND_ID_WAR_MAIN_FRAME, item.nModeID); if (HeadIcon.sprite == null) { HeadIcon.gameObject.SetActive(false); } else { HeadIcon.gameObject.SetActive(true); } RankInvalidFrame.gameObject.SetActive(false); RankFrame.gameObject.SetActive(false); RankTipBtn.gameObject.SetActive(false); RankStarFrame.gameObject.SetActive(false); if (item.nModeID == (int)EWarModeDef.MODE_RankVS) { RankTipBtn.gameObject.SetActive(true); // 自己是否有排位信息 int nMatchType = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MATCHTYPE); int nRankScore = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKSCORE); int nRankGrade = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKGRADE); int nRankIconID = GameLogicAPI.getRankIconIDByGrade(nMatchType, nRankGrade); int nRankStar = GameLogicAPI.getActorRankStar(nMatchType, nRankScore); int nMaxRankStar = GameLogicAPI.getActorCurRankMaxStar(nMatchType, nRankScore); IntPtr ptr = GameLogicAPI.getActorRankNameByGrade(nMatchType, nRankGrade); string strRankName = ""; if (ptr != IntPtr.Zero) { strRankName = IntPtrHelper.Ptr2Str(ptr); } RankImg.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_RankImage, WndID.WND_ID_WAR_MAIN_FRAME, 1, nRankIconID); if (RankImg.sprite == null || nRankScore <= 0) { RankInvalidFrame.gameObject.SetActive(true); RankFrame.gameObject.SetActive(false); } else { RankStarFrame.gameObject.SetActive(true); for (int index = 0; index < RankStarFrame.childCount; ++index) { if (nRankStar > 0) { RankStarFrame.GetChild(index).GetComponent <Image>().sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_RankStarImage, WndID.WND_ID_WAR_MAIN_FRAME, 2); nRankStar--; nMaxRankStar--; } else if (nMaxRankStar > 0) { RankStarFrame.GetChild(index).GetComponent <Image>().sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_RankStarImage, WndID.WND_ID_WAR_MAIN_FRAME, 1); nMaxRankStar--; } else { RankStarFrame.GetChild(index).GetComponent <Image>().gameObject.SetActive(false); } } RankInvalidFrame.gameObject.SetActive(false); RankFrame.gameObject.SetActive(true); // 设置胜场 胜率 段位描述 星级 ActorPlayerInfo info = LogicDataCenter.playerSystemDataManager.GetActorPlayerInfo(); int WinRate = info.playerInfo.nRankMatchNum > 0? (info.playerInfo.nRankWinNum * 100 / info.playerInfo.nRankMatchNum): 0; RankDetailDes.text = String.Format("{0}:", ULocalizationService.Instance.Get("UIView", "WarStatistic", "MapWinCount")) + info.playerInfo.nRankWinNum + " " + String.Format("{0}:", ULocalizationService.Instance.Get("UIView", "WarStatistic", "MapWinRate")) + WinRate + "%"; RankGradeDes.text = strRankName; RankScore.text = "" + nRankScore; if (m_RankEffectParam != null) { UEffectManager.Instance.DestroyEffect(UEffectType.UET_EffectPrefab, ref m_RankEffectParam); m_RankEffectParam = null; } int nOffset = info.playerInfo.nRankIconID - 1; if (nOffset >= 0) { UEffectParamBase param = new UEffectPrefabParam(_eType: UEffectPrefabType.UEPT_WarMain_RankEffect1 + nOffset, _tfAttachParent: this.RankImg.transform); UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectPrefab, ref param); m_RankEffectParam = param; UEffectPrefabParam paramPrefab = (UEffectPrefabParam)param; paramPrefab.EffectGameObject.transform.SetAsFirstSibling(); } } } // 隐藏模式详细描述 以及 图片 ModeDesText.text = item.strModeDesc; ModeDesText.gameObject.SetActive(false); // 设置tooltip //m_tooltip = this.gameObject.AddComponent<UTooltipTrigger>(ETooltipStyle.ETS_Default); //if (m_tooltip) //{ // string stTitleDesc = item.strModeTooltip; // UBB.toHtml(ref stTitleDesc, UBB_FORMAT_TYPE.UGUI); // m_tooltip.SetText(UTooltipParamName.BodyText, "<color=#FFFFFFFF><size=20>" + stTitleDesc + "</size></color>"); // m_tooltip.tipPosition = TipPosition.MouseTopRightCorner; // m_tooltip.backgroundTint.a = 0; //} if (m_OpenEffectParam != null) { UEffectManager.Instance.DestroyEffect(UEffectType.UET_EffectPrefab, ref m_OpenEffectParam); m_OpenEffectParam = null; } if (item.bOpenEffect) { UEffectParamBase param = new UEffectPrefabParam(_eType: UEffectPrefabType.UEPT_WarMain_CanJoinEffect, _tfAttachParent: this.HeadIcon.transform); UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectPrefab, ref param); m_OpenEffectParam = param; UEffectPrefabParam paramPrefab = (UEffectPrefabParam)param; paramPrefab.EffectGameObject.transform.SetAsFirstSibling(); } ItemData = item; #region 新手引导部分 if (!item.bUseGuideWidget) { gameObject.RemoveComponent <Guide.UGuideWidget>(); } else { Guide.UGuideWidget guideWidget = gameObject.GetComponent <Guide.UGuideWidget>(); if (guideWidget == null) { guideWidget = this.gameObject.AddComponent <Guide.UGuideWidget>(); } guideWidget.GuideID = (GUIDE.EGuideNodeID)item.GuideWidgetData.nGuideID; guideWidget.GuideStepID = item.GuideWidgetData.nGuideStepID; guideWidget.GuideEffectID = item.GuideWidgetData.nGuideEffectID; guideWidget.IsForceGuide = item.GuideWidgetData.bForeceGuide; } #endregion }
private void DebugEntityInfo(int _nScreenWidth, int _nScreenHeight) { if (!CheckVisible(EPreframeArea.EPA_Entity)) { return; } if (InputManager.GetMouseButtonUp(0)) { RaycastHit hit; Ray ray = Initialize.mainCam.ScreenPointToRay(InputManager.MousePosition); if (Physics.Raycast(ray, out hit, 100, bDebugScreenRayCastLayer)) { BaseStateMachine bs = hit.transform.GetComponentInParent <BaseStateMachine>(); if (bs) { Debug_CurrentSelectEntity = EntityFactory.getEntityViewByID(bs.entityID); // 请求指定实体的属性值 if (curUid == bs.entityID) { return; } curUid = bs.entityID; cmd_Entity_Property_Prefamce_Req data = new cmd_Entity_Property_Prefamce_Req(); data.uidReq = (uint)curUid; IntPtrHelper helper = new IntPtrHelper(); IntPtr ptr = helper.toPtr <cmd_Entity_Property_Prefamce_Req>(ref data); int len = Marshal.SizeOf(data); GameLogicAPI.onEntityEvent(EntityFactory.MainHeroID, (int)EntityLogicDef.ENTITY_CMD_ENTITY_PROPERTY_DRAGONBALL, len, "", ptr, len); } } } string str_id = "-"; string str_name = "-"; string str_clientpos = "-"; string str_serverpos = "-"; string str_state = "-"; string Gravity = ""; string SyncVectory = ""; string SyncPosition = ""; string SkinID = ""; string strSkinInstance = ""; string VisibleState = ""; string MaskValue = ""; string LayerName = ""; if (null != Debug_CurrentSelectEntity) { if (Debug_CurrentSelectEntity.StateMachine) { //打开请求服务器位置开关 Debug_CurrentSelectEntity.StateMachine.requestServerPos = true; str_id = Debug_CurrentSelectEntity.ID.ToString(); if (null != Debug_CurrentSelectEntity.Property) { str_id += "[" + Debug_CurrentSelectEntity.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_ID).ToString() + "]"; } str_name = Debug_CurrentSelectEntity.Property.CreatureName; str_clientpos = Debug_CurrentSelectEntity.StateMachine.creature.position.ToString(); str_state = Debug_CurrentSelectEntity.StateMachine.GetState().ToString(); str_serverpos = Debug_CurrentSelectEntity.StateMachine.ServerPos.ToString(); CreatureStateMachine csm = Debug_CurrentSelectEntity.StateMachine as CreatureStateMachine; if (csm) { SyncVectory = csm.syncVelocity.ToString(); SyncPosition = csm.syncPosition.ToString(); } Gravity = Debug_CurrentSelectEntity.StateMachine.currentGravity.ToString(); VisibleState = "OnView:\n" + Debug_CurrentSelectEntity.StateMachine.m_OnViewVisible + "\n" + "MaskVisible:" + Debug_CurrentSelectEntity.StateMachine.m_MaskVisible; SkinID = SkinID = Debug_CurrentSelectEntity.StateMachine.SkinControl.currentSkinId.ToString(); strSkinInstance = "No SkinInstance"; if (Debug_CurrentSelectEntity.StateMachine.SkinControl.CurrentSkinInstance != null) { strSkinInstance = Debug_CurrentSelectEntity.StateMachine.SkinControl.CurrentSkinInstance.nSkinID.ToString(); } MaskValue = Debug_CurrentSelectEntity.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MASK).ToString(); LayerName = LayerMask.LayerToName(Debug_CurrentSelectEntity.gameObject.layer); } } string EntityMessageText; EntityMessageText = EntityFormatText("实体调试信息:", " ") + EntityFormatText("ID:", str_id) + EntityFormatText("Name:", str_name) + EntityFormatText("ClientPos:", str_clientpos) + EntityFormatText("ServerPos:", str_serverpos) + EntityFormatText("CurrentState:", str_state) + EntityFormatText("攻击力:", str_pa) + EntityFormatText("生命值:", str_hp) + EntityFormatText("护甲值:", str_pd) + EntityFormatText("魔抗值:", str_md) + EntityFormatText("重力速度:", Gravity) + EntityFormatText("SyncVectory:", SyncVectory) + EntityFormatText("SyncPosition:", SyncPosition) + EntityFormatText("SkinID:", SkinID) + EntityFormatText("SkinInstance:", strSkinInstance) + EntityFormatText("VisibleState:", VisibleState) + EntityFormatText("MaskValue:", MaskValue) + EntityFormatText("LayerName:", LayerName); DebugMessageTemplate(EPreframeArea.EPA_Entity, EntityMessageText, new Rect(_nScreenWidth - _nScreenWidth * 0.2f - 10, 10, _nScreenWidth * 0.2f, _nScreenHeight)); }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_COMMOM_STATICGAMESTATE_ENTER: { LoadView(); } break; case WndMsgID.WND_MSG_MSTCHTIMEINFO_SHOW: { if (m_wndView == null) { return; } UIMsgCmdData cmdData = (UIMsgCmdData)msgData; cmd_add_match_info data = IntPtrHelper.toData <cmd_add_match_info>(cmdData.ptrParam); LogicDataCenter.viewPersonStateDataManager.bIsMatching = true; m_wndView.SetVisible(true); m_wndView.StartTimer((int)EN_MatchInfo_Timer.ENMT_UsedTimer, data); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_LeftTimer); } break; case WndMsgID.WND_MSG_ACCEPTWAIT_SHOW: { if (m_wndView == null) { return; } m_wndView.SetVisible(false); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_UsedTimer); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_LeftTimer); } break; case WndMsgID.WND_MSG_MSTCHTIMEINFO_HIDE: { LogicDataCenter.viewPersonStateDataManager.bIsMatching = false; if (m_wndView == null) { return; } m_wndView.SetVisible(false); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_UsedTimer); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_LeftTimer); } break; case WndMsgID.WND_MSG_MSTCHTIMEINFO_CUR_MATCH_PLAYER_COUNT: { if (!LogicDataCenter.viewPersonStateDataManager.bIsMatching) { return; } if (m_wndView == null) { return; } // 显示玩家人数倒计时间 UIMsgCmdData cmdData = (UIMsgCmdData)msgData; cmd_match_cur_player_count data = IntPtrHelper.toData <cmd_match_cur_player_count>(cmdData.ptrParam); m_wndView.UpdateCurPlayerCount(data.nCurCount, data.nMaxCount, data.nLeftTime); } break; case WndMsgID.WND_MSG_COMMOM_MATCHROOMSTATE_ENTER: { LogicDataCenter.viewPersonStateDataManager.bIsMatching = false; if (m_wndView == null) { return; } m_wndView.SetVisible(false); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_UsedTimer); m_wndView.KillTimer((int)EN_MatchInfo_Timer.ENMT_LeftTimer); UnloadView(); } break; case WndMsgID.WND_MSG_MSTCHTIMEINFO_RETURN_MATCH_SHOW: { if (m_wndView == null) { return; } m_wndView.SetReturnMatchState(); m_wndView.SetVisible(true); } break; case WndMsgID.WND_MSG_MSTCHTIMEINFO_RETURN_MATCH_HIDE: { if (m_wndView == null) { return; } m_wndView.SetVisible(false); } break; #region 新手引导部分 case WndMsgID.WND_MSG_MSTCHIIMEINFO_GUIDE_ACTIONBEGIN: { if (m_wndView != null) { m_wndView.GuideActionBegin(); } } break; case WndMsgID.WND_MSG_MSTCHIIMEINFO_GUIDE_ACTIONEND: { if (m_wndView != null) { m_wndView.GuideActionEnd(); } } break; #endregion default: break; } }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_TEAMRIGHT_INITMYTEAMDATA: { // 这个消息无用 以后处理掉一系列消息和结构 //return; //if (m_wndView == null) //{ // return; //} //UIMsgCmdData uiTeamRight = (UIMsgCmdData)msgData; //InitMyTeamRightToShow(uiTeamRight.ptrParam, uiTeamRight.nPtrLen); } break; case WndMsgID.WND_MSG_COMMON_BATTLESTATE_ENTER: { this.SetVisible(true); } break; case WndMsgID.WND_MSG_COMMOM_WARHEROMAXSKILLSTATE: { if (m_wndView == null) { return; } UIMsgCmdData uiMaxSkillData = (UIMsgCmdData)msgData; cmd_player_skill_state data = IntPtrHelper.toData <cmd_player_skill_state>(uiMaxSkillData.ptrParam); SetMyTeamSkillIcon(data); } break; case WndMsgID.WND_MSG_TEAMRIGHT_INITMYTEAMUID: { UIMsgCmdData uiUIDData = (UIMsgCmdData)msgData; SaveUIDAndPBUID(uiUIDData.ptrParam, uiUIDData.nPtrLen); } break; case WndMsgID.WND_MSG_COMMON_WAREND: case WndMsgID.WND_MSG_COMMON_BATTLESTATE_LEAVE: { this.UnloadView(); LogicDataCenter.recordTableDataManager.m_bUpdateTeamInfo = true; } break; case WndMsgID.WND_MSG_WAR_XPSKILL_SET_XP_SKILL_SELF: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; cmd_creature_ShowPromptUI data = IntPtrHelper.toData <cmd_creature_ShowPromptUI>(uiData.ptrParam); SetXpSkillFireEffect(data); } break; case WndMsgID.WND_MSG_WAR_XPSKILL_SET_XP_SKILL_OTHER: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; cmd_creature_ShowPromptUI data = IntPtrHelper.toData <cmd_creature_ShowPromptUI>(uiData.ptrParam); SetXpSkillFireEffect(data); } break; case WndMsgID.WND_MSG_TEAMMATEINFO_UPDATETEAMINFO: { if (m_wndView == null) { return; } UpdateTeamRightViewToShow(); } break; case WndMsgID.WND_MSG_WARRELIVETIME_SHOWRELIVETIME: { UIWarShowReliveTimeData data = msgData as UIWarShowReliveTimeData; if (m_wndView == null) { return; } ShowTeamReliveTime(data.uid, data.nReliveTime); } break; default: break; } }
public void SetSkillMPEffect(UIMsgCmdData uiMpEffectData) { cmd_creature_mp_effect_spell data = IntPtrHelper.toData <cmd_creature_mp_effect_spell>(uiMpEffectData.ptrParam); SetMpEffectSpell(data); }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_COMMOM_STATICGAMESTATE_ENTER: { this.SetVisible(true); } break; case WndMsgID.WND_MSG_COMMOM_STATICGAMESTATE_LEAVE: { this.SetVisible(false); } break; case WndMsgID.WND_MSG_COMMON_BATTLESTATE_LEAVE: { if (m_wndView == null) { this.LoadView(); AddlistenerMessage(); } } break; case WndMsgID.WND_MSG_COMMON_LOGINMOBA: { this.UnloadView(); RemovelistenerMessage(); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLSETSLOT: { if (m_wndView == null) { return; } UIMsgCmdData uiSkillSlot = (UIMsgCmdData)msgData; cmd_creature_set_slot data = IntPtrHelper.toData <cmd_creature_set_slot>(uiSkillSlot.ptrParam); SetSpellSlot(data); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLEFFECT: { if (m_wndView == null) { return; } UIMsgCmdData uiSpellEffect = (UIMsgCmdData)msgData; cmd_creature_set_slot data = IntPtrHelper.toData <cmd_creature_set_slot>(uiSpellEffect.ptrParam); if (data.nSlotType == SLOT_TYPE.SLOT_TYPE_SKILL) { SetSpellSlotEffect(data); } else if (data.nSlotType == SLOT_TYPE.SLOT_TYPE_GOODS) { // SetPurchasedGoodsUseEffect(data); // SetPurchasedGoodsCanDragDrop(data); } } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLOVEREFFECT: { if (m_wndView == null) { return; } UIMsgCmdData uiSpellOverEffect = (UIMsgCmdData)msgData; cmd_set_spell_overlay data = IntPtrHelper.toData <cmd_set_spell_overlay>(uiSpellOverEffect.ptrParam); SetSpellSlotFlagEffect(data); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SETSHORTCUT: { if (m_wndView == null) { return; } UIMsgCmdData uiShortCutData = (UIMsgCmdData)msgData; SetSlotShortcutString(uiShortCutData.nParam, uiShortCutData.nPtrLen, uiShortCutData.strParam); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLMPEFFECT: { if (m_wndView == null) { return; } UIMsgCmdData uiMpEffectData = (UIMsgCmdData)msgData; cmd_creature_mp_effect_spell data = IntPtrHelper.toData <cmd_creature_mp_effect_spell>(uiMpEffectData.ptrParam); SetMpEffectSpell(data); } break; default: break; } }
private void forceFlight() { uint tick = GameLogicAPI.getTickCount(); if (m_uResidenceStopTick > 0 && m_uResidenceStopTick > tick) { return; } m_fFlightTime += Time.deltaTime; float newVel; float hight; if (m_fFlightVel > 0.0f) { newVel = m_fFlightV0 - (m_pFSM.currentGravity + upAcc) * m_fFlightTime; hight = m_fFlightV0 * m_fFlightTime - (m_pFSM.currentGravity + upAcc) * m_fFlightTime * m_fFlightTime / 2.0f; if (newVel <= 0.0f) { //上升结束,下降计时清0,开始浮空计时 m_uResidenceStopTick = tick + m_uResidenceTick; m_fFlightDownTime = 0.0f; { //如果没触地,则要一直掉落到地面 Vector3 pos = m_pFSM.transform.position + new Vector3(0, 0.1f, 0); int LayerMaskOnGround = (1 << LayerMask.NameToLayer(Config.LayerDefault)) | (1 << LayerMask.NameToLayer(Config.LayerBuilding)); RaycastHit hitInfo; Ray PointToGroundRay = new Ray(pos, new Vector3(0, -1, 0)); Physics.Raycast(PointToGroundRay, out hitInfo, 100, LayerMaskOnGround); if (Mathf.Abs(hitInfo.point.y - pos.y) > m_pFSM.controller.height + 0.6f) { isGounded = false; m_pFSM.groundNormal = Vector3.zero; } } } CollisionFlags collision = CollisionFlags.None; //if (m_fForceMoveSpeed.sqrMagnitude < 0.0001f) //{ // Vector3 newOffset = new Vector3(m_flightStartPosition.x, m_flightStartPosition.y + hight, m_flightStartPosition.z); // newOffset = newOffset - m_pFSM.transform.position; // collision=m_pFSM.controller.Move(newOffset); 2017-02-15 击退和击飞叠加时,m_flightEndPosition不是击退后的位置,所以不能这么移动 //} //else { Vector3 newOffset = new Vector3(m_pFSM.transform.position.x, m_flightStartPosition.y + hight, m_pFSM.transform.position.z); newOffset = newOffset - m_pFSM.transform.position; collision = m_pFSM.controller.Move(newOffset); } if (0 != (collision & CollisionFlags.Above)) { //touch ceiling m_uResidenceStopTick = tick + m_uResidenceTick; m_fFlightDownTime = 0.0f; newVel = 0.0f; } } else { m_fFlightDownTime += Time.deltaTime; newVel = 0 - (m_pFSM.currentGravity + downAcc) * m_fFlightDownTime; hight = m_fFlightHeight - (m_pFSM.currentGravity + downAcc) * m_fFlightDownTime * m_fFlightDownTime / 2.0f; CollisionFlags collision = CollisionFlags.None; //if (m_fForceMoveSpeed.sqrMagnitude < 0.0001f) //{ // Vector3 newOffset = new Vector3(m_flightStartPosition.x, m_flightEndPosition.y + hight, m_flightStartPosition.z); // newOffset = newOffset - m_pFSM.transform.position; // collision = m_pFSM.controller.Move(newOffset); 2017-02-15 击退和击飞叠加时,m_flightEndPosition不是击退后的位置,所以不能这么移动 //} //else { Vector3 newOffset = new Vector3(m_pFSM.transform.position.x, m_flightEndPosition.y + hight, m_pFSM.transform.position.z); newOffset = newOffset - m_pFSM.transform.position; collision = m_pFSM.controller.Move(newOffset); } if (0 != (collision & CollisionFlags.Below)) { //touch floor m_flightEndPosition.y = m_pFSM.transform.position.y; } } m_fFlightVel = newVel; bool isEnd = false; if (!isGounded) { if (m_pFSM.groundNormal.y > 0.01f) { isGounded = true; isEnd = true; } } else { if (m_pFSM.transform.position.y <= m_flightEndPosition.y) { isEnd = true; } } if (m_fFlightVel < 0.0f && isEnd) //已经落到底了 { bForceFlighting = false; //if (!bForceMoving) //如果还有强制位移的话,还要继续强制位移 //{ // Vector3 newOffset = m_flightEndPosition; // newOffset = newOffset - m_pFSM.transform.position; // m_pFSM.controller.Move(newOffset); 2017-02-15 击退和击飞叠加时,m_flightEndPosition不是击退后的位置,所以不能这么移动 //} if (m_pFSM.isHero) { float fallHeight = m_flightStartPosition.y - m_pFSM.transform.position.y; if (fallHeight > 5.0f) //着陆时落差大于5米,则上报逻辑层 { cmd_creature_act_landspeed data = new cmd_creature_act_landspeed(); //data.fValue = landingSpeed; data.fValue = fallHeight; IntPtrHelper helper = new IntPtrHelper(); int len = Marshal.SizeOf(data); IntPtr ptr = helper.toPtr <cmd_creature_act_landspeed>(ref data); int eventID = (int)EntityLogicDef.ENTITY_CMD_LANDING_SPEED; GameLogicAPI.onEntityEvent(m_pFSM.entityID, eventID, len, "", ptr, len); if (m_pFSM.showLog) { Trace.Log("Big Landing! fallHeight=" + fallHeight.ToString()); } } } //冲锋完成后向逻辑层回报一次同步,请根据需求取舍 //syncVelocity = Vector3.zero; //syncDetalTime = 0; //syncPosition = transform.position; //m_CurStateHandler.Send_Sync_Position(); } }
/// <summary> /// SendMessage /// </summary> /// <param name="hwnd"></param> /// <param name="msg"></param> /// <param name="wparam"></param> /// <param name="lparam"></param> /// <returns></returns> public static int PostMessage(IntPtrHelper hwnd, IntHelper msg, IntHelper wparam, IntHelper lparam) { return(PostMessageE(hwnd.Value, msg.Value, wparam.Value, lparam.Value)); }
private bool m_autoMoveNavModeFollow = false; //自动寻路启用了转镜头跟随 public void AutoMoveTo(Vector3 targetPos, bool isFloating, bool rotateCamera = true) { //已经在控制走路的就不寻路了 if (m_pFSM.inputMoveDirection.sqrMagnitude > 0.001f) { return; } if (m_pFSM.getEntityState() == EntityState.Dead) { return; } //强制位移时不自动寻路 if (m_pFSM.animatorCtrl.bDoingAttackMove || bForceMoving || bForceFlighting) { return; } //根据目标点寻路,获得寻路结果 cmd_map_findpath pathData = new cmd_map_findpath(); cmd_map_findpath pathData2 = new cmd_map_findpath(); pathData2.pathcnt = 0; float[] startPoint = new float[3]; Vector3 startPos = m_pFSM.transform.position; if (isFloating) { startPos = ProjectToFloor(startPos); } startPoint[0] = startPos.x; startPoint[1] = startPos.y; startPoint[2] = startPos.z; pathData.start = startPoint; float[] endPoint = new float[3]; endPoint[0] = targetPos.x; endPoint[1] = targetPos.y; endPoint[2] = targetPos.z; pathData.end = endPoint; IntPtrHelper helper = new IntPtrHelper(); IntPtr ptr = helper.toPtr <cmd_map_findpath>(ref pathData); if (!GameLogicAPI.findPath(ptr)) { return; } if (m_pFSM.showLog) { Trace.Log("AutoMove From" + m_pFSM.transform.position.ToString() + " To " + targetPos.ToString()); } pathData = IntPtrHelper.toData <cmd_map_findpath>(ptr); if (pathData.pathcnt > 0) { if (pathData.path.Length < (pathData.pathcnt - 1) * 3 || pathData.path.Length < (pathData.pathcnt - 1) * 3 + 1 || pathData.path.Length < (pathData.pathcnt - 1) * 3 + 2) { Debug.LogError("寻路长度不合法"); return; } Vector3 lastPoint = new Vector3(pathData.path[(pathData.pathcnt - 1) * 3], pathData.path[(pathData.pathcnt - 1) * 3 + 1], pathData.path[(pathData.pathcnt - 1) * 3 + 2]); int pointLen = pathData.pathcnt; if (isFloating) { pointLen++; } //如果到不到终点,强行寻路多一遍。。。 else if ((targetPos - lastPoint).sqrMagnitude > 0.1f) { startPos = ProjectToFloor(lastPoint + (targetPos - lastPoint).normalized * 2.0f); startPoint[0] = startPos.x; startPoint[1] = startPos.y; startPoint[2] = startPos.z; pathData2.start = startPoint; pathData2.end = endPoint; IntPtrHelper helper2 = new IntPtrHelper(); IntPtr ptr2 = helper.toPtr <cmd_map_findpath>(ref pathData2); if (GameLogicAPI.findPath(ptr2)) { pathData2 = IntPtrHelper.toData <cmd_map_findpath>(ptr); if (pathData2.path.Length < (pathData2.pathcnt - 1) * 3 || pathData2.path.Length < (pathData2.pathcnt - 1) * 3 + 1 || pathData2.path.Length < (pathData2.pathcnt - 1) * 3 + 2) { Debug.LogError("寻路长度不合法"); return; } pointLen += pathData2.pathcnt; } } autoMovePathPoint = new Vector3[pointLen]; for (int i = 0; i < pathData.pathcnt; i++) { autoMovePathPoint[i] = new Vector3(pathData.path[i * 3], pathData.path[i * 3 + 1], pathData.path[i * 3 + 2]); if (m_pFSM.showLog) { Trace.Log("Path Point" + autoMovePathPoint[i].ToString()); } } for (int i = 0; i < pathData2.pathcnt; i++) { autoMovePathPoint[i + pathData.pathcnt] = new Vector3(pathData2.path[i * 3], pathData2.path[i * 3 + 1], pathData2.path[i * 3 + 2]); if (m_pFSM.showLog) { Trace.Log("Path Point" + autoMovePathPoint[i + pathData.pathcnt].ToString()); } } if (isFloating) { autoMovePathPoint[pointLen - 1] = targetPos; } autoMovePathPointIndex = 0; lastTurnPoint = m_pFSM.transform.position; lastAutoMovePoint = m_pFSM.transform.position; isAutoMoving = true; autoMoveTarget = targetPos; Vector3 deta = autoMovePathPoint[0] - m_pFSM.transform.position; if (deta.sqrMagnitude < 0.25f) //太近了就不要转向了。因为在跑动中连续点寻路有时候会后退一个路点 { autoMovePathPoint[0] = m_pFSM.transform.position; } //if (showLog) //{ // Trace.Log("Tick=" + GameLogicAPI.getTickCount() + " autoMove from " + transform.position + " to " + autoMovePathPoint[0]); //} } if (rotateCamera && !m_autoMoveNavModeFollow) { Vector3 targetDir = targetPos - m_pFSM.transform.position; targetDir.Normalize(); Vector3 cameraProjDir = Vector3.Cross(Initialize.mainCam.transform.right.normalized, m_pFSM.transform.up.normalized); //摄像机方向投影到人物平面上 //需要在确定目标后,进行一个判断,如果位置方向与镜头方向的夹角小于45度,就不会进行转动镜头的操作,而是直接在现有镜头下寻路并到点进行攻击 if (Vector3.Dot(targetDir, cameraProjDir) < 0.707) { SoldierCamera.MainInstance <SoldierCamera>().enterNavMode(CameraNavMode.Follow, null, Vector3.zero); m_autoMoveNavModeFollow = true; } } Vector3 distance = targetPos - m_pFSM.transform.position; if (distance.sqrMagnitude > 225.0f) //小于15的头顶不提示 { enableAutoMoveEffect(true); } }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_COMMON_LOGINSTATE_ENTER: { SetVisible(false); if (m_wndView != null) { m_wndView.clearAllMsgData(); } } break; case WndMsgID.WND_MSG_COMMOM_STATICGAMESTATE_ENTER: { SetVisible(true); if (m_wndView != null) { m_wndView.OnEnter(ChatBoxState.StaticState); } } break; case WndMsgID.WND_MSG_COMMOM_STATICGAMESTATE_LEAVE: { if (m_wndView != null) { m_wndView.OnLeave(ChatBoxState.StaticState); } } break; case WndMsgID.WND_ID_GAMEWAITINGROOMVIEW_ENTERROOM: { SetVisible(true); if (m_wndView != null) { UIMsgCmdData uiRoomConfirm = (UIMsgCmdData)msgData; cmd_match_hall_add_room data = IntPtrHelper.toData <cmd_match_hall_add_room>(uiRoomConfirm.ptrParam); m_wndView.RoomMatchType = data.nMatchTypeID; m_wndView.OnEnter(ChatBoxState.RoomState); } } break; case WndMsgID.WND_MSG_COMMOM_MATCHROOMSTATE_LEAVE: { if (m_wndView != null) { //if(isEnterWarLoading == false) { m_wndView.OnLeave(ChatBoxState.RoomState); } //if(isEnterWarLoading) //{ // m_wndView.OnEnter(ChatBoxState.WarLoadingState); // isEnterWarLoading = false; //} } } break; case WndMsgID.WND_MSG_COMMON_LOGINMOBA: { // 因为WND_MSG_COMMON_LOGINMOBA比WND_MSG_COMMOM_MATCHROOMSTATE_LEAVE更早,所以用这种方式 isEnterWarLoading = true; if (m_wndView != null) { m_wndView.OnEnter(ChatBoxState.WarLoadingState); } } break; case WndMsgID.WND_MSG_COMMON_BATTLESTATE_ENTER: { SetVisible(true); if (m_wndView != null) { m_wndView.OnEnter(ChatBoxState.WarState); } } break; case WndMsgID.WND_MSG_COMMON_BATTLESTATE_LEAVE: { if (m_wndView != null) { m_wndView.OnLeave(ChatBoxState.WarState); } } break; case WndMsgID.WND_MSG_CHATBOX_UPDATEMESSAGE: { if (m_wndView != null) { m_wndView.OnChatMessageUpdate(); } } break; case WndMsgID.WND_MSG_CHATBOX_CHANGECHANNEL: { ChatBoxChangeChannelData data = msgData as ChatBoxChangeChannelData; if (m_wndView != null) { m_wndView.ChangeChannel(data.channel); } } break; case WndMsgID.WND_MSG_CHATBOX_INPUTFIELDADDITEM: { if (m_wndView != null) { m_wndView.OnInputfieldAddItem(msgData as ChatBoxAddInputFieldItemData); } } break; case WndMsgID.WND_MSG_CHATBOX_CONDITIONHIDE: { if (m_wndView != null) { m_wndView.SetForceConditionHide(msgData as ChatForceConditionHide); } } break; case WndMsgID.WND_MSG_CHATBOX_CHANGEIME: { if (m_wndView != null) { m_wndView.ChangeIme(msgData as ChatBoxChangeImeData); } } break; case WndMsgID.WND_MSG_CHATBOX_PRIVATECHAT: { if (m_wndView != null) { m_wndView.selectPrivateChat(msgData as ChatBoxPrivateChat); } } break; case WndMsgID.WND_MSG_CHATBOX_MOVEPOSUP: { if (m_wndView != null) { m_wndView.SetChatWndViewPositionChange(ChatPositionChangeType.CPCY_MOVEUP); } } break; case WndMsgID.WND_MSG_CHATBOX_MOVEPOSDOWN: { if (m_wndView != null) { m_wndView.SetChatWndViewPositionChange(ChatPositionChangeType.CPCY_MOVEDOWN); } } break; case WndMsgID.WND_MSG_CHATBOX_CLOSEEMOTICONPANEL: { if (m_wndView != null) { m_wndView.CloseEmoticonPanel(); } } break; case WndMsgID.WND_MSG_CHATBOX_UPDATELOCKSTATE: { if (m_wndView != null) { m_wndView.UpdateEmoticonGroupLockState(msgData as UChatEmoticonGroupState); } } break; case WndMsgID.WND_MSG_COMMON_UPDATE_MAIN_HERO_VOCATION: { if (m_wndView != null) { m_wndView.SetFpsSwitchHint(((OperationType)msgData).operationType); } } break; case WndMsgID.WND_MSG_COMMON_POPUPWND_VISIBLE: { if (m_wndView != null) { m_wndView.onPopWndVisible(msgData as UCommonPopupWndVisible); } } break; case WndMsgID.WND_MSG_COMMON_FULLWND_VISIBLE: { if (m_wndView != null) { m_wndView.onFullWndVisible(msgData as UCommonFullWndVisible); } } break; case WndMsgID.WND_MSG_CHATBOX_TOGGLE: { if (m_wndView != null) { m_wndView.ToggleHideWindow(); } } break; case WndMsgID.WND_MSG_CHATBOX_RESETSORTORDER: { if (m_wndView != null) { m_wndView.transform.SetAsLastSibling(); m_wndView.gameObject.SetActive(true); resetAllSortingOrder(); } } break; case WndMsgID.WND_MSG_CHATBOX_SENDCHATMESSAGE: { if (m_wndView != null) { m_wndView.onSendChatMessage(msgData as USendChatMessage); } } break; default: break; } }
/// <summary> /// 创建通用逻辑模块,主场景和战斗场景均使用,依赖配置表,通常情况下需要更新资源后再执行 /// </summary> public IEnumerator CreateEnumerator() { bCreated = false; Type[] types = new Type[] { typeof(AssetSystem), typeof(ShaderLib), typeof(SceneManager), typeof(NatureManager), typeof(WarFogManager), }; CreateModulesAsyn(types); //wait another coroutine finish while (true) { yield return(new WaitForEndOfFrame()); bool bOK = (CreatingModules.Count == 0); if (bOK) { break; } } yield return(new WaitForSeconds(0.1f)); if (!Application.isEditor && System.IO.File.Exists("BreakPoint.txt")) { GameUtil.MsgBox(m_WindowHwnd, "挂断点", "调试", 0); } if (!RenderViewAPI.Start()) { Trace.LogError("Game Start Service failure"); yield break; } Trace.Log("Game Start Service successed"); // 初始化 gameObject.AddComponent <GameViewCommandHandler>(); OnDeviceStateChage += OnDeviceStateChange; // 初始化游戏接口 IntPtrHelper helper = new IntPtrHelper(); //GameLogicAPI.Start(ASpeedGame.Data.GameSettingsXml.GameSettingsXmlManager.Instance.GameSettingsModel.enableMultiThread.AValue, // helper.toPtr(ref RenderViewAPI.g_RenderView)); GameLogicAPI.Start(helper.toPtr(ref RenderViewAPI.g_RenderView)); yield return(new WaitForSeconds(1.0f)); PrintTickCheck("初始化逻辑层API,至少等了1秒", CostThreshold_Lv1, _bStart: true); // 显示层配置价值 ViewConfigManager.Init(); PrintTickCheck("ViewConfigManager.Init"); //资源是要配置初始化 AssetBundleManager.Init(); PrintTickCheck("AssetBundleManager.Init"); LogicDataCenter.Init(); PrintTickCheck("LogicDataCenter.Init"); ImageSetting.Init(); PrintTickCheck("ImageSetting.Init"); ImageEffectManager.API_GameStart(); PrintTickCheck("ImageEffectManager.Init"); //GameViewCommandHandler.Instance.Start(); MouseCursorManager.Instance.InitMouseCursorManager(); PrintTickCheck("MouseCursorManager.Init"); // 初始化实体接口,依赖上面的物件管理器所以顺序不能换 EntityFactory.Init(); PrintTickCheck("EntityFactory.Init"); PrefabManager.Init(); PrintTickCheck("PrefabManager.Init"); SkinManager.Init(); PrintTickCheck("SkinManager.Init"); SoundManager.Init(); PrintTickCheck("SoundManager.Init"); UISystem.Init(); PrintTickCheck("UISystem.Init"); UTopNameManager.Init(); PrintTickCheck("UTopNameManager.Init"); USpeedUI.Blood.UBloodManager.Init(); PrintTickCheck("UBloodManager.Init"); InputManager.Init(); PrintTickCheck("InputManager.Init"); Effect.EffectNode.InitTargetCache(); PrintTickCheck("Effect.EffectNode.InitTargetCache.Init"); GUIDE.GuideManager.Init(); PrintTickCheck(" GUIDE.GuideManager.Init"); SceneEffectManager.Init(); PrintTickCheck("SceneEffectManager.Init"); if (LightingEffectFactory.Instance) { LightingEffectFactory.Instance.InitWhenGameStart(); } PrintTickCheck("LightingEffectFactory.Init"); SafeZoneEffectManager.Init(); PrintTickCheck("SafeZoneEffectManager.Init"); ImageSetting.TraceSettings(); bCreated = true; List <string> argList = new List <string>(); argList.AddRange(System.Environment.GetCommandLineArgs()); CkeckUpdateOk(ref argList); PrintTickCheck("CkeckUpdateOk"); CheckMultclient(); PrintTickCheck("CheckMultclient"); StageManager.Init(); AssetBundleManager.DeleteAssets(ref LoadingWaitngResNode, true); }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_COMMON_BATTLESTATE_ENTER: { this.SetVisible(true); } break; case WndMsgID.WND_MSG_COMMON_WAREND: case WndMsgID.WND_MSG_COMMON_BATTLESTATE_LEAVE: { if (m_wndView == null) { return; } m_wndView.SendChatVisibleMessage(false); this.UnloadView(); ResetData(); } break; case WndMsgID.WND_MSG_COMMON_LOGINMOBA: { bMobaState = true; StartData(); this.SetVisible(true); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLSETSLOT: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiSkillSlot = (UIMsgCmdData)msgData; cmd_creature_set_slot data = IntPtrHelper.toData <cmd_creature_set_slot>(uiSkillSlot.ptrParam); SetSpellSlot(data); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLUPDATE: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiSkillUpdate = (UIMsgCmdData)msgData; cmd_creature_spell_point data = IntPtrHelper.toData <cmd_creature_spell_point>(uiSkillUpdate.ptrParam); m_wndView.SetSpellSlotUpgrade(data); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLEFFECT: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiSpellEffect = (UIMsgCmdData)msgData; cmd_creature_set_slot data = IntPtrHelper.toData <cmd_creature_set_slot>(uiSpellEffect.ptrParam); if (data.nSlotType == SLOT_TYPE.SLOT_TYPE_SKILL) { SetSpellSlotEffect(data); } else if (data.nSlotType == SLOT_TYPE.SLOT_TYPE_GOODS) { SetPurchasedGoodsUseEffect(data); SetPurchasedGoodsCanDragDrop(data); } } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLOVEREFFECT: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiSpellOverEffect = (UIMsgCmdData)msgData; cmd_set_spell_overlay data = IntPtrHelper.toData <cmd_set_spell_overlay>(uiSpellOverEffect.ptrParam); SetSpellSlotFlagEffect(data); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_BUFFINFO: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiBuffData = (UIMsgCmdData)msgData; cmd_creature_setBuff data = IntPtrHelper.toData <cmd_creature_setBuff>(uiBuffData.ptrParam); SetHeroBuff(data); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SETSHORTCUT: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiShortCutData = (UIMsgCmdData)msgData; SetSlotShortcutString(uiShortCutData.nParam, uiShortCutData.nPtrLen, uiShortCutData.strParam); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_SKILLMPEFFECT: { if (m_wndView == null || !bMobaState) { return; } UIMsgCmdData uiMpEffectData = (UIMsgCmdData)msgData; cmd_creature_mp_effect_spell data = IntPtrHelper.toData <cmd_creature_mp_effect_spell>(uiMpEffectData.ptrParam); SetMpEffectSpell(data); } break; case WndMsgID.WND_MSG_WAR_GOODSSTORE_UPDATEMAINPLAYERGOODS: { if (m_wndView == null || !bMobaState) { return; } SetPersonBuyGoodsInfo(); } break; case WndMsgID.WND_MSG_WAR_XPSKILL_SET_XP_SKILL_SELF: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; cmd_creature_ShowPromptUI data = IntPtrHelper.toData <cmd_creature_ShowPromptUI>(uiData.ptrParam); SetXpSkillFireEffect(data); } break; case WndMsgID.WND_ID_HEROTALENTVIEW_LEARNHEROTALENT: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; m_wndView.SetTalentLearnActive(uiData.nParam); } break; case WndMsgID.WND_ID_HEROTALENTVIEW_MAINHEROTALENTCLOSE: { if (m_wndView == null) { return; } m_wndView.CloseWarTalentView(); } break; case WndMsgID.WND_MSG_WARBUTTOMCENTER_WARTALENTBUTTONCLICK: { if (m_wndView != null) { m_wndView.OnWarTalentButtonClick(); } } break; default: break; } }
/// <summary> /// 汇总并排序伤害总量,返回按伤害总量排血的角色ID表 /// </summary> /// <returns></returns> private List <int> SummaryAndSortData() { m_DeathReplayDataList.Clear(); List <int> enemyOrderList = new List <int>(); m_endTime = GameLogicAPI.GetUnityTickCount(); bool tempFlag = true; //先汇总8次承受伤害数据 foreach (HurtDataItem hurtData in m_ActorHurtDataList) { if (m_endTime - hurtData.hurtTime > DamageCalculationsTime) { continue; } if (tempFlag) { //保存符合条件的第一次受伤时间 m_startTime = hurtData.hurtTime; tempFlag = false; } DeathReplayData damageData = new DeathReplayData(); EntityView ev = EntityFactory.getEntityViewByID(hurtData.uidOperator); if (ev == null || ev.Property == null) { continue; } int skinID = ev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SKIN); if (m_DeathReplayDataList.ContainsKey(skinID)) { damageData = m_DeathReplayDataList[skinID]; if (damageData.skillDamageList.ContainsKey(hurtData.skillID)) { damageData.skillDamageList[hurtData.skillID] += hurtData.hurtNum; } else { damageData.skillDamageList.Add(hurtData.skillID, hurtData.hurtNum); } m_DeathReplayDataList[skinID] = damageData; } else { damageData.uidOperator = hurtData.uidOperator; damageData.pdbID = LogicDataCenter.recordTableDataManager.getWarPersonPDBIDByUID(damageData.uidOperator); damageData.skinID = skinID; EntityView view = EntityFactory.getEntityViewByID(Convert.ToInt32(hurtData.uidOperator)); if (view != null && view.Property != null) { damageData.entityType = view.Type; if (view.Type == ENTITY_TYPE.TYPE_MONSTER) { ///////////////////////////////////////////// damageData.monsterID = view.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_ID); } damageData.roleName = view.Property.CreatureName; damageData.skinName = view.Property.CreatureName; if (view.Type == ENTITY_TYPE.TYPE_PLAYER_ROLE) { int heroId = view.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_VOCATION); SSchemeHeroTypeConfig config = HeroTypeConfig.Instance.GetHeroTypeConfig(heroId); if (config != null) { damageData.heroDesc = config.strAgainstWay; } } } WarRecordTableDataManager.WarPlayerVsInfo vsInfo = LogicDataCenter.recordTableDataManager.GetWarPlayerVsInfo(damageData.pdbID); if (null != vsInfo) { damageData.skinName = vsInfo.szVocationName; } damageData.skillDamageList.Add(hurtData.skillID, hurtData.hurtNum); damageData.goodsInfo = LogicDataCenter.warMobaGoodsDataManager.GetPlayerGoodsInfo(damageData.pdbID); damageData.personInfo = LogicDataCenter.recordTableDataManager.getWarPersonInfoByPDBID(damageData.pdbID); m_DeathReplayDataList.Add(skinID, damageData); } } //再排汇总后的敌方角色的技能伤害表 foreach (DeathReplayData data in m_DeathReplayDataList.Values) { foreach (KeyValuePair <int, int> kvp in data.skillDamageList) { SkillDamageItem item = new SkillDamageItem(); item.skillID = kvp.Key; item.damageNum = kvp.Value; IntPtr Ptr = GameLogicAPI.getSpellData(kvp.Key); if (Ptr != IntPtr.Zero) { SPELL.SPELL_DATA spellData = IntPtrHelper.toData <SPELL.SPELL_DATA>(Ptr); item.spellEffectType = spellData.nSpellEffectType; item.skillIcon = spellData.nIcon; IntPtr strPtr = GameLogicAPI.getSpellStrData(kvp.Key, (int)SPELL_DATA_ID.SPDATA_NAME); if (strPtr != null) { item.szSkillName = IntPtrHelper.Ptr2Str(strPtr); } strPtr = GameLogicAPI.getSpellStrData(kvp.Key, (int)SPELL_DATA_ID.SPDATA_DESC); if (strPtr != null) { item.szSkillDesc = IntPtrHelper.Ptr2Str(strPtr); } } //如果是普通攻击 if ((item.spellEffectType & (int)SPELL.SPELL_EFFECT_TYPE.SpellEffectType_NormalAttack) != 0) { //判断表里是否已经有普通攻击了,如果有就直接加值 SkillDamageItem temp = data.skillInfoList.Find(x => (x.spellEffectType & (int)SPELL.SPELL_EFFECT_TYPE.SpellEffectType_NormalAttack) != 0); if (null != temp) { temp.damageNum += item.damageNum; } else { data.skillInfoList.Add(item); } } else { data.skillInfoList.Add(item); } } data.skillInfoList.Sort((x, y) => - x.damageNum.CompareTo(y.damageNum)); } //再排序 var dicSort = from objDic in m_DeathReplayDataList orderby objDic.Value.totalDamage descending select objDic; foreach (KeyValuePair <int, DeathReplayData> kvp in dicSort) { enemyOrderList.Add(kvp.Key); } //返回角色ID表 return(enemyOrderList); }
///// <summary> ///// 死亡前的碰撞层 ///// </summary> //private int nOldCollisionLayer = -1; // 进入状态 public bool OnEnter(IntPtr lParam) { //退出假死状态 if (m_pFSM != null && m_pFSM.animatorCtrl != null) { m_pFSM.animatorCtrl.Dying = false; } Debug.Log("on OnEnter CreaturePosture_Dead " + this.m_pFSM.name); if (m_pFSM.showLog) { Trace.Log(m_pFSM.name + "=======OnEnter CreaturePosture_Dead======"); } cmd_creature_die context = IntPtrHelper.toData <cmd_creature_die>(lParam); if (m_pFSM.showLog) { Trace.Log("DeadInterval:" + context.nDeadInterval); Trace.Log("reborn second:" + context.nInterval); } m_pFSM.rebornTick = context.nInterval - context.nDeadInterval; if (m_pFSM.rebornTick <= 0) { Trace.Log("rebornTick <= 0!"); //return false; 吃鸡地图,这个时差是0,所以先不要返回 } m_nDeadInterval = context.nDeadInterval; //暂时让角色死亡不让射线检测该层 //if (!m_pFSM.isHero) //{ // nOldLayer = m_pFSM.gameObject.layer; // if (m_pFSM.gameObject.layer != LayerMask.NameToLayer(Config.LayerTransparentFX)) // { // GameUtil.SetLayer(LayerMask.NameToLayer(Config.LayerNeutrality), m_pFSM.gameObject, true); // } // //m_pFSM.gameObject.layer = LayerMask.NameToLayer(Config.LayerPlayerFriend); // //if (m_pFSM.SkinConfig.ScreenCastObject != null) // //{ // // m_pFSM.SkinConfig.ScreenCastObject.layer = LayerMask.NameToLayer(Config.LayerPlayerFriend); // //} //} SkillCtrl sk = m_pFSM.GetComponent <SkillCtrl>(); if (sk) { sk.enabled = false; } SoldierController sco = m_pFSM.GetComponent <SoldierController>(); if (sco) { sco.dead = true; } if (m_pFSM.animator) { m_pFSM.animator.SetTrigger("Dead"); m_pFSM.animator.ResetTrigger("Reborn"); } //关闭死亡时要求关闭的光效 LightingEffectManager light = m_pFSM.GetComponent <LightingEffectManager>(); if (light) { light.CloseLightingWhenDead(); } startTick = GameLogicAPI.getSyncTickCount(); // GameLogicAPI.getTickCount(); endTick = startTick + (uint)m_pFSM.rebornTick; tick_cameraSwitchAfterDead = startTick + m_pFSM.cameraSwitchAfterDead; if (m_pFSM.isHero) { //GFxGameHud hud = SFGFxMovieManager.GetWindow<GFxGameHud>(); //if (SFGFxMovieManager.CheckTheMovieCanUse(hud)) //{ // hud.ShowReliveTime(((float)m_pFSM.rebornTick)); //} ScreenREC.GetInstance().SwitchRECState(ScreenREC.EMRECState.EMREC_STOP); //ImageEffects.ImageEffectManager.API_EnableImageEffect<ImageEffects.FullScreenGray>(); if (ImageSetting.GetData().currImageQuality == ImageQuality.Fastest) { LightingEffectFactory.EnableDeadEffect(); ImageEffects.ImageEffectManager.API_DisableImageEffect <ImageEffects.FullScreenSaturation>(); ImageEffects.ImageEffectManager.API_DisableImageEffect <ImageEffects.DepthOfFieldScatter>(); } else { LightingEffectFactory.DisableDeadEffect(); ImageEffects.ImageEffectManager.API_EnableImageEffect <ImageEffects.FullScreenSaturation>(); ImageEffects.ImageEffectManager.API_DisableImageEffect <ImageEffects.DepthOfFieldScatter>(); } } //死亡不碰撞 if (m_pFSM.controller) { //nOldCollisionLayer = m_pFSM.gameObject.layer; //m_pFSM.gameObject.layer = LayerMask.NameToLayer(Config.LayerIngoreRayCast); m_pFSM.pickableCount = 0; } int nEntityID = m_pFSM.entityID; U3D_Render.EntityView ev = EntityFactory.getPlayerViewByID(nEntityID); //添加金币掉落光效 if (GameLogicAPI.isInWarScene() > 0) { addMoneyEffect(ev, context.uMurderID); } USpeedUI.Blood.UBloodManager.Instance.OnEntityDead(m_pFSM.entityID, ENTITY_TYPE.TYPE_PLAYER_ROLE); // 小地图隐藏 // U3D_Render.EntityView objev = EntityFactory.getEntityViewByID(m_pFSM.entityID); // if (objev != null && GFxMinimapManager.Instance != null) // { // GFxMinimapManager.Instance.SetObjectVisible(m_pFSM.entityID, objev.createinfo.nMinimapIcon, 0); // } return(true); }
// // The overlapped function called (either by the thread pool or the socket) // when IO completes. (only called on Win9x) // internal void OverlappedCallback(object stateObject, bool Signaled) { OverlappedAsyncResult asyncResult = (OverlappedAsyncResult)stateObject; GlobalLog.Assert(!asyncResult.IsCompleted, "OverlappedAsyncResult#" + ValidationHelper.HashString(asyncResult) + "::OverlappedCallback() asyncResult.IsCompleted", ""); // // the IO completed asynchronously, see if there was a failure the Internal // field in the Overlapped structure will be non zero. to optimize the non // error case, we look at it without calling WSAGetOverlappedResult(). // uint errorCode = (uint)Marshal.ReadInt32(IntPtrHelper.Add(asyncResult.m_UnmanagedBlob, Win32.OverlappedInternalOffset)); uint numBytes = errorCode != 0 ? unchecked ((uint)-1) : (uint)Marshal.ReadInt32(IntPtrHelper.Add(asyncResult.m_UnmanagedBlob, Win32.OverlappedInternalHighOffset)); // // this will release the unmanaged pin handles and unmanaged overlapped ptr // asyncResult.ReleaseUnmanagedStructures(); asyncResult.ErrorCode = (int)errorCode; asyncResult.InvokeCallback(false, (int)numBytes); }
// 接受消息 public override void OnMessage(WndMsgID msgID, UIMsgData msgData) { switch (msgID) { case WndMsgID.WND_MSG_COMMOM_WARHILL_PRESSDOWN: { this.SetVisible(true); // 请求进入大厅 ViewEventHelper.Instance.SendCommand(GameLogicDef.GVIEWCMD_MATCH_ENTER_HALL); } break; case WndMsgID.WND_MSG_WAR_MAIN_OPEN: { this.LoadView(); } break; case WndMsgID.WND_ID_GAMEWAITINGROOMVIEW_ROOMLEAVETOHALL: { this.SetVisible(true); } break; case WndMsgID.WND_MSG_COMMON_LOGINMOBA: { if (m_wndView == null) { return; } m_wndView.ClearRoomListData(); this.UnloadView(); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_ADDROOMINFO: { if (m_wndView == null) { return; } UIMsgCmdData uiData = (UIMsgCmdData)msgData; SetRoomListData(uiData.ptrParam, uiData.nPtrLen); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_REMOVEROOMINFO: { if (m_wndView == null) { return; } UIMsgCmdData uiRemoveItem = (UIMsgCmdData)msgData; RemoveRoomListData(uiRemoveItem.nParam); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_REFRESHROOMINFO: { if (m_wndView == null) { return; } UIMsgCmdData uiRoomInfo = (UIMsgCmdData)msgData; cmd_match_hall_add_room data = IntPtrHelper.toData <cmd_match_hall_add_room>(uiRoomInfo.ptrParam); RefreshRoomListData(data); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_REMOVEAllROOMINFO: { if (m_wndView == null) { return; } UIMsgCmdData uiRemoveItem = (UIMsgCmdData)msgData; m_wndView.ClearRoomListData(); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_SHOWCREATEROOMVIEW: { if (m_wndView == null) { return; } m_wndView.SetCreateRoomShow(); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_GAMEMODEINFO: { if (m_wndView == null) { return; } UIMsgCmdData uiGameMode = (UIMsgCmdData)msgData; cmd_match_create_room_mode data = IntPtrHelper.toData <cmd_match_create_room_mode>(uiGameMode.ptrParam); SetCreateRoomGameModeInfo(uiGameMode.nParam, data); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_MAPMODEINFO: { if (m_wndView == null) { return; } UIMsgCmdData uiMapMode = (UIMsgCmdData)msgData; cmd_match_create_room_map data = IntPtrHelper.toData <cmd_match_create_room_map>(uiMapMode.ptrParam); SetCreateRoomMapModeInfo(uiMapMode.nParam, data); } break; case WndMsgID.WND_ID_GAMEWAITINGROOMVIEW_SHOWAFTERLOADSCENE: { CloseHallView(); } break; case WndMsgID.WND_ID_HALLROOMINFOVIEW_GROUP_MAPBTNCLICK: { if (m_wndView == null) { return; } UIMsgCmdData uiChangeID = (UIMsgCmdData)msgData; m_wndView.GroupMapBtnClick(uiChangeID.nParam); } break; case WndMsgID.WND_ID_GAMEWAITINGROOMVIEW_ROOMLEAVETOSCENE: { if (m_wndView == null || !IsVisible()) { return; } m_wndView.OnReturnBtnClick(); } break; default: break; } }
private void UpdateFunction() { deltaTime = Time.deltaTime; if (deltaTime < 0.001f) { Debug.LogError("deltaTime=" + deltaTime); return; } if (m_pFSM.moveCtrl.isCharge()) { if (m_pFSM.animator != null) { m_pFSM.animator.SetFloat(hashid_moveforward, 0); m_pFSM.animator.SetFloat(hashid_moveright, 0); m_pFSM.animator.SetFloat(hashid_velocity, 0); m_pFSM.animator.SetBool(hashid_isMoving, false); } return; } Vector3 velocity = m_Velocity; m_pFSM.syncDetalTime += deltaTime; if (!m_pFSM.isHero || m_pFSM.bControlledBySever) { velocity = m_pFSM.syncVelocity; calSyncVel(tr.position, ref velocity); } if (float.IsNaN(velocity.x) || float.IsNaN(velocity.y) || float.IsNaN(velocity.z)) { Debug.LogError(m_pFSM.name + " jumping (Line226) velocity error " + velocity); velocity = Vector3.zero; } Vector3 inputVelocity = ApplyInputVelocityChange(velocity); //根据键盘输入调整速度,一般在平地才用 if (float.IsNaN(inputVelocity.x) || float.IsNaN(inputVelocity.y) || float.IsNaN(inputVelocity.z)) { Debug.LogError(m_pFSM.name + "jumping inputVelocity is " + inputVelocity); inputVelocity = Vector3.zero; } if (m_bIsLanding && (m_pFSM.isHero && !m_pFSM.bControlledBySever)) { // Update velocity based on input velocity = inputVelocity; //Trace.Log("Landing vel="+m_Velocity.ToString()+"-->"+velocity.ToString()); } else if (m_pFSM.dodge) { if (m_pFSM.isHero && !m_pFSM.bControlledBySever) { velocity = inputVelocity; } else { velocity = m_pFSM.syncVelocity; } } else { //在空中的时候,只稍微考虑一下,为了撞墙后直接跳跃也能爬墙,而不是垂直跳 Vector3 inputOffset = inputVelocity; inputOffset.y = 0.0f; Vector3 jumpOffset = velocity; jumpOffset.y = 0.0f; if (inputOffset.magnitude / 2 > jumpOffset.magnitude) { Vector3 combineOffset = jumpOffset * 0.95f + inputOffset * 0.05f; velocity.x = combineOffset.x; velocity.z = combineOffset.z; } if (m_pFSM.isGlideState) { Vector3 pos = m_pFSM.transform.position + new Vector3(0, 0.1f, 0); if (Mathf.Abs(pos.y - glideLastHitPoint.y) > 0.5f) { RaycastHit hitInfo; Ray PointToGroundRay = new Ray(pos, new Vector3(0, -1, 0)); Physics.Raycast(PointToGroundRay, out hitInfo, 100); if ((pos.y - hitInfo.point.y) > m_pFSM.controller.height + 0.6f) { m_pFSM.ChangeGlideState(); } else { glideLastHitPoint = pos; } } } } if (m_pFSM.isHero && !m_pFSM.bControlledBySever) { m_pFSM.syncVelocity = velocity; // 判断本地的模拟坐标和真实坐标的差别, 只有达到一定阀值才需要同步 // 暂时在行走过程中200ms同步一次 int curTick = System.Environment.TickCount; MoveSyncFlag sendSync = MoveSyncFlag.NOT_2_SERVER; if (curTick >= m_lastSyncTick + 5000) //5秒强制同步一次 { sendSync = MoveSyncFlag.TO_SERVER; } else if ((m_lastSyncVel.sqrMagnitude > 0.0001f && m_pFSM.syncVelocity.sqrMagnitude < 0.0001f) || (m_lastSyncVel.sqrMagnitude < 0.0001f && m_pFSM.syncVelocity.sqrMagnitude > 0.0001f))//启动和站立强制同步一次 { sendSync = MoveSyncFlag.TO_BROADCAST; } else //每200毫秒根据速度或者移动距离考虑是否同步一次 { Vector3 velSub = m_lastSyncVel - m_pFSM.syncVelocity; Vector3 posSub = tr.position - m_lastSyncPos; if ((curTick >= m_lastSyncTick + 200) && (velSub.sqrMagnitude > 0.01f || posSub.sqrMagnitude > 1.0f)) { sendSync = MoveSyncFlag.TO_SERVER; } } if (sendSync != MoveSyncFlag.NOT_2_SERVER && (m_pFSM.isHero && !m_pFSM.bControlledBySever)) { m_pFSM.syncVelocity.y = 0.0f; // 跳跃的同步包y方向速度都为0,由实际跳跃产生。 Send_Sync_Position(sendSync); m_lastSyncTick = curTick; m_lastSyncVel = m_pFSM.syncVelocity; m_lastSyncPos = tr.position; } } // We copy the actual velocity into a temporary variable that we can manipulate. // Apply gravity and jumping force velocity = ApplyGravityAndJumping(velocity); if (float.IsNaN(velocity.x) || float.IsNaN(velocity.y) || float.IsNaN(velocity.z)) { Debug.LogError(m_pFSM.name + " jumping velocity (line 304) error" + velocity); velocity = Vector3.zero; } if (m_bIsLanding && m_pFSM.animator != null) { Vector3 planeVel = new Vector3(velocity.x, 0, velocity.z); if (planeVel.sqrMagnitude > 0.0f) { m_pFSM.animator.SetBool(hashid_isMoving, true); } else { m_pFSM.animator.SetBool(hashid_isMoving, false); } //取移动速度相对于主角面向的向前和向左的标量 float fRight = Vector3.Dot(velocity, tr.right); float fForward = Vector3.Dot(velocity, tr.forward); //移动速度考虑了服务器速度和基本速度的比率后,按服务器速度算animator参数值 if (m_pFSM.maxForwardSpeed > 0) { fForward = fForward / m_pFSM.maxForwardSpeed; } else { fForward = fForward / m_pFSM.creaturePropety.runSpeed_Forward; } if (m_pFSM.maxRunSidewaySpeed > 0) { fRight = fRight / m_pFSM.maxRunSidewaySpeed; } else { fRight = fRight / m_pFSM.creaturePropety.runSpeed_LeftRight; } //fRight = fRight / m_pFSM.basicSidewaysSpeed; ////速度和动作不能成正比,线性的话速度小的时候容易滑步,这里利用开根做了一次非线性变换 //if (fForward >= 0.0f) //{ // fForward = fForward / m_pFSM.basicForwardSpeed; // fForward = Mathf.Sqrt(fForward); //} //else //{ // fForward = fForward / m_pFSM.basicBackwardSpeed; // fForward = -Mathf.Sqrt(-fForward); //} //if (fRight >= 0.0f) //{ // fRight = Mathf.Sqrt(fRight); //} //else //{ // fRight = -Mathf.Sqrt(-fRight); //} m_pFSM.animator.SetFloat(hashid_moveright, fRight); m_pFSM.animator.SetFloat(hashid_moveforward, fForward); m_pFSM.animator.SetFloat(hashid_velocity, velocity.magnitude); //动画速率用maxSpeed和basicSpeed比率控制,这里暂时不控制 //float speedScale = Mathf.Max(Mathf.Abs(fRight), Mathf.Abs(fForward)); //if (speedScale > 1.0f) //{ // speedScale = (speedScale - 1.0f) * 0.3f + 1.0f; //张嘉华提供的跑路速度和跑路动画速度关系 // m_pFSM.animator.speed = speedScale; //} //else //{ // m_pFSM.animator.speed = 1.0f; //} } // Moving platform support Vector3 moveDistance = Vector3.zero; // Save lastPosition for velocity calculation. Vector3 lastPosition = tr.position; // We always want the movement to be framerate independent. Multiplying by Time.deltaTime does this. Vector3 currentMovementOffset = velocity * deltaTime; // Find out how much we need to push towards the ground to avoid loosing grouning // when walking down a step or over a sharp change in slope. float pushDownOffset = Mathf.Max(m_pFSM.controller.stepOffset, (new Vector3(currentMovementOffset.x, 0, currentMovementOffset.z)).magnitude); if (float.IsNaN(m_pFSM.controller.stepOffset)) { Debug.LogError(m_pFSM.name + " jumping controller.stepOffset error" + m_pFSM.controller.stepOffset); pushDownOffset = (new Vector3(currentMovementOffset.x, 0, currentMovementOffset.z)).magnitude; } if (grounded) { currentMovementOffset -= pushDownOffset * Vector3.up; } m_pFSM.collisionFlags = m_pFSM.controller.Move(currentMovementOffset); //先暂时关闭拉扯位置,保证非主角跳跃平滑 //if (!m_pFSM.isHero) //前面都是自己算的运动轨迹,非主角考虑同步位置的问题,避免连续跳跃(例如轻功)时位置偏移过大 //{ // Vector3 syncOffset = m_pFSM.syncPosition - tr.position; // syncOffset.y = 0.0f; // if (syncOffset.sqrMagnitude > 0.01f) // { // m_pFSM.controller.Move(syncOffset * 0.8f); // } //} // Calculate the velocity based on the current and previous position. // This means our velocity will only be the amount the character actually moved as a result of collisions. Vector3 oldHVelocity = new Vector3(velocity.x, 0, velocity.z); m_Velocity = (tr.position - lastPosition) / deltaTime; Vector3 newHVelocity = new Vector3(m_Velocity.x, 0, m_Velocity.z); // The CharacterController can be moved in unwanted directions when colliding with things. // We want to prevent this from influencing the recorded velocity. //if (oldHVelocity == Vector3.zero) if (oldHVelocity.sqrMagnitude < 0.0001f) { m_Velocity = new Vector3(0, m_Velocity.y, 0); } else { float projectedNewVelocity = Vector3.Dot(newHVelocity, oldHVelocity) / oldHVelocity.sqrMagnitude; m_Velocity = oldHVelocity * Mathf.Clamp01(projectedNewVelocity) + m_Velocity.y * Vector3.up; } if (m_Velocity.y < velocity.y - 0.001) { if (m_Velocity.y < 0) { // Something is forcing the CharacterController down faster than it should. // Ignore this m_Velocity.y = velocity.y; } } // We were grounded but just loosed grounding if (grounded && !IsGroundedTest()) { grounded = false; //m_pFSM.SendMessage("OnFall", SendMessageOptions.DontRequireReceiver); // We pushed the character down to ensure it would stay on the ground if there was any. // But there wasn't so now we cancel the downwards offset to make the fall smoother. tr.position += pushDownOffset * Vector3.up; } // We were not grounded but just landed on something else if (!grounded && IsGroundedTest()) { grounded = true; if (m_pFSM.animator) { m_pFSM.animator.SetBool("isLanding", true); Vector3 moveDir = m_pFSM.inputMoveDirection; Vector3 planeVel = new Vector3(moveDir.x, 0, moveDir.z); if (planeVel.sqrMagnitude > 0.0f) { m_pFSM.animator.SetBool(hashid_isMoving, true); } else { m_pFSM.animator.SetBool(hashid_isMoving, false); } } m_bIsLanding = true; m_bIsJumping = false; m_bLongJump = false; //float maxFallSpeed = m_pFSM.SkinConfig == null ? 15 : m_pFSM.SkinConfig.maxFallSpeed; //int landingSpeed = (int)(-velocity.y); float fallHeight = startHeight - m_pFSM.transform.position.y; //if (landingSpeed > maxFallSpeed / 2.0f) //着陆大于最大速度的一半,可能需要计算伤害,上报逻辑层 if (m_pFSM.isHero && fallHeight > 5.0f) //着陆时落差大于5米,则上报逻辑层 { cmd_creature_act_landspeed data = new cmd_creature_act_landspeed(); //data.fValue = landingSpeed; data.fValue = fallHeight; IntPtrHelper helper = new IntPtrHelper(); int len = Marshal.SizeOf(data); IntPtr ptr = helper.toPtr <cmd_creature_act_landspeed>(ref data); int eventID = (int)EntityLogicDef.ENTITY_CMD_LANDING_SPEED; GameLogicAPI.onEntityEvent(m_pFSM.entityID, eventID, len, "", ptr, len); if (m_pFSM.showLog) { Trace.Log("Big Landing! fallHeight=" + fallHeight.ToString()); } } if (m_pFSM.creaturePropety.effectIDForLand > 0) { m_pFSM.creaturePropety.Master.LightingEffectManager.BindLighting(m_pFSM.creaturePropety.effectIDForLand); } //m_pFSM.SendMessage("OnLand", SendMessageOptions.DontRequireReceiver); } if (m_bIsLanding == false) { m_pFSM.groundNormal = Vector3.zero; } }
public void recvWarEndLegendCupInfo(IntPtr ptrParam, int nPtrLen) { cmd_war_end_legendcup_info info = IntPtrHelper.toData <cmd_war_end_legendcup_info>(ptrParam); m_WarEndLegendCupInfo = info; }
public void OnCommand_UpdateNumProp(EntityNumPropEventArgs e) { if (e.objev == null || !e.objev.IsHero) { return; } switch (e.data.nPropID) { case (int)ENTITY_PROPERTY.PROPERTY_SEX: { int nSex = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SEX); actorInfo.HeadIcon.sprite = GetActorIcon(nSex + 1); } break; case (int)ENTITY_PROPERTY.PROPERTY_RANKGRADE: case (int)ENTITY_PROPERTY.PROPERTY_RANKSCORE: { int nMatchType = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MATCHTYPE); int nRankScore = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKSCORE); int nRankGrade = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_RANKGRADE); int nRankIcon = GameLogicAPI.getRankIconIDByGrade(nMatchType, nRankGrade); IntPtr ptr = GameLogicAPI.getActorRankNameByGrade(nMatchType, nRankGrade); string strRankName = ""; if (ptr != IntPtr.Zero) { strRankName = IntPtrHelper.Ptr2Str(ptr); } // 更新下本地的PlayerDataManager数据 这里是个坑 以前不是实时更新的 ActorPlayerInfo info = LogicDataCenter.playerSystemDataManager.GetActorPlayerInfo(); if (info.playerInfo.pDbid > 0) { info.playerInfo.nRankScore = nRankScore; info.playerInfo.nRankIconID = nRankIcon; info.playerInfo.chRankName = strRankName; } if (nRankIcon > 0) { actorInfo.RankIcon.gameObject.SetActive(true); actorInfo.RankIcon.sprite = GetActorRankIcon(nRankIcon); } else { actorInfo.RankIcon.gameObject.SetActive(false); } } break; case (int)ENTITY_PROPERTY.PROPERTY_LEVEL: { int nLevel = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_LEVEL); actorInfo.Lv.text = nLevel.ToString(); } break; case (int)ENTITY_PROPERTY.PROPERTY_TICKET: { int nPoint = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_TICKET); actorInfo.PointNum.text = nPoint.ToString(); } break; case (int)ENTITY_PROPERTY.PROPERTY_GOLD: { int nGold = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_GOLD); actorInfo.BindGoldNum.text = nGold.ToString(); } break; default: break; } }