Tracking character movement
This commit is contained in:
@@ -34,13 +34,13 @@ public class LocationStore
|
||||
{
|
||||
"$jsonSchema", new BsonDocument
|
||||
{
|
||||
{ "bsonType", "object" },
|
||||
{ "required", new BsonArray { "name", "coord", "createdUtc" } },
|
||||
{
|
||||
"properties", new BsonDocument
|
||||
{
|
||||
{ "name", new BsonDocument { { "bsonType", "string" } } },
|
||||
{
|
||||
{ "bsonType", "object" },
|
||||
{ "required", new BsonArray { "name", "coord", "createdUtc" } },
|
||||
{
|
||||
"properties", new BsonDocument
|
||||
{
|
||||
{ "name", new BsonDocument { { "bsonType", "string" } } },
|
||||
{
|
||||
"coord", new BsonDocument
|
||||
{
|
||||
{ "bsonType", "object" },
|
||||
@@ -51,14 +51,21 @@ public class LocationStore
|
||||
{ "x", new BsonDocument { { "bsonType", "int" } } },
|
||||
{ "y", new BsonDocument { { "bsonType", "int" } } }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{ "createdUtc", new BsonDocument { { "bsonType", "date" } } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"characterIds", new BsonDocument
|
||||
{
|
||||
{ "bsonType", "array" },
|
||||
{ "items", new BsonDocument { { "bsonType", "string" } } }
|
||||
}
|
||||
},
|
||||
{ "createdUtc", new BsonDocument { { "bsonType", "date" } } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var collections = db.ListCollectionNames().ToList();
|
||||
@@ -95,13 +102,31 @@ public class LocationStore
|
||||
return result.DeletedCount > 0;
|
||||
}
|
||||
|
||||
public async Task<bool> UpdateNameAsync(string id, string name)
|
||||
{
|
||||
var filter = Builders<Location>.Filter.Eq(l => l.Id, id);
|
||||
var update = Builders<Location>.Update.Set(l => l.Name, name);
|
||||
var result = await _col.UpdateOneAsync(filter, update);
|
||||
return result.ModifiedCount > 0;
|
||||
}
|
||||
public async Task<bool> UpdateNameAsync(string id, string name)
|
||||
{
|
||||
var filter = Builders<Location>.Filter.Eq(l => l.Id, id);
|
||||
var update = Builders<Location>.Update.Set(l => l.Name, name);
|
||||
var result = await _col.UpdateOneAsync(filter, update);
|
||||
return result.ModifiedCount > 0;
|
||||
}
|
||||
|
||||
public async Task<bool> UpdatePresenceAsync(string characterId, Coord coord)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(characterId))
|
||||
return false;
|
||||
|
||||
var pullFilter = Builders<Location>.Filter.AnyEq(l => l.CharacterIds, characterId);
|
||||
var pullUpdate = Builders<Location>.Update.Pull(l => l.CharacterIds, characterId);
|
||||
await _col.UpdateManyAsync(pullFilter, pullUpdate);
|
||||
|
||||
var targetFilter = Builders<Location>.Filter.And(
|
||||
Builders<Location>.Filter.Eq(l => l.Coord.X, coord.X),
|
||||
Builders<Location>.Filter.Eq(l => l.Coord.Y, coord.Y)
|
||||
);
|
||||
var addUpdate = Builders<Location>.Update.AddToSet(l => l.CharacterIds, characterId);
|
||||
var result = await _col.UpdateOneAsync(targetFilter, addUpdate);
|
||||
return result.MatchedCount > 0;
|
||||
}
|
||||
|
||||
private void EnsureOriginLocation()
|
||||
{
|
||||
@@ -113,12 +138,13 @@ public class LocationStore
|
||||
if (existing is not null)
|
||||
return;
|
||||
|
||||
var origin = new Location
|
||||
{
|
||||
Name = "Origin",
|
||||
Coord = new Coord { X = 0, Y = 0 },
|
||||
CreatedUtc = DateTime.UtcNow
|
||||
};
|
||||
var origin = new Location
|
||||
{
|
||||
Name = "Origin",
|
||||
Coord = new Coord { X = 0, Y = 0 },
|
||||
CharacterIds = new List<string>(),
|
||||
CreatedUtc = DateTime.UtcNow
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user