You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			197 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			197 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using Entitas; | ||
|  | using UnityEngine; | ||
|  | using Game; | ||
|  | using System.Collections.Generic; | ||
|  | 
 | ||
|  | [Game] | ||
|  | public class ViewComponent : IComponent | ||
|  | { | ||
|  |     public EntityPoolItem EntityPoolItem; | ||
|  |     public GameObject GameObject; | ||
|  |     public GameObject GameObjectLogic; | ||
|  |     public Transform TransformLogic; | ||
|  |     public Transform TransformView; | ||
|  |     public Transform TransformViewRot; | ||
|  |     public Transform TransformViewOffset; | ||
|  |     public Transform TransformViewMain; | ||
|  |     public Transform TransformViewOther; | ||
|  |     public Collider Collider; | ||
|  |     public Material Material; | ||
|  |     public Vector3 PositionView => TransformViewMain.position; | ||
|  |     public Vector3 PositionLogic => TransformLogic.position; | ||
|  |     public Vector3 PositionPre; | ||
|  |     public SpriteRenderer SpriteRenderer; //物体的主要sprite | ||
|  | 
 | ||
|  |     public readonly MetaData<Vector3> PosView = new MetaData<Vector3>(); | ||
|  | 
 | ||
|  |     //额外对象 | ||
|  |     public List<EffectPoolItem> EffectObject = new List<EffectPoolItem>(); //挂在实体上的特效 | ||
|  |     public ShadowPoolItem SkillPointerObject; //技能指示器 | ||
|  | 
 | ||
|  |     // 特殊效果 | ||
|  |     public Vector3 LocalPositionShake = Vector3.zero; //抖动带来的额外偏移 | ||
|  |     public Vector3 ScaleDir = Vector3.zero; //缩放方向 | ||
|  |     public Color FlashColor = Color.white; //闪白颜色 | ||
|  |     public float ShakeTimeLeft; //抖动剩余时间 | ||
|  |     public float FlashTimeLeft; //闪白剩余时间 | ||
|  |     public float ScaleTimeLeft; //缩放剩余时间 | ||
|  |     public float ScaleRate; //缩放强度 | ||
|  | } | ||
|  | 
 | ||
|  | namespace Game | ||
|  | { | ||
|  |     public abstract partial class Util | ||
|  |     { | ||
|  |         public static void EntityShake(GameEntity entity, int shakeTimes) | ||
|  |         { | ||
|  |             entity.view.ShakeTimeLeft = shakeTimes * GameConst.ShakeTerm; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void EntityFlash(GameEntity entity) | ||
|  |         { | ||
|  |             EntityFlash(entity, Color.white); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void EntityFlash(GameEntity entity, Color flashColor) | ||
|  |         { | ||
|  |             entity.view.FlashTimeLeft = GameConst.FlashTerm; | ||
|  |             entity.view.FlashColor = flashColor; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void EntityScale(GameEntity entity, Vector3 dir) | ||
|  |         { | ||
|  |             entity.view.ScaleTimeLeft = GameConst.ScaleTerm; | ||
|  |             entity.view.ScaleDir = dir; | ||
|  |             var rate = Mathf.Clamp01((dir.magnitude - GameConst.ScaleFloatingMin) / | ||
|  |                                      (GameConst.ScaleFloatingMax - GameConst.ScaleFloatingMin)); | ||
|  |             var scaleRate = Mathf.Lerp(GameConst.ScaleRateMin, GameConst.ScaleRateMax, rate); | ||
|  | 
 | ||
|  |             entity.view.ScaleRate = scaleRate; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void SetEntityPos(GameEntity entity, Vector3 pos) | ||
|  |         { | ||
|  |             entity.view.GameObject.transform.position = pos; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static int GetEntityLayer(GameEntity entity) | ||
|  |         { | ||
|  |             return entity.view.GameObject.layer; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void SetEntityLayer(GameEntity entity, int layer) | ||
|  |         { | ||
|  |             entity.view.GameObject.layer = layer; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityLogicPos(int entity) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null) | ||
|  |             { | ||
|  |                 return Vector3.zero; | ||
|  |             } | ||
|  | 
 | ||
|  |             return EntityLogicPos(e); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityLogicPos(GameEntity entity) | ||
|  |         { | ||
|  |             return entity.view.TransformLogic.position; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityViewPos(int entity) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null) | ||
|  |             { | ||
|  |                 return Vector3.zero; | ||
|  |             } | ||
|  | 
 | ||
|  |             return EntityViewPos(e); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityViewPos(GameEntity entity) | ||
|  |         { | ||
|  |             return entity.view.TransformViewMain.position; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static float EntityDistance(int entity1, int entity2) | ||
|  |         { | ||
|  |             var e1 = Util.GetEntity(entity1); | ||
|  |             var e2 = Util.GetEntity(entity2); | ||
|  |             if (e1 == null || e2 == null) | ||
|  |             { | ||
|  |                 return 0; | ||
|  |             } | ||
|  | 
 | ||
|  |             return EntityDistance(e1, e2); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static float EntityDistance(GameEntity entity1, GameEntity entity2) | ||
|  |         { | ||
|  |             return Vector3.Distance(EntityLogicPos(entity1), EntityLogicPos(entity2)); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static float EntityDistanceXZ(int entity1, int entity2) | ||
|  |         { | ||
|  |             var e1 = Util.GetEntity(entity1); | ||
|  |             var e2 = Util.GetEntity(entity2); | ||
|  |             if (e1 == null || e2 == null) | ||
|  |             { | ||
|  |                 return 0; | ||
|  |             } | ||
|  | 
 | ||
|  |             return EntityDistanceXZ(e1, e2); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static float EntityDistanceXZ(GameEntity entity1, GameEntity entity2) | ||
|  |         { | ||
|  |             var pos1 = EntityLogicPos(entity1); | ||
|  |             var pos2 = EntityLogicPos(entity2); | ||
|  |             pos1.y = 0; | ||
|  |             pos2.y = 0; | ||
|  |             return Vector3.Distance(pos1, pos2); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityOffset(int entity1, int entity2) | ||
|  |         { | ||
|  |             var e1 = Util.GetEntity(entity1); | ||
|  |             var e2 = Util.GetEntity(entity2); | ||
|  |             if (e1 == null || e2 == null) | ||
|  |             { | ||
|  |                 return Vector3.zero; | ||
|  |             } | ||
|  | 
 | ||
|  |             return EntityOffset(e1, e2); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityOffset(GameEntity entity1, GameEntity entity2) | ||
|  |         { | ||
|  |             return EntityLogicPos(entity2) - EntityLogicPos(entity1); | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void ClearView(GameEntity entity) | ||
|  |         { | ||
|  |             var view = entity.view; | ||
|  |             //特效销毁 | ||
|  |             foreach (var item in view.EffectObject) | ||
|  |             { | ||
|  |                 item.EffectDestroy(); | ||
|  |             } | ||
|  | 
 | ||
|  |             view.EffectObject.Clear(); | ||
|  |             //删除技能指示器 | ||
|  |             if (view.SkillPointerObject != null) | ||
|  |             { | ||
|  |                 view.SkillPointerObject.Destroy(); | ||
|  |             } | ||
|  | 
 | ||
|  |             //重置shader参数 | ||
|  |             view.Material.SetColor("_FlashColor", new Color(1f, 1f, 1f, 1f)); | ||
|  | 
 | ||
|  |             entity.view.GameObjectLogic.SetActive(true); | ||
|  |             view.EntityPoolItem.Destroy(); | ||
|  |         } | ||
|  |     } | ||
|  | } |