using System; using System.Collections; using System.Collections.Generic; using BITKit.Entities; using BITKit.WorldNode; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Project.B.Entities; using UnityEngine; namespace Net.Project.B.WorldNode { public class UnityEntitiesCreateService:IDisposable { private readonly ILogger _logger; private readonly IEntitiesFactory _entitiesFactory; private readonly IEntitiesService _entitiesService; public UnityEntitiesCreateService(IEntitiesFactory entitiesFactory, ILogger logger, IEntitiesService entitiesService) { _entitiesFactory = entitiesFactory; _logger = logger; _entitiesService = entitiesService; _entitiesService.OnAdd += OnNodeRegistered; } private async void OnNodeRegistered(IEntity entity) { if(entity.ServiceProvider.GetService() is not {} entityFactoryNode)return; if(entityFactoryNode.WorldObject is not GameObject gameObject)return; var go =await _entitiesFactory.CreateAsync(entityFactoryNode.Address,null); var transform = go.ServiceProvider.GetRequiredService(); if (transform.TryGetComponent(out var rigidbody)) { rigidbody.MovePosition(gameObject.transform.position); rigidbody.MoveRotation(gameObject.transform.rotation); } else { transform.SetPositionAndRotation(gameObject.transform.position,gameObject.transform.rotation); } _logger.LogDebug($"Entity@{go.Id}:{entityFactoryNode.Address} created"); } public void Dispose() { _entitiesService.OnAdd -= OnNodeRegistered; } } }