private void Create() { for (int i = 0; i < _number; i++) { //entity GameObject tmp = EntityActionBuffer.Instance.CreateEntity(_prefab); tmp.transform.position = GameMananger.RandomNavmeshLocation(40f, tmp); //component TargetEdible miam = new TargetEdible(); Score score = new Score(i, 0, false); Vendetta vendetta = new Vendetta(false, null); TrailRenderer trailRenderer = new TrailRenderer(tmp); MeshRenderer meshRenderer = new MeshRenderer(tmp); NavMeshAgent navMeshAgent = new NavMeshAgent(tmp); //merging both EntityActionBuffer.Instance.AddComponent(tmp, miam); EntityActionBuffer.Instance.AddComponent(tmp, score); EntityActionBuffer.Instance.AddComponent(tmp, vendetta); EntityActionBuffer.Instance.AddComponent(tmp, trailRenderer); EntityActionBuffer.Instance.AddComponent(tmp, meshRenderer); EntityActionBuffer.Instance.AddComponent(tmp, navMeshAgent); } }
public override void Update() { new EntityQuery() .With <TargetEdible>() .With <Score>() .With <Vendetta>() .ForEach(obj => { Vendetta vendetta = obj.GetECSComponent <Vendetta>(); //pecsman death Death(obj); //normal behavior is not in vendetta state if (!vendetta.WantToDoVendetta) { TargetEdible food = obj.GetECSComponent <TargetEdible>(); PickClosestFood(obj, food); EatFood(obj, food); if (food.Target != null) { obj.GetECSComponent <NavMeshAgent>().UnityComponent.SetDestination(food.Target.transform.position); } } else { //in vendetta state so now just want to kill is killer nothing else if (!vendetta.Target.GetECSComponent <FollowTarget>().HasBeenCalmDown) { obj.GetECSComponent <NavMeshAgent>().UnityComponent.SetDestination(vendetta.Target.transform.position); if (Vector3.Distance(obj.transform.position, vendetta.Target.transform.position) <= 1.2f) { FollowTarget traget = vendetta.Target.GetECSComponent <FollowTarget>(); traget.HasBeenCalmDown = true; EntityActionBuffer.Instance.ApplyComponentChanges(vendetta.Target, traget); } } else { vendetta.WantToDoVendetta = false; obj.GetECSComponent <MeshRenderer>().UnityComponent.material.color = Color.green; obj.GetECSComponent <TrailRenderer>().UnityComponent.material.color = Color.green; obj.GetECSComponent <NavMeshAgent>().UnityComponent.speed = 4.5f; EntityActionBuffer.Instance.ApplyComponentChanges(obj, vendetta); } } }); }
private void EatFood(GameObject obj, TargetEdible food) { if (food.Target != null && Vector3.Distance(obj.transform.position, food.Target.transform.position) <= 1.2f) { Edible pocky = food.Target.GetECSComponent <Edible>(); pocky.Active = false; EntityActionBuffer.Instance.ApplyComponentChanges(food.Target, pocky); Score score = obj.GetECSComponent <Score>(); score.Value += 1; EntityActionBuffer.Instance.ApplyComponentChanges(obj, score); } }
private void PickClosestFood(GameObject obj, TargetEdible food) { float dist = float.MaxValue; new EntityQuery() .With <Edible>() .ForEach(pocky => { if (Vector3.Distance(obj.transform.position, pocky.transform.position) < dist) { food.Target = pocky; dist = Vector3.Distance(obj.transform.position, pocky.transform.position); } }); EntityActionBuffer.Instance.ApplyComponentChanges(obj, food); }
public override void SystemUpdate() { for (int i = 0; i < TAccessor <EatEdibleScript> .Instance().GetModules().Count; i++) { TargetEdible targetEd = TAccessor <TargetEdible> .Instance().GetModule(i); Pacman entityPacman = TAccessor <Pacman> .Instance().GetModule(i); if (Vector3.Distance(targetEd.fruitTarget.position, entityPacman.pacman.position) < .5f) { // Le pacman mange un fruit Destroy(targetEd.fruitTarget.gameObject); } } }
public void Run() { Accessor <FollowTarget> modules = Accessor <FollowTarget> .Instance(); foreach (var module in modules.GetAllModules()) { module.Run(); } Accessor <EdibleModule> editableModules = Accessor <EdibleModule> .Instance(); Accessor <TargetEdible> modulesBis = Accessor <TargetEdible> .Instance(); TargetEdible _nearest = null; foreach (var moduleBis in modulesBis.GetAllModules()) { moduleBis.Run(editableModules); } }