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

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()
})