2d game with map data
https://luna-development.net/2dgame/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
5.0 KiB
207 lines
5.0 KiB
|
4 years ago
|
var abby = new Vue({
|
||
|
|
el: '#root',
|
||
|
|
data: {
|
||
|
|
posX: null, // vertical
|
||
|
|
posY: null, // horizontal
|
||
|
|
|
||
|
|
isWalking: false,
|
||
|
|
spriteName: 'down',
|
||
|
|
|
||
|
|
stepIndicator: false,
|
||
|
|
stepCounter: 0,
|
||
|
|
speed: 3,
|
||
|
|
|
||
|
|
talkMessage: 'Hi!',
|
||
|
|
|
||
|
|
initialPosition: null
|
||
|
|
},
|
||
|
|
created() {
|
||
|
|
},
|
||
|
|
methods: {
|
||
|
|
move(direction) {
|
||
|
|
// set walking to true
|
||
|
|
this.isWalking = true;
|
||
|
|
this.spriteName = direction + this.step;
|
||
|
|
|
||
|
|
// move abby
|
||
|
|
switch (direction) {
|
||
|
|
// move up
|
||
|
|
case 'up':
|
||
|
|
this.posY = this.posY - this.speed;
|
||
|
|
break;
|
||
|
|
// move down
|
||
|
|
case 'down':
|
||
|
|
this.posY = this.posY + this.speed;
|
||
|
|
break;
|
||
|
|
// move right
|
||
|
|
case 'right':
|
||
|
|
this.posX = this.posX + this.speed;
|
||
|
|
break;
|
||
|
|
// move left
|
||
|
|
case 'left':
|
||
|
|
this.posX = this.posX - this.speed;
|
||
|
|
break;
|
||
|
|
// don't move
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
// start position
|
||
|
|
setTimeout(this.toggleStep(), 44700);
|
||
|
|
this.spriteName = direction;
|
||
|
|
},
|
||
|
|
toggleStep() {
|
||
|
|
if (this.stepCounter === 5) {
|
||
|
|
this.stepCounter = 0;
|
||
|
|
this.stepIndicator = !this.stepIndicator;
|
||
|
|
}
|
||
|
|
this.stepCounter++;
|
||
|
|
},
|
||
|
|
toggleSpeed(speed) {
|
||
|
|
this.speed = speed;
|
||
|
|
},
|
||
|
|
talk() {
|
||
|
|
var Abby = jQuery('#char')
|
||
|
|
Abby.attr('data-original-title', this.talkMessage);
|
||
|
|
|
||
|
|
Abby.tooltip('toggle');
|
||
|
|
|
||
|
|
setTimeout(function(){
|
||
|
|
Abby.tooltip('toggle');
|
||
|
|
}, 1000);
|
||
|
|
},
|
||
|
|
settings() {
|
||
|
|
console.log('Geschwindigkeit: ' + this.speed);
|
||
|
|
console.log('Position: ' + this.posX + ', ' + this.posY);
|
||
|
|
console.log('Aktueller Sprite: ' + this.sprite);
|
||
|
|
console.log('Nachricht: ' + this.talkMessage);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
mounted() {
|
||
|
|
|
||
|
|
let vue = this;
|
||
|
|
|
||
|
|
axios.get('/api/position')
|
||
|
|
.then(function (response) {
|
||
|
|
let initialPosition = JSON.parse(response.data.position);
|
||
|
|
vue.posX = initialPosition.x;
|
||
|
|
vue.posY = initialPosition.y;
|
||
|
|
})
|
||
|
|
.catch(function (error) {
|
||
|
|
console.log(error);
|
||
|
|
});
|
||
|
|
|
||
|
|
vue.$forceUpdate;
|
||
|
|
},
|
||
|
|
computed: {
|
||
|
|
positionAbby: function () {
|
||
|
|
return 'left: ' + this.posX + 'px; top: ' + this.posY + 'px;'
|
||
|
|
},
|
||
|
|
|
||
|
|
sprite: function () {
|
||
|
|
return 'img/sprites/' + this.spriteName + this.step + '.png';
|
||
|
|
},
|
||
|
|
|
||
|
|
step: function () {
|
||
|
|
if (this.stepIndicator && this.isWalking) {
|
||
|
|
return '_0';
|
||
|
|
} else if (!this.stepIndicator && this.isWalking) {
|
||
|
|
return '_1';
|
||
|
|
} else {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
watch: {
|
||
|
|
posX() {
|
||
|
|
|
||
|
|
let vue = this;
|
||
|
|
|
||
|
|
axios.post('/api/position/store', {
|
||
|
|
position: '{"x": "' + vue.posX + '", "y: ' + vue.posY + '", "z": 0}'
|
||
|
|
})
|
||
|
|
.then(function (response) {
|
||
|
|
console.log(response);
|
||
|
|
})
|
||
|
|
.catch(function (error) {
|
||
|
|
console.log(error);
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
posY() {
|
||
|
|
|
||
|
|
let vue = this;
|
||
|
|
|
||
|
|
axios.post('/api/position/store', {
|
||
|
|
position: '{"x": ' + vue.posX + ', "y": ' + vue.posY + ', "z": 0}'
|
||
|
|
})
|
||
|
|
.then(function (response) {
|
||
|
|
console.log(response);
|
||
|
|
})
|
||
|
|
.catch(function (error) {
|
||
|
|
console.log(error);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
// Check for Keypress
|
||
|
|
jQuery(document).keydown(function (e) {
|
||
|
|
switch (e.keyCode) {
|
||
|
|
// W, UP
|
||
|
|
case 87:
|
||
|
|
abby.move('up');
|
||
|
|
break;
|
||
|
|
case 38:
|
||
|
|
abby.move('up');
|
||
|
|
break;
|
||
|
|
|
||
|
|
// A, LEFT
|
||
|
|
case 65:
|
||
|
|
abby.move('left');
|
||
|
|
break;
|
||
|
|
case 37:
|
||
|
|
abby.move('left');
|
||
|
|
break;
|
||
|
|
|
||
|
|
// S, DOWN
|
||
|
|
case 83:
|
||
|
|
abby.move('down');
|
||
|
|
break;
|
||
|
|
case 40:
|
||
|
|
abby.move('down');
|
||
|
|
break;
|
||
|
|
|
||
|
|
// D, RIGHT
|
||
|
|
case 68:
|
||
|
|
abby.move('right');
|
||
|
|
break;
|
||
|
|
case 39:
|
||
|
|
abby.move('right');
|
||
|
|
break;
|
||
|
|
|
||
|
|
// R for Reset
|
||
|
|
case 82:
|
||
|
|
abby.posX = 14;
|
||
|
|
abby.posY = 14;
|
||
|
|
break;
|
||
|
|
|
||
|
|
// E for Talk
|
||
|
|
case 69:
|
||
|
|
abby.talk();
|
||
|
|
break;
|
||
|
|
|
||
|
|
// do nothing
|
||
|
|
default:
|
||
|
|
abby.isWalking = false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
jQuery(document).keyup(function (e) {
|
||
|
|
abby.isWalking = false;
|
||
|
|
});
|
||
|
|
|
||
|
|
jQuery(function () {
|
||
|
|
$('[data-toggle="tooltip"]').tooltip()
|
||
|
|
})
|