コード例 #1
0
        private List<SceneObjectContainer> FuseefyOb(BaseObject ob)
        {
            if (ob == null)
                return null;

            List<SceneObjectContainer> ret = new List<SceneObjectContainer>();
            do
            {
                SceneObjectContainer soc = new SceneObjectContainer();

                double4x4 mtxD = ob.GetMl();
                soc.Transform = (float4x4) mtxD;
                PolygonObject polyOb = ob as PolygonObject;
                if (polyOb != null)
                {
                    /*double3  padr = ToPoly(op)->GetPointR();
                    CPolygon vadr = ToPoly(op)->GetPolygonR();*/
                    int nPolys = polyOb.GetPolygonCount();
                    ushort nNewVerts = 0;
                    List<float3> verts = new List<float3>();
                    List<ushort> tris = new List<ushort>();

                    for (int i = 0; i < nPolys; i++)
                    {
                        CPolygon poly = polyOb.GetPolygonAt(i);
                        double3 a = polyOb.GetPointAt(poly.a);
                        double3 b = polyOb.GetPointAt(poly.b);
                        double3 c = polyOb.GetPointAt(poly.c);
                        double3 d = polyOb.GetPointAt(poly.d);

                        verts.Add((float3)a);
                        verts.Add((float3)b);
                        verts.Add((float3)c);

                        tris.AddRange(new ushort[] {nNewVerts, (ushort)(nNewVerts+1), (ushort)(nNewVerts+2)});

                        if (c != d)
                        {
                            // The Polyogon is not only a triangle, but a quad. Add the second triangle.
                            verts.Add((float3)d);
                            tris.AddRange(new ushort[] { nNewVerts, (ushort)(nNewVerts + 2), (ushort)(nNewVerts + 3) });
                            nNewVerts += 1;
                        }
                        nNewVerts += 3;
                    }
                    soc.Mesh = new MeshContainer()
                    {
                        Vertices = verts.ToArray(),
                        Triangles = tris.ToArray(),
                    };
                }
                soc.Children = FuseefyOb(ob.GetDown());
                ret.Add(soc);
                ob = ob.GetNext();
            } while (ob != null);
            return ret;
        }
コード例 #2
0
        // is called on startup
        public override void Init()
        {
            // _myMesh = new Cube();
            SceneContainer scene;
            var ser = new Serializer();
            using (var file = File.OpenRead(@"Assets/RGB.fus"))
            {
                scene = ser.Deserialize(file, null, typeof(SceneContainer)) as SceneContainer;
            }

            _sceneRenderer = new SceneRenderer(scene, "Assets");

            // Nach HierWasAendern suchen
            _sceneObject = FindByName("HierWasAendern", scene.Children);

            RC.ClearColor = new float4(0.1f, 0.1f, 0.5f, 1);
            _yAngle = 0;
        }
