Example #1
0
        public static Node Create(string name, string texture, Vector3 pos)
        {
            var cmp = new MyTarget ();

            var spr = new Sprite (64, 128);
            spr.AddTexture (new Texture (texture));

            var col = new CollisionObject ();
            col.Shape = new BoxShape (spr.Width/2, spr.Height/2, 100);
            col.SetOffset (spr.Width/2, spr.Height/2, 0);

            var mbox1 = new MailBox ("MouseSelect");
            var mbox2 = new MailBox ("MouseDeselect");

            var node = new Node (name);
            node.Attach (cmp);
            node.Attach (col);
            node.Attach (spr);
            node.Attach (mbox1);
            node.Attach (mbox2);

            node.Translation = pos;

            return node;
        }
Example #2
0
        public static Node Create(string name, string address, Vector3 pos)
        {
            var cmp = new MyButton ();
            cmp.address = address;

            var spr = new Sprite (32, 32);
            spr.AddTexture (Resource.GetDefaultTexture ());

            var label = new Label ();
            label.Text = name;
            label.Color = Color.Black;
            label.SetOffset (8, 8);

            var col = new CollisionObject ();
            col.Shape = new BoxShape(16, 16, 16);
            col.SetOffset (16, 16, 16);

            var node = new Node (name);
            node.Attach (cmp);
            node.Attach (spr);
            node.Attach (label);
            node.Attach (col);

            node.Translation = pos;

            return node;
        }
Example #3
0
        public static Node Create(string fileName)
        {
            var cmp = new MyTiledMap ();

            var tiledMap = new TiledMapComposer ();

            var node = new Node ("TiledMap");
            node.Attach (tiledMap);
            node.Attach (cmp);

            tiledMap.LoadFromFile (fileName);

            var halfWidth = tiledMap.TileWidth / 2;
            var halfHeight = tiledMap.TileHeight / 2;

            // コリジョンなどのゲームロジックはすべて
            // 仮想の2D直交座標系で作成する
            // 表示だけアイソメトリック
            var colMap = node.Find("CollisionMap");
            foreach (var tile in colMap.Downwards.Skip(1)) {
                var col = new CollisionObject();
                col.Shape = new BoxShape (halfWidth, halfHeight, 1);
                col.SetOffset (halfWidth, halfHeight, 1);

                tile.Attach (col);
            }

            return node;
        }
Example #4
0
        public static Node Create(Vector3 pos)
        {
            var cmp = new MyComponent ();

            var spr = new Sprite (480, 300);
            spr.AddTexture (new Texture ("media/Vanity.jpg"));
            spr.AddTexture (new Texture ("media/Tanks.png"));
            spr.AddTexture (new Texture ("media/TatamiRoom.png"));
            spr.AutoScale = true;

            Console.WriteLine ("tex = " + spr.GetTexture (0));
            Console.WriteLine ("spr = " + spr);

            var col = new CollisionObject();
            col.Shape  = new BoxShape(spr.Width/2, spr.Height/2, 100);
            col.SetOffset (spr.Width/2, spr.Height/2, 0);

            var ctr = new AnimationController ();

            var node = new Node ();
            node.Attach (cmp);
            node.Attach (spr);
            node.Attach (col);
            node.Attach (ctr);

            node.Translation = pos;

            var clip = new SoundClip ("Sound");
            clip.AddTrack (new SoundEffectTrack ("media/PinPon.wav"));

            node.UserData.Add (clip.Name, clip);

            return node;
        }
Example #5
0
        public static Node Create(Vector3 pos)
        {
            var cmp = new MySprite ();

            var spr = new Sprite (64, 64);
            spr.AddTexture (new Texture ("media/Box-64x64.png"));

            var col = new CollisionObject ();
            col.Shape = new BoxShape (spr.Width / 2, spr.Height / 2, 100);
            col.SetOffset (spr.Width / 2, spr.Height / 2, 0);

            var mbox1 = new MailBox ("MouseSelect");
            var mbxo2 = new MailBox ("MouseDeselect");

            var node = new Node ("MySprite");
            node.Attach (cmp);
            node.Attach (spr);
            node.Attach (col);
            node.Attach (mbox1);
            node.Attach (mbxo2);

            node.Translation = pos;

            return node;
        }
