Beispiel #1
0
        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());
                }
            }
        }
Beispiel #2
0
        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);
        }