コード例 #3
0
ファイル: Main.cs プロジェクト: juradosa/BeeTheGame
        public override void Init()
        {
            #region LevelInit
            var seri = new Serializer();
            using (var fileLevel = File.OpenRead(@"Assets/blume_blau.fus"))
            {
                _levelSC = seri.Deserialize(fileLevel, null, typeof(SceneContainer)) as SceneContainer;
            }
            _levelSR = new SceneRenderer(_levelSC, "Assets");
            _levelSOC = FindByName("blaetter", _levelSC.Children);
            #endregion
            #region PlayerInit
            using (var filePlayer = File.OpenRead(@"Assets/blume_blau.fus"))
            {
                _playerSC = seri.Deserialize(filePlayer, null, typeof(SceneContainer)) as SceneContainer;
            }
            _playerSR = new SceneRenderer(_playerSC, "Assets");
            _playerSOC = FindByName("blume_blau_container", _playerSC.Children);
            _playerSOC.Transform.Scale = _playerSOC.Transform.Scale / 6;
            #endregion
            //more GUI stuff
            _guiRender = new GUIRender(RC);

            _sOClist = new SceneObjectContainer[_lanesArray][];
            _sRlist = new SceneRenderer[_lanesArray][];
            _scene = new SceneContainer[_lanesArray][];

            for ( int c1 = 0; c1 < _sOClist.Length; c1++ )
            {
                _sOClist[c1] = new SceneObjectContainer[_arrayLength];
            }
            for (int c2 = 0; c2 < _sOClist.Length; c2++)
            {
                _sRlist[c2] = new SceneRenderer[_arrayLength];
            }
            for (int c3 = 0; c3 < _sOClist.Length; c3++)
            {
                _scene[c3] = new SceneContainer[_arrayLength];
            }

            /*
             _sOClist = new SceneObjectContainer[_lanesArray][_arrayLength];
            _sRlist = new SceneRenderer[_lanesArray][_arrayLength];
            _scene = new SceneContainer[_lanesArray][_arrayLength];
             */

            loadC4D("blume_lila", 0, 3, "blume_lila_container");
            _sOClist[0][3].Transform.Scale = _sOClist[0][3].Transform.Scale / 18;
            _sOClist[0][3].Transform.Translation.x = 25;
            _sOClist[0][3].Transform.Translation.y = 80; //Höhe?
            _sOClist[0][3].Transform.Translation.z = 250; //nach Rechts

            loadC4D("blume_gold", 1, 4, "blume_gold_container");
            _sOClist[1][4].Transform.Scale = _sOClist[1][4].Transform.Scale / 18;
            _sOClist[1][4].Transform.Translation.x = 25;
            _sOClist[1][4].Transform.Translation.y = 60; //Höhe?
            _sOClist[1][4].Transform.Translation.z = 180; //nach Rechts

            RC.ClearColor = new float4(0.1f, 0.1f, 0.5f, 1);
            _yAngle = 0;
            _xPos = 0;
        }
コード例 #4
0
 private static Mesh MakeMesh(SceneObjectContainer soc)
 {
     Mesh rm;
     rm = new Mesh()
     {
         Colors = null,
         Normals = soc.Mesh.Normals,
         UVs = soc.Mesh.UVs,
         Vertices = soc.Mesh.Vertices,
         Triangles = soc.Mesh.Triangles
     };
     return rm;
 }
コード例 #5
0
        protected void VisitNodeRender(SceneObjectContainer soc)
        {
            float4x4 origMV = _rc.ModelView;
            ShaderEffect origMat = CurMat;

            if (soc.Material != null)
            {
                var mat = LookupMaterial(soc.Material);
                CurMat = mat;
            }
            _rc.ModelView = _rc.ModelView * soc.Transform.Matrix();

            if (soc.Mesh != null)
            {
                Mesh rm;
                if (!_meshMap.TryGetValue(soc.Mesh, out rm))
                {
                    rm = MakeMesh(soc);
                    _meshMap.Add(soc.Mesh, rm);
                }

                if (null != CurMat.GetEffectParam(ShaderCodeBuilder.LightDirectionName))
                {
                    RenderWithLights(rm, CurMat);
                }
                else
                {
                    CurMat.RenderMesh(rm);
                }
            }

            if (soc.Children != null)
            {
                foreach (var child in soc.Children)
                {
                    VisitNodeRender(child);
                }
            }

            _rc.ModelView = origMV;
            CurMat = origMat;
        }
コード例 #6
0
        protected AABBf? VisitNodeAABB(SceneObjectContainer soc)
        {
            AABBf? ret = null;
            float4x4 origMV = _AABBXForm;

            _AABBXForm = _AABBXForm * soc.Transform.Matrix();
            if (soc.Mesh != null)
            {
                ret = _AABBXForm * soc.Mesh.BoundingBox;
            }

            if (soc.Children != null)
            {
                foreach (var child in soc.Children)
                {
                    AABBf? nodeBox = VisitNodeAABB(child);
                    if (nodeBox != null)
                    {
                        if (ret == null)
                        {
                            ret = nodeBox;
                        }
                        else
                        {
                            ret = AABBf.Union((AABBf)ret, (AABBf)nodeBox);
                        }
                    }
                }
            }
            _AABBXForm = origMV;
            return ret;
        }