Example #6
0
        public void Test_BoxShape()
        {
            var node = new Node ();

            var col = new CollisionObject ();
            col.Shape = new BoxShape (1, 1, 1);
            col.SetOffset (1, 0, 0);
            node.Attach (col);

            node.Translate (1, 0, 0);
            node.Rotate (45, 0, 0, 1);

            var wld = new World ();
            wld.AddChild (node);

            wld.CollisionUpdate ();

            // (1+1) - 1*√2
            var result = wld.RayCast (new Vector3 (-10, 0, 0), new Vector3 (10, 0, 0)).First ();
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (0.5858f, 0, 0), result.Point);
            Assert.AreEqual (new Vector3 (-1, 0, 0), result.Normal);
            Assert.AreEqual (10.58579f, result.Distance, 0.01f);
            Assert.AreEqual (0.5245f, result.Fraction, 0.01f);

            // (1+1) + 1*√2
            result = wld.RayCast (new Vector3 (10, 0, 0), new Vector3 (-10, 0, 0)).First ();
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (3.4142f, 0, 0), result.Point);
            Assert.AreEqual (new Vector3 (1, 0, 0), result.Normal);
            Assert.AreEqual (6.585786f, result.Distance, 0.01f);
            Assert.AreEqual (0.3225f, result.Fraction, 0.01f);

            wld.Destroy ();
        }
Example #7
0
        public static Node Create(Vector3 pos, int collisionMask)
        {
            var cmp = new MyBlock ();

            var spr = new Sprite (128, 64);
            spr.AddTexture (Resource.GetDefaultTexture ());
            spr.Color = Color.Cyan;

            var col = new CollisionObject ();
            col.Shape = new BoxShape (spr.Width/2, spr.Height/2, 1);
            col.SetOffset (spr.Width/2, spr.Height/2, 1);
            col.CollideWith = collisionMask;

            var label = new Label ();
            label.Text = "Mask = 0x" + collisionMask.ToString("x");

            var node = new Node ("Block");
            node.Attach (cmp);
            node.Attach (spr);
            node.Attach (col);
            node.Attach (label);

            node.Translation = pos;

            return node;
        }
Example #8
0
        public static Node Create(Vector3 pos)
        {
            var cmp = new MyButton ();

            var btn = new Button (ButtonType.Push);
            btn.Normal = new Texture ("media/image128x128(Red).png");
            btn.Pressed = new Texture ("media/image128x128(Green).png");

            var label1 = new Label ();
            var label2 = new Label ();
            label2.SetOffset (0, 20);

            var col = new CollisionObject ();
            col.Shape = new BoxShape (64, 64, 100);
            col.SetOffset (64, 64, 100);

            var node = new Node ("Button");
            node.Attach (btn);
            node.Attach (cmp);
            node.Attach (label1);
            node.Attach (label2);
            node.Attach (col);

               node.Translation = pos;

            return node;
        }
Example #9
0
        public static Node Create(string name, string target, Vector3 pos)
        {
            var cmp = new MyButton ();
            cmp.target = target;

            var spr = new Sprite (64, 64);
            spr.AddTexture (new Texture("media/ButtonRed-Active-64x64.png"));
            spr.AddTexture (new Texture ("media/ButtonGreen-Active-64x64.png"));
            spr.AddTexture (new Texture ("media/ButtonBlue-Active-64x64.png"));
            switch (target) {
                case "A子": spr.ActiveTexture = 0; break;
                case "B子": spr.ActiveTexture = 1; break;
                case "C子": spr.ActiveTexture = 2; break;
            }

            var col = new CollisionObject ();
            col.Shape = new BoxShape (40, 25, 1);
            col.SetOffset (40, 25, 0);

            var node = new Node (name);
            node.Attach (cmp);
            node.Attach (spr);
            node.Attach (col);

            node.UserData.Add ("PinPon", new SoundEffectTrack ("media/PinPon.wav"));

            node.Translation = pos;

            return node;
        }
Example #10
0
        public void Test_Distance_Box_to_Box()
        {
            var node1 = new Node ("Node1");

            var col1 = new CollisionObject ();
            col1.Shape = new BoxShape (1, 1, 1);
            col1.SetOffset (0, 0, 0);

            node1.Attach (col1);

            var node2 = new Node ("Node2");
            var col2 = new CollisionObject ();
            col2.Shape = new BoxShape (1,1,1);
            col2.SetOffset (0, 10, 0);

            node2.Attach (col2);

            node1.Translate (0, 0, 0);
            node2.Translate (10, 0, 0);

            // 10*√2

            var wld = new World ();
            wld.AddChild (node1);
            wld.AddChild (node2);

            wld.CollisionUpdate ();

            Assert.AreEqual(10*1.4142f - 2*1.4142f, wld.Distance (node1, node2), 0.05f);

            wld.Destroy ();
        }
