private void HandleLoader(EquipmentChanged arg, ModelLoaderComponent loader) { if (!loader.OnlyActiveWhileEquipped) { return; } var entity = arg.Owner; if (arg.Owner == null && loader.LoadedComponents.Count > 0) { UnityToEntityBridge.Unregister(entity); for (int i = 0; i < loader.LoadedComponents.Count; i++) { entity.Remove(loader.LoadedComponents[i]); } loader.LoadedComponents.Clear(); loader.LoadedModel = null; } else if (arg.Owner != null && loader.LoadedModel == null) { var parent = arg.Slot.EquipTr; var model = ItemPool.Spawn(loader.ModelName); if (parent != null) { model.transform.SetParentResetPos(parent); } loader.LoadedModel = new CachedGenericComponent <IRenderingComponent>(model.GetComponent <IRenderingComponent>()); if (loader.LoadedModel == null) { ItemPool.Despawn(model.gameObject); return; } UnityToEntityBridge.RegisterToEntity(model.gameObject, entity); loader.LoadedComponents.Add(entity.Add(new RenderingComponent(loader.LoadedModel.Value)).GetType()); loader.LoadedComponents.Add(entity.Add(new TransformComponent(model.Transform)).GetType()); loader.LoadedComponents.Add( entity.Add(new FloatingTextStatusComponent(model.Transform, new Vector3(0, 1.5f, 0))).GetType()); var rb = model.GetComponent <Rigidbody>(); if (rb != null) { loader.LoadedComponents.Add(entity.Add(new RigidbodyComponent(rb)).GetType()); } } }
public Entity SpawnProjectile(Entity owner, string id, Vector3 target, Vector3 spawnPos, Quaternion spawnRot) { if (_templates.Count == 0) { Init(); } if (!_templates.TryGetValue(id, out var template)) { #if DEBUG DebugLog.Add("Couldn't find project template " + id, false); #endif return(null); } var entity = GetProjectile(template); var node = entity.GetNode <ProjectileNode>(); node.MoveTarget.SetMoveTarget(target); if (template.ActionFx != null) { node.ActionFx.ChangeFx(template.ActionFx); } var prefab = ItemPool.Spawn(UnityDirs.ActionSpawn, template.Type, spawnPos, spawnRot); if (prefab == null) { return(entity); } var spawn = prefab.GetComponent <IProjectile>(); entity.Add(new TransformComponent(prefab.Transform)); switch (template.Type) { default: case "Simple": break; case "SpriteAnimation": spawn.SetColor(template.MainColor, Color.white * template.GlowPower); if (template.Animation != null) { var spriteRenderer = prefab.Renderers[0] as SpriteRenderer; entity.Add(new SpriteAnimationComponent(spriteRenderer, template.Animation, false, template.Billboard)); } break; case "VolumeLaser": spawn.SetColor(template.MainColor, template.OffsetColor); break; } spawn.SetSize(template.Size, template.Length); switch (template.Movement) { case "Forward": case "Arc": prefab.Transform.LookAt(target, prefab.Transform.up); break; case "Force": //var force = transform.forward * ForceRange.Lerp(Mathf.Clamp01(charging.ElapsedTime / MaxChargeTime)); break; } if (spawn.Rigidbody != null) { node.Rb.SetRb(spawn.Rigidbody); } entity.Tags.Add(EntityTags.Moving); node.Rendering.Set(spawn); UnityToEntityBridge.RegisterToEntity(prefab.Transform.gameObject, entity); entity.ParentId = owner.Id; entity.Post(new ProjectileSpawned(template, entity)); return(entity); }