This commit is contained in:
artem 2024-03-08 19:18:15 +03:00
parent 66493460a2
commit c9b33d3557
9 changed files with 1050 additions and 992 deletions

Binary file not shown.

View File

@ -12,13 +12,13 @@ export interface InitOutput {
readonly __wbindgen_malloc: (a: number, b: number) => number;
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
readonly __wbindgen_export_2: WebAssembly.Table;
readonly wasm_bindgen__convert__closures__invoke1_mut__h32b600599eb72778: (a: number, b: number, c: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__h28d66fed9b19a073: (a: number, b: number) => void;
readonly wasm_bindgen__convert__closures__invoke2_mut__hbd249abdb70ea846: (a: number, b: number, c: number, d: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__hf5e379825731d4b1: (a: number, b: number) => void;
readonly wasm_bindgen__convert__closures__invoke1_mut__h6fe9617391924dbe: (a: number, b: number, c: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__hcfc201bf4ebeee4e: (a: number, b: number) => void;
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h75b35f9fba66753d: (a: number, b: number, c: number) => void;
readonly wasm_bindgen__convert__closures__invoke1_mut__h41a9fb77c37df54c: (a: number, b: number, c: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__hf8e16990f9ed7c04: (a: number, b: number) => void;
readonly wasm_bindgen__convert__closures__invoke2_mut__h203a8386730ba9df: (a: number, b: number, c: number, d: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__h572b0078b587477d: (a: number, b: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__h51080012ce0a1510: (a: number, b: number) => void;
readonly wasm_bindgen__convert__closures__invoke1_mut__h1c7e22c401eab73b: (a: number, b: number, c: number) => void;
readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h70e060248429303a: (a: number, b: number, c: number) => void;
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
readonly __wbindgen_exn_store: (a: number) => void;
}

File diff suppressed because it is too large Load Diff

View File

@ -5,12 +5,12 @@ export function main(): void;
export function __wbindgen_malloc(a: number, b: number): number;
export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number;
export const __wbindgen_export_2: WebAssembly.Table;
export function wasm_bindgen__convert__closures__invoke1_mut__h32b600599eb72778(a: number, b: number, c: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__h28d66fed9b19a073(a: number, b: number): void;
export function wasm_bindgen__convert__closures__invoke2_mut__hbd249abdb70ea846(a: number, b: number, c: number, d: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__hf5e379825731d4b1(a: number, b: number): void;
export function wasm_bindgen__convert__closures__invoke1_mut__h6fe9617391924dbe(a: number, b: number, c: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__hcfc201bf4ebeee4e(a: number, b: number): void;
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h75b35f9fba66753d(a: number, b: number, c: number): void;
export function wasm_bindgen__convert__closures__invoke1_mut__h41a9fb77c37df54c(a: number, b: number, c: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__hf8e16990f9ed7c04(a: number, b: number): void;
export function wasm_bindgen__convert__closures__invoke2_mut__h203a8386730ba9df(a: number, b: number, c: number, d: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__h572b0078b587477d(a: number, b: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__h51080012ce0a1510(a: number, b: number): void;
export function wasm_bindgen__convert__closures__invoke1_mut__h1c7e22c401eab73b(a: number, b: number, c: number): void;
export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h70e060248429303a(a: number, b: number, c: number): void;
export function __wbindgen_free(a: number, b: number, c: number): void;
export function __wbindgen_exn_store(a: number): void;

View File

@ -1,4 +1,5 @@
//! Game project.
use fyrox::core::color::Color;
use fyrox::graph::SceneGraph;
use fyrox::{
asset::manager::ResourceManager,
@ -6,11 +7,16 @@ use fyrox::{
engine::GraphicsContext,
event::{Event, WindowEvent},
gui::{
brush::Brush,
button::ButtonMessage,
grid::{Column, GridBuilder, Row},
message::{MessageDirection, UiMessage},
text::TextBuilder,
widget::WidgetBuilder,
widget::WidgetMessage,
UiNode, UserInterface,
},
keyboard::{KeyCode, PhysicalKey},
plugin::{Plugin, PluginConstructor, PluginContext, PluginRegistrationContext},
scene::{graph::Graph, Scene},
};
@ -26,8 +32,7 @@ use map::build_map;
use msg::Message;
use player::Player;
const START_LEVEL: u32 = 2;
const START_LEVEL: u32 = 1;
pub struct GameConstructor;
impl PluginConstructor for GameConstructor {
@ -48,9 +53,10 @@ pub struct Game {
new_game: Handle<UiNode>,
exit: Handle<UiNode>,
level_node: Handle<UiNode>,
level: u32,
need_change_level: bool,
need_show_menu: bool,
}
impl Game {
@ -72,17 +78,23 @@ impl Game {
},
);
Self {
level_node: Handle::NONE,
scene: Handle::NONE,
new_game: Handle::NONE,
exit: Handle::NONE,
level: START_LEVEL,
need_change_level: false,
need_show_menu: false,
}
}
pub fn next_level(&mut self) {
self.need_change_level = true;
}
pub fn show_menu(&mut self) {
self.need_show_menu = true;
}
}
impl Plugin for Game {
@ -96,9 +108,38 @@ impl Plugin for Game {
self.level += 1;
context.async_scene_loader.request("data/scene.rgs");
}
if self.need_show_menu {
self.need_show_menu = false;
context
.user_interface
.send_message(WidgetMessage::visibility(
context
.user_interface
.find_handle_by_name_from_root("MenuScreen"),
MessageDirection::ToWidget,
true,
));
}
}
fn on_os_event(&mut self, event: &Event<()>, context: PluginContext) {
if let Event::WindowEvent { event, .. } = event {
if let WindowEvent::KeyboardInput { event, .. } = event {
if let PhysicalKey::Code(keycode) = event.physical_key {
if keycode == KeyCode::Escape {
context
.user_interface
.send_message(WidgetMessage::visibility(
context
.user_interface
.find_handle_by_name_from_root("MenuScreen"),
MessageDirection::ToWidget,
true,
));
}
}
}
}
if let Event::Resumed {} = event {
if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context {
let window_size = graphics_context.window.inner_size();
@ -126,7 +167,8 @@ impl Plugin for Game {
if let Some(ButtonMessage::Click) = message.data() {
if message.destination() == self.new_game {
ctx.user_interface.send_message(WidgetMessage::visibility(
ctx.user_interface.root(),
ctx.user_interface
.find_handle_by_name_from_root("MenuScreen"),
MessageDirection::ToWidget,
false,
));
@ -143,6 +185,13 @@ impl Plugin for Game {
if self.scene.is_some() {
ctx.scenes.remove(self.scene);
}
ctx
.user_interface
.send_message(WidgetMessage::visibility(
self.level_node,
MessageDirection::ToWidget,
false,
));
}
fn on_scene_loaded(
@ -155,7 +204,9 @@ impl Plugin for Game {
context
.user_interface
.send_message(WidgetMessage::visibility(
context.user_interface.root(),
context
.user_interface
.find_handle_by_name_from_root("MenuScreen"),
MessageDirection::ToWidget,
false,
));
@ -173,9 +224,20 @@ impl Plugin for Game {
if self.level == 3 {
SwordmanSpawn::new().spawn_enemy(graph, resource_manager, -5.0);
ArcherSpawn::new().spawn_enemy(graph, resource_manager, 15.0);
}
let ui_ctx = &mut context.user_interface.build_ctx();
self.level_node = GridBuilder::new(
WidgetBuilder::new().with_child(
TextBuilder::new(WidgetBuilder::new().with_foreground(Brush::Solid(Color::BLACK)))
.with_text(format!("Level: {}", self.level))
.with_font_size(20.0)
.build(ui_ctx),
),
)
.add_row(Row::stretch())
.add_column(Column::auto())
.add_column(Column::stretch())
.build(ui_ctx);
}
}

View File

@ -252,8 +252,6 @@ pub fn build_map(graph: &mut Graph, resource_manager: &ResourceManager, level: u
build_air_island_block(resource_manager, graph, -18.0, bottom_y + 4.0);
build_air_island_block(resource_manager, graph, -21.0, bottom_y + 5.5);
// TODO: for test collision
// build_box_block(resource_manager, graph, 7.5, bottom_y+ 2.5);
}

View File

@ -15,7 +15,6 @@ use fyrox::{
visitor::prelude::*,
},
event::{ElementState, Event, TouchPhase, WindowEvent},
gui::{message::MessageDirection, widget::WidgetMessage},
keyboard::{KeyCode, PhysicalKey},
scene::{
animation::spritesheet::SpriteSheetAnimation,
@ -31,6 +30,7 @@ use fyrox::{
},
script::{ScriptContext, ScriptMessageContext, ScriptMessagePayload, ScriptTrait},
};
use crate::Game;
const JUMP_HEIGHT: f32 = 6.0;
const SPEED: f32 = 2.9;
@ -445,13 +445,8 @@ impl Player {
health_bar_transform.set_position(Vector3::new(nex_x, d.y, d.z));
}
if self.health <= 0.0 {
context
.user_interface
.send_message(WidgetMessage::visibility(
context.user_interface.root(),
MessageDirection::ToWidget,
true,
));
let game = context.plugins.get_mut::<Game>();
game.show_menu();
}
}

File diff suppressed because it is too large Load Diff