Example #11
0
        public void Test_BoxShape()
        {
            var node1 = new Node ("Sweeper");

            var col1 = new CollisionObject ();
            col1.Shape = new BoxShape (1, 1, 1);
            col1.SetOffset (0, 1, 0);

            node1.Attach (col1);

            var node2 = new Node ("Target1");
            var col2 = new CollisionObject ();
            col2.Shape = new SphereShape (1);
            col2.SetOffset (0, 1, 0);

            node2.Attach (col2);

            var node3 = new Node ("Target2");
            var col3 = new CollisionObject ();
            col3.Shape = new SphereShape (1);
            col3.SetOffset (0, 1, 0);

            node1.Translate (0, 0, 0);
            node2.Translate (10, 0, 0);
            node3.Translate (20, 0, 0);

            var wld = new World ();
            wld.AddChild (node1);
            wld.AddChild (node2);
            wld.AddChild (node3);

            wld.CollisionUpdate ();

            var result = wld.Sweep (node1, new Vector3 (100, 0, 0));
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (9, 1, 0), result.Point);
            Assert.AreEqual (new Vector3 (-1, 0, 0), result.Normal);
            Assert.AreEqual (8, result.Distance, 0.01f);
            Assert.AreEqual (0.08f, result.Fraction, 0.01f);

            result = wld.Sweep (node1, new Vector3 (0, 100, 0));
            Assert.AreEqual (false, result.Hit);

            result = wld.Sweep (node1, new Vector3 (-100, 100, 0));
            Assert.AreEqual (false, result.Hit);

            wld.Destroy ();
        }
Example #12
0
        public static World Create(float width, float height)
        {
            var cmp = new MyWorld ();

            var spr = new Sprite ();
            spr.AddTexture(new Texture ("media/Vanity.jpg"));

            var col = new CollisionObject ();
            col.Shape = new BoxShape (width / 2, height / 2, 1);
            col.SetOffset (width / 2, height / 2, 0);

            var node = new World ("MyWorld");
            node.Attach (cmp);
            node.Attach (col);
            node.Attach (spr);

            return node;
        }
Example #13
0
        public static World Create()
        {
            var cmp = new MyWorld ();

            var spr = new Sprite ();
            spr.AddTexture(new Texture ("media/Vanity.jpg"));

            var col = new CollisionObject ();
            col.Shape = new BoxShape (spr.Width / 2, spr.Height / 2, 1);
            col.SetOffset (spr.Width / 2, spr.Height / 2, 0);

            var wld = new World ("MyWorld");
            wld.Attach (cmp);
            wld.Attach (spr);
            wld.Attach (col);

            return wld;
        }
Example #14
0
        public static Node Create(string fileName)
        {
            var cmp = new MyTiledMap ();
            var map = new TiledMapComposer ();

            var node = new Node ("TiledMap");
            node.Attach (cmp);
            node.Attach (map);

            map.LoadFromFile (fileName);

            var halfTileWidth = map.TileWidth / 2;
            var halfTileHeight = map.TileHeight / 2;

            var colMap = node.Find ("CollisionMap");
            foreach (var x in colMap.Downwards.Skip(1)) {
                var col = new CollisionObject ();
                col.Shape = new BoxShape (halfTileWidth, halfTileHeight, 1);
                col.SetOffset (halfTileWidth, halfTileHeight, 1);
                x.Attach (col);
            }

            var cabMap = node.Find ("CabbageMap");
            foreach (var nod in cabMap.Downwards.Skip (1)) {
                var comp = new MyCabbage ();

                var col = new CollisionObject ();
                col.Shape = new BoxShape (halfTileWidth, halfTileHeight, 1);
                col.SetOffset (halfTileWidth, halfTileHeight, 1);

                nod.Attach (comp);
                nod.Attach (col);

                //n.GroupID = 0xffffffffu;
            }

            var bgMap = node.Find ("BackgroundMap");
            //bgMap.GroupID = 0xffffffffu;

            return node;
        }
