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; } } }); }
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(); }
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(); }
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(); }
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(); }
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; }); }
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); }); }