Inheritance: MonoBehaviour
Exemplo n.º 1
0
        public static async Task LoadDude(EngineContext engineContext)
        {
            var       mainPlugin = engineContext.RenderContext.RenderPassPlugins.OfType <MainPlugin>().FirstOrDefault();
            EffectOld effect     = engineContext.RenderContext.BuildEffect("SimpleSkinning")
                                   .Using(new BasicShaderPlugin("ShaderBase")
            {
                RenderPassPlugin = mainPlugin
            })
                                   .Using(new BasicShaderPlugin("TransformationWVP")
            {
                RenderPassPlugin = mainPlugin
            })
                                   .Using(new BasicShaderPlugin(new ShaderMixinSource()
            {
                new ShaderClassSource("AlbedoDiffuseBase"),
                new ShaderComposition("albedoDiffuse", new ShaderClassSource("ComputeColorTexture", TexturingKeys.DiffuseTexture, "TEXCOORD")),
                new ShaderComposition("albedoSpecular", new ShaderClassSource("ComputeColor")),             // TODO: Default values!
            })
            {
                RenderPassPlugin = mainPlugin
            })
                                   .Using(new BasicShaderPlugin("AlbedoFlatShading")
            {
                RenderPassPlugin = mainPlugin
            })
            ;

            var characterEntity = await AnimScript.LoadFBXModel(engineContext, "/global_data/fbx/test_mesh.hotei#");

            await AnimScript.AnimateFBXModel(engineContext, characterEntity);
        }
Exemplo n.º 2
0
    public int checkTime;                //時間制限(float)をswitch文で使えるようにする変数



    // Use this for initialization
    void Start()
    {
        cntTime = 0.0f;                                   //時間に関する数値の変数を初期化
            checkTime = 0;
        teacherImg.SetBool("TimerStart", false);          //タイマー(先生)を起動
        animScript = AnimMas.GetComponent <AnimScript>(); //アニメーションスクリプトを指定
    }
Exemplo n.º 3
0
 /// <summary>
 /// 初始化
 /// </summary>
 /// <param name="rb"></param>
 /// <param name="animScript"></param>
 public void Init(Rigidbody2D rb, AnimScript animScript, Collion coll, BetterJump betterJump)
 {
     this.rb         = rb;
     this.animScript = animScript;
     this.coll       = coll;
     this.betterJump = betterJump;
     ResetFunction();
 }
Exemplo n.º 4
0
 // Use this for initialization
 void Awake()
 {
     m_animScript       = GetComponent <AnimScript>();
     m_AllGenericStates = GetComponentsInChildren <GenericState>();
     // Then loop through all the state and make sure the states can recognise their owner
     foreach (GenericState state in m_AllGenericStates)
     {
         state.m_FSMOwner = this;
     }
 }
Exemplo n.º 5
0
 // Start is called before the first frame update
 void Start()
 {
     nextQuestions = FindObjectOfType <PlayerText>();
     perdiste.SetActive(false);
     initialPosition       = transform.position;
     ShowLives.livesAmount = 3;
     ShowScore.scoreValue  = 0;
     animedBar();
     canvasAnimation = GameObject.FindGameObjectWithTag("CanvasShake").GetComponent <AnimScript>();
     livesSprite     = GameObject.FindObjectOfType <LivesSprite>();
 }
Exemplo n.º 6
0
    void Start()
    {
        rb     = GetComponent <Rigidbody2D>();
        coll   = GetComponent <CollisionCheck>();
        anim   = GetComponentInChildren <AnimScript>();
        coll2D = GetComponent <BoxCollider2D>();
        sound  = FindObjectOfType <AudioManager>();

        if (MasterControl.Instance.checkpointed == true)
        {
            CheckpointRespawn();
        }
    }
Exemplo n.º 7
0
    void Start()
    {
        cam           = GameObject.Find("ARCamera");
        player_script = cam.GetComponent <Player>();
        healthBar     = GameObject.Find("Cube");
        hp_script     = healthBar.GetComponent <FighterHealthBar>();
        fighter       = GameObject.Find("littleswordfighter");
        anim_script   = fighter.GetComponent <AnimScript>();
        damage_script = GameObject.Find("Canvas").GetComponent <DamageText>();
        isDead        = false;
        isVictorious  = false;

        currentHealth = maxHealth;
    }
