58 lines
2.0 KiB
C#
58 lines
2.0 KiB
C#
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<UnityEntitiesCreateService> _logger;
|
|
private readonly IEntitiesFactory _entitiesFactory;
|
|
private readonly IEntitiesService _entitiesService;
|
|
public UnityEntitiesCreateService(IEntitiesFactory entitiesFactory, ILogger<UnityEntitiesCreateService> logger, IEntitiesService entitiesService)
|
|
{
|
|
_entitiesFactory = entitiesFactory;
|
|
_logger = logger;
|
|
_entitiesService = entitiesService;
|
|
|
|
_entitiesService.OnAdd += OnNodeRegistered;
|
|
}
|
|
|
|
private async void OnNodeRegistered(IEntity entity)
|
|
{
|
|
if(entity.ServiceProvider.GetService<UnityEntityFactoryNode>() 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<Transform>();
|
|
|
|
if (transform.TryGetComponent<Rigidbody>(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;
|
|
}
|
|
}
|
|
|
|
}
|