Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
 public void UnuseLooks()
 {
     if (UIResState == ResState.Loaded && LooksNode != null)
     {
         LooksNode.gameObject.SetActive(false);
         ResMgr.GetInstance().UnuseGameObject("Nameboard", LooksNode.gameObject);
         UIResState = ResState.WaitLoad;
         LooksNode  = null;
     }
 }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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);
        }