« first day (46 days earlier)      last day (3815 days later) » 
01:00 - 16:0016:00 - 00:00

01:08
TTGTB
Make sure that you pull the changes from github next time @bazola (should be a simple fast-forward)
 
6 hours later…
07:07
Monking
07:18
@bazola What's that thing? :o
07:32
Back in the evening somewhere, busy day
 
2 hours later…
09:17
Monking @skiwi
09:28
Monking @SimonAndréForsberg
Always fun... was supposed to have a meeting, the guy we were supposed to meet doesn't show up
And am now really on my laptop, still have no clue why it is so slow
that sounds fun ^^
@skiwi Should I try to 'convert' the JavaFX code to use the ECS game instead?
the stand-alone JavaFX code, that is. Not the client/server - yet.
10:33
@SimonAndréForsberg Don't know
What did you do so far since yesterday?
I've started the conversion of JavaFX code to ECS now
on a new branch, of course
yesterday I cleaned up a bit on the JavaFX branch and reviewed bazola's JavaFX question. And moved the ECS branch over to the main repo
Okay
I'm trying to picture things
And how to do the branching for the mod-modules
that won't be a problem I think
git checkout -b mod-hearthstone
I want to create a plan for myself
10:38
and off which branch to bracch off
I'm thinking about branching off ecs
well right now, ecs would be the best branch to branch off, yes
and then create my own test mod
It should be simpler as the game we are implementing, yet covering everything
'covering everything'? what 'everything'?
Well, the ECS system is split up in a core and a mod-implementation, right?
Note that right now, the PhrancisGame.createGame method might be a bit hard to understand and seem complex. It is possible to extract a lot of things to functions, so that you could do AttackYGO.add(game);
Depends on what you mean by core and what you mean by mod.
10:42
@SimonAndréForsberg Classes like ECSSystem, etc. are core, and implementations are mod
Could make a separate module for common systems, etc.?
The core is really the cardshifter.ecs.base package, but cardshifter.ecs.actions, cardshifter.ecs.phase, and cardshifter.ecs.resources can also be considered part of the 'core'
because pretty much every mod will use actions, phases (player turns), and resources (creature stats, mana costs, mana, etc...)
@skiwi yes, that's a bit what I was thinking. Refactoring out Mana feature to it's own package/class(es)
@SimonAndréForsberg But mana by itself should be mod specific, turns should be in the core, I think
lol, this made me look twice
@skiwi Absolutely. A mod can choose which mana style to use, or no of the existing styles.
So that is kind of settled then once done
Then the hard part is developing your own mods
Of what files does a Java mod consist?
hard*est*
Technically, to make a mod all you need is one method. A method to setup the entities and add components to them, and to add the systems that you want to use.
I imagine that there will be many default-implementations of various systems and features
10:52
So we have a setup method
so if you want to gain mana like in Hearthstone, it's a simple method call to Mana.asHearthstone(game);
I'm asking this also with Lua in mind, because Lua mods will not use the java build system at all
yes, it's a setup method
depends on what you mean by 'at all'
So the mod may be nothing more than a file (be it a zip for Lua or a jar for Java)
I picture people modding in Lua to not know anything about Java
they can use Java-Lua method bindings we provided to make what they want
10:55
Correct, but still unclear to me (probably also because I didn't have time to look into your code thoroughly yet)
There is only exactly one method in the mod that gets called which loads up the entire mod?
@skiwi pretty much, yes.
It's pretty much like a configuration
As all the features has been extracted to components + systems
Yes, but the mod needs to also be able to specify its own components and systems
And it will be able to do that
good
So we have a single point of entry
10:58
So currently for console and javafx version, we need to specify the directory of the mod, I assume?
@skiwi we need to make it call a method (that returns an instance of ECSGame). How we do that, that's up to us.
@SimonAndréForsberg Well yes, I'm thinking about the most simple implementation we can do at the moment
Most simple implementation? Dependency injection. Provide it with a Supplier<ECSGame>
We cannot require Java there
won't work for Lua
And it's then also hardcoded
I'm thinking we specify the mod (Lua uses a zip, Java uses a jar), and specify whether it is written in Lua and Java
sure we can require Java, the client is Java. We can provide a Lua-wrapper method. If we want to make a mod with Lua, we pass it a LuaGameLoader(InputStream)
and btw, the client is pretty much hard-coded for our specific mod as it is.
11:04
Well yes for testing that would be nice
Then last point for now
You are developing a mod, say a Java one for simplicity's sake
Is there a way you can as modder test the mod via automated tests?
Like taking over the basic startup tests from the core module, and then add your own integration tests?
While being aware that mod repository only has the mod code and nothing else
@skiwi not at the moment, but there is a way to make that possible yes.
What would be required to do so?
I would think publishing at least the core module on mvnrepo and creating tests that have the option to specify a mod
well, you need to make it possible to access the core..
it's solvable, but I'm not sure if it's meaningful to put it up on mvnrepo. At least not until there are some real players and there's a real client (that can support all kinds of mods)
Well, how would you else get the jar?
the old-fashioned way. Download it.
11:15
Do we want to do that inside a Maven build script?
of course not
Then what would be your plan on that?
I just mean that the initial modders don't have to use Maven
I don't think we should put it on mvnrepo until it's really production-ready, or at least beta-ready
They don't have to, but we would
which is still a loooooooooooong time from now.
11:16
@SimonAndréForsberg no I am not much of a graphical designer either
@skiwi what is what thing?
We still need to get the jar into there somewhee
@bazola Would be more helpful if you used the reply-to feature ;)
you can install jars into your local maven repository manually
or you can use the old-style 'build-path' to set up a mod-project
@SimonAndréForsberg Yes, but it executes on Travis
I do agree though that we may not want to put up things on mvnrepo now already
you never said that you wanted to use Travis for it!!!
@SimonAndréForsberg Well.... That's technically correct
11:22
@skiwi okay I will start using reply-to :)
@bazola But it's the picture I think yo meant?
yeah
er no
@skiwi what's what thing?
@bazola Ah, the window in front there
^^ that thing
11:25
its the github desktop client
the pc version looks the same though
Can you do anything cool with it, or just see fancy stuff?
you can do everything that you can do with the console
sometimes in mac when I do something in the console, it seems to get stuck, so I have used the GUI to fix it
okay
@SimonAndréForsberg I'll leave the discussion at where we are at right now
Will have plenty of things to do ;)
@SimonAndréForsberg by the way thank you for answering my question. I especially did not know about the java best practices, so I will make sure to follow them from now on
also I didn't know I could do this:
@FXML private Pane opponentHandPane;
I think it looks a whole lot cleaner than using two lines
I see it on two lines a lot though
But it's not strictly neccessary indeed
I might change my own code one day
11:30
@bazola especially for short annotations like @FXML, I think it can be good to only use it on two lines
Time for a Business Information Systems test now
^^ ECS game in JavaFX
11:45
that was quick simon
why do you think it is better to use it on two lines? just curious
two lines? what is on two lines?
oh, the @FXML?
for short annotations, it's OK with one line but if you have this:
yeah I would agree
@JsonProperty(value = "something", ignorable = true)
then it's a bit much text :)
> Deprecated core non-ECS classes
> merged with JavaFX
> Converted CompleteIdiot AI to ECS-style
> Added index to PlayerComponent
> Because of the view, added getCards method in ZoneComponent
> utility class for Resources, method to get all resdata in a ResourceMap
@bazola it was quick because most things have a 1:1 connection
11:50
> Added 'required' method in ComponentRetreiver, with a NotNull-assertion
> Added EntityRemovedEvent, and a system to clear entities from zones
> Added log4j to JavaFX
> Converted JavaFX standalone client to use ECSGame
3
that is most excellent :)
@bazola Are you going to work on the JavaFX networking?
If you are, then you may continue to do so a little while longer, I haven't changed the server to use ECS yet.
Just make sure that you pull my cleaning-up I did last night
you mean continue working on the network client? yeah I was going to play with it a bit today
12:31
> Added turn number and phase number to PhaseController
12:46
> The ones currently implemented in the ECS are:
ActionAllowedCheckEvent - hook to determine if an action is allowed
ActionPerformEvent - when an action is performed
DrawCardEvent - when a card is drawn by a player
DrawCardFailedEvent - when there was no card left to draw
EntityRemoveEvent - when an entity is removed
PhaseEndEvent - at the end of a phase (turn)
PhaseStartEvent - at the start of a phase (turn)
ResourceValueChange - when a resource value has been changed for an entity ...
(such as losing health, gaining mana)
ResourceViewUpdate - when `get()` on a resource returns a new value (note that this is not the same as ResourceValueChange because of the possibility of using a strategy to fake the actual value, useful with 'All creatures have +1/+1' effects)
StartGameEvent - when game is started
TargetableCheckEvent - hook to determine if an entity can be targeted
ZoneChangeEvent - when a card moves from one zone to another
13:18
@SimonAndréForsberg The labels switched to capslock
Nice stuff though
@skiwi yeah, I know, that's intentional for now. Making it lower-case won't be a problem
Figuring out how the Windows Github app works
14:15
And finally also I can head home
@SimonAndréForsberg Will you do any of the ECS splitting?
I'm also fine with doing it on my own branch
Splitting in core, commons and mod
14:43
@skiwi what ECS splitting?
core, commons, mod... hmm...
you can do it if you want to
time to eat now
15:26
@SimonAndréForsberg working on processing messages from the server, here is what I am working on:
Player Info: Player1 - {scrap=0, mana=1, manaMax=1, battlefield={Zone Battlefield (0) owned by {Player 'Player1'}}, deck={Zone Deck (47) owned by {Player 'Player1'}}, cardType=Player, life=10, hand={Zone Hand (5) owned by {Player 'Player1'}}}
Player Info: Player2 - {scrap=0, mana=0, manaMax=0, battlefield={Zone Battlefield (0) owned by {Player 'Player2'}}, deck={Zone Deck (47) owned by {Player 'Player2'}}, cardType=Player, life=10, hand={Zone Hand (5) owned by {Player 'Player2'}}}
ZoneMessage [id=3, name=Battlefield, owner=0, size=0, known=true]
what does the UpdateMessage id mean exactly? player?
and what kind of message is Player Info coming from? PlayerMessage?
UpdateMessage id can be for a player and it can be for a card. It is for an entity. Both players and cards are entities.
the toString method of PlayerMessage is the following:
	@Override
	public String toString() {
		return String.format("Player Info: %s - %s", this.name, this.properties);
	}
