Exemple #1
0
    protected override void OnUpdate()
    {
        if (IsLocked())
        {
            return;
        }

        Entities.ForEach((Entity entity, ref ControlComponent controlComp, ref AnimationFrameComponent animComp) => {
            if (EntityManager.HasComponent <AttackComponent>(entity))
            {
                if (1.0f <= animComp.frameRate)
                {
                    EntityManager.RemoveComponent <AttackComponent>(entity);
                }

                if (false == AnimUtility.HasState(animComp, AnimUtility.attack))
                {
                    animComp.state |= AnimUtility.attack;
                }
            }
            else
            {
                if (AnimUtility.HasState(animComp, AnimUtility.attack))
                {
                    animComp.state ^= AnimUtility.attack;
                }
            }
        });
    }
Exemple #2
0
    protected override void OnUpdate()
    {
        Entities
        .WithoutBurst()
        .WithStructuralChanges()
        .ForEach((Entity entity, SpriteRenderer renderer, ref HitComponent hitComp, ref AnimationFrameComponent animComp) => {
            if (false == AnimUtility.HasState(animComp, AnimUtility.hit))
            {
                animComp.state |= AnimUtility.hit;
                renderer.color  = hitComp.hitEffectColor;
                GamePause.Pause(0.15f);
            }

            hitComp.elapsedTime += Time.DeltaTime;
            if ((hitComp.elapsedTime >= hitComp.hitEffectTime) && (renderer.color == hitComp.hitEffectColor))
            {
                renderer.color = Color.white;
            }
            else if (hitComp.elapsedTime >= hitComp.godTime)
            {
                animComp.state ^= AnimUtility.hit;
                EntityManager.RemoveComponent <HitComponent>(entity);
                EntityManager.RemoveComponent <MoveComponent>(entity);
            }
        }).Run();
    }
Exemple #3
0
    protected override void OnUpdate()
    {
        Entities.WithoutBurst()
        .WithStructuralChanges()
        .ForEach((Entity entity, SpriteRenderer renderer, ref AnimationFrameComponent animComp) => {
            if (false == EntityManager.HasComponent <SpritePresetComponent>(entity))
            {
                return;
            }

            var preset = EntityManager.GetSharedComponentData <SpritePresetComponent>(entity);
            if (false == preset.value.datas.TryGetValue(animComp.currentAnim, out var animData))
            {
                return;
            }

            var frame = animComp.frame;
            if (frame > animData.length)
            {
                frame = AnimUtility.IsLooping(animComp) ? frame % animData.length : animData.length;
            }

            animComp.frameRate = frame / animData.length;

            var index = 0;
            for (var i = 0; i < animData.timelines.Count; ++i)
            {
                var timeline = animData.timelines[i];

                if (frame >= timeline.start &&
                    frame <= timeline.end)
                {
                    index = i;
                    break;
                }
            }

            if (EntityManager.HasComponent <AnimationLockComponent>(entity))
            {
                var lockComp = EntityManager.GetComponentData <AnimationLockComponent>(entity);
                index        = index > lockComp.frameIndex ? lockComp.frameIndex : index;
            }

            animComp.bFirstChangeIndex = animComp.currentIndex != index;
            animComp.currentIndex      = index;

            renderer.sprite = animData.timelines[index].sprite;
            renderer.flipX  = animComp.bFlipX;
        })
        .Run();
    }
Exemple #4
0
    protected override void OnUpdate()
    {
        var deltaTime = Time.DeltaTime;

        Entities
        .WithBurst()
        .ForEach((ref AnimationFrameComponent animComp) => {
            var animKey = AnimUtility.GetAnimKey(animComp);

            if (animComp.currentAnim != animKey)
            {
                animComp.currentAnim = animKey;
                animComp.frame       = 0.0f;
                animComp.frameRate   = 0.0f;
                return;
            }

            animComp.frame += deltaTime;
        })
        .ScheduleParallel(Dependency)
        .Complete();
    }
