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.
		
		
		
		
		
			
		
			
	
	
		
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using Entitas; | ||
|  | using UnityEngine; | ||
|  | using Game; | ||
|  | public class AISystem : IExecuteSystem, IInitializeSystem | ||
|  | { | ||
|  |     private IGroup<GameEntity> _entities; | ||
|  |     public void Initialize() | ||
|  |     { | ||
|  |         _entities = Util.GetGroup(GameMatcher.AI); | ||
|  |     } | ||
|  |     public void Execute() | ||
|  |     { | ||
|  |         foreach (var entity in _entities) | ||
|  |         { | ||
|  |             UpdateAIBlueprint(entity); | ||
|  |             UpdateAIHungry(entity); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     private void UpdateAIHungry(GameEntity entity) | ||
|  |     { | ||
|  |         var ai = entity.aI; | ||
|  |         var hp = entity.hp; | ||
|  |         if (!hp.IsAlive) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         if (ai.IsHungryFull.Value) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         if (ai.AttackPermit.Value) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         var newHungry = ai.Hungry.Value + ai.HungryIncrease * ai.HungryIncreaseRate * Time.deltaTime; | ||
|  |         ai.Hungry.Value = Mathf.Min(ai.HungryMax.Value, newHungry); | ||
|  |         if (ai.Hungry.Value >= ai.HungryMax.Value) | ||
|  |         { | ||
|  |             ai.IsHungryFull.Value = true; | ||
|  |             ai.Hungry.Value = 0; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     private void UpdateAIBlueprint(GameEntity entity) | ||
|  |     { | ||
|  |         var id = entity.iD; | ||
|  |         var ai = entity.aI; | ||
|  |         var skill = entity.skill; | ||
|  |         var hp = entity.hp; | ||
|  |         var buff = entity.buff; | ||
|  |         if (!hp.IsAlive) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         ai.Data.Entity = entity.ID(); | ||
|  |         ai.Data.Owner = entity.Owner(); | ||
|  |         ai.Data.Target = entity.Target(); | ||
|  |         if (!ai.IsInit) | ||
|  |         { | ||
|  |             ai.IsInit = true; | ||
|  |             Util.RunBp(GameConst.BlueprintAICommon, GameConst.BpEntranceEnter, ai.Data); | ||
|  |             Util.RunBp(id.Data.Blueprint, GameConst.BpEntranceEnter, ai.Data); | ||
|  |         } | ||
|  |         ai.ThinkCdNow -= Time.deltaTime; | ||
|  |         if (ai.ThinkCdNow > 0) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         ai.ThinkCdNow = ai.ThinkCdMax; | ||
|  |         if (Util.EntityIsStagger(entity)) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         if (skill.IsRunning) | ||
|  |         { | ||
|  |             return; | ||
|  |         } | ||
|  |         Util.RunBp(GameConst.BlueprintAICommon, GameConst.BpEntranceUpdate, ai.Data); | ||
|  |         Util.RunBp(id.Data.Blueprint, GameConst.BpEntranceUpdate, ai.Data); | ||
|  |     } | ||
|  | 
 | ||
|  | } |