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; }
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; }
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; }
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; }
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; }
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 (); }
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; }
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; }
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; }
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 (); }
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 (); }
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; }
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; }
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; }
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; }
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); }
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); }
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 (); }