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_malloc: (a: number, b: number) => number;
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
readonly __wbindgen_export_2: WebAssembly.Table; 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__invoke1_mut__h41a9fb77c37df54c: (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__invoke0_mut__hf8e16990f9ed7c04: (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__invoke2_mut__h203a8386730ba9df: (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__invoke0_mut__h572b0078b587477d: (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__h51080012ce0a1510: (a: number, b: number) => void;
readonly wasm_bindgen__convert__closures__invoke0_mut__hcfc201bf4ebeee4e: (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__h75b35f9fba66753d: (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_free: (a: number, b: number, c: number) => void;
readonly __wbindgen_exn_store: (a: 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_malloc(a: number, b: number): number;
export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number; export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number;
export const __wbindgen_export_2: WebAssembly.Table; 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__invoke1_mut__h41a9fb77c37df54c(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__invoke0_mut__hf8e16990f9ed7c04(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__invoke2_mut__h203a8386730ba9df(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__invoke0_mut__h572b0078b587477d(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__h51080012ce0a1510(a: number, b: number): void;
export function wasm_bindgen__convert__closures__invoke0_mut__hcfc201bf4ebeee4e(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__h75b35f9fba66753d(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_free(a: number, b: number, c: number): void;
export function __wbindgen_exn_store(a: number): void; export function __wbindgen_exn_store(a: number): void;

View File

@ -1,4 +1,5 @@
//! Game project. //! Game project.
use fyrox::core::color::Color;
use fyrox::graph::SceneGraph; use fyrox::graph::SceneGraph;
use fyrox::{ use fyrox::{
asset::manager::ResourceManager, asset::manager::ResourceManager,
@ -6,11 +7,16 @@ use fyrox::{
engine::GraphicsContext, engine::GraphicsContext,
event::{Event, WindowEvent}, event::{Event, WindowEvent},
gui::{ gui::{
brush::Brush,
button::ButtonMessage, button::ButtonMessage,
grid::{Column, GridBuilder, Row},
message::{MessageDirection, UiMessage}, message::{MessageDirection, UiMessage},
text::TextBuilder,
widget::WidgetBuilder,
widget::WidgetMessage, widget::WidgetMessage,
UiNode, UserInterface, UiNode, UserInterface,
}, },
keyboard::{KeyCode, PhysicalKey},
plugin::{Plugin, PluginConstructor, PluginContext, PluginRegistrationContext}, plugin::{Plugin, PluginConstructor, PluginContext, PluginRegistrationContext},
scene::{graph::Graph, Scene}, scene::{graph::Graph, Scene},
}; };
@ -26,8 +32,7 @@ use map::build_map;
use msg::Message; use msg::Message;
use player::Player; use player::Player;
const START_LEVEL: u32 = 1;
const START_LEVEL: u32 = 2;
pub struct GameConstructor; pub struct GameConstructor;
impl PluginConstructor for GameConstructor { impl PluginConstructor for GameConstructor {
@ -48,9 +53,10 @@ pub struct Game {
new_game: Handle<UiNode>, new_game: Handle<UiNode>,
exit: Handle<UiNode>, exit: Handle<UiNode>,
level_node: Handle<UiNode>,
level: u32, level: u32,
need_change_level: bool, need_change_level: bool,
need_show_menu: bool,
} }
impl Game { impl Game {
@ -72,17 +78,23 @@ impl Game {
}, },
); );
Self { Self {
level_node: Handle::NONE,
scene: Handle::NONE, scene: Handle::NONE,
new_game: Handle::NONE, new_game: Handle::NONE,
exit: Handle::NONE, exit: Handle::NONE,
level: START_LEVEL, level: START_LEVEL,
need_change_level: false, need_change_level: false,
need_show_menu: false,
} }
} }
pub fn next_level(&mut self) { pub fn next_level(&mut self) {
self.need_change_level = true; self.need_change_level = true;
} }
pub fn show_menu(&mut self) {
self.need_show_menu = true;
}
} }
impl Plugin for Game { impl Plugin for Game {
@ -96,9 +108,38 @@ impl Plugin for Game {
self.level += 1; self.level += 1;
context.async_scene_loader.request("data/scene.rgs"); 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) { 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 Event::Resumed {} = event {
if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context { if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context {
let window_size = graphics_context.window.inner_size(); let window_size = graphics_context.window.inner_size();
@ -126,7 +167,8 @@ impl Plugin for Game {
if let Some(ButtonMessage::Click) = message.data() { if let Some(ButtonMessage::Click) = message.data() {
if message.destination() == self.new_game { if message.destination() == self.new_game {
ctx.user_interface.send_message(WidgetMessage::visibility( ctx.user_interface.send_message(WidgetMessage::visibility(
ctx.user_interface.root(), ctx.user_interface
.find_handle_by_name_from_root("MenuScreen"),
MessageDirection::ToWidget, MessageDirection::ToWidget,
false, false,
)); ));
@ -143,6 +185,13 @@ impl Plugin for Game {
if self.scene.is_some() { if self.scene.is_some() {
ctx.scenes.remove(self.scene); ctx.scenes.remove(self.scene);
} }
ctx
.user_interface
.send_message(WidgetMessage::visibility(
self.level_node,
MessageDirection::ToWidget,
false,
));
} }
fn on_scene_loaded( fn on_scene_loaded(
@ -155,7 +204,9 @@ impl Plugin for Game {
context context
.user_interface .user_interface
.send_message(WidgetMessage::visibility( .send_message(WidgetMessage::visibility(
context.user_interface.root(), context
.user_interface
.find_handle_by_name_from_root("MenuScreen"),
MessageDirection::ToWidget, MessageDirection::ToWidget,
false, false,
)); ));
@ -173,9 +224,20 @@ impl Plugin for Game {
if self.level == 3 { if self.level == 3 {
SwordmanSpawn::new().spawn_enemy(graph, resource_manager, -5.0); SwordmanSpawn::new().spawn_enemy(graph, resource_manager, -5.0);
ArcherSpawn::new().spawn_enemy(graph, resource_manager, 15.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, -18.0, bottom_y + 4.0);
build_air_island_block(resource_manager, graph, -21.0, bottom_y + 5.5); 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::*, visitor::prelude::*,
}, },
event::{ElementState, Event, TouchPhase, WindowEvent}, event::{ElementState, Event, TouchPhase, WindowEvent},
gui::{message::MessageDirection, widget::WidgetMessage},
keyboard::{KeyCode, PhysicalKey}, keyboard::{KeyCode, PhysicalKey},
scene::{ scene::{
animation::spritesheet::SpriteSheetAnimation, animation::spritesheet::SpriteSheetAnimation,
@ -31,6 +30,7 @@ use fyrox::{
}, },
script::{ScriptContext, ScriptMessageContext, ScriptMessagePayload, ScriptTrait}, script::{ScriptContext, ScriptMessageContext, ScriptMessagePayload, ScriptTrait},
}; };
use crate::Game;
const JUMP_HEIGHT: f32 = 6.0; const JUMP_HEIGHT: f32 = 6.0;
const SPEED: f32 = 2.9; const SPEED: f32 = 2.9;
@ -445,13 +445,8 @@ impl Player {
health_bar_transform.set_position(Vector3::new(nex_x, d.y, d.z)); health_bar_transform.set_position(Vector3::new(nex_x, d.y, d.z));
} }
if self.health <= 0.0 { if self.health <= 0.0 {
context let game = context.plugins.get_mut::<Game>();
.user_interface game.show_menu();
.send_message(WidgetMessage::visibility(
context.user_interface.root(),
MessageDirection::ToWidget,
true,
));
} }
} }

File diff suppressed because it is too large Load Diff