private void GenNameboardLooksNode(Entity owner, NameboardData nameboardData) { if (!EntityManager.Exists(owner)) { return; } var looksNode = ResMgr.GetInstance().GetGameObject("Nameboard"); looksNode.transform.SetParent(nameboardCanvas); looksNode.transform.localScale = new Vector3(-1, 1, 1); var nameboardBehav = looksNode.GetComponent <Nameboard>(); var uid = EntityManager.GetComponentData <UID>(owner); string name = SceneMgr.Instance.GetNameByUID(uid.Value); // nameboardBehav.Name = name; var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(owner); nameboardBehav.CurColorStyle = isMainRole ? Nameboard.ColorStyle.Green : Nameboard.ColorStyle.Red; nameboardData.LooksNode = looksNode.transform; nameboardData.UIResState = NameboardData.ResState.Loaded; nameboardData.SetName(name); bool hasHPData = EntityManager.HasComponent <HealthStateData>(owner); if (hasHPData) { var hpData = EntityManager.GetComponentData <HealthStateData>(owner); nameboardBehav.MaxHp = hpData.MaxHp; nameboardBehav.CurHp = hpData.CurHp; } var sceneObjType = EntityManager.GetComponentData <SceneObjectTypeData>(owner); nameboardBehav.SetBloodVisible(sceneObjType.Value == SceneObjectType.Role || sceneObjType.Value == SceneObjectType.Monster); }
public static void SetHitEffectColor(Transform trans, Color color, bool genMaterialIfNone) { var renderers = trans.GetComponentsInChildren <Renderer>(); for (int i = 0; i < renderers.Length; i++) { var renderer = renderers[i]; var materials = renderer.materials; int hitMaterialIndex = XLuaFramework.Util.FindMaterial(materials, "function_hitfresnel"); if (genMaterialIfNone && hitMaterialIndex == -1) { hitMaterialIndex = materials.Length; var hitMaterial = ResMgr.GetInstance().GetMeterial("function_hitfresnel"); hitMaterial.name = "function_hitfresnel"; List <Material> newMaterials = new List <Material>(materials); newMaterials.Add(hitMaterial); renderer.materials = newMaterials.ToArray(); } if (hitMaterialIndex != -1) { var property = new MaterialPropertyBlock(); renderer.GetPropertyBlock(property, hitMaterialIndex); property.SetColor("_TintColor", color); renderer.SetPropertyBlock(property, hitMaterialIndex); } } }
private void HandleHurtEvent(SprotoType.scene_hurt_event_info hurtEvent) { // long uid = hurtEvent.attacker_uid; var entityMgr = SceneMgr.Instance.EntityManager; if (hurtEvent.defenders == null || hurtEvent.defenders.Count <= 0) { return; } for (int i = 0; i < hurtEvent.defenders.Count; i++) { var defender = hurtEvent.defenders[i]; // Debug.Log("defender uid : "+defender.uid+" count:"+hurtEvent.defenders.Count+" hp:"+defender.cur_hp+" damagetype:"+defender.flag); var defenderEntity = SceneMgr.Instance.GetSceneObject(defender.uid); // Debug.Log("has LocomotionState : "+entityMgr.HasComponent<LocomotionState>(defenderEntity)+" isdead:"+ECSHelper.IsDead(defenderEntity, entityMgr)+" isnull:"+defenderEntity.Equals(Entity.Null)); if (defenderEntity.Equals(Entity.Null) || ECSHelper.IsDead(defenderEntity, entityMgr)) { continue; } if (entityMgr.HasComponent <LocomotionState>(defenderEntity)) { var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(defenderEntity); //进入受击状态 bool playBehit = UnityEngine.Random.RandomRange(0, 100) > 30.0f; if (!isMainRole && playBehit) { var locomotionState = entityMgr.GetComponentData <LocomotionState>(defenderEntity); locomotionState.LocoState = LocomotionState.State.BeHit; locomotionState.StateEndType = LocomotionState.EndType.PlayAnimationOnce; // locomotionState.StartTime = Time.time; entityMgr.SetComponentData <LocomotionState>(defenderEntity, locomotionState); } bool isNeedShakeCamera = (isMainRole && playBehit) || !isMainRole; if (isNeedShakeCamera && entityMgr.HasComponent <CinemachineImpulseSource>(defenderEntity)) { var impulseCom = entityMgr.GetComponentObject <CinemachineImpulseSource>(defenderEntity); var velocity = Vector3.one * defender.change_num / 5; impulseCom.GenerateImpulse(); } if (entityMgr.HasComponent <BeHitEffect>(defenderEntity)) { var behitEffect = entityMgr.GetComponentObject <BeHitEffect>(defenderEntity); behitEffect.EndTime = TimeEx.ServerTime + 300; behitEffect.Status = EffectStatus.WaitForRender; } //显示战斗飘字 var defenderTrans = entityMgr.GetComponentObject <Transform>(defenderEntity); var flyWordObj = ResMgr.GetInstance().GetGameObject("FightFlyWord"); FightFlyWord flyWord = flyWordObj.GetComponent <FightFlyWord>(); flyWord.SetData(defender.change_num, defender.flag); var pos = defenderTrans.position; pos += Vector3.up * 1; flyWord.transform.SetParent(UnityMMO.SceneMgr.Instance.FlyWordContainer); flyWord.transform.position = pos; flyWord.StartFly(); } ChangeHP(defenderEntity, defender.cur_hp, defender.flag, hurtEvent.attacker_uid); } }
public void UnuseLooks() { if (UIResState == ResState.Loaded && LooksNode != null) { LooksNode.gameObject.SetActive(false); ResMgr.GetInstance().UnuseGameObject("Nameboard", LooksNode.gameObject); UIResState = ResState.WaitLoad; LooksNode = null; } }
private void HandleHurtEvent(SprotoType.scene_hurt_event_info hurtEvent) { // long uid = hurtEvent.attacker_uid; var entityMgr = SceneMgr.Instance.EntityManager; if (hurtEvent.defenders == null || hurtEvent.defenders.Count <= 0) { return; } for (int i = 0; i < hurtEvent.defenders.Count; i++) { var defender = hurtEvent.defenders[i]; // Debug.Log("defender uid : "+defender.uid+" count:"+hurtEvent.defenders.Count+" damage:"+defender.damage+" hp:"+defender.cur_hp+" damagetype:"+defender.flag); var defenderEntity = SceneMgr.Instance.GetSceneObject(defender.uid); // Debug.Log("has health : "+entityMgr.HasComponent<HealthStateData>(defenderEntity)); if (defenderEntity.Equals(Entity.Null) || ECSHelper.IsDead(defenderEntity, entityMgr)) { continue; } if (entityMgr.HasComponent <LocomotionState>(defenderEntity)) { //进入受击状态 bool playBehit = UnityEngine.Random.RandomRange(0, 100) > 90.0f; if (playBehit) { var locomotionState = entityMgr.GetComponentData <LocomotionState>(defenderEntity); locomotionState.LocoState = LocomotionState.State.BeHit; locomotionState.StartTime = Time.time; entityMgr.SetComponentData <LocomotionState>(defenderEntity, locomotionState); } //显示战斗飘字 var defenderTrans = entityMgr.GetComponentObject <Transform>(defenderEntity); var flyWordObj = ResMgr.GetInstance().GetGameObject("FightFlyWord"); FightFlyWord flyWord = flyWordObj.GetComponent <FightFlyWord>(); flyWord.SetData(defender.change_num, defender.flag); var pos = defenderTrans.position; pos += Vector3.up * 1; flyWord.transform.SetParent(UnityMMO.SceneMgr.Instance.FlyWordContainer); flyWord.transform.position = pos; flyWord.StartFly(); } ChangeHP(defenderEntity, defender.cur_hp, defender.flag, hurtEvent.attacker_uid); } }
public void StartFly() { var randomX = Random.RandomRange(-1.0f, 1.0f); var randomY = Random.RandomRange(1.5f, 2.5f); var randomZ = Random.RandomRange(-1.0f, 1.0f); var randomMoveDuration = Random.RandomRange(0.5f, 1.0f); var moveAction = Cocos.MoveBy.CreateAbs(randomMoveDuration, new Vector3(randomX, randomY, randomZ)); var fadeOutAction = Cocos.FadeOut.Create(0.7f, Cocos.ColorAttrCatcherTextMeshPro.Ins); var delayFadeoutAction = Cocos.Sequence.Create(Cocos.DelayTime.Create(0.5f), fadeOutAction); var spawnAction = Cocos.Spawn.Create(moveAction, delayFadeoutAction); var action = Cocos.Sequence.Create(spawnAction, Cocos.CallFunc.Create(() => { // Object.Destroy(gameObject, 0.1f); gameObject.SetActive(false); Cocos.Helper.SetOpacity(transform, 1, Cocos.ColorAttrCatcherTextMeshPro.Ins); ResMgr.GetInstance().UnuseGameObject("FightFlyWord", gameObject); })); runner.PlayAction(action); }