-
Notifications
You must be signed in to change notification settings - Fork 0
@ksiek127/rpg 84 display objects on screen #17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
@ksiek127/rpg 84 display objects on screen #17
Conversation
Unit tests require these methods -> they must stay being visible inside a package
isOkValueNull, isErrorValueNull
# Conflicts: # src/main/java/io/rpg/Initializer.java # src/main/java/io/rpg/controller/Controller.java # src/main/java/io/rpg/model/location/LocationModel.java # src/main/java/io/rpg/view/GameObjectView.java # src/main/java/io/rpg/view/LocationView.java # src/main/java/io/rpg/viewmodel/LocationViewModel.java
kkafar
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO generalnie git, zostawiłem kilka uwag. Możliwe, że będzie warto poczekać na mojego PRa bo planowałem tam zrobić kilka rzeczy o których napisałem w review -- chyba, że bym się ociągał (bo nie wiem na kiedy zrobię) to wtedy nie ma sensu czekać :D
Na pewno będzie trzeba wmergować tutaj mastera, bo zrobiłeś brancha odbijając się od mojej gałęzi, na której ja potem wiele plików usunąłem i kilka rzeczy zmieniłem -- a tych zmian już tutaj nie ma. Najłatwiej zrobić to wchodząc na swoją gałąź i mergując (wcześniej jeszcze warto pobrać aktualnego mastera):
git switch master
git pull
git switch @ksiek127/RPG-84-display-objects-on-screen
git merge master
Jak coś to mogę z tym pomóc.
| GameObject gameObject = GameObject.fromConfig(goconfig); | ||
| gameObjects.add(gameObject); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| GameObject gameObject = GameObject.fromConfig(goconfig); | |
| gameObjects.add(gameObject); | |
| gameObjects.add(GameObject.fromConfig(goconfig)); |
| package io.rpg.view; | ||
|
|
||
| public class IGameObjectModelStateChangeObserver { | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ten interfejs był ostatecznie wywalony. Zanim zmergujemy tego brancha będzie trzeba go wyczyścić z rzeczy, których już nie ma.
| package io.rpg.view; | ||
|
|
||
| public interface ILocationModelStateChangeObserver { | ||
|
|
||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Podobnie tutaj.
| package io.rpg.view; | ||
|
|
||
| public interface IObservable<T> { | ||
| void addListener(final T listener); | ||
|
|
||
| void removeListener(final T listener); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tak samo
| package io.rpg.view; | ||
|
|
||
| public interface IOnClickedObserver { | ||
| void onClick(GameObjectView source); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tak samo
| view.getViewModel().setBackground(new Image(config.getBackgroundPath())); | ||
| // todo: na podstawie configu ustawić pola korzystając z view modelu | ||
| List<GameObjectConfig> objectConfigs = config.getObjects(); | ||
| for(GameObjectConfig objectConfig: objectConfigs){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| for(GameObjectConfig objectConfig: objectConfigs){ | |
| for(GameObjectConfig objectConfig : objectConfigs) { |
| List<GameObjectConfig> objectConfigs = config.getObjects(); | ||
| for(GameObjectConfig objectConfig: objectConfigs){ | ||
| GameObjectView goview = new GameObjectView(Path.of(objectConfig.getAssetPath()), objectConfig.getPosition()); | ||
| viewModel.addChild(goview); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Jest spoko, ale można przemyśleć tworzenie obiektów GameObjectView już w Initializer. Wyciągnięcie tego tam i tak będzie potrzebne, zdaje się, bo będzie trzeba zarejestrować view do modelu (czyli każdy GameObjectView dodać jako observera do odpowiadającego mu GameObject). Prawdopodobnie zrobię w tym PR, ale jeszcze nie wiem na kiedy to będzie gotowe.
| package io.rpg.viewmodel; | ||
|
|
||
| import javafx.fxml.FXML; | ||
| import javafx.fxml.Initializable; | ||
| import javafx.scene.Parent; | ||
| import javafx.scene.image.Image; | ||
| import javafx.scene.image.ImageView; | ||
| import javafx.scene.layout.HBox; | ||
| import javafx.scene.layout.Pane; | ||
|
|
||
| import java.net.URL; | ||
| import java.util.ResourceBundle; | ||
|
|
||
| public class GameObjectViewModel implements Initializable { | ||
| @FXML | ||
| private Pane imgPane; | ||
|
|
||
| @FXML | ||
| private ImageView gameObjectView; | ||
| @FXML | ||
| private HBox parent; | ||
|
|
||
| public GameObjectViewModel() { | ||
| } | ||
|
|
||
| public void setImage(Image image){ | ||
| this.gameObjectView.imageProperty().setValue(image); | ||
| } | ||
|
|
||
| @Override | ||
| public void initialize(URL location, ResourceBundle resources) { | ||
| gameObjectView.imageProperty().addListener((property, oldImg, newImg) -> { | ||
| imgPane.setPrefWidth(newImg.getWidth()); | ||
| imgPane.setPrefHeight(newImg.getHeight()); | ||
| }); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wydaje mi się, że te klasa nie będzie potrzebna, bo wszystko co potrzebujemy żeby narysować GameObjectView to ImageView, który jest jego superklasą -> chyba nie trzeba nic dodatkowego.
Edit: ViewModel był zrobiony dla klas LocationView i popupów bo one są ładowane z FMXL'a i JavaFX chce mieć takie coś (ona nazywa to kontrolerem (zresztą chyba słusznie, zależy jak patrzeć), ale my dostosowaliśmy nazewnictwo, żeby nie kolidowało z naszym kontrolerem). GameObjectView nie jest ładowane z FXML'a.
| public void addChild(ImageView child){ | ||
| parent.getChildren().add(child); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| public void addChild(ImageView child){ | |
| parent.getChildren().add(child); | |
| } | |
| public void addChild(ImageView child) { | |
| parent.getChildren().add(child); | |
| } |
Dokładnie o to chodziło, gicik.
| <HBox fx:id="parent" alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="640.0" prefWidth="640.0" style="-fx-background-color: #cb2f2f;" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="io.rpg.viewmodel.LocationViewModel"> | ||
| <children> | ||
| <Pane fx:id="contentPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="640.0" prefWidth="640.0"> | ||
| <Pane fx:id="contentPane" viewOrder="1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="640.0" prefWidth="640.0"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Z czystej ciekawośCi: co robi ten viewOrder="1"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to jest taki jakby z-index, tzn kolejnosc, w ktorej sa wyswietlane rzeczy (np jesli sa dwa obiekty w tym samym miejscu to ten z wiekszym viewOrder zasloni ten z mniejszym)
teraz w sumie juz niepotrzebny, wyrzuce, to zostalo po tym, jak zrobilem fxml dla kazego gameobjectu i chcialem zeby byly rysowane na tle, a nie na odwrot
| } | ||
|
|
||
| public void addChild(ImageView child){ | ||
| parent.getChildren().add(child); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tak jak jest obecnie obrazki są rysowane obok tła, zamiast na nim. zmiana parent na contentPane chyba załatwia sprawę
| parent.getChildren().add(child); | |
| contentPane.getChildren().add(child); |
| // todo: na podstawie configu ustawić pola korzystając z view modelu | ||
| List<GameObjectConfig> objectConfigs = config.getObjects(); | ||
| for(GameObjectConfig objectConfig: objectConfigs){ | ||
| GameObjectView goview = new GameObjectView(Path.of(objectConfig.getAssetPath()), objectConfig.getPosition()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pozycję w postaci numeru wiersza i kolumny trzeba jeszcze przeskalować przez rozmiar kwadratu siatki. raczej nie w tym miejscu, ale gdzieś trzeba
Description
Checklist