something like enemy ai

This commit is contained in:
the me 2022-08-18 18:47:44 -07:00
parent f52e476acf
commit 0b371ac22d
8 changed files with 102 additions and 38 deletions

View file

@ -6,42 +6,52 @@ function c_doenemyai(target) {
case AI.KILLER:
var dude = c_findnearestunit(ARMY.US);
repeat(target.data.mov.val) {
var dist = c_tiledist(target.pos.x, target.pos.y, dude.pos.x, dude.pos.y);
if dist.x+dist.y <= target.data.rng.val {
log("started combat")
c_generatecombatstack([target, dude]);
break;
}
log(c_tiledist(target.pos.x, target.pos.y, dude.pos.x, dude.pos.y));
var guy = c_gettile(target.pos.x, target.pos.y);
if target.pos.x < dude.x {
if target.pos.x < dude.pos.x {
var guy = c_gettile(target.pos.x+1, target.pos.y);
} else if target.pos.x > dude.x {
} else if target.pos.x > dude.pos.x {
var guy = c_gettile(target.pos.x-1, target.pos.y);
}
if target.pos.y < dude.y {
var guy = c_gettile(target.pos.x+1, target.pos.y);
} else if target.pos.x > dude.x {
var guy = c_gettile(target.pos.x-1, target.pos.y);
if target.pos.y < dude.pos.y {
var guy = c_gettile(target.pos.x, target.pos.y+1);
} else if target.pos.y > dude.pos.y {
var guy = c_gettile(target.pos.x, target.pos.y-1);
}
if guy.passable {
c_moveunit(target, guy);
continue;
if guy != noone {
if guy.passable && !c_containsunit(guy.x, guy.y) {
c_moveunit(target, guy);
}
}
c_loadmarkings();
}
target.waiting = true;
break;
case AI.WAITER:
target.waiting = true;
break;
case AI.ESCAPER:
target.waiting = true;
break;
}
c_loadmarkings();
}
function c_findnearestunit(alignment) {
var lowest = new vec2(99, 99);
var lowestunit = new vec2(99, 99);
var lowestunit = noone;
for (i=0; i<array_length(global.units[alignment]); i++) {
var guy = global.units[alignment][i].pos;
if (lowest.x + lowest.y < guy.x + guy.y) {
if (lowest.x + lowest.y > guy.x + guy.y) {
lowest = guy;
lowestunit = global.units[alignment][i];
}
}
return
return lowestunit;
}

View file

@ -0,0 +1,27 @@
function c_passableeval() {
/*var i, j;
for (i=0; i<array_length(global.map); i++) {
for (i=0; i<array_length(global.map[i]); i++) {
global.map[i][j].passable
}
}
for (i=0; i<array_length(global.map); i++) {
for (i=0; i<array_length(global.map[i]); i++) {
if c_containsunit(global.map[i][j]) {
global.map[i][j].passable
}
}
}*/
}
function c_containsunit(x, y) {
var tile = c_gettile(x, y);
for (i=0; i<array_length(tile.contents); i++) {
if instance_exists(tile.contents[i]) {
if tile.contents[i].object_index = o_unit {
return tile.contents[i];
}
}
}
return false;
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "Scripts",
"path": "folders/Scripts.yy",
},
"resourceVersion": "1.0",
"name": "c_passableeval",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -39,14 +39,23 @@ function c_colortile(x, y, color) {
}
function c_markunit(unitobject) {
var i, j;
var mov = unitobject.data.mov.val;
for (i=-mov; i<=mov; i++) {
for (j=-mov; j<=mov; j++) {
if abs(i)+abs(j) <= mov {
(unitobject.marked ? c_decolor : c_colortile)(unitobject.pos.x+i, unitobject.pos.y+j, c_maroon);
unitobject.marked = !unitobject.marked;
c_loadmarkings();
}
function c_loadmarkings() {
c_decolor_all(c_maroon);
var k;
for (k=0; k<array_length(global.units[ARMY.THEM]); k++) {
var unitobject = global.units[ARMY.THEM][k];
var i, j;
var mov = unitobject.data.mov.val;
for (i=-mov; i<=mov; i++) {
for (j=-mov; j<=mov; j++) {
if abs(i)+abs(j) <= mov {
if unitobject.marked c_colortile(unitobject.pos.x+i, unitobject.pos.y+j, c_maroon);
}
}
}
}
unitobject.marked = !unitobject.marked;
}

View file

@ -13,6 +13,7 @@ function unit(personaldata_, classdata_, stats_) constructor {
idle = personaldata_.idle;
up = personaldata_.up;
down = personaldata_.down;
aitype = personaldata_.aitype;
alignment = noone;
var i;
for (i=0; i<array_length(stats_); i++) {