void Window1_Loaded(object sender, RoutedEventArgs e) { // Arena.instance.VerticalAlignment = VerticalAlignment.Stretch;// .sca .RenderTransform = new ScaleTransform(1.5, 1.5); // Arena.instance.HorizontalAlignment = HorizontalAlignment.Stretch;// .sca .RenderTransform = new ScaleTransform(1.5, 1.5); System.Xml.XPath.XPathDocument GameData = new System.Xml.XPath.XPathDocument(".\\GameData.xml"); System.Xml.XPath.XPathNavigator GameDataNav = GameData.CreateNavigator(); Arena.instance.BankBalance = double.Parse(GameDataNav.SelectSingleNode("/GameData/StartingCash").ToString()); Arena.instance.Lifes = 20; //GameDataNav.MoveToRoot(); //System.Xml.XPath.XPathNodeIterator dx = GameDataNav.Select("/GameData/TowerTypes/RadiatorTowers/RadiatorTower"); System.Xml.XPath.XPathNodeIterator dx = GameDataNav.Select("/GameData/TowerTypes/*/*/@Name"); //"/GameData/TowerTypes/*/*/@Price" while (dx.MoveNext()) { string q = dx.Current.ToString(); ListBoxItem x = new ListBoxItem(); x.Content = q; System.Xml.XPath.XPathNavigator n = GameData.CreateNavigator(); System.Xml.XPath.XPathNavigator o = n.SelectSingleNode("/GameData/TowerTypes/*/*[@Name='" + q + "']"); TowerData PTD; if (o.Name == "ProjectileTower") { PTD = new ProjectileTowerData(o); } else if (o.Name == "RadiatorTower") { PTD = new HeatTowerData(o); } else if (o.Name == "BeamTower") { PTD = new BeamTowerData(o); } else { PTD = new TowerData(o); } x.Tag = PTD; Window1.instance.Towers.Items.Add(x); } }
void EmptyCell_MouseDown(object sender, MouseButtonEventArgs e) { if (Occupied == true || Occupant != null) { return; } ListBoxItem lbi = (Window1.instance.Towers.SelectedItem as ListBoxItem); if (lbi == null) { return; } Occupied = true; Arena.instance.PathInvaliation.Enqueue(this); foreach (EmptyCell C in Adjacent) { if (Arena.instance.PathInvaliation.Contains(C) == false) { Arena.instance.PathInvaliation.Enqueue(C); } } // if (Arena.instance.FindPathCells(Arena.instance.Begin, Arena.instance.End) != null) { Tower b = null; //System.Xml.XmlParserContext xpc = new System.Xml.XmlParserContext( System.Windows.Markup.ParserContext parserContext; parserContext = new System.Windows.Markup.ParserContext(); parserContext.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation"); parserContext.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml"); TowerData PTD = lbi.Tag as TowerData; if ((PTD as HeatTowerData) != null) { HeatTower ht = new HeatTower(); ht.Data = (PTD as HeatTowerData); object tf = System.Windows.Markup.XamlReader.Parse(ht.Data.XAML, parserContext); FrameworkElement tb = tf as FrameworkElement; Shape bc = LogicalTreeHelper.FindLogicalNode(tb, "_Body") as Shape; ht.Body = bc; tb.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); tb.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); ht.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); ht.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); ht.VisualObject = tb; Arena.instance.AddToArena(tb); Arena.instance.AddToArena(ht); ht.OwningCell = this; this.Occupant = ht; this.Occupied = true; } if ((PTD as ProjectileTowerData) != null) { ProjectileTower pt = new ProjectileTower(); pt.Data = (PTD as ProjectileTowerData); object tf = System.Windows.Markup.XamlReader.Parse(pt.Data.XAML, parserContext); FrameworkElement tb = tf as FrameworkElement; if (tb != null) { Shape bb = LogicalTreeHelper.FindLogicalNode(tb, "_Barrel") as Shape; pt.Barrel = bb; Shape bc = LogicalTreeHelper.FindLogicalNode(tb, "_Body") as Shape; pt.Body = bc; tb.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); tb.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); pt.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); pt.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); pt.VisualObject = tb; Arena.instance.AddToArena(tb); Arena.instance.AddToArena(pt); pt.OwningCell = this; this.Occupant = pt; this.Occupied = true; //Arena.instance.Children.Add(pt); //Arena.instance.Children.Add(tb); } //b.OwningCell = this; //Arena.instance.BankBalance -= b.Data.Price; //FrameworkElement fe = new FrameworkElement(); } if ((PTD as BeamTowerData) != null) { BeamTower pt = new BeamTower(); pt.Data = (PTD as BeamTowerData); object tf = System.Windows.Markup.XamlReader.Parse(pt.Data.XAML, parserContext); FrameworkElement tb = tf as FrameworkElement; if (tb != null) { Shape bb = LogicalTreeHelper.FindLogicalNode(tb, "_Barrel") as Shape; pt.Barrel = bb; Shape bc = LogicalTreeHelper.FindLogicalNode(tb, "_Body") as Shape; pt.Body = bc; tb.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); tb.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); pt.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); pt.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); pt.VisualObject = tb; Arena.instance.AddToArena(tb); Arena.instance.AddToArena(pt); pt.OwningCell = this; this.Occupant = pt; this.Occupied = true; //Arena.instance.Children.Add(pt); //Arena.instance.Children.Add(tb); } //b.OwningCell = this; //Arena.instance.BankBalance -= b.Data.Price; //FrameworkElement fe = new FrameworkElement(); } //TowerData // // MessageBox.Show((lbi.Tag as System.Xml.XPath.XPathItem).Value); /* * switch (Window1.instance.Towers.SelectedIndex) * { * case 0: * b = new ShortProjectileTower(); * * break; * case 1: * * b = new MediumProjectileTower(); * break; * case 2: * b = new LongProjectileTower(); * break; * default: * Occupied = false; * break; * * } */ if (b != null) { if (Arena.instance.BankBalance >= b.Data.Price) { b.SetValue(Canvas.TopProperty, this.GetValue(Canvas.TopProperty)); b.SetValue(Canvas.LeftProperty, this.GetValue(Canvas.LeftProperty)); b.OwningCell = this; Arena.instance.Children.Add(b); Arena.instance.BankBalance -= b.Data.Price; Occupant = b; } else { Occupied = false; } } //Occupied = true; } // else { // Occupied = false; } foreach (EmptyCell C in Adjacent) { if (Arena.instance.PathInvaliation.Contains(C) == false) { Arena.instance.PathInvaliation.Enqueue(C); } } //Arena.instance.DrawTrack(); //Arena.instance.FindPath(); }