Compare commits
2 Commits
master
...
devs/lauro
Author | SHA1 | Date |
---|---|---|
Lauro Moura | 3d15e3f2bc | |
Xavi Artigas | 1a36d77c88 |
|
@ -17,9 +17,9 @@ public class LifeBoard
|
||||||
|
|
||||||
private int gen = 0;
|
private int gen = 0;
|
||||||
|
|
||||||
private bool[] board, boardPrev;
|
private bool[] board;
|
||||||
private bool[] board1, board2;
|
private bool[] board1, board2;
|
||||||
private efl.loop.Timer lifeTimer = null;
|
private efl.ILoop_Timer lifeTimer = null;
|
||||||
private LifeRender lifeRender = null;
|
private LifeRender lifeRender = null;
|
||||||
|
|
||||||
private void CellOn(int x, int y)
|
private void CellOn(int x, int y)
|
||||||
|
@ -56,16 +56,15 @@ public class LifeBoard
|
||||||
BoardSetup();
|
BoardSetup();
|
||||||
|
|
||||||
board = board1;
|
board = board1;
|
||||||
boardPrev = board2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Run(efl.ui.Win win)
|
public void Run(efl.ui.IWin win)
|
||||||
{
|
{
|
||||||
lifeTimer = new efl.loop.Timer(null, (efl.loop.Timer etimer) => {
|
lifeTimer = new efl.Loop_Timer(win, (efl.ILoop_Timer etimer) => {
|
||||||
etimer.SetInterval(0.1);
|
etimer.SetInterval(0.1);
|
||||||
});
|
});
|
||||||
|
|
||||||
lifeTimer.TICK += (object sender, EventArgs ev) => {
|
lifeTimer.TickEvt += (object sender, EventArgs ev) => {
|
||||||
Nextgen();
|
Nextgen();
|
||||||
if (this.lifeRender != null)
|
if (this.lifeRender != null)
|
||||||
this.lifeRender.Refresh(win);
|
this.lifeRender.Refresh(win);
|
||||||
|
@ -109,7 +108,7 @@ public class LifeBoard
|
||||||
|
|
||||||
public void Nextgen()
|
public void Nextgen()
|
||||||
{
|
{
|
||||||
int[] work = null;
|
bool[] work = null;
|
||||||
++gen;
|
++gen;
|
||||||
|
|
||||||
if (board == board1)
|
if (board == board1)
|
||||||
|
@ -117,8 +116,8 @@ public class LifeBoard
|
||||||
else
|
else
|
||||||
work = board1;
|
work = board1;
|
||||||
|
|
||||||
for (int y = 0; y < LIFE_BOARD_HEIGHT; y++)
|
for (int y = 0; y < Height; y++)
|
||||||
for (int x = 0; x < LIFE_BOARD_WIDTH; x++)
|
for (int x = 0; x < Width; x++)
|
||||||
{
|
{
|
||||||
int i = IndexForPosition(x, y);
|
int i = IndexForPosition(x, y);
|
||||||
|
|
||||||
|
@ -139,20 +138,22 @@ public class LifeBoard
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boardPrev = board;
|
|
||||||
board = work;
|
board = work;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TogglePause(efl.ui.Win win)
|
public void TogglePause(efl.ui.IWin win)
|
||||||
{
|
{
|
||||||
if (lifeTimer)
|
if (lifeTimer != null)
|
||||||
{
|
{
|
||||||
|
lifeTimer.SetParent(null);
|
||||||
lifeTimer.Dispose();
|
lifeTimer.Dispose();
|
||||||
lifeTimer = null;
|
lifeTimer = null;
|
||||||
|
Console.WriteLine("Paused.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Run(win);
|
Run(win);
|
||||||
|
Console.WriteLine("Restarted.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,63 +5,62 @@ public class LifeWindow
|
||||||
private LifeBoard lifeBoard;
|
private LifeBoard lifeBoard;
|
||||||
private LifeRender lifeRender;
|
private LifeRender lifeRender;
|
||||||
|
|
||||||
void ResizeEvt(efl.ui.Win win, EventArgs ev)
|
void ResizeEvt(object sender, EventArgs ev)
|
||||||
{
|
{
|
||||||
lifeRender.Layout(win);
|
lifeRender.RenderLayout((efl.ui.IWin)sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuitEvt(efl.ui.Win win, EventArgs ev)
|
void QuitEvt(object sender, EventArgs ev)
|
||||||
{
|
{
|
||||||
// quit the mainloop
|
// quit the mainloop
|
||||||
efl.ui.Config.Exit();
|
efl.ui.Config.Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchEvt(efl.ui.Win win, efl.input.Pointer ev)
|
void TouchEvt(object sender, efl.input.Interface.PointerDownEvt_Args ev)
|
||||||
{
|
{
|
||||||
int cellx, celly;
|
int cellx, celly;
|
||||||
var position = ev.GetPosition();
|
efl.ui.IWin win = (efl.ui.IWin)sender;
|
||||||
|
var position = ev.arg.GetPosition();
|
||||||
lifeRender.CellForCoords(win, position, out cellx, out celly);
|
lifeRender.CellForCoords(win, position, out cellx, out celly);
|
||||||
|
|
||||||
int i = LifeRender.IndexForPosition(cellx, celly);
|
int i = LifeBoard.IndexForPosition(cellx, celly);
|
||||||
lifeBoard.Cells[i] = !lifeBoard.Cells[i];
|
lifeBoard.Cells[i] = !lifeBoard.Cells[i];
|
||||||
lifeRender.RenderCell(win, cellx, celly);
|
lifeRender.RenderCell(win, cellx, celly);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KeyDownEvt(efl.ui.Win win, efl.input.Key ev)
|
void KeyDownEvt(object sender, efl.input.Interface.KeyDownEvt_Args ev)
|
||||||
{
|
{
|
||||||
if (ev.GetKey() == "space")
|
efl.ui.IWin win = (efl.ui.IWin)sender;
|
||||||
|
if (ev.arg.GetKey() == "space")
|
||||||
lifeBoard.TogglePause(win);
|
lifeBoard.TogglePause(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Run()
|
|
||||||
{
|
|
||||||
lifeBoard.Run(win);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LifeWindow()
|
public LifeWindow()
|
||||||
{
|
{
|
||||||
efl.ui.Win win = new efl.Ui.WinConcrete(null, (efl.ui.Win ewin) => {
|
efl.ui.IWin win = new efl.ui.Win(null, (efl.ui.IWin ewin) => {
|
||||||
ewin.SetWinType(efl.ui.win.Type.Basic);
|
ewin.SetWinType(efl.ui.Win_Type.Basic);
|
||||||
ewin.SetText("EFL Life");
|
ewin.SetText("EFL Life");
|
||||||
ewin.SetAutohide(true);
|
ewin.SetAutohide(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
// when the user clicks "close" on a window there is a request to hide
|
// when the user clicks "close" on a window there is a request to hide
|
||||||
win.HIDE += QuitEvt;
|
win.HideEvt += QuitEvt;
|
||||||
|
|
||||||
eina.Size2D sz;
|
eina.Size2D sz;
|
||||||
sz.W = 10 * LifeBoard.Width * win.GetScale();
|
sz.W = (int)(10 * LifeBoard.Width * win.GetScale());
|
||||||
sz.H = 10 * LifeBoard.Height * win.GetScale();
|
sz.H = (int)(10 * LifeBoard.Height * win.GetScale());
|
||||||
|
|
||||||
lifeBoard = new LifeBoard();
|
lifeBoard = new LifeBoard();
|
||||||
lifeRender = new LifeRender(win, lifeBoard);
|
lifeRender = new LifeRender(win, lifeBoard);
|
||||||
lifeRender.Refresh(win);
|
lifeRender.Refresh(win);
|
||||||
|
|
||||||
win.RESIZE += ResizeEvt;
|
win.ResizeEvt += ResizeEvt;
|
||||||
win.POINTER_DOWN += TouchEvt;
|
win.PointerDownEvt += TouchEvt;
|
||||||
win.KEY_DOWN += KeyDownEvt;
|
win.KeyDownEvt += KeyDownEvt;
|
||||||
|
|
||||||
win.SetSize(sz);
|
win.SetSize(sz);
|
||||||
|
|
||||||
|
lifeBoard.Run(win);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,9 +70,7 @@ public class Example
|
||||||
{
|
{
|
||||||
efl.All.Init(efl.Components.Ui);
|
efl.All.Init(efl.Components.Ui);
|
||||||
|
|
||||||
var lifeWin = new LifeWin();
|
var lifeWin = new LifeWindow();
|
||||||
|
|
||||||
lifeWin.Run();
|
|
||||||
|
|
||||||
// start the mainloop
|
// start the mainloop
|
||||||
efl.ui.Config.Run();
|
efl.ui.Config.Run();
|
||||||
|
|
|
@ -2,32 +2,32 @@ using System;
|
||||||
|
|
||||||
public class LifeRender
|
public class LifeRender
|
||||||
{
|
{
|
||||||
private efl.canvas.Rectangle[] lifeCells;
|
private efl.canvas.IRectangle[] lifeCells;
|
||||||
private LifeBoard lifeBoard;
|
private LifeBoard lifeBoard;
|
||||||
|
|
||||||
public LifeRender(efl.ui.Win win, LifeBoard board)
|
public LifeRender(efl.ui.IWin win, LifeBoard board)
|
||||||
{
|
{
|
||||||
lifeBoard = board;
|
lifeBoard = board;
|
||||||
lifeBoard.SetRender(this);
|
lifeBoard.SetRender(this);
|
||||||
|
|
||||||
lifeCells = new efl.canvas.Rectangle[LifeBoard.Height * LifeBoard.Width];
|
lifeCells = new efl.canvas.IRectangle[LifeBoard.Height * LifeBoard.Width];
|
||||||
|
|
||||||
for (int y = 0; y < LifeBoard.Height; ++y)
|
for (int y = 0; y < LifeBoard.Height; ++y)
|
||||||
for (int x = 0; x < LifeBoard.Width; ++x)
|
for (int x = 0; x < LifeBoard.Width; ++x)
|
||||||
lifeCells[LifeBoard.IndexForPosition(x, y)] = new efl.canvas.RectangleConcrete(win);
|
lifeCells[LifeBoard.IndexForPosition(x, y)] = new efl.canvas.Rectangle(win);
|
||||||
|
|
||||||
RenderLayout(win);
|
RenderLayout(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CellForCoords(efl.ui.Win win, eina.Position2D coord, out int x, out int y)
|
public void CellForCoords(efl.ui.IWin win, eina.Position2D coord, out int x, out int y)
|
||||||
{
|
{
|
||||||
eina.Size2D size = win.GetSize();
|
eina.Size2D size = win.GetSize();
|
||||||
|
|
||||||
x = coord.X / ((double) size.W / LifeBoard.Width);
|
x = coord.X * LifeBoard.Width / size.W;
|
||||||
y = coord.Y / ((double) size.H / LifeBoard.Height);
|
y = coord.Y * LifeBoard.Height / size.H;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderLayout(efl.ui.Win win)
|
public void RenderLayout(efl.ui.IWin win)
|
||||||
{
|
{
|
||||||
eina.Size2D size = win.GetSize();
|
eina.Size2D size = win.GetSize();
|
||||||
double cw = (double) size.W / LifeBoard.Width;
|
double cw = (double) size.W / LifeBoard.Width;
|
||||||
|
@ -40,18 +40,18 @@ public class LifeRender
|
||||||
|
|
||||||
// the little +1 here will avoid tearing as we layout non-multiple sizes
|
// the little +1 here will avoid tearing as we layout non-multiple sizes
|
||||||
eina.Size2D sz;
|
eina.Size2D sz;
|
||||||
sz.W = cw + 1;
|
sz.W = (int)(cw + 1);
|
||||||
sz.H = ch + 1;
|
sz.H = (int)(ch + 1);
|
||||||
rect.SetSize(sz);
|
rect.SetSize(sz);
|
||||||
|
|
||||||
eina.Position2D pos;
|
eina.Position2D pos;
|
||||||
pos.X = x * cw;
|
pos.X = (int)(x * cw);
|
||||||
pos.Y = y * ch;
|
pos.Y = (int)(y * ch);
|
||||||
rect.SetPosition(pos);
|
rect.SetPosition(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RenderCell(efl.ui.Win win, int x, int y)
|
public void RenderCell(efl.ui.IWin win, int x, int y)
|
||||||
{
|
{
|
||||||
int i = LifeBoard.IndexForPosition(x, y);
|
int i = LifeBoard.IndexForPosition(x, y);
|
||||||
var rect = lifeCells[i];
|
var rect = lifeCells[i];
|
||||||
|
@ -62,7 +62,7 @@ public class LifeRender
|
||||||
rect.SetColor(255, 255, 255, 255);
|
rect.SetColor(255, 255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Refresh(efl.ui.Win win)
|
public void Refresh(efl.ui.IWin win)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < LifeBoard.Height; ++y)
|
for (int y = 0; y < LifeBoard.Height; ++y)
|
||||||
for (int x = 0; x < LifeBoard.Width; ++x)
|
for (int x = 0; x < LifeBoard.Width; ++x)
|
||||||
|
|
Loading…
Reference in New Issue