So that is correct, yes.
so how do you suggest I turn that value of 2 into knowing on screen which value to update? do I hard code 2 to mean a player?
Hmm... I see there is a value missing here. PlayerMessage should also provide an id for the player. So that you can know what ids are players and what ids are cards
I will add a getId() method to the PlayerMessage, @bazola
the cards and zones have ids though so try focus on them right now @bazola
15:37
cool
ZoneMessage can get me pretty far because it has an owner value.. however the CardInfo message does not, so somewhere I would have to check that that zone is for a particular player?
@bazola CardInfo gives you an id for the zone the card is in, use that id to lookup the zone.
i think that it makes sense, we will see what I come up with :)
Hey again
You're just in time for some @Duga spam...
unfortunately it seems like any time I want to change the JavaFX I need to do Platform.runLater()
@bazola yes, that is correct.
I tried putting the whole method behind Platform.runLater() but then I was getting null pointer exceptions
that doesn't sound optimal :)
or well, it would be a good idea to make a whole method inside runLater, but I mean NPE doesn't sound optimal :)
@SimonAndréForsberg Ok I'll do
to test this stuff I have to turn the server off and on each time
@bazola Let me fix that for you...
even just a restart command?
would help a lot
@bazola How about an ai command that creates a new AI?
the trouble is that when I close the client, the server doesn't know, so when I make a new game, it makes the player the first person and never makes an ai
We might really need a solution to @Duga-spam
> To give Zone a unique id, it now creates an entity inside the component
> Added a function to get all resource data by name: value
> Converted server game to use ECS
But neither do we want to really cut out commit messages
01:00 - 16:0016:00 - 00:00

« first day (46 days earlier)      last day (3815 days later) »