Exemplo n.º 8
0
        public static async void LoadScene(EngineContext engineContext)
        {
            //var contentManager = new ContentManager(new ContentSerializerContextGenerator(VirtualFileStorage, engineContext.PackageManager, ParameterContainerExtensions.DefaultSceneSerializer));
            var contentManager = engineContext.AssetManager;

            engineContext.EntityManager.GetSystem <HierarchicalProcessor>().RootEntities.Clear();

            var sceneData = contentManager.Load <EntityGroup>("/sync/package_scene.hotei#");

            foreach (var entity in sceneData.Entities)
            {
                engineContext.EntityManager.AddEntity(entity);
                if (entity.ContainsKey(AnimationComponent.Key))
                {
                    var entityCopy = entity;
                    Scheduler.Current.Add(() => AnimScript.AnimateFBXModel(engineContext, entityCopy));
                }
            }
        }
Exemplo n.º 9
0
        public async static Task ProcessClient(EngineContext engineContext, SocketContext socketContext, SocketContext socketContextAsync)
        {
            socketContext.AddPacketHandler <DownloadFileQuery>(
                async(packet) =>
            {
                var stream = await VirtualFileSystem.OpenStreamAsync(packet.Url, VirtualFileMode.Open, VirtualFileAccess.Read);
                var data   = new byte[stream.Length];
                await stream.ReadAsync(data, 0, data.Length);
                stream.Close();
                socketContext.Send(new DownloadFileAnswer {
                    StreamId = packet.StreamId, Data = data
                });
            });

            socketContext.AddPacketHandler <UploadFilePacket>(
                async(packet) =>
            {
                var stream = await VirtualFileSystem.OpenStreamAsync(packet.Url, VirtualFileMode.Create, VirtualFileAccess.Write);
                await stream.WriteAsync(packet.Data, 0, packet.Data.Length);
                stream.Close();
            });

            var viewModelGlobalContext = new ViewModelGlobalContext();

            selectedEntitiesContext = new ViewModelContext(viewModelGlobalContext);
            selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new EntityComponentEnumerator(engineContext));
            selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new RenderPassPluginEnumerator());
            selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            //selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new EffectPropertyEnumerator(engineContext));

            var renderPassHierarchyContext = new ViewModelContext(viewModelGlobalContext);

            renderPassHierarchyContext.ChildrenPropertyEnumerators.Add(new RenderPassHierarchyEnumerator());
            renderPassHierarchyContext.Root = new ViewModelNode("Root", engineContext.RenderContext.RootRenderPass).GenerateChildren(renderPassHierarchyContext);

            var renderPassPluginsContext = new ViewModelContext(viewModelGlobalContext);

            renderPassPluginsContext.ChildrenPropertyEnumerators.Add(new RenderPassPluginsEnumerator {
                SelectedRenderPassPluginContext = selectedEntitiesContext
            });
            renderPassPluginsContext.Root = new ViewModelNode("Root", new EnumerableViewModelContent <ViewModelReference>(
                                                                  () => engineContext.RenderContext.RenderPassPlugins.Select(x => new ViewModelReference(x, true))));


            var entityHierarchyEnumerator = new EntityHierarchyEnumerator(engineContext.EntityManager, selectedEntitiesContext);
            var entityHierarchyContext    = new ViewModelContext(viewModelGlobalContext);

            entityHierarchyContext.ChildrenPropertyEnumerators.Add(entityHierarchyEnumerator);
            entityHierarchyContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            entityHierarchyContext.Root = new ViewModelNode("EntityHierarchyRoot", new EnumerableViewModelContent <ViewModelReference>(
                                                                () => engineContext.EntityManager.Entities
                                                                .Where(x =>
            {
                var transformationComponent = x.Transformation;
                return(transformationComponent == null || transformationComponent.Parent == null);
            })
                                                                .Select(x => new ViewModelReference(x, true))));

            entityHierarchyEnumerator.SelectedEntities.CollectionChanged += (sender, args) =>
            {
                SelectEntity(entityHierarchyEnumerator.SelectedEntities);
            };
            //entityHierarchyContext.Root.Children.Add(new ViewModelNode("SelectedItems", EnumerableViewModelContent.FromUnaryLambda<ViewModelReference, ViewModelReference>(new NullViewModelContent(),
            //    (x) => { return new[] { new ViewModelReference(pickingSystem.SelectedEntity) }; })));

            /*(value) =>
             *  {
             *      var entityModelView = value != null ? entityHierarchyContext.GetModelView(value.Guid) : null;
             *      var entity = entityModelView != null ? (Entity)entityModelView.NodeValue : null;
             *      SelectEntity(entity);
             *  })));*/
            entityHierarchyContext.Root.Children.Add(new ViewModelNode("DropEntity", new RootViewModelContent((ExecuteCommand)((viewModel2, parameter) =>
            {
                var dropParameters = (DropCommandParameters)parameter;

                var movedItem = dropParameters.Data is Guid ? entityHierarchyContext.GetModelView((Guid)dropParameters.Data) : null;
                var newParent = dropParameters.Parent is Guid ? entityHierarchyContext.GetModelView((Guid)dropParameters.Parent) : null;

                if (newParent == null || movedItem == null)
                {
                    return;
                }

                var parent = ((Entity)newParent.NodeValue).Transformation;
                if (dropParameters.TargetIndex > parent.Children.Count)
                {
                    return;
                }

                var transformationComponent = ((Entity)movedItem.NodeValue).Transformation;
                transformationComponent.Parent = null;
                parent.Children.Insert(dropParameters.TargetIndex, transformationComponent);
            }))));

            entityHierarchyContext.Root.Children.Add(new ViewModelNode("DropAsset", new RootViewModelContent((ExecuteCommand)(async(viewModel2, parameter) =>
            {
                var dropParameters = (DropCommandParameters)parameter;

                var assetUrl = (string)dropParameters.Data;

                /*var newParent = entityHierarchyContext.GetModelView((Guid)dropParameters.Parent);
                 *
                 * if (newParent == null || assetUrl == null)
                 *  return;
                 *
                 * var parent = ((Entity)newParent.NodeValue).Transformation;
                 * if (dropParameters.ItemIndex > parent.Children.Count)
                 *  return;*/

                engineContext.Scheduler.Add(async() =>
                {
                    // Load prefab entity
                    var loadedEntityPrefab = await engineContext.AssetManager.LoadAsync <Entity>(assetUrl + "#");

                    // Build another entity from prefab
                    var loadedEntity = Prefab.Inherit(loadedEntityPrefab);

                    // Add it to scene
                    engineContext.EntityManager.AddEntity(loadedEntity);

                    if (loadedEntity.ContainsKey(AnimationComponent.Key))
                    {
                        Scheduler.Current.Add(() => AnimScript.AnimateFBXModel(engineContext, loadedEntity));
                    }
                });
            }))));

            var scriptEngineContext = new ViewModelContext(viewModelGlobalContext);

            scriptEngineContext.ChildrenPropertyEnumerators.Add(new ScriptAssemblyEnumerator(engineContext));
            scriptEngineContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            scriptEngineContext.Root = new ViewModelNode(new EnumerableViewModelContent <ViewModelReference>(
                                                             () => engineContext.ScriptManager.ScriptAssemblies.Select(x => new ViewModelReference(x, true))));
            scriptEngineContext.Root.Children.Add(new ViewModelNode("RunScript", new RootViewModelContent((ExecuteCommand)(async(viewModel2, parameter) =>
            {
                var scriptName = (string)parameter;
                var matchingScript = engineContext.ScriptManager.Scripts.Where(x => x.TypeName + "." + x.MethodName == scriptName);
                if (matchingScript.Any())
                {
                    var scriptEntry = matchingScript.Single();
                    var microThread = engineContext.ScriptManager.RunScript(scriptEntry, null);
                }
            }))));

            var runningScriptsContext = new ViewModelContext(viewModelGlobalContext);

            runningScriptsContext.ChildrenPropertyEnumerators.Add(new MicroThreadEnumerator(selectedEntitiesContext));
            runningScriptsContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            runningScriptsContext.Root = new ViewModelNode("MicroThreads", new EnumerableViewModelContent <ViewModelReference>(
                                                               () => engineContext.Scheduler.MicroThreads.Select(x => new ViewModelReference(x, true))
                                                               ));

            var effectsContext = new ViewModelContext(viewModelGlobalContext);

            effectsContext.ChildrenPropertyEnumerators.Add(new EffectEnumerator(selectedEntitiesContext));
            effectsContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            effectsContext.Root = new ViewModelNode("Effects", new EnumerableViewModelContent <ViewModelReference>(
                                                        () => engineContext.RenderContext.Effects.Select(x => new ViewModelReference(x, true))
                                                        ));
            //effectsContext.Root.Children.Add(new ViewModelNode("PluginDefinitions", new RootViewModelContent()));

            var assetBrowserContext = new ViewModelContext(viewModelGlobalContext);

            assetBrowserContext.ChildrenPropertyEnumerators.Add(new AssetBrowserEnumerator(engineContext));
            assetBrowserContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            assetBrowserContext.Root = new ViewModelNode("Root", "Root").GenerateChildren(assetBrowserContext);

            var editorContext = new ViewModelContext(viewModelGlobalContext);

            editorContext.Root = new ViewModelNode("Root");
            editorContext.Root.Children.Add(new ViewModelNode("SwitchSelectionMode", new CommandViewModelContent((sender, parameters) => { pickingSystem.ActiveGizmoActionMode = PickingSystem.GizmoAction.None; })));
            editorContext.Root.Children.Add(new ViewModelNode("SwitchTranslationMode", new CommandViewModelContent((sender, parameters) => { pickingSystem.ActiveGizmoActionMode = PickingSystem.GizmoAction.Translation; })));
            editorContext.Root.Children.Add(new ViewModelNode("SwitchRotationMode", new CommandViewModelContent((sender, parameters) => { pickingSystem.ActiveGizmoActionMode = PickingSystem.GizmoAction.Rotation; })));

            var contexts = new Dictionary <string, Tuple <ViewModelContext, ViewModelState> >();

            contexts.Add("Editor", Tuple.Create(editorContext, new ViewModelState()));
            contexts.Add("RenderPassPlugins", Tuple.Create(renderPassPluginsContext, new ViewModelState()));
            contexts.Add("RenderPasses", Tuple.Create(renderPassHierarchyContext, new ViewModelState()));
            contexts.Add("SelectedEntities", Tuple.Create(selectedEntitiesContext, new ViewModelState()));
            contexts.Add("EntityHierarchy", Tuple.Create(entityHierarchyContext, new ViewModelState()));
            contexts.Add("ScriptEngine", Tuple.Create(scriptEngineContext, new ViewModelState()));
            contexts.Add("MicroThreads", Tuple.Create(runningScriptsContext, new ViewModelState()));
            contexts.Add("AssetBrowser", Tuple.Create(assetBrowserContext, new ViewModelState()));
            contexts.Add("Effects", Tuple.Create(effectsContext, new ViewModelState()));

            int lastAckPacket = 0;

            var entitiesChangePackets = new ConcurrentQueue <EntitiesChangePacket>();

            socketContext.AddPacketHandler <EntitiesChangePacket>(
                (packet) =>
            {
                entitiesChangePackets.Enqueue(packet);
                entitiesChangePacketEvent.Set();
            });

            Action asyncThreadStart = () =>
            {
                while (true)
                {
                    Thread.Sleep(100);
                    foreach (var context in contexts)
                    {
                        // Process async data
                        Guid[] path  = null;
                        object value = null;
                        lock (context.Value.Item1)
                        {
                            var pendingNode = context.Value.Item1.GetNextPendingAsyncNode();
                            if (pendingNode != null)
                            {
                                value = pendingNode.Value;
                                path  = ViewModelController.BuildPath(pendingNode);
                            }
                        }
                        if (path != null)
                        {
                            // Temporary encoding through our serializer (until our serializer are used for packets)
                            var memoryStream = new MemoryStream();
                            var writer       = new BinarySerializationWriter(memoryStream);
                            writer.SerializeExtended(null, value, ArchiveMode.Serialize);

                            var change = new NetworkChange {
                                Path = path.ToArray(), Type = NetworkChangeType.ValueUpdateAsync, Value = memoryStream.ToArray()
                            };
                            var packet = new EntitiesChangePacket {
                                GroupKey = context.Key, Changes = new NetworkChange[] { change }
                            };
                            socketContextAsync.Send(packet);
                            break;
                        }
                    }
                }
            };

            new Thread(new ThreadStart(asyncThreadStart)).Start();

            // TODO: Move some of this code directly inside ViewModelContext/Controller classes
            while (true)
            {
                await TaskEx.WhenAny(TaskEx.Delay(250), entitiesChangePacketEvent.WaitAsync());

                EntitiesChangePacket packet;
                while (entitiesChangePackets.TryDequeue(out packet))
                {
                    ViewModelController.NetworkApplyChanges(contexts[packet.GroupKey].Item1, packet.Changes);
                    lastAckPacket = packet.Index;
                }

                // Wait a single frame so that network updates get applied properly by all rendering systems for next update
                await Scheduler.Current.NextFrame();

                // If entity disappeared, try to replace it with new one (happen during file reload)
                // It's little bit cumbersome to test, need some simplification of this specific entity view model root.
                if (selectedEntitiesContext.Root != null &&
                    selectedEntitiesContext.Root.Parent != null &&
                    selectedEntitiesContext.Root.Parent.NodeValue is Entity)
                {
                    var entity = (Entity)selectedEntitiesContext.Root.Parent.NodeValue;
                    if (!engineContext.EntityManager.Entities.Contains(entity))
                    {
                        entity = engineContext.EntityManager.Entities.FirstOrDefault(x => x.Guid == entity.Guid);
                        if (entity != null)
                        {
                            selectedEntitiesContext.ViewModelByGuid.Clear();
                            selectedEntitiesContext.Root = selectedEntitiesContext.GetModelView(entity).Children.First(x => x.PropertyName == "Components");
                        }
                    }
                }

                var data = new Dictionary <string, byte[]>();
                foreach (var context in contexts)
                {
                    lock (context.Value.Item1)
                    {
                        if (context.Value.Item1.Root != null)
                        {
                            context.Value.Item1.AddModelView(context.Value.Item1.Root);
                        }
                        ViewModelController.UpdateReferences(context.Value.Item1, true);
                        data[context.Key] = ViewModelController.NetworkSerialize(context.Value.Item1, context.Value.Item2);
                    }
                }

                viewModelGlobalContext.UpdateObjects(contexts.Select(x => x.Value.Item1));

                //Console.WriteLine("DataSize: {0}", data.Sum(x => x.Value.Length));
                await Task.Factory.StartNew(() => socketContext.Send(new EntitiesUpdatePacket {
                    AckIndex = lastAckPacket, Data = data
                }));
            }
        }
