1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2012-2013 Alexis Laferrière <alexis.laf@xymus.net>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 # Graphism for the Dino game
18 # Uses the Display interface from MNit.
21 import mnit
# for Display
26 fun to_screen
( d
: Display ) : ScreenPos
30 return new ScreenPos( x
.to_f
, y
.to_f
)
38 fun to_game
( d
: Display ) : GamePos
40 var x
= x
.to_i-d
.width
/2
41 var y
= d
.height
/2-y
.to_i
42 return new GamePos( x
, y
)
47 fun draw
( display
: Display, imgs
: ImageSet, turn
: Turn ) is abstract
51 # Notice: This method only implements the basic drawing feature, it is
52 # redefed in `fancy_dino`. If the `fancy_dino` module is imported by
53 # user methods, this code is dead and will never be executed.
54 redef fun draw
( display
, imgs
, turn
)
56 var spos
= pos
.to_screen
( display
)
61 img
= imgs
.dino_dead_img
63 display
.blit_centered
( img
, spos
.x
.to_i
, spos
.y
.to_i
)
68 redef fun draw
( display
, imgs
, turn
)
70 var man_pos
= pos
.to_screen
( display
)
75 else if is_afraid
( turn
) then
76 img
= imgs
.caveman_afraid_img
77 else if can_throw
( turn
) then
78 img
= imgs
.caveman_ready_img
80 img
= imgs
.caveman_img
83 display
.blit_centered
( img
, man_pos
.x
.to_i
, man_pos
.y
.to_i
)
88 redef fun draw
( display
, imgs
, turn
)
90 var spos
= pos
.to_screen
( display
)
92 display
.blit_rotated
( imgs
.javelin_img
, spos
.x
, spos
.y
, angle
)
97 redef fun draw
( display
, imgs
, turn
)
99 var spos
= pos
.to_screen
( display
)
100 var img
= imgs
.bush_img
101 display
.blit_centered
( img
, spos
.x
.to_i
, spos
.y
.to_i
)
106 var javelin_img
: Image
109 var dino_dead_img
: Image
110 var dino_shadow
: Image
112 var caveman_img
: Image
113 var caveman_afraid_img
: Image
114 var caveman_ready_img
: Image
115 var blood_img
: Image
119 var life_empty_img
: Image
121 var you_won_img
: Image
122 var you_lost_img
: Image
123 var start_over_img
: Image
124 fun start_over_path
: String is abstract
126 var numbers
: NumberImages
130 javelin_img
= app
.load_image
( "images/javelin.png" )
132 dino_img
= app
.load_image
( "images/dino.png" )
133 dino_dead_img
= app
.load_image
( "images/dino_dead.png" )
134 dino_shadow
= app
.load_image
( "images/shadow.png" )
136 caveman_img
= app
.load_image
( "images/caveman.png" )
137 caveman_afraid_img
= app
.load_image
( "images/caveman_afraid.png" )
138 caveman_ready_img
= app
.load_image
( "images/caveman_ready.png" )
139 blood_img
= app
.load_image
( "images/blood.png" )
140 bush_img
= app
.load_image
( "images/bush.png" )
142 life_img
= app
.load_image
( "images/life.png" )
143 life_empty_img
= app
.load_image
( "images/life_empty.png" )
145 you_won_img
= app
.load_image
( "images/you_won.png" )
146 you_lost_img
= app
.load_image
( "images/you_lost.png" )
147 start_over_img
= app
.load_image
( start_over_path
)
149 numbers
= app
.load_numbers
("images/#.png")
154 fun draw
( display
: Display, imgs
: ImageSet, turn
: Turn )
156 display
.clear
(0.05, 0.45, 0.1)
158 # entities (dino, cavemen and javelins)
160 e
.draw
( display
, imgs
, turn
)
164 var life_out_of_ten
= 10 * dino
.life
/ dino
.total_life
165 if dino
.life
*10 % dino
.total_life
!= 0 then
169 for life
in [0..life_out_of_ten
[ do
170 display
.blit_centered
( imgs
.life_img
, display
.width
*(life
+1)/11, display
.top_offset
)
173 for empty
in [life_out_of_ten
..10[ do
174 display
.blit_centered
( imgs
.life_empty_img
, display
.width
*(empty
+1)/11, display
.top_offset
)
178 display
.blit_number
(imgs
.numbers
, score
.item
, display
.width
/11, display
.top_offset
+32)
182 var concl_img
: Image
184 concl_img
= imgs
.you_won_img
186 concl_img
= imgs
.you_lost_img
188 display
.blit_centered
( concl_img
, display
.width
/2, 60+display
.top_offset
)
190 if ready_to_start_over
then
191 display
.blit_centered
( imgs
.start_over_img
, display
.width
/2, 100+display
.top_offset
)
197 redef interface Display
198 fun top_offset
: Int do return 48