public void Execute() { // Следим за здоровьем игровых объектов. HealthNode node; for (int i = _healthNodes.Count - 1; i >= 0; i--) { node = _healthNodes[i]; if (node.Health.HP <= 0.0f) { // Удаляем игровые объекты если они не обладают достаточнм здоровьем. _engine.RemoveEntity(node.entity); GameObject.DestroyObject(node.entity.gameObject); } } // Обновляем состояние для панелей здоровья. KeyValuePair <HealthNode, HealthBar> pair; for (int i = 0, n = _healthBars.Count; i < n; i++) { pair = _healthBars[i]; pair.Value.HP = pair.Key.Health.HP; pair.Value.Position = pair.Key.entity.Position; } }
public void Execute() { float dist = 0.0f; float ang = 0.0f; Vector2 force = new Vector2(); MagnetNode magnet; MagnetableNode item; for (int i = 0, n = _magnetNodes.Count; i < n; i++) { magnet = _magnetNodes[i]; for (int j = _magnetableNodes.Count - 1; j >= 0; j--) { item = _magnetableNodes[j]; item.Magnetable.lifeTime += Time.deltaTime; dist = AntMath.Distance(magnet.entity.Position, item.entity.Position); if ((magnet.Magnet.magnetKind == item.Magnetable.kind || magnet.Magnet.magnetKind == ItemKind.All) && dist < magnet.Magnet.distance && item.Magnetable.lifeTime > 2.0f) { ang = AntMath.AngleRad(item.entity.Position, magnet.entity.Position); force.x = magnet.Magnet.force * Mathf.Cos(ang); force.y = magnet.Magnet.force * Mathf.Sin(ang); item.Magnetable.body.AddForce(force, ForceMode2D.Impulse); if (dist <= magnet.Magnet.collectDistance) { CollectItem(magnet, item); _engine.RemoveEntity(item.entity); GameObject.Destroy(item.entity.gameObject); } } } } }