Example #15
0
        public static Node Create(string name, Vector3 pos)
        {
            var cmp = new MyCharacterButton (name);

            var spr = new Sprite (128, 64);
            spr.AddTexture (Resource.GetDefaultTexture ());

            var label1 = new Label ();
            label1.Text = cmp.dbCharacter.FullName;
            label1.SetOffset (10, 10);
            label1.Color = Color.Black;

            var label2 = new Label ();
            label2.Text = cmp.dbCharacter.FullNameYomi;
            label2.SetOffset (10, 30);
            label2.Color = Color.Black;

            var col = new CollisionObject ();
            col.Shape = new BoxShape (64, 32, 100);
            col.SetOffset (64, 32, 0);

            var snd = new SoundEffectTrack ("media/PinPon.wav");
            var clip = new SoundClip ("クリック音");
            clip.AddTrack (snd);

            var node = new Node ("Button(" + name + ")");
            node.Attach (cmp);
            node.Attach (spr);
            node.Attach (label1);
            node.Attach (label2);
            node.Attach (col);

            node.UserData.Add (clip.Name, clip);

            node.Translation = pos;
            node.DrawPriority = -1;

            return node;
        }
Example #16
0
        public void Test_SetOffset()
        {
            var col = new CollisionObject ();

            col.Offset = new Vector3 (1, 2, 3);
            Assert.AreEqual (new Vector3(1,2,3), col.Offset);

            col.SetOffset (4, 5, 6);
            Assert.AreEqual (new Vector3 (4, 5, 6), col.Offset);
        }
Example #17
0
        public void Test_Sweep()
        {
            var node1 = new Node ("Node1");
            var col1 = new CollisionObject ();
            col1.Shape = new BoxShape (1, 1, 1);
            node1.Attach (col1);
            node1.Rotate (45, 0, 0, 1);
            node1.Rotate (45, 1, 0, 0);

            var node2 = new Node ("Node2");
            var col2 = new CollisionObject ();
            col2.Shape = new BoxShape (2, 2, 2);
            col2.Offset = new Vector3 (2, 0, 0);
            node2.Attach (col2);

            var node3 = new Node ("Node3");
            var col3 = new CollisionObject ();
            col3.Shape = new BoxShape (1, 1, 1);
            col3.SetOffset (-1, 0, 0);
            node3.Attach (col3);

            var wld = new World ("World");
            wld.AddChild (node1);
            wld.AddChild (node2);
            wld.AddChild (node3);

            node1.Translate (0, 0, 0);
            node2.Translate (10, 0, 0);
            node3.Translate (-10, 0, 0);

            wld.CollisionUpdate ();

            var result = wld.Sweep (node1, new Vector3 (100, 0, 0));
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (10, 0, 0), result.Point);
            Assert.AreEqual (new Vector3 (-1, 0, 0), result.Normal);
            Assert.AreEqual (8.602f, result.Distance, 0.01f);
            Assert.AreEqual (0.09f, result.Fraction, 0.01f);

            result = wld.Sweep (node1, new Vector3 (-100, 0, 0));
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (-10, 0.2812f, -0.2812f), result.Point);
            Assert.AreEqual (new Vector3 (1, 0, 0), result.Normal);
            Assert.AreEqual (8.602f, result.Distance, 0.01f);
            Assert.AreEqual (0.09f, result.Fraction, 0.01f);
        }
Example #18
0
        public void Test_SphereShape()
        {
            var node = new Node ();

            var col = new CollisionObject ();
            col.Shape = new SphereShape (1);
            col.SetOffset (1, 0, 0);
            node.Attach (col);

            node.Translate (1, 0, 0);
            node.Rotate (45, 0, 0, 1);

            var wld = new World ();
            wld.AddChild (node);

            wld.CollisionUpdate ();

            // (1+1) - 1
            var result = wld.RayCast (new Vector3 (-10, 0, 0), new Vector3 (10, 0, 0)).First ();
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (1, 0, 0), result.Point);
            Assert.AreEqual (new Vector3 (-1, 0, 0), result.Normal);
            Assert.AreEqual (11, result.Distance, 0.01f);
            Assert.AreEqual (0.55f, result.Fraction, 0.01f);

            // (1+1) + 1
            result = wld.RayCast (new Vector3 (10, 0, 0), new Vector3 (-10, 0, 0)).First ();
            Assert.AreEqual (true, result.Hit);
            Assert.AreEqual (new Vector3 (3, 0, 0), result.Point);
            Assert.AreEqual (new Vector3 (1, 0, 0), result.Normal);
            Assert.AreEqual (7, result.Distance, 0.01f);
            Assert.AreEqual (0.35f, result.Fraction, 0.01f);

            wld.Destroy ();
        }