Exemplo n.º 10
0
 private void Start()
 {
     anim = FindObjectOfType <AnimScript>();
     move = FindObjectOfType <PlayerControl>();
     sr   = GetComponent <SpriteRenderer>();
 }
Exemplo n.º 11
0
 private void Start()
 {
     anim = FindObjectOfType <AnimScript>();
     move = FindObjectOfType <MoveFunction>();
     sr   = GetComponent <SpriteRenderer>();
 }
Exemplo n.º 12
0
        public static async Task Run(EngineContext engineContext)
        {
            var renderingSetup = RenderingSetup.Singleton;

            renderingSetup.RegisterLighting(engineContext);

            ParticlePlugin particlePlugin;

            if (engineContext.DataContext.RenderPassPlugins.TryGetValueCast("ParticlePlugin", out particlePlugin))
            {
                ScriptParticleSmoke.Run(engineContext);
            }


            var yebisPlugin = engineContext.RenderContext.RenderPassPlugins.OfType <YebisPlugin>().FirstOrDefault();

            if (yebisPlugin != null)
            {
                var yebisConfig = AppConfig.GetConfiguration <YebisConfig>("Yebis");

                // yebisPlugin.ToneMap.Type = ToneMapType.Linear;
                yebisPlugin.ToneMap.Gamma = yebisConfig.Gamma;
                yebisPlugin.ColorCorrection.Saturation       = yebisConfig.Saturation;
                yebisPlugin.ColorCorrection.Contrast         = yebisConfig.Contrast;
                yebisPlugin.ColorCorrection.Brightness       = yebisConfig.Brightness;
                yebisPlugin.ColorCorrection.ColorTemperature = yebisConfig.ColorTemperature;
                yebisPlugin.Lens.Vignette.Enable             = true;
                yebisPlugin.Lens.Vignette.PowerOfCosine      = 5.0f;
                yebisPlugin.Lens.Distortion.Enable           = true;
                yebisPlugin.Lens.Distortion.EdgeRoundness    = 0.1f;
                yebisPlugin.Lens.Distortion.EdgeSmoothness   = 1.0f;
            }

            // Run the script to animate the intro fade-in/fade-out
            engineContext.Scheduler.Add(async() => await AnimateIntroAndEndScene(engineContext));

            var cameraEntityRootPrefab = await engineContext.AssetManager.LoadAsync <Entity>("/global_data/gdc_demo/char/camera.hotei#");

            var lightCamEntityRootPrefab = await engineContext.AssetManager.LoadAsync <Entity>("/global_data/gdc_demo/char/light_cam.hotei#");

            var lightCamEntityRoot = Prefab.Inherit(lightCamEntityRootPrefab);
            var cameraEntityRoot   = Prefab.Inherit(cameraEntityRootPrefab);

            engineContext.EntityManager.AddEntity(cameraEntityRoot);
            engineContext.EntityManager.AddEntity(lightCamEntityRoot);
            Scheduler.Current.Add(() => AnimScript.AnimateFBXModel(engineContext, cameraEntityRoot, CaveSceneTotalTime, CaveSceneRestart));
            Scheduler.Current.Add(() => AnimScript.AnimateFBXModel(engineContext, lightCamEntityRoot, CaveSceneTotalTime, CaveSceneRestart));

            foreach (var light in ParameterContainerExtensions.CollectEntityTree(lightCamEntityRoot))
            {
                var lightComp = light.Get(LightComponent.Key);
                if (lightComp != null)
                {
                    if (!lightComp.ShadowMap && lightComp.Type == LightType.Directional)
                    {
                        lightComp.Intensity *= 0.1f;
                    }
                }
            }

            var config = AppConfig.GetConfiguration <Script1.Config>("Script1");

            var shadowMap1 = new Entity();
            var shadowMap2 = new Entity();

            shadowMap1.Set(TransformationComponent.Key, TransformationTRS.CreateComponent());
            shadowMap2.Set(TransformationComponent.Key, TransformationTRS.CreateComponent());
            shadowMap1.Set(LightComponent.Key, new LightComponent {
                Type = LightType.Directional, Intensity = 0.9f, Color = new Color3(0.9f, 0.9f, 1.0f), LightDirection = new Vector3(-0.2f, -0.1f, -1.0f), ShadowMap = true, DecayStart = 40000.0f
            });
            shadowMap2.Set(LightComponent.Key, new LightComponent {
                Type = LightType.Directional, Color = new Color3(1.0f, 1.0f, 1.0f), LightDirection = new Vector3(-0.5f, 0.1f, -1.0f), ShadowMap = true, DecayStart = 40000.0f
            });
            shadowMap1.Set(LightShaftsComponent.Key, new LightShaftsComponent {
                Color = new Color3(1.0f, 1.0f, 1.0f), LightShaftsBoundingBoxes =
                {
                    new EffectMeshData {
                        MeshData = MeshDataHelper.CreateBox(1, 1, 1, Color.White, true), Parameters = new ParameterCollection{
                            { TransformationKeys.World, Matrix.Scaling(3000, 3500, 3000) * Matrix.Translation(-2500, 0, 1500) }
                        }
                    }
                }
            });
            shadowMap2.Set(LightShaftsComponent.Key, new LightShaftsComponent {
                Color = new Color3(1.0f, 1.0f, 1.0f), LightShaftsBoundingBoxes =
                {
                    new EffectMeshData {
                        MeshData = MeshDataHelper.CreateBox(1, 1, 1, Color.White, true), Parameters = new ParameterCollection{
                            { TransformationKeys.World, Matrix.Scaling(3500, 3500, 3000) * Matrix.Translation(-3000, 0, 1500) }
                        }
                    }
                }
            });

            engineContext.EntityManager.AddEntity(shadowMap1);
            engineContext.EntityManager.AddEntity(shadowMap2);


            var dragon = await LoadDragon(engineContext);

            await LoadCave(engineContext, dragon);

            var dragonHead = engineContext.EntityManager.Entities.FirstOrDefault(x => x.Name == "English DragonHead");
            TransformationTRS headCameraTransfo = null;

            if (dragonHead != null)
            {
                var headCamera = new Entity("Head camera");
                headCamera.Set(CameraComponent.Key, new CameraComponent {
                    AspectRatio = 16.0f / 9.0f, VerticalFieldOfView = (float)Math.PI * 0.3f, Target = dragonHead, AutoFocus = true, NearPlane = 10.0f
                });
                headCamera.Set(TransformationComponent.Key, new TransformationComponent(new TransformationTRS {
                    Translation = new Vector3(100.0f, -100.0f, 300.0f)
                }));
                //engineContext.EntitySystem.Entities.Add(headCamera);
                dragonHead.Transformation.Children.Add(headCamera.Transformation);
            }

            engineContext.Scheduler.Add(() => AnimateLights(engineContext));

            // Performs several full GC after the scene has been loaded
            for (int i = 0; i < 10; i++)
            {
                GC.Collect();
                Thread.Sleep(1);
            }

            while (true)
            {
                await engineContext.Scheduler.NextFrame();

                if (headCameraTransfo != null)
                {
                    var   time          = (double)DateTime.UtcNow.Ticks / (double)TimeSpan.TicksPerSecond;
                    float rotationSpeed = 0.317f;
                    var   position      = new Vector2((float)Math.Cos(time * rotationSpeed), (float)Math.Sin(time * rotationSpeed)) * 330.0f * ((float)Math.Sin(time * 0.23f) * 0.4f + 0.9f);
                    headCameraTransfo.Translation = new Vector3(position.X, -150.0f + (float)Math.Cos(time * rotationSpeed) * 50.0f, position.Y);
                }

                if (engineContext.InputManager.IsKeyPressed(Keys.F1))
                {
                    bool isWireframeEnabled = renderingSetup.ToggleWireframe();
                    if (yebisPlugin != null)
                    {
                        yebisPlugin.DepthOfField.Enable    = !isWireframeEnabled;
                        yebisPlugin.Lens.Vignette.Enable   = !isWireframeEnabled;
                        yebisPlugin.Lens.Distortion.Enable = !isWireframeEnabled;
                    }
                }

                if (engineContext.InputManager.IsKeyPressed(Keys.D1))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(0);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D2))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(10);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D3))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(20);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D4))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(30);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D5))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(40);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D6))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(50);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D7))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(60);
                }
                if (engineContext.InputManager.IsKeyPressed(Keys.D8))
                {
                    engineContext.CurrentTime = TimeSpan.FromSeconds(70);
                }

                if (engineContext.InputManager.IsKeyPressed(Keys.T))
                {
                    if (particlePlugin != null)
                    {
                        particlePlugin.EnableSorting = !particlePlugin.EnableSorting;
                    }
                }
            }
        }