Exemple #5
0
    protected override void OnUpdate()
    {
        if (GameOver.bIsOvered == hasBeenOvered)
        {
            return;
        }

        hasBeenOvered = GameOver.bIsOvered;

        if (GameOver.bIsOvered)
        {
            Entities.WithName("GameOverSystem")
            .WithoutBurst()
            .WithStructuralChanges()
            .ForEach((Entity entity, ref TargetIdComponent idComp, ref AnimationFrameComponent animComp) => {
                if (IdUtility.Id.Player != idComp.value)
                {
                    return;
                }

                if (false == AnimUtility.HasState(animComp, AnimUtility.hit))
                {
                    animComp.state |= AnimUtility.hit;
                }

                if (false == EntityManager.HasComponent <GUIComponent>(Utility.SystemEntity))
                {
                    EntityManager.AddComponentData(Utility.SystemEntity, new GUIComponent()
                    {
                        id = IdUtility.GUIId.Over
                    });
                }
            })
            .Run();
        }
    }
 static void Init()
 {
     s_window = EditorWindow.GetWindow <AnimUtility>(true, "Anim Util", true);
     s_window.Show();
     s_window.Populate();
 }
Exemple #7
0
    protected override void OnUpdate()
    {
        Entities.ForEach((Entity entity, ref Translation transComp, ref MoveComponent moveComp,
                          ref AnimationFrameComponent animComp) => {
            var calcPos = transComp.Value;
            calcPos.y   = GetPositionY(entity, calcPos);
            calcPos.x   = GetPositionX(entity, calcPos);
            var dir     = calcPos - transComp.Value;

            if (false == EntityManager.HasComponent <TargetIdFollowComponent>(entity))
            {
                #region Run

                var bMovingX = math.FLT_MIN_NORMAL < math.abs(moveComp.value.x);
                var bRunning = ((0.0f < dir.x) && (Utility.stepOffset < dir.x)) ||
                               (0.0f > dir.x) && (-Utility.stepOffset > dir.x);
                if (bMovingX || bRunning)
                {
                    animComp.bFlipX = bMovingX ? moveComp.value.x < 0.0f : animComp.bFlipX;

                    if (false == AnimUtility.HasState(animComp, AnimUtility.run))
                    {
                        animComp.state |= AnimUtility.run;
                    }
                }
                else
                {
                    if (AnimUtility.HasState(animComp, AnimUtility.run))
                    {
                        animComp.state ^= AnimUtility.run;
                    }
                }

                #endregion

                #region Jump

                var bMovingY = math.FLT_MIN_NORMAL < math.abs(Utility.terminalVelocity - moveComp.value.y);
                var bFalling = (0.0f > dir.y) && (-Utility.stepOffset > dir.y);
                var bJumping = (0.0f < dir.y) && (Utility.stepOffset < dir.y);
                if (bMovingY || bJumping || bFalling)
                {
                    if (false == AnimUtility.HasState(animComp, AnimUtility.jump))
                    {
                        animComp.state |= AnimUtility.jump;
                    }
                }
                else
                {
                    if (AnimUtility.HasState(animComp, AnimUtility.jump))
                    {
                        animComp.state ^= AnimUtility.jump;
                        EntityManager.AddComponentData(entity, new InstantAudioComponent()
                        {
                            id  = SoundUtility.ClipKey.Landing,
                            pos = calcPos,
                        });
                        var effectSpawnEntity = EntityManager.CreateEntity();
                        EntityManager.AddComponentData(effectSpawnEntity, new EffectSpawnComponent {
                            id    = EffectUtility.Key.Landing,
                            pos   = calcPos,
                            rot   = quaternion.identity,
                            scale = new float3(0.5f)
                        });
                    }
                }

                #endregion

                #region Crouch

                if (EntityManager.HasComponent <CrouchComponent>(entity))
                {
                    animComp.state |= AnimUtility.crouch;
                }
                else if (AnimUtility.HasState(animComp, AnimUtility.crouch))
                {
                    animComp.state ^= AnimUtility.crouch;
                }

                #endregion

                #region FrameLock

                // jump anim lock
                if (EntityManager.HasComponent <CrouchComponent>(entity))
                {
                    EntityManager.AddComponentData(entity, new AnimationLockComponent(1));
                }
                else if (bJumping)
                {
                    if (false == EntityManager.HasComponent <AnimationLockComponent>(entity))
                    {
                        EntityManager.AddComponentData(entity, new AnimationLockComponent(2));
                    }
                }
                else
                {
                    if (EntityManager.HasComponent <AnimationLockComponent>(entity))
                    {
                        EntityManager.RemoveComponent <AnimationLockComponent>(entity);
                    }
                }

                #endregion
            }

            transComp.Value = calcPos;
        });
    }
