private void MenuItem_OnClick2(object sender, RoutedEventArgs e) { var block = new Block("New Block"); block.AddComponent <TransformComponent>(); (ProjectStructure.SelectedItem as NodeViewModel).AddChild(block, true); }
private void ProjectWindow_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { var rootBlock = ((ProjectViewModel)DataContext).Workspace.RootBlock; rootBlock.AddComponent <TransformComponent>(); var sphere = new Block("Sphere"); sphere.AddComponent <TransformComponent>(); sphere.AddComponent <SphereRendererComponent>(); sphere.AddComponent <RigidBodyComponent>(); var box = new Block("Box"); box.AddComponent <TransformComponent>(); box.AddComponent <BoxRendererComponent>(); box.AddComponent <RigidBodyComponent>(); box.GetComponent <TransformComponent>().Position.Value = new Vector3(0, 0, -10); box.GetComponent <RigidBodyComponent>().IsKinematic.Value = true; rootBlock.AddChild(sphere); rootBlock.AddChild(box); SystemManager <Block> .RegisterSystem(new TransformSystem()); SystemManager <Block> .RegisterSystem(new RenderingSystem()); SystemManager <Block> .RegisterSystem(new PhysicsSystem()); SystemManager <Block> .InitializeSystems(rootBlock); SceneRoot.Children.Clear(); SceneRoot.Children.Add(new ModelVisual3D { Content = SystemManager <Block> .GetSystem <RenderingSystem>().RootModel3D }); }
public Block Instance() { if (_instance != null) { return(_instance); } Block b = new Block(); b.Info = this; foreach (var c in Components) { b.AddComponent(c.Key, c.Value); } return(b); }
public override bool OnPlace(int x, int y, int z, int rot) { Block b = Block.Transparent.Instance(); b.AddComponent <MultiblockPartComponent>(x, y, z, parentBlock); bool canPlaceThis; Chunk chunk = null; foreach (Vector3Int pos in Locations) { if (pos.x + x < 0 || pos.x + x > World.sizeX * Chunk.maxX - 1 || pos.z + z < 0 || pos.z + z > World.sizeZ * Chunk.maxZ - 1 || World.GetBlock(x + pos.x, y + pos.y, z + pos.z) != null) { return(false); } canPlaceThis = false; chunk = World.GetChunkByBlock(x + pos.x, z + pos.z); foreach (Chunk c in World.builder.building.Chunks) { if (c == chunk) { canPlaceThis = true; break; } } if (!canPlaceThis) { return(false); } } foreach (Vector3Int pos in Locations) { World.SetBlock(x + pos.x, y + pos.y, z + pos.z, b); } MeshCreator.UpdateMesh(chunk, chunk.Blocks); return(true); }
private Entity LoadBlock(Vector2 pos, string collisionType, string blocktype) { Block block; switch (blocktype) { case "walls": block = new Wall(LevelMapSpriteFactory.Instance.CreateExterior(), pos); Constants.SetLayerDepth(block, Constants.LayerDepth.Room); break; case "entrance": block = new Block(LevelMapSpriteFactory.Instance.CreateRoomEntrance(), pos); Constants.SetLayerDepth(block, Constants.LayerDepth.Room); break; case "empty": block = new Block(LevelMapSpriteFactory.Instance.CreateRoomEmpty(), pos); Constants.SetLayerDepth(block, Constants.LayerDepth.Room); break; case "black": block = new Block(LevelMapSpriteFactory.Instance.CreateRoomBlack(), pos); Constants.SetLayerDepth(block, Constants.LayerDepth.Room); break; case "itemroom": block = new Block(LevelMapSpriteFactory.Instance.CreateRoomItem(), pos); Constants.SetLayerDepth(block, Constants.LayerDepth.Room); break; case "downdoor": block = new Door(LevelMapSpriteFactory.Instance.CreateDownOpen(), pos); break; case "leftdoor": block = new Door(LevelMapSpriteFactory.Instance.CreateLeftOpen(), pos); break; case "rightdoor": block = new Door(LevelMapSpriteFactory.Instance.CreateRightOpen(), pos); break; case "updoor": block = new Door(LevelMapSpriteFactory.Instance.CreateTopOpen(), pos); break; case "downwall": block = new Door(LevelMapSpriteFactory.Instance.CreateDownWall(), pos, Door.Type.Wall); break; case "leftwall": block = new Door(LevelMapSpriteFactory.Instance.CreateLeftWall(), pos, Door.Type.Wall); break; case "rightwall": block = new Door(LevelMapSpriteFactory.Instance.CreateRightWall(), pos, Door.Type.Wall); break; case "upwall": block = new Door(LevelMapSpriteFactory.Instance.CreateTopWall(), pos, Door.Type.Wall); break; case "downlock": block = new Door(LevelMapSpriteFactory.Instance.CreateDownLock(), pos, Door.Type.Locked); break; case "leftlock": block = new Door(LevelMapSpriteFactory.Instance.CreateLeftLock(), pos, Door.Type.Locked); break; case "rightlock": block = new Door(LevelMapSpriteFactory.Instance.CreateRightLock(), pos, Door.Type.Locked); break; case "uplock": block = new Door(LevelMapSpriteFactory.Instance.CreateTopLock(), pos, Door.Type.Locked); break; case "downbomb": block = new Door(LevelMapSpriteFactory.Instance.CreateDownWall(), pos, Door.Type.BombWall); break; case "leftbomb": block = new Door(LevelMapSpriteFactory.Instance.CreateLeftWall(), pos, Door.Type.BombWall); break; case "rightbomb": block = new Door(LevelMapSpriteFactory.Instance.CreateRightWall(), pos, Door.Type.BombWall); break; case "upbomb": block = new Door(LevelMapSpriteFactory.Instance.CreateTopWall(), pos, Door.Type.BombWall); break; case "downboss": block = new Door(LevelMapSpriteFactory.Instance.CreateDownBoss(), pos, Door.Type.Locked); break; case "leftboss": block = new Door(LevelMapSpriteFactory.Instance.CreateLeftBoss(), pos, Door.Type.Locked); block.name = "boss_door"; break; case "rightboss": block = new Door(LevelMapSpriteFactory.Instance.CreateRightBoss(), pos, Door.Type.Locked); break; case "upboss": block = new Door(LevelMapSpriteFactory.Instance.CreateTopBoss(), pos, Door.Type.Locked); break; case "statuedragon": block = new Block(LevelMapSpriteFactory.Instance.CreateStatueDragon(), pos); break; case "statueface": block = new Block(LevelMapSpriteFactory.Instance.CreateStatueFace(), pos); break; case "bluestatuedragon": block = new Block(LevelMapSpriteFactory.Instance.CreateBlueStatueDragon(), pos); break; case "bluestatueface": block = new Block(LevelMapSpriteFactory.Instance.CreateBlueStatueFace(), pos); break; case "raisedtile": block = new Block(LevelMapSpriteFactory.Instance.CreateTileRaised(), pos); break; case "stairs": block = new Block(LevelMapSpriteFactory.Instance.CreateTileStairs(), pos); break; case "navytile": block = new Block(LevelMapSpriteFactory.Instance.CreateTileNavy(), pos); break; case "water": block = new Block(LevelMapSpriteFactory.Instance.CreateTileBlue(), pos); break; case "invis": block = new Block(LevelMapSpriteFactory.Instance.CreateTileInvis(), pos); break; default: Console.WriteLine("Level @ LoadBlock(): Unrecognized blocktype \"" + blocktype + "\"!"); return(null); } // TODO: Slowly but surely we should create classes for each general type // of block (Door, Wall, MovableBlock, etc.) to avoid this collision logic. var coll = new Collider(); switch (collisionType) { case "movableU": coll.response = new MovableCollisionResponse(block, Constants.Direction.UP); break; case "movableD": coll.response = new MovableCollisionResponse(block, Constants.Direction.DOWN); break; case "movableL": coll.response = new MovableCollisionResponse(block, Constants.Direction.LEFT); break; case "movableR": coll.response = new MovableCollisionResponse(block, Constants.Direction.RIGHT); break; case "movableRK": coll.response = new MovableKeyCollisionResponse(block, Constants.Direction.RIGHT, Root.name); break; case "rigid": coll.response = new RigidCollisionResponse(block); break; //case "door": // coll.response = new DoorCollisionResponse(block); // break; case "invis": coll.response = new InvisibleBlockCollisionResponse(block); break; case "stairs00": coll.response = new StairsCollisionResponse(block, "0_0"); break; case "stairs10": coll.response = new StairsCollisionResponse(block, "1_0"); break; case "wall": // Already handled break; case "none": // no collision necessary break; default: //coll.response = new BaseCollisionResponse(block); break; } block.AddComponent(coll); Scene.Add(block); return(block); }