[gnome-games] chess: Tidy up rendering code
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] chess: Tidy up rendering code
- Date: Sat, 19 Feb 2011 07:21:36 +0000 (UTC)
commit 548505e428dbaf8a3f72dc73312675ae3d799298
Author: Robert Ancell <robert ancell canonical com>
Date: Sat Feb 19 18:21:29 2011 +1100
chess: Tidy up rendering code
glchess/src/chess-scene.vala | 23 +++++++++++++++++++++--
glchess/src/chess-view-2d.vala | 18 +++---------------
glchess/src/chess-view-3d.vala | 8 +++-----
3 files changed, 27 insertions(+), 22 deletions(-)
---
diff --git a/glchess/src/chess-scene.vala b/glchess/src/chess-scene.vala
index 8fd38ff..0005d50 100644
--- a/glchess/src/chess-scene.vala
+++ b/glchess/src/chess-scene.vala
@@ -6,6 +6,7 @@ public class ChessModel
public double target_x;
public double target_y;
public bool under_threat;
+ public bool is_selected;
public bool moving
{
@@ -58,6 +59,7 @@ public class ChessModel
public class ChessScene : Object
{
public List<ChessModel> pieces = null;
+ private bool _can_move[64];
public bool animating = false;
private Timer animation_timer;
@@ -244,10 +246,22 @@ public class ChessScene : Object
need_animation = true;
}
- model.under_threat = false;
- if (selected_rank > 0 &&
+ if (selected_rank > 0 && move_number == -1 &&
game.current_player.move_with_coords (selected_rank, selected_file, rank, file, false))
+ {
model.under_threat = true;
+ _can_move[rank * 8 + file] = true;
+ }
+ else
+ {
+ model.under_threat = false;
+ _can_move[rank * 8 + file] = false;
+ }
+
+ if (move_number == -1 && rank == selected_rank && file == selected_file)
+ model.is_selected = true;
+ else
+ model.is_selected = false;
new_pieces.append (model);
}
@@ -277,6 +291,11 @@ public class ChessScene : Object
}
}
+ public bool can_move (int rank, int file)
+ {
+ return _can_move[rank * 8 + file];
+ }
+
private bool animate_cb ()
{
/* Get the duration since the last tick */
diff --git a/glchess/src/chess-view-2d.vala b/glchess/src/chess-view-2d.vala
index 290a2e8..101894b 100644
--- a/glchess/src/chess-view-2d.vala
+++ b/glchess/src/chess-view-2d.vala
@@ -96,17 +96,6 @@ private class ChessView2D : ChessView
c.rectangle (-bord_size, -bord_size, bord_size * 2, bord_size * 2);
c.fill ();
- var selected_piece = scene.get_selected_piece ();
- if (scene.move_number != -1)
- selected_piece = null;
- int selected_offset = 0;
- if (selected_piece != null)
- {
- selected_offset = selected_piece.type;
- if (selected_piece.color == Color.BLACK)
- selected_offset += 6;
- }
-
for (int file = 0; file < 8; file++)
{
for (int rank = 0; rank < 8; rank++)
@@ -189,7 +178,7 @@ private class ChessView2D : ChessView
c.rotate (-Math.PI * scene.board_angle / 180.0);
draw_piece (c,
- model.piece == selected_piece ? selected_model_surface : model_surface,
+ model.is_selected ? selected_model_surface : model_surface,
model.piece, model.under_threat && scene.show_move_hints ? 0.8 : 1.0);
c.restore ();
@@ -200,15 +189,14 @@ private class ChessView2D : ChessView
{
for (int file = 0; file < 8; file++)
{
- if (scene.move_number == -1 && selected_piece != null && scene.show_move_hints &&
- selected_piece.player.move_with_coords (scene.selected_rank, scene.selected_file, rank, file, false))
+ if (scene.show_move_hints && scene.can_move (rank, file))
{
c.save ();
c.translate ((file - 4) * square_size, (3 - rank) * square_size);
c.translate (square_size / 2, square_size / 2);
c.rotate (-Math.PI * scene.board_angle / 180.0);
- draw_piece (c, model_surface, selected_piece, 0.1);
+ draw_piece (c, model_surface, scene.get_selected_piece (), 0.1);
c.restore ();
}
diff --git a/glchess/src/chess-view-3d.vala b/glchess/src/chess-view-3d.vala
index 7f902c0..da28041 100644
--- a/glchess/src/chess-view-3d.vala
+++ b/glchess/src/chess-view-3d.vala
@@ -403,8 +403,6 @@ private class ChessView3D : ChessView
glEnable (GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, piece_texture);
- var selected_piece = scene.get_selected_piece ();
-
/* Draw the pieces */
foreach (var model in scene.pieces)
{
@@ -414,7 +412,7 @@ private class ChessView3D : ChessView
-(BOARD_BORDER + (GLfloat) model.y * SQUARE_WIDTH + SQUARE_WIDTH / 2));
/* Raise the selected piece up */
- if (model.piece == selected_piece)
+ if (model.is_selected)
glTranslatef (0.0f, SQUARE_WIDTH * 0.4f, 0.0f);
render_piece (model.piece);
@@ -427,7 +425,7 @@ private class ChessView3D : ChessView
{
for (int file = 0; file < 8; file++)
{
- if (scene.move_number == -1 && scene.show_move_hints && selected_piece != null && selected_piece.player.move_with_coords (scene.selected_rank, scene.selected_file, rank, file, false))
+ if (scene.show_move_hints && scene.can_move (rank, file))
{
glPushMatrix ();
glTranslatef (BOARD_BORDER + file * SQUARE_WIDTH + SQUARE_WIDTH / 2,
@@ -437,7 +435,7 @@ private class ChessView3D : ChessView
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable (GL_BLEND);
glDisable (GL_DEPTH_TEST);
- render_piece (selected_piece, 0.1f);
+ render_piece (scene.get_selected_piece (), 0.1f);
glEnable (GL_DEPTH_TEST);
glDisable (GL_BLEND);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]