private void monsterUpdate(object sender, MonsterUpdateEventArgs e) { PlayerSeen = canSeePlayer(e.engine.map.mGrid, e.playerPos); if (moves.Count == 0) { if (PlayerSeen) { JumpPointParam jParam = new JumpPointParam(e.engine.searchgrid, false, false); jParam.Reset(new GridPos(pos.X, pos.Y), new GridPos(e.playerPos.X, e.playerPos.Y)); List <GridPos> resultPathList = JumpPointFinder.FindPath(jParam); resultPathList = JumpPointFinder.GetFullPath(resultPathList); if (moves.Count != 0) { moves.Clear(); } for (int i = 0; i < resultPathList.Count; i++) { moves.Enqueue(new Vector2(resultPathList[i].x, resultPathList[i].y)); } } } if (moves.Count != 0) { var dxdy = e.engine.map.getDxDy(pos, moves.Dequeue()); if (!e.engine.checkEntity(pos, e.playerPos, dxdy.X, dxdy.Y)) { move(dxdy.X, dxdy.Y); } } if (PlayerSeen == false) { Vector2 a = rndMoves[rnd.Next(rndMoves.Count)]; if (e.engine.map.canMove(pos, a.X, a.Y)) { move(a.X, a.Y); } } if (isPlayerNear(e.playerPos)) { attack(e.engine.player); } }
protected virtual void OnMonsterUpdate(MonsterUpdateEventArgs e) { MonsterUpdate?.Invoke(this, e); }