コード例 #7
0
        private void TestDeserialize()
        {
            var ser = new Serializer();
            SceneContainer mc2;
            using (var file = File.OpenRead(@"Assets/Test.fus"))
            {
                mc2 = ser.Deserialize(file, null, typeof(SceneContainer)) as SceneContainer;
            }
            /**/
            Diagnostics.Log(mc2.ToString());
        }

        private void TestSerialize()
        {
            /**/
            var aMesh = new MeshContainer
            {
                Vertices = new[]
                {
                    new float3(-1, -1, -1),
                    new float3(-1, -1, 1),
                    new float3(-1, 1, -1),
                    new float3(1, -1, -1),
                    new float3(1, 1, 1),
                    new float3(-1, 1, 1),
                    new float3(1, -1, 1),
                    new float3(1, 1, -1),
                },
                Normals = new[]
                {
                    new float3(-1, -1, -1),
                    new float3(-1, -1, 1),
                    new float3(-1, 1, -1),
                    new float3(1, -1, -1),
                    new float3(1, 1, 1),
                    new float3(-1, 1, 1),
                    new float3(1, -1, 1),
                    new float3(1, 1, -1),
                },
                Triangles = new ushort[]
                {
                    0, 1, 2,
                    0, 2, 3,
                    0, 3, 1,
                    4, 5, 6,
                    4, 6, 7,
                    4, 7, 5,
                }
            };

            var aChild = new SceneObjectContainer()
            {
                Mesh = aMesh,
                Transform = new TransformContainer(){Rotation = new float3(0, 0, 0), Translation = new float3(0.11f, 0.11f, 0), Scale = new float3(1, 1, 1)}
            };

            var parent = new SceneContainer()
            {
                Header = new SceneHeader()
                {
                    Version = 1,
                    Generator = "Fusee.SceneViewer",
                    CreatedBy = "FuseeProjetTeam"
                },
                Children = new List<SceneObjectContainer>(new SceneObjectContainer[]
                {
                    aChild,
                    aChild,
                    new SceneObjectContainer()
                    {
                        Mesh = aMesh,
                        Transform = new TransformContainer(){Rotation = new float3(0, 0, 0), Translation = new float3(0.22f, 0.22f, 0), Scale = new float3(1, 1, 1)}
                    },
                }),
            };
            var ser = new Serializer();
            using (var file = File.Create(@"Assets/Test.fus"))
            {
                ser.Serialize(file, parent);
            }
        }
