Add different color stars.
BIN
assets/blue_star.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/green_star.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
@ -15,8 +15,8 @@
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="0.92.1 r15371"
|
inkscape:version="0.92.1 r15371"
|
||||||
sodipodi:docname="star_template.svg"
|
sodipodi:docname="star.svg"
|
||||||
inkscape:export-filename="/home/cmdln/src/git/susuwatari-game/assets/star.png"
|
inkscape:export-filename="/home/cmdln/src/git/susuwatari-game/assets/green_star.png"
|
||||||
inkscape:export-xdpi="9.6000004"
|
inkscape:export-xdpi="9.6000004"
|
||||||
inkscape:export-ydpi="9.6000004">
|
inkscape:export-ydpi="9.6000004">
|
||||||
<defs
|
<defs
|
||||||
|
@ -29,14 +29,14 @@
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="0.35"
|
inkscape:zoom="0.35"
|
||||||
inkscape:cx="184.19191"
|
inkscape:cx="-438.66523"
|
||||||
inkscape:cy="182.82758"
|
inkscape:cy="182.82758"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="g8425"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:window-width="1920"
|
inkscape:window-width="1920"
|
||||||
inkscape:window-height="1025"
|
inkscape:window-height="1051"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="1920"
|
||||||
inkscape:window-y="0"
|
inkscape:window-y="0"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
units="px" />
|
units="px" />
|
||||||
|
@ -48,21 +48,22 @@
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
<dc:title></dc:title>
|
<dc:title />
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<g
|
<g
|
||||||
inkscape:label="Layer 1"
|
inkscape:label="Pink Star"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1"
|
id="layer1"
|
||||||
transform="translate(-13.253985,-58.111215)">
|
transform="translate(-13.253985,-58.111215)"
|
||||||
|
style="display:none">
|
||||||
<path
|
<path
|
||||||
sodipodi:type="star"
|
sodipodi:type="star"
|
||||||
style="opacity:0.75499998;fill:#ffaacc;fill-opacity:1;stroke:none;stroke-width:0.60730559;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="opacity:0.75499998;fill:#ffaacc;fill-opacity:1;stroke:none;stroke-width:0.60730559;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
id="path8417"
|
id="path8417"
|
||||||
sodipodi:sides="5"
|
sodipodi:sides="5"
|
||||||
sodipodi:cx="99.326875"
|
sodipodi:cx="99.326874"
|
||||||
sodipodi:cy="153.95569"
|
sodipodi:cy="153.95569"
|
||||||
sodipodi:r1="86.412148"
|
sodipodi:r1="86.412148"
|
||||||
sodipodi:r2="51.019348"
|
sodipodi:r2="51.019348"
|
||||||
|
@ -77,4 +78,82 @@
|
||||||
inkscape:export-xdpi="96"
|
inkscape:export-xdpi="96"
|
||||||
inkscape:export-ydpi="96" />
|
inkscape:export-ydpi="96" />
|
||||||
</g>
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(-13.253985,-58.111215)"
|
||||||
|
id="g8417"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Blue Star"
|
||||||
|
style="display:none">
|
||||||
|
<path
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:transform-center-y="-8.0016296"
|
||||||
|
inkscape:transform-center-x="0.2624264"
|
||||||
|
d="m 150.80325,223.36204 -50.974975,-18.38947 -50.603689,19.38781 1.737289,-54.16275 -34.076296,-42.1358 52.04868,-15.08495 29.543381,-45.429166 30.43056,44.839736 52.33511,14.05904 -33.24155,42.79742 z"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:flatsided="false"
|
||||||
|
sodipodi:arg2="1.5609685"
|
||||||
|
sodipodi:arg1="0.93264992"
|
||||||
|
sodipodi:r2="51.019348"
|
||||||
|
sodipodi:r1="86.412148"
|
||||||
|
sodipodi:cy="153.95569"
|
||||||
|
sodipodi:cx="99.326874"
|
||||||
|
sodipodi:sides="5"
|
||||||
|
id="path8415"
|
||||||
|
style="opacity:0.75499998;fill:#00ccff;fill-opacity:1;stroke:none;stroke-width:0.60730559;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="star" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="Green Star"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="g8421"
|
||||||
|
transform="translate(-13.253985,-58.111215)"
|
||||||
|
style="display:inline">
|
||||||
|
<path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="opacity:0.75499998;fill:#00ff66;fill-opacity:1;stroke:none;stroke-width:0.60730559;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path8419"
|
||||||
|
sodipodi:sides="5"
|
||||||
|
sodipodi:cx="99.326874"
|
||||||
|
sodipodi:cy="153.95569"
|
||||||
|
sodipodi:r1="86.412148"
|
||||||
|
sodipodi:r2="51.019348"
|
||||||
|
sodipodi:arg1="0.93264992"
|
||||||
|
sodipodi:arg2="1.5609685"
|
||||||
|
inkscape:flatsided="false"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 150.80325,223.36204 -50.974975,-18.38947 -50.603689,19.38781 1.737289,-54.16275 -34.076296,-42.1358 52.04868,-15.08495 29.543381,-45.429166 30.43056,44.839736 52.33511,14.05904 -33.24155,42.79742 z"
|
||||||
|
inkscape:transform-center-x="0.2624264"
|
||||||
|
inkscape:transform-center-y="-8.0016296"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="translate(-13.253985,-58.111215)"
|
||||||
|
id="g8425"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Yellow Star"
|
||||||
|
style="display:none">
|
||||||
|
<path
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:transform-center-y="-8.0016296"
|
||||||
|
inkscape:transform-center-x="0.2624264"
|
||||||
|
d="m 150.80325,223.36204 -50.974975,-18.38947 -50.603689,19.38781 1.737289,-54.16275 -34.076296,-42.1358 52.04868,-15.08495 29.543381,-45.429166 30.43056,44.839736 52.33511,14.05904 -33.24155,42.79742 z"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
inkscape:rounded="0"
|
||||||
|
inkscape:flatsided="false"
|
||||||
|
sodipodi:arg2="1.5609685"
|
||||||
|
sodipodi:arg1="0.93264992"
|
||||||
|
sodipodi:r2="51.019348"
|
||||||
|
sodipodi:r1="86.412148"
|
||||||
|
sodipodi:cy="153.95569"
|
||||||
|
sodipodi:cx="99.326874"
|
||||||
|
sodipodi:sides="5"
|
||||||
|
id="path8423"
|
||||||
|
style="opacity:0.75499998;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.60730559;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
sodipodi:type="star" />
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 6 KiB |
BIN
assets/yellow_star.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
10
src/lib.rs
|
@ -34,8 +34,14 @@ impl Game {
|
||||||
pub fn new(w: &mut PistonWindow) -> Game {
|
pub fn new(w: &mut PistonWindow) -> Game {
|
||||||
let mut scene = Scene::new();
|
let mut scene = Scene::new();
|
||||||
let mut stars: Vec<Star> = vec![];
|
let mut stars: Vec<Star> = vec![];
|
||||||
for _ in 1..7 {
|
for number in 1..7 {
|
||||||
stars.push(Star::new(w, &mut scene));
|
let color = match number % 4 {
|
||||||
|
1 => "yellow",
|
||||||
|
2 => "green",
|
||||||
|
3 => "blue",
|
||||||
|
_ => "pink",
|
||||||
|
};
|
||||||
|
stars.push(Star::new(color, w, &mut scene));
|
||||||
}
|
}
|
||||||
let player = Hero::new(w, &mut scene);
|
let player = Hero::new(w, &mut scene);
|
||||||
Game {
|
Game {
|
||||||
|
|
|
@ -19,23 +19,23 @@ pub struct Star {
|
||||||
dir: u32,
|
dir: u32,
|
||||||
pub collider: Cuboid2<f64>,
|
pub collider: Cuboid2<f64>,
|
||||||
pub destroyed: bool,
|
pub destroyed: bool,
|
||||||
|
accel: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
const DESIGNED_FOR_WIDTH: f64 = 640.0;
|
const DESIGNED_FOR_WIDTH: f64 = 640.0;
|
||||||
|
|
||||||
const SCALE_FACTOR: f64 = 0.5;
|
const SCALE_FACTOR: f64 = 0.5;
|
||||||
const ACCEL: f64 = 2.0;
|
|
||||||
|
|
||||||
const MOVE_DUR: f64 = 0.75;
|
const MOVE_DUR: f64 = 0.75;
|
||||||
const DESTROY_DUR: f64 = 0.75;
|
const DESTROY_DUR: f64 = 0.75;
|
||||||
|
|
||||||
impl Star {
|
impl Star {
|
||||||
pub fn new(w: &mut PistonWindow, scene: &mut Scene<Texture<Resources>>) -> Star {
|
pub fn new(color: &str, w: &mut PistonWindow, scene: &mut Scene<Texture<Resources>>) -> Star {
|
||||||
let assets = find_folder::Search::ParentsThenKids(3, 3)
|
let assets = find_folder::Search::ParentsThenKids(3, 3)
|
||||||
.for_folder("assets")
|
.for_folder("assets")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let tex = Rc::new(Texture::from_path(&mut w.factory,
|
let tex = Rc::new(Texture::from_path(&mut w.factory,
|
||||||
assets.join("star.png"),
|
assets.join(format!("{}_star.png", color)),
|
||||||
Flip::None,
|
Flip::None,
|
||||||
&TextureSettings::new())
|
&TextureSettings::new())
|
||||||
.unwrap());
|
.unwrap());
|
||||||
|
@ -43,6 +43,12 @@ impl Star {
|
||||||
let x = rand_pos(width as f64);
|
let x = rand_pos(width as f64);
|
||||||
let y = rand_pos(height as f64);
|
let y = rand_pos(height as f64);
|
||||||
let scale = width as f64 / DESIGNED_FOR_WIDTH * SCALE_FACTOR;
|
let scale = width as f64 / DESIGNED_FOR_WIDTH * SCALE_FACTOR;
|
||||||
|
let accel = match color {
|
||||||
|
"yellow" => 3.0,
|
||||||
|
"blue" => 1.0,
|
||||||
|
"green" => 2.0,
|
||||||
|
_ => 2.0,
|
||||||
|
};
|
||||||
let mut sprite = Sprite::from_texture(tex);
|
let mut sprite = Sprite::from_texture(tex);
|
||||||
sprite.set_scale(scale, scale);
|
sprite.set_scale(scale, scale);
|
||||||
sprite.set_position(x, y);
|
sprite.set_position(x, y);
|
||||||
|
@ -57,6 +63,7 @@ impl Star {
|
||||||
dir: rand_dir(),
|
dir: rand_dir(),
|
||||||
collider: Cuboid2::new(Vector2::new(bounds[2], bounds[3])),
|
collider: Cuboid2::new(Vector2::new(bounds[2], bounds[3])),
|
||||||
destroyed: false,
|
destroyed: false,
|
||||||
|
accel: accel,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,8 +88,8 @@ impl Star {
|
||||||
}
|
}
|
||||||
self.dir = rand_turn(self.dir);
|
self.dir = rand_turn(self.dir);
|
||||||
let dir = lookup_dir(self.dir);
|
let dir = lookup_dir(self.dir);
|
||||||
let mov_x = ACCEL * dir.0;
|
let mov_x = self.accel * dir.0;
|
||||||
let mov_y = ACCEL * dir.1;
|
let mov_y = self.accel * dir.1;
|
||||||
scene.run(self.sprite_id,
|
scene.run(self.sprite_id,
|
||||||
&Action(Ease(EaseFunction::CubicOut,
|
&Action(Ease(EaseFunction::CubicOut,
|
||||||
Box::new(MoveBy(dt * MOVE_DUR, mov_x, mov_y)))));
|
Box::new(MoveBy(dt * MOVE_DUR, mov_x, mov_y)))));
|
||||||
|
|