コード例 #1
0
ファイル: PecsManSystem.cs プロジェクト: Cewein/pecs-man
        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);
            }
        }
コード例 #2
0
ファイル: PecsManSystem.cs プロジェクト: Cewein/pecs-man
        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);
                    }
                }
            });
        }
コード例 #3
0
ファイル: PecsManSystem.cs プロジェクト: Cewein/pecs-man
        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);
            }
        }
コード例 #4
0
ファイル: PecsManSystem.cs プロジェクト: Cewein/pecs-man
        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);
        }
コード例 #5
0
ファイル: EatEdibleUpdater.cs プロジェクト: eldoria/PacmanECS
    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);
            }
        }
    }
コード例 #6
0
ファイル: System.cs プロジェクト: Atomix85/PoolECS
    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);
        }
    }