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(); } } }
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>(); } }
public override void OnModificatonPhase(EcsWorld world, EcsEntity entity, StatusEffect effect) { world.RLApplyDamage(entity, entity, effect.Value); }