more stuff working
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Drawing;
|
||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
|
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
|
||||||
@@ -30,8 +31,8 @@ namespace OpenRA.Widgets
|
|||||||
base.Draw(world);
|
base.Draw(world);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var rect = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
WidgetUtils.DrawPanel(Background, Bounds);
|
WidgetUtils.DrawPanel(Background, rect);
|
||||||
base.Draw(world);
|
base.Draw(world);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,10 +88,11 @@ namespace OpenRA.Widgets
|
|||||||
}
|
}
|
||||||
|
|
||||||
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
|
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
|
||||||
WidgetUtils.DrawPanel(Depressed ? "dialog3" : "dialog2", Bounds);
|
WidgetUtils.DrawPanel(Depressed ? "dialog3" : "dialog2", new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height ) );
|
||||||
|
|
||||||
var text = GetText();
|
var text = GetText();
|
||||||
Game.chrome.renderer.BoldFont.DrawText(text,
|
Game.chrome.renderer.BoldFont.DrawText(text,
|
||||||
new int2(Bounds.X + Bounds.Width / 2, Bounds.Y + Bounds.Height / 2)
|
new int2( ( Bounds.X + getParentOffset().X) + Bounds.Width / 2, ( Bounds.Y + getParentOffset().Y) + Bounds.Height / 2)
|
||||||
- new int2(Game.chrome.renderer.BoldFont.Measure(text).X / 2,
|
- new int2(Game.chrome.renderer.BoldFont.Measure(text).X / 2,
|
||||||
Game.chrome.renderer.BoldFont.Measure(text).Y / 2) + stateOffset, Color.White);
|
Game.chrome.renderer.BoldFont.Measure(text).Y / 2) + stateOffset, Color.White);
|
||||||
|
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ namespace OpenRA.Widgets
|
|||||||
base.Draw(world);
|
base.Draw(world);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var rect = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
WidgetUtils.DrawPanel("dialog3", new Rectangle(Bounds.Location,
|
WidgetUtils.DrawPanel("dialog3", new Rectangle(rect.Location,
|
||||||
new Size(Bounds.Height, Bounds.Height)));
|
new Size(Bounds.Height, Bounds.Height)));
|
||||||
|
|
||||||
Game.chrome.renderer.BoldFont.DrawText(Text,
|
Game.chrome.renderer.BoldFont.DrawText(Text,
|
||||||
new float2(Bounds.Left + Bounds.Height * 2, Bounds.Top), Color.White);
|
new float2(rect.Left + rect.Height * 2, rect.Top), Color.White);
|
||||||
|
|
||||||
if (Checked())
|
if (Checked())
|
||||||
{
|
{
|
||||||
@@ -48,10 +48,10 @@ namespace OpenRA.Widgets
|
|||||||
|
|
||||||
Game.chrome.lineRenderer.FillRect(
|
Game.chrome.lineRenderer.FillRect(
|
||||||
new RectangleF(
|
new RectangleF(
|
||||||
Game.viewport.Location.X + Bounds.Left + 4,
|
Game.viewport.Location.X + rect.Left + 4,
|
||||||
Game.viewport.Location.Y + Bounds.Top + 5,
|
Game.viewport.Location.Y + rect.Top + 5,
|
||||||
Bounds.Height - 9,
|
rect.Height - 9,
|
||||||
Bounds.Height - 9),
|
rect.Height - 9),
|
||||||
Color.White);
|
Color.White);
|
||||||
Game.chrome.lineRenderer.Flush();
|
Game.chrome.lineRenderer.Flush();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,10 +38,13 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
foreach(var client in Game.LobbyInfo.Clients)
|
foreach(var client in Game.LobbyInfo.Clients)
|
||||||
{
|
{
|
||||||
Log.Write("Client {0}",client.Name);
|
//HACK : "the c# spec is, IMHO, broken here"
|
||||||
|
var c = client;
|
||||||
|
|
||||||
|
Log.Write("Client {0}",c.Name);
|
||||||
var template = PlayerTemplate.Clone();
|
var template = PlayerTemplate.Clone();
|
||||||
template.Id = "PLAYER_{0}".F(client.Index);
|
template.Id = "PLAYER_{0}".F(c.Index);
|
||||||
template.GetWidget<ButtonWidget>("NAME").GetText = () => {return client.Name; };
|
template.GetWidget<ButtonWidget>("NAME").GetText = () => {return c.Name; };
|
||||||
template.Bounds = new Rectangle(template.Bounds.X, template.Bounds.Y + i, template.Bounds.Width, template.Bounds.Height);
|
template.Bounds = new Rectangle(template.Bounds.X, template.Bounds.Y + i, template.Bounds.Width, template.Bounds.Height);
|
||||||
template.IsVisible = () => {return true;};
|
template.IsVisible = () => {return true;};
|
||||||
Players.AddChild(template);
|
Players.AddChild(template);
|
||||||
|
|||||||
@@ -47,10 +47,10 @@ namespace OpenRA.Widgets
|
|||||||
var font = (Bold) ? Game.chrome.renderer.BoldFont : Game.chrome.renderer.RegularFont;
|
var font = (Bold) ? Game.chrome.renderer.BoldFont : Game.chrome.renderer.RegularFont;
|
||||||
var text = GetText();
|
var text = GetText();
|
||||||
int2 textSize = font.Measure(text);
|
int2 textSize = font.Measure(text);
|
||||||
int2 position = new int2(Bounds.X,Bounds.Y);
|
int2 position = new int2(Parent.Bounds.X + Bounds.X,Parent.Bounds.Y + Bounds.Y);
|
||||||
|
|
||||||
if (Align == "Center")
|
if (Align == "Center")
|
||||||
position = new int2(Bounds.X+Bounds.Width/2, Bounds.Y+Bounds.Height/2)
|
position = new int2(Bounds.X + Parent.Bounds.X +Bounds.Width/2, Bounds.Y + Parent.Bounds.Y + Bounds.Height/2)
|
||||||
- new int2(textSize.X / 2, textSize.Y/2);
|
- new int2(textSize.X / 2, textSize.Y/2);
|
||||||
|
|
||||||
font.DrawText(text, position, Color.White);
|
font.DrawText(text, position, Color.White);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -25,8 +25,8 @@ namespace OpenRA.Widgets
|
|||||||
mapPreviewDirty = true;
|
mapPreviewDirty = true;
|
||||||
lastMap = map;
|
lastMap = map;
|
||||||
}
|
}
|
||||||
|
var rect = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
var mapRect = map.PreviewBounds( new Rectangle( Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height ) );
|
var mapRect = map.PreviewBounds( new Rectangle( rect.X, rect.Y, rect.Width, rect.Height ) );
|
||||||
|
|
||||||
if( mapPreviewDirty )
|
if( mapPreviewDirty )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ namespace OpenRA.Widgets
|
|||||||
base.Draw(world);
|
base.Draw(world);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var rect = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
float2 origin = Game.viewport.Location + new float2(Bounds.Right,Bounds.Bottom);
|
float2 origin = Game.viewport.Location + new float2(rect.Right,rect.Bottom);
|
||||||
float2 basis = new float2(-Bounds.Width/100,-Bounds.Height/100);
|
float2 basis = new float2(-rect.Width/100,-rect.Height/100);
|
||||||
|
|
||||||
Game.chrome.lineRenderer.DrawLine(origin, origin + new float2(100, 0) * basis, Color.White, Color.White);
|
Game.chrome.lineRenderer.DrawLine(origin, origin + new float2(100, 0) * basis, Color.White, Color.White);
|
||||||
Game.chrome.lineRenderer.DrawLine(origin + new float2(100,0) * basis, origin + new float2(100,100) * basis, Color.White, Color.White);
|
Game.chrome.lineRenderer.DrawLine(origin + new float2(100,0) * basis, origin + new float2(100,100) * basis, Color.White, Color.White);
|
||||||
|
|||||||
@@ -85,26 +85,26 @@ namespace OpenRA.Widgets
|
|||||||
var powers = world.LocalPlayer.PlayerActor.traits.WithInterface<SupportPower>();
|
var powers = world.LocalPlayer.PlayerActor.traits.WithInterface<SupportPower>();
|
||||||
var numPowers = powers.Count(p => p.IsAvailable);
|
var numPowers = powers.Count(p => p.IsAvailable);
|
||||||
if (numPowers == 0) return;
|
if (numPowers == 0) return;
|
||||||
|
var rectBounds = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-top"),new float2(Bounds.X,Bounds.Y));
|
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-top"),new float2(rectBounds.X,rectBounds.Y));
|
||||||
for (var i = 1; i < numPowers; i++)
|
for (var i = 1; i < numPowers; i++)
|
||||||
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-middle"), new float2(Bounds.X, Bounds.Y + i * 51));
|
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51));
|
||||||
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-bottom"), new float2(Bounds.X, Bounds.Y + numPowers * 51));
|
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51));
|
||||||
|
|
||||||
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
|
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
|
||||||
|
|
||||||
// Hack Hack Hack
|
// Hack Hack Hack
|
||||||
Bounds.Width = 69;
|
rectBounds.Width = 69;
|
||||||
Bounds.Height = 10 + numPowers * 51 + 21;
|
rectBounds.Height = 10 + numPowers * 51 + 21;
|
||||||
|
|
||||||
var y = Bounds.Y + 10;
|
var y = rectBounds.Y + 10;
|
||||||
foreach (var sp in powers)
|
foreach (var sp in powers)
|
||||||
{
|
{
|
||||||
var image = spsprites[sp.Info.Image];
|
var image = spsprites[sp.Info.Image];
|
||||||
if (sp.IsAvailable)
|
if (sp.IsAvailable)
|
||||||
{
|
{
|
||||||
var drawPos = new float2(Bounds.X + 5, y);
|
var drawPos = new float2(rectBounds.X + 5, y);
|
||||||
var rect = new Rectangle(Bounds.X + 5, y, 64, 48);
|
var rect = new Rectangle(rectBounds.X + 5, y, 64, 48);
|
||||||
|
|
||||||
if (rect.Contains(Game.chrome.lastMousePos.ToPoint()))
|
if (rect.Contains(Game.chrome.lastMousePos.ToPoint()))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -83,6 +83,11 @@ namespace OpenRA.Widgets
|
|||||||
return new Widget(this);
|
return new Widget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int2 getParentOffset()
|
||||||
|
{
|
||||||
|
return (Parent == null) ? int2.Zero : new int2(Parent.Bounds.Location.X, Parent.Bounds.Location.Y) ;
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void Initialize()
|
public virtual void Initialize()
|
||||||
{
|
{
|
||||||
// Parse the YAML equations to find the widget bounds
|
// Parse the YAML equations to find the widget bounds
|
||||||
@@ -99,8 +104,8 @@ namespace OpenRA.Widgets
|
|||||||
substitutions.Add("WIDTH", width);
|
substitutions.Add("WIDTH", width);
|
||||||
substitutions.Add("HEIGHT", height);
|
substitutions.Add("HEIGHT", height);
|
||||||
|
|
||||||
Bounds = new Rectangle(parentBounds.X + Evaluator.Evaluate(X, substitutions),
|
Bounds = new Rectangle(Evaluator.Evaluate(X, substitutions),
|
||||||
parentBounds.Y + Evaluator.Evaluate(Y, substitutions),
|
Evaluator.Evaluate(Y, substitutions),
|
||||||
width,
|
width,
|
||||||
height);
|
height);
|
||||||
|
|
||||||
@@ -122,17 +127,19 @@ namespace OpenRA.Widgets
|
|||||||
public bool HitTest(int2 xy)
|
public bool HitTest(int2 xy)
|
||||||
{
|
{
|
||||||
if (!IsVisible()) return false;
|
if (!IsVisible()) return false;
|
||||||
if (Bounds.Contains(xy.ToPoint()) && !ClickThrough) return true;
|
var rect = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
|
if (rect.Contains(xy.ToPoint()) && !ClickThrough) return true;
|
||||||
|
|
||||||
return Children.Any(c => c.HitTest(xy));
|
return Children.Any(c => c.HitTest(xy));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rectangle GetEventBounds()
|
public Rectangle GetEventBounds()
|
||||||
{
|
{
|
||||||
|
var rect = new Rectangle(Bounds.X + getParentOffset().X, Bounds.Y + getParentOffset().Y, Bounds.Width, Bounds.Height);
|
||||||
return Children
|
return Children
|
||||||
.Where(c => c.Visible)
|
.Where(c => c.Visible)
|
||||||
.Select(c => c.GetEventBounds())
|
.Select(c => c.GetEventBounds())
|
||||||
.Aggregate(Bounds, Rectangle.Union);
|
.Aggregate(rect, Rectangle.Union);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool HandleInput(MouseInput mi)
|
public virtual bool HandleInput(MouseInput mi)
|
||||||
|
|||||||
Reference in New Issue
Block a user