コード例 #8
0
ファイル: Main.cs プロジェクト: juradosa/BeeTheGame
        public override void Init()
        {
            // Initialisierung der Sound-Dateien (.mp3)
            _ton_sammeln = Audio.Instance.LoadFile("Assets/schmotzer1.mp3", true);
            _ton_weg = Audio.Instance.LoadFile("Assets/Klick2.mp3", true);
            _ton_abgeben = Audio.Instance.LoadFile("Assets/slash1.mp3", true);
            _ton_fliegen = Audio.Instance.LoadFile("Assets/biene_LOOP2.mp3", true);
            _ton_hintergrund = Audio.Instance.LoadFile("Assets/backgroundmusic_tech.mp3",true);
            // Initialisierung der Fenstergröße
            _screenWidth = Screen.PrimaryScreen.Bounds.Width;
            _screenWidthAspect = 1;
            _screenHeight = Screen.PrimaryScreen.Bounds.Height;
            _screenHeightAspect = 1;
            SetWindowSize(_screenWidth, _screenHeight / 9 * 2, true, 0, 0);

            var seri = new Serializer();

            #region LevelInit
            using (var fileLevel = File.OpenRead(@"Assets/ground.fus"))
            {
                _levelSC = seri.Deserialize(fileLevel, null, typeof(SceneContainer)) as SceneContainer;
            }
            _levelSR = new SceneRenderer(_levelSC, "Assets");
            _levelSOC = FindByName("landscape_container", _levelSC.Children);
            //_levelSOC.Transform.Scale = _levelSOC.Transform.Scale / 30;

            using (var fileLevel = File.OpenRead(@"Assets/Bienenstock.fus"))
            {
                _stockSC = seri.Deserialize(fileLevel, null, typeof(SceneContainer)) as SceneContainer;
            }
            _stockSR = new SceneRenderer(_stockSC, "Assets");
            _stockSOC = FindByName("bienenstock", _stockSC.Children);
            #endregion

            #region PlayerInit
            using (var filePlayer = File.OpenRead(@"Assets/Biene.fus"))
            {
                _playerSC = seri.Deserialize(filePlayer, null, typeof(SceneContainer)) as SceneContainer;
            }
            _playerSR = new SceneRenderer(_playerSC, "Assets");
            _playerSOC = FindByName("Biene", _playerSC.Children);
            _playerSOC.Transform.Scale = _playerSOC.Transform.Scale / 25;
            _playerSOC.Transform.Rotation.z = _twoPi/2;
            _playerSOC.Transform.Rotation.x = _twoPi/2;

            if (_playerSOC != null)
            {
                _playerSOC.Transform.Translation.z = 200;
                _playerSOC.Transform.Translation.y = 500;
            }
            #endregion

            #region ArrayInit
            _sOClist = new SceneObjectContainer[_lanesArray][];
            _sRlist = new SceneRenderer[_lanesArray][];
            _scene = new SceneContainer[_lanesArray][];

            for (int c1 = 0; c1 < _sOClist.Length; c1++)
            {
                _sOClist[c1] = new SceneObjectContainer[_arrayLength];
            }
            for (int c2 = 0; c2 < _sOClist.Length; c2++)
            {
                _sRlist[c2] = new SceneRenderer[_arrayLength];
            }
            for (int c3 = 0; c3 < _sOClist.Length; c3++)
            {
                _scene[c3] = new SceneContainer[_arrayLength];
            }

            //Enemy
            _enemySOClist = new SceneObjectContainer[_lanesArray][];
            _enemySRlist = new SceneRenderer[_lanesArray][];
            _enemyScene = new SceneContainer[_lanesArray][];

            for (int c1 = 0; c1 < _enemySOClist.Length; c1++)
            {
                _enemySOClist[c1] = new SceneObjectContainer[_arrayLength];
            }
            for (int c2 = 0; c2 < _enemySOClist.Length; c2++)
            {
                _enemySRlist[c2] = new SceneRenderer[_arrayLength];
            }
            for (int c3 = 0; c3 < _enemySOClist.Length; c3++)
            {
                _enemyScene[c3] = new SceneContainer[_arrayLength];
            }

            _objCountOnLane = new int[_lanesArray];
            for (int c4 = 0; c4 < _objCountOnLane.Length; c4++)
            {
                _objCountOnLane[c4] = 0;
            }
            _enemyMove = new bool[_arrayLength];
            for (int c5 = 0; c5 < _enemyMove.Length; c5++)
            {
                _enemyMove[c5] = true;
            }
            #endregion

            // Erzeugung der Blumen auf den Lanes
            for (int aCount = 0; aCount < 15; aCount++)
            {
                SpawnFlower();
            }
            // Erzeugung der Gegner auf den Lanes
            for (int aCount = 0; aCount < _lanesArray + _lanesArray/2; aCount++)
            {
                SpawnEnemy();
            }

            RC.ClearColor = new float4(0.1f, 0.1f, 0.5f, 1);
            _yPos = 100;
            _xPos = 150;
            _gameState = GameState.GameStart; // Spiel auf Startbildschirm setzen

            _guiRender = new GUIRender(RC, this);
            _guiRender.StartMenue(); // Rendern des Startmenüs

            _ton_hintergrund.Play(true); // Abspielen der Hintergrundmusik und Lautstärke setzen
            _ton_fliegen.Volume = 100;
            _ton_fliegen.Play(true); // Abspielen des Flügelschlags und und Lautstärke setzen
            _ton_fliegen.Volume = 0;
        }