Store all snowflakes in a separate array, achieving performance increase of about 10% for the whole engine on winter maps
import QtQuick
import Hedgewars.Engine 1.0
Page1Form {
property HWEngine hwEngine
property var keyBindings: ({
"long": {
[Qt.Key_Space]: Engine.Attack,
[Qt.Key_Up]: Engine.ArrowUp,
[Qt.Key_Right]: Engine.ArrowRight,
[Qt.Key_Down]: Engine.ArrowDown,
[Qt.Key_Left]: Engine.ArrowLeft,
[Qt.Key_Shift]: Engine.Precision
},
"simple": {
[Qt.Key_Tab]: Engine.SwitchHedgehog,
[Qt.Key_Enter]: Engine.LongJump,
[Qt.Key_Backspace]: Engine.HighJump,
[Qt.Key_Y]: Engine.Accept,
[Qt.Key_N]: Engine.Deny
}
})
property NetSession netSession
focus: true
Component.onCompleted: {
hwEngine = hwEngineComponent.createObject();
}
Keys.onPressed: event => {
if (event.isAutoRepeat) {
return;
}
let action = keyBindings["simple"][event.key];
if (action !== undefined) {
gameView.engineInstance.simpleEvent(action);
event.accepted = true;
return;
}
action = keyBindings["long"][event.key];
if (action !== undefined) {
gameView.engineInstance.longEvent(action, Engine.Set);
event.accepted = true;
}
}
Keys.onReleased: event => {
if (event.isAutoRepeat) {
return;
}
const action = keyBindings["long"][event.key];
if (action !== undefined) {
gameView.engineInstance.longEvent(action, Engine.Unset);
event.accepted = true;
}
}
netButton.onClicked: {
netSession = netSessionComponent.createObject();
netSession.open();
}
Component {
id: hwEngineComponent
HWEngine {
dataPath: "../share/hedgewars/Data"
engineLibrary: "../rust/lib-hedgewars-engine/target/debug/libhedgewars_engine.so"
previewAcceptor: PreviewAcceptor
onPreviewImageChanged: previewImage.source = "image://preview/image"
onPreviewIsRendering: previewImage.source = "qrc:/res/iconTime.png"
}
}
Component {
id: netSessionComponent
NetSession {
nickname: "test0272"
url: "hwnet://gameserver.hedgewars.org:46632"
}
}
tickButton {
onClicked: {
tickButton.visible = false;
}
}
Timer {
id: advancingTimer
interval: 100
repeat: true
running: !tickButton.visible
onTriggered: {
gameView.tick(100);
gameView.update();
}
}
gameButton {
visible: !gameView.engineInstance
onClicked: {
const engineInstance = hwEngine.runQuickGame();
gameView.engineInstance = engineInstance;
}
}
button1 {
visible: !gameView.engineInstance
onClicked: {
hwEngine.getPreview();
}
}
preview {
visible: !gameView.engineInstance
}
gameMouseArea {
onPositionChanged: event => {
gameView.engineInstance.moveCamera(Qt.point(event.x - gameMouseArea.lastPoint.x, event.y - gameMouseArea.lastPoint.y));
gameMouseArea.lastPoint = Qt.point(event.x, event.y);
}
onPressed: event => {
gameMouseArea.lastPoint = Qt.point(event.x, event.y);
}
}
}