Exemple #8
0
    protected override void OnUpdate()
    {
        if (IsLocked())
        {
            return;
        }

        Entities.ForEach((Entity entity, ref ControlComponent controlComp, ref AnimationFrameComponent animComp,
                          ref MoveComponent moveComp) => {
            var inputDataComp = EntityManager.GetComponentData <InputDataComponent>(Utility.SystemEntity);

            #region Run
            moveComp.value.x = AnimUtility.IsChangeAnim(animComp, AnimUtility.run) ? inputDataComp.dir : 0.0f;
            #endregion

            #region Jump
            if (AnimUtility.IsChangeAnim(animComp, AnimUtility.jump) &&
                InputUtility.HasState(inputDataComp, InputUtility.jump))
            {
                moveComp.value.y += Utility.jumpForce;

                inputDataComp.state ^= InputUtility.jump;

                EntityManager.AddComponentData(entity, new JumpComponent());
            }
            #endregion

            #region Attack
            if (AnimUtility.IsChangeAnim(animComp, AnimUtility.attack) &&
                InputUtility.HasState(inputDataComp, InputUtility.attack))
            {
                if (false == EntityManager.HasComponent <AttackComponent>(entity))
                {
                    EntityManager.AddComponentData(entity, new AttackComponent());
                }

                // should be once play
                inputDataComp.state ^= InputUtility.attack;
            }
            #endregion

            #region Crouch
            if (AnimUtility.IsChangeAnim(animComp, AnimUtility.crouch) &&
                InputUtility.HasState(inputDataComp, InputUtility.crouch))
            {
                if (false == EntityManager.HasComponent <CrouchComponent>(entity))
                {
                    EntityManager.AddComponentData(entity, new CrouchComponent());

                    var colliderComponent = EntityManager.GetComponentData <PhysicsCollider>(entity);
                    unsafe {
                        var grabCollider = (CapsuleCollider *)colliderComponent.ColliderPtr;
                        var at           = grabCollider->Vertex1 - grabCollider->Vertex0;

                        var geometry           = grabCollider->Geometry;
                        geometry.Vertex1       = geometry.Vertex0 + at * 0.5f;
                        grabCollider->Geometry = geometry;
                    }
                }
            }
            else
            {
                if (EntityManager.HasComponent <CrouchComponent>(entity))
                {
                    EntityManager.RemoveComponent <CrouchComponent>(entity);

                    var colliderComponent = EntityManager.GetComponentData <PhysicsCollider>(entity);
                    unsafe {
                        var grabCollider = (CapsuleCollider *)colliderComponent.ColliderPtr;
                        var at           = grabCollider->Vertex1 - grabCollider->Vertex0;

                        var geometry           = grabCollider->Geometry;
                        geometry.Vertex1       = geometry.Vertex0 + at * 2.0f;
                        grabCollider->Geometry = geometry;
                    }
                }
            }
            #endregion

            #region Gravity
            moveComp.value.y = math.max(moveComp.value.y - Utility.gravity, Utility.terminalVelocity);
            #endregion

            EntityManager.SetComponentData(Utility.SystemEntity, inputDataComp);
        });
    }