beardgame / td Goto Github PK
View Code? Open in Web Editor NEWMultiplayer Tower Defence game. Systemic component game design. In-depth elemental tech tree. Environmental storytelling. Explosions.
Multiplayer Tower Defence game. Systemic component game design. In-depth elemental tech tree. Environmental storytelling. Explosions.
The worker task tiles property was null. This happened on the client, server continued fine.
Steps:
Pathfinding doesn't always propagate correctly. Cause as of yet unknown.
It is reproducible at 5b223df using game seed: 138415339 on a perlin map generated at size 42. For the map position check below.
For the full debug info in this case, check below.
So that towers attack enemies at the base preferably
Instead, the mod loading context or something similar should return data streams for all content 'files'. This way mods can be stored as archives.
To enable reloadable shaders, mods would also be able to return 'file watchers' that could detect the change in a file. An archived version could create a dummy that never changed.
Interestingly, this could allow for changing shader code directly inside the game as well by having a mod loaded out of memory instead.
Most of the resources are managed and we don't care, but we do have to clean up all the OpenGL stuff:
Probably have to turn the PackedSpriteSet into an interface so that we can hide more stuff in them, like the cleanup itself perhaps. Then we could also remove the funny IHasSurface interface (in place of maybe another one that serves the same purpose but does it better.
Happened on client. I think the building was destroyed by an enemy while building clientside and not server side? Or maybe I'm imagining it.
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Bearded.TD.Game.GameState.Find[T](Id`1 id)
at Bearded.TD.Game.Commands.FinishBuildingConstruction.Serializer.GetCommand(GameInstance game)
at Bearded.TD.Commands.Serialization.SerializerExtensions.Read[TObject](ICommandSerializer`1 me, NetBufferReader stream, TObject context)
at Bearded.TD.Game.ClientDataMessageHandler.Handle(NetIncomingMessage msg)
at Bearded.TD.Networking.NetworkInterface.ConsumeMessages()
at Bearded.TD.Game.GameRunner.Update(UpdateEventArgs args)
at Bearded.TD.UI.Controls.GameUI.Update(UpdateEventArgs args)
at Bearded.TD.UI.UIUpdater.Update(UpdateEventArgs args)
at Bearded.TD.TheGame.OnUpdate(UpdateEventArgs e)
at amulware.Graphics.Program.run(Double targetUpdatesPerSecond, Double targetDrawsPerSecond, Double maximumFrameTimeFactor, Boolean dontOverrideFps) in C:\Users\amulware\git\td\libs\awgraphics\src\amulware.Graphics\Window\Program.cs:line 279
at amulware.Graphics.Program.<>c__DisplayClass22_0.<Run>b__0() in C:\Users\amulware\git\td\libs\awgraphics\src\amulware.Graphics\Window\Program.cs:line 211
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Right now long strings will overflow off the screen. Sometimes we lose important information because of that. We should probably build a control that can dynamically wrap text.
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: index
at at System.Collections.Immutable.Requires.FailRange(String parameterName, String message)
at at System.Collections.Immutable.Requires.Range(Boolean condition, String parameterName, String message)
at at System.Collections.Immutable.ImmutableList1.Node.ItemRef(Int32 index) at at System.Collections.Immutable.ImmutableList
1.get_Item(Int32 index)
at at Bearded.TD.UI.Controls.LobbyControl.LoadingBlueprintsListSource.CreateItemControlFor(Int32 index)
at at Bearded.UI.Controls.ListControl.createCellControl(Int32 index, Double top, Double bottom)
at at Bearded.UI.Controls.ListControl.createCellIfVisible(Int32 index, Double bottom, Double top, Double height)
at at Bearded.UI.Controls.ListControl.addCellAbove(Int32 index, Double bottom)
at at Bearded.UI.Controls.ListControl.addCellsUpwards()
at at Bearded.UI.Controls.ListControl.Reload()
at at Beard
This will probably boom if you don't cancel in time.
We have a couple of places where we want to pass a set of parameters over the network. So far we have GameSettings
, and now we're adding WaveScript
as well. We want to pass the entire object across the network. We have wanted to avoid just passing in the struct and letting the network layer figure it out, so we tend to copy all the properties of the struct into a serializer. This leads to a lot of duplication, and we may forget to sync a newly added property.
My suggestion would be to automatically generate serializer classes. For example:
[GenerateNetSerializer]
readonly struct WaveScript {
public Instant Start { get; }
public instant End { get; }
[DoNotSerialize]
public TimeSpan Duration => End - Start;
}
Could generate something along the lines of:
sealed class WaveScriptSerializer {
private Instant start;
private Instant end;
public void WaveScriptSerializer() {}
public void WaveScriptSerializer(WaveScript original) {
start = original.Start;
end = original.End;
}
public void Serialize(INetBufferStream stream) {
stream.Serialize(ref start);
stream.Serialize(ref end);
}
}
The easiest would be to wait for Rider to support generated classes so it doesn't show up as a compile error if you reference them in code. That way, you could just manually instantiate the serializer where you need it. It should work in my EAP version of Rider though, but I think it currently also needs a very specific combination of .NET frameworks so... I will stuck to doing this manually for now, and we can move it to codegen later.
8476c61 adds a pretty good start at a proper water shader.
Here's a list of things that can be improved:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.