Exemple #1
0
        void IEcsRunSystem.Run()
        {
            foreach (var i in _projectileEntities)
            {
                ref var e  = ref _projectileEntities.Entities[i];
                var     c1 = _projectileEntities.Get1[i];
                var     c2 = _projectileEntities.Get2[i];

                if (!c1.Run)
                {
                    c1.StartPosition = c2.GO.Rigidbody.position;
                    c1.Run           = true;
                }

                if (c1.Run)
                {
                    var nextPosition = Vector2.MoveTowards(c2.GO.Rigidbody.position, c1.GoalPosition, SPEED * Time.deltaTime);
                    c2.GO.Rigidbody.MovePosition(nextPosition);

                    float sqrDistanceToGoal = (c2.GO.Rigidbody.position - c1.GoalPosition).sqrMagnitude;
                    if (sqrDistanceToGoal < float.Epsilon)
                    {
                        _world.RLApplyDamage(c1.Target, c1.Caster, c1.Weapon.Damage);

                        e.RLDestoryGO();
                    }
                }
            }
Exemple #2
0
        void IEcsRunSystem.Run()
        {
            foreach (var i in _attackingEntities)
            {
                ref var e  = ref _attackingEntities.Entities[i];
                var     c1 = _attackingEntities.Get1[i];
                var     c2 = _attackingEntities.Get2[i];
                var     c3 = _attackingEntities.Get3[i];

                if (!c1.Run)
                {
                    c1.Run = true;
                    var c = e.Set <ActionAnimationComponent>();
                    c.Animation = AnimatorField.AnimationAttack;
                }

                if (c1.Run && !c1.OnAttack && c2.GO.AnimatorActionTime > attackTime)
                {
                    c1.OnAttack = true;
                    if (c1.PrimaryOrSecondaryWeapon)
                    {
                        _world.RLCreateEffect(c1.TargetPosition, c3.PrimaryWeapon.HitEffect);
                        _world.RLApplyDamage(c1.Target, e, c3.PrimaryWeapon.Damage);
                        if (c3.PrimaryWeapon.SpellPreset != null)
                        {
                            _world.RLApplySpell(c1.Target, e, c3.PrimaryWeapon.SpellPreset);
                        }
                    }
                    else
                    {
                        var go = VExt.LayoutSpriteObject(
                            ObjData.r_PrefabPhysicsSprite,
                            c2.GO.Rigidbody.position,
                            ObjData.t_GameObjectsOther,
                            SortingLayer.Effect.ToString(),
                            c3.SecondaryWeapon.ProjectileSprite);

                        _world.NewEntityWith(out GameObjectComponent goComponent, out ProjectileComponent projectileComponent);
                        goComponent.Transform = go.transform;
                        goComponent.GO        = go.GetComponent <PrefabComponentsShortcut>();

                        projectileComponent.StartPosition = c2.GO.Rigidbody.position;
                        projectileComponent.GoalPosition  = c1.TargetPosition;
                        projectileComponent.Caster        = e;
                        projectileComponent.Target        = c1.Target;
                        projectileComponent.Weapon        = c3.SecondaryWeapon;
                    }
                }

                if (c1.Run && c1.OnAttack && !c2.GO.AnimatorActionRun)
                {
                    e.Unset <ActionAttackComponent>();
                }
            }
Exemple #3
0
 public override void OnModificatonPhase(EcsWorld world, EcsEntity entity, StatusEffect effect)
 {
     world.RLApplyDamage(entity, entity, effect.Value);
 }