Exemplo n.º 13
0
        //[ParadoxScript]
        public static async Task <Entity> LoadDragon(EngineContext engineContext)
        {
            var renderingSetup = RenderingSetup.Singleton;

            renderingSetup.RegisterLighting(engineContext);

            var characterEntity = await AnimScript.LoadFBXModel(engineContext, "/global_data/gdc_demo/char/dragon_camera.hotei#");

            characterEntity.Name = "Dragon";
            Scheduler.Current.Add(() => AnimScript.AnimateFBXModel(engineContext, characterEntity, CaveSceneTotalTime, CaveSceneRestart));

            // Setup predefined specular intensities/power for dragon
            foreach (var entity in ParameterContainerExtensions.CollectEntityTree(characterEntity))
            {
                var meshComponent = entity.Get(ModelComponent.Key);
                if (meshComponent == null)
                {
                    continue;
                }

                foreach (var effectMesh in meshComponent.InstantiatedSubMeshes)
                {
                    effectMesh.Value.Parameters.Set(TessellationKeys.DesiredTriangleSize, 4.0f);

                    switch (effectMesh.Key.EffectData.Part)
                    {
                    case "skin":
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.4f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.4f);
                        break;

                    case "mouth":
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.3f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.3f);
                        break;

                    case "skin2":
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.5f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.5f);
                        break;

                    case "wing":
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.4f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.5f);
                        break;

                    case "tooth":
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.4f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.7f);
                        break;

                    case "eye":
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.7f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.7f);
                        break;

                    default:
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularPower, 0.3f);
                        effectMesh.Value.Parameters.Set(MaterialKeys.SpecularIntensity, 0.3f);
                        break;
                    }
                }
            }

            return(characterEntity);
        }