Skip to content

Commit e6344d6

Browse files
committed
Ajout de Hardcoded et LackOfLight
1 parent 81ff4ee commit e6344d6

28 files changed

+163
-70
lines changed

src/app/app-routing.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { AppComponent } from './app.component';
44

55

66
const routes: Routes = [
7-
{ path: '', component: AppComponent }, // Root route displays Home
7+
{ path: '', component: AppComponent },
88

99
];
1010

Lines changed: 54 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,68 @@
11
<div class="text-center">
2-
<div class="filters w-auto d-inline-block">
3-
<select (change)="onTechSelected($event.target.value)">
4-
<option value=""> Technologie </option>
5-
@for (tech of techsList; track tech) {
6-
<option> {{ tech }} </option>
7-
}
8-
</select>
9-
<select (change)="onContextSelected($event.target.value)">
10-
<option value=""> Contexte </option>
11-
@for (context of contextList; track context) {
12-
<option> {{ context }} </option>
13-
}
14-
</select>
15-
</div>
2+
<div class="filters w-auto d-inline-block">
3+
<select (change)="onTechSelected($event.target.value)">
4+
<option value=""> Technologie </option>
5+
@for (tech of techsList; track tech) {
6+
<option> {{ tech }} </option>
7+
}
8+
</select>
9+
<select (change)="onContextSelected($event.target.value)">
10+
<option value=""> Contexte </option>
11+
@for (context of contextList; track context) {
12+
<option> {{ context }} </option>
13+
}
14+
</select>
15+
</div>
1616
</div>
1717

1818
<div class="d-flex flex-wrap justify-content-between">
1919

2020

21-
@for (project of showedProjects; track project) {
22-
@if (!project.hide) {
23-
<div class="project-description row p-2 col-md-6">
21+
@for (project of showedProjects; track project) {
22+
@if (shouldBeVisible(project)) {
23+
<div class="project-description row p-2 col-md-6">
2424
<div [ngClass]="project.img ? 'col-lg-5' : 'col-lg-11'">
25-
<p class="name">
26-
{{ project.name }}
27-
</p>
28-
<div class="project-informations d-flex flex-column">
29-
@if (project.link) {
30-
<a [href]="project.link"> Lien projet </a>
31-
}
32-
@if (project.video) {
33-
<a [href]="project.video" target="_blank"> Vidéo du projet </a>
34-
}
35-
@if (project.period) {
36-
<div> Période: {{ project.period }} </div>
37-
}
38-
<div> Equipe: {{ project.team }} </div>
39-
<div> Contexte: {{ project.context }} </div>
40-
<div> Technologies: {{ project.technologies.join(" / ") }} </div>
41-
@if (project.tools) {
42-
<div> Outils: {{ project.tools.join(" / ") }} </div>
43-
}
44-
@if (project.gitLink) {
45-
<a [href]="project.gitLink"> Git </a>
46-
}
47-
</div>
48-
<div [innerHTML]="project.description"></div>
25+
<p class="name">
26+
{{ project.name }}
27+
</p>
28+
<div class="project-informations d-flex flex-column">
29+
@if (project.link) {
30+
<a [href]="project.link"> Lien projet </a>
31+
}
32+
@if (project.video) {
33+
<a [href]="project.video" target="_blank"> Vidéo du projet </a>
34+
}
35+
@if (project.period) {
36+
<div> Période: {{ project.period }} </div>
37+
}
38+
<div> Equipe: {{ project.team }} </div>
39+
<div> Contexte: {{ project.context }} </div>
40+
<div> Technologies: {{ project.technologies.join(" / ") }} </div>
41+
@if (project.tools) {
42+
<div> Outils: {{ project.tools.join(" / ") }} </div>
43+
}
44+
@if (project.gitLink) {
45+
<a [href]="project.gitLink"> Git </a>
46+
}
47+
</div>
48+
<div [innerHTML]="project.description"></div>
4949
</div>
5050
@if (project.img) {
51-
<img class="col-lg-7" [src]="project.img" alt="screenshot"
52-
[class.disabled]="project.images === undefined" (click)="toggleImages($event)">
51+
<img class="col-lg-7" [src]="project.img" alt="screenshot" [class.disabled]="project.images === undefined"
52+
(click)="toggleImages($event)">
5353
}
5454
<div class="moreImages-invisible">
55-
@for (image of project.images; track image) {
56-
<img class="col-lg-7" [src]="image" alt="screenshot">
57-
}
55+
@for (image of project.images; track image) {
56+
@if (image.endsWith(".mp4")) {
57+
<video controls autoplay muted="true" loop class="col-lg-7 mediaContent" [src]="image"
58+
type="video/mp4"></video>
59+
}
60+
@else {
61+
<img class="col-lg-7 mediaContent" [src]="image" alt="screenshot">
62+
}
63+
}
5864
</div>
59-
</div>
65+
</div>
66+
}
6067
}
61-
}
6268
</div>

src/app/project-description/project-description.component.scss

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
border-radius: 1em;
2323
margin-bottom: 1.2em;
2424
min-height: 10vh;
25+
26+
transition: all .3s ease-in-out;
2527
}
2628

2729
.project-description a {
@@ -71,8 +73,8 @@ div.project-informations a {
7173
display: block;
7274
}
7375

74-
// Images à dérouler
75-
.moreImages-visible img {
76+
// Images ou vidéos à dérouler
77+
.moreImages-visible .mediaContent {
7678
padding: 0.3em;
7779
display: inline;
7880
}
@@ -87,5 +89,5 @@ div.project-informations a {
8789
justify-content: space-around;
8890
flex-wrap: wrap;
8991

90-
animation: fade_in_show 0.5s
92+
// animation: fade_in_show 0.1s;
9193
}

src/app/project-description/project-description.component.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import { Component, OnInit } from "@angular/core";
22
import { projects, Context, techsToNotFilter, techsToPutTogether, techsSameNameButDifferent } from "../../assets/datas/projects";
33
import { cloneDeep } from 'lodash';
4+
import { ActivatedRoute } from '@angular/router';
45

56
@Component({
67
selector: "app-project-description",
78
templateUrl: "./project-description.component.html",
8-
standalone: false,
9+
standalone: false,
910
styleUrls: ["./project-description.component.scss"],
1011
})
1112

1213
export class ProjectDescriptionComponent implements OnInit {
13-
constructor() { }
14+
constructor(private route: ActivatedRoute) { }
1415

1516
ngOnInit(): void {
1617

@@ -22,7 +23,6 @@ export class ProjectDescriptionComponent implements OnInit {
2223
this.techsList = this.getTechnologies();
2324
}
2425

25-
2626
showedProjects = projects;
2727

2828
techsList: Array<string>;
@@ -63,9 +63,20 @@ export class ProjectDescriptionComponent implements OnInit {
6363
return Array.from(techs).sort();
6464
}
6565

66+
67+
shouldBeVisible(project): boolean {
68+
69+
const hideQueryArg = this.route.snapshot.queryParamMap.get("h");
70+
if (hideQueryArg !== null) return true;
71+
72+
return !project.hide
73+
}
74+
6675
toggleImages(event: Event) {
6776
let targetElement: HTMLElement = (event.target as HTMLElement).nextElementSibling as HTMLElement;
6877
targetElement.classList.toggle("moreImages-visible");
78+
targetElement.parentElement.classList.toggle("col-lg-7");
79+
targetElement.parentElement.classList.toggle("col-lg-12");
6980
targetElement.classList.toggle("moreImages-invisible");
7081
}
7182
}

src/assets/datas/projects.ts

Lines changed: 89 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,79 @@ export const projects = [
4444
images: ["assets/images/hotel2.gif", "assets/images/hotel3.png"],
4545
video: "assets/TrailerJuRoom505.webm"
4646
},
47-
{
48-
name: "RobotIndustry",
49-
img: "assets/images/screenRobot1.png",
50-
description:
51-
"Dans RobotIndustry, vous incarnez un petit robot, vous êtes arrivés sur une nouvelle planète semblable à la Terre. Votre but est de coloniser la planète, de vous reproduire et d'évoluer. \
52-
Se reproduire pour un robot, c'est simplement créer des semblables, et évoluer en créant de nouvelles pièces plus sophistiquées.",
53-
link: "https://pholith.itch.io/robotindustry",
54-
period: "début 2021 - en pause",
47+
{
48+
name: "Virtual Driver Desk",
49+
img: "assets/images/alstom/virtual_world3.png",
50+
images: [
51+
"assets/images/alstom/trainlab_demo.mp4",
52+
"assets/images/alstom/virtual_world1.png",
53+
"assets/images/alstom/virtual_world2.png",
54+
"assets/images/alstom/virtual_world_demo.mp4",
55+
],
56+
description: "Le Virtual Driver Desk est un outil qui permet d'aider les techniciens réalisant les tests fonctionnels du train sur des simulateurs, avant la fabrication du vrai train.\
57+
Il leur permet d'utiliser le pupitre de conduite en 3D pour faire les tests comme s'ils étaient à la place du conducteur. Cela leur évite de travailler avec des noms de boutons abrupte sur une interface 2D technique.<br/>\
58+
Cet outil est direcement connecté à l'outil de test interne et envoie des signaux lors d'actions de l'utilisateur.",
59+
period: "septembre 2023 - aujourd'hui",
60+
hide: true,
5561
team: "2",
56-
technologies: ["C#", "Unity3D"],
62+
technologies: ["Unity3D", "C#"],
63+
// tools: [],
64+
context: Context.Professionnel
65+
},
66+
{
67+
name: "OneTrain",
68+
img: "assets/images/alstom/one_train1.png",
69+
images: [
70+
"assets/images/alstom/one_train2.png",
71+
"assets/images/alstom/one_train3.png",
72+
"assets/images/alstom/modular_generation.mp4",
73+
"assets/images/alstom/one_train_demo1.mp4",
74+
],
75+
76+
description: "One Train est un projet ayant pour but de permettre à n'importe qui à Alstom, de créer, tester, visualiser, comprendre et utiliser un train virtuel, ainsi que toute l'architecture du train, dans un environnement 3D.\
77+
Cet outil à surtout pour but la formation des nouveaux ingénieurs, mais aussi la démocratisation et la compréhension du fonctionnement pour n'importe quel employé. <br/>\
78+
Il est connecté via plusieurs protocoles, nottemment MQTT, et permet aussi de réaliser des tests et des scénarios sur le train.\
79+
J'ai pu travaillé sur ce projet avec des infographistes talentueux.",
80+
period: "septembre 2023 - aujourd'hui",
81+
hide: true,
82+
team: "~8",
83+
technologies: ["Unity3D", "C#"],
84+
// tools: [],
85+
context: Context.Professionnel
86+
},
87+
{
88+
name: "HARDCODED Translator mod",
89+
img: "assets/images/hardcoded_translated.png",
90+
description: "Un mod qui permet la traduction du jeu HARDCODED. <br/>La traduction n'avait pas du tout été prévu par ses développeurs. Ma première expérience avec Godot.",
91+
gitLink: "https://github.com/Pholith/HARDCODED_Translation_Mod",
92+
period: "mars 2026",
93+
team: "seul",
94+
technologies: ["Godot", "GDScript", "C#"],
95+
tools: ["POEdit", "GDRETools"],
96+
context: Context.Personnel
97+
},
98+
{
99+
name: "Lack of Light",
100+
img: "assets/images/lol_screenshot1.png",
101+
description:
102+
`Lack of Light est un jeu de type <b>rogue lite</b> et <b>RPG</b> inspiré des jeux ${asLink("The Binding of Isaac", "https://store.steampowered.com/app/113200/The_Binding_of_Isaac/?l=french")} \
103+
et ${asLink("Enter the Gungeon", "https://store.steampowered.com/app/311690/Enter_the_Gungeon/?l=french")}. J'ai très peu participé au code sur ce projet, \
104+
et j'ai surtout réalisé des écritures de dialogues, des pixels arts, de l'administratif pour avancer la sortie du jeu.`,
105+
images: [
106+
"assets/images/lol_screenshot2.png",
107+
"assets/images/lol_screenshot3.png",
108+
"assets/images/lol_screenshot4.png",
109+
"assets/images/lol_screenshot5.png",
110+
"assets/images/lol_screenshot6.png",
111+
"assets/images/lol_screenshot7.png",
112+
"assets/images/lol_screenshot8.png",
113+
"assets/images/lol_map.png"
114+
],
115+
period: "2025 - maintenant",
116+
team: "3",
117+
technologies: ["Unity3D", "C#"],
118+
tools: ["Photoshop"],
57119
context: Context.Personnel,
58-
images: ["assets/images/screenRobot2.png", "assets/images/screenRobot3.png", "assets/images/screenRobot4.png"]
59120
},
60121
{
61122
name: "Outil de transfert",
@@ -65,12 +126,25 @@ export const projects = [
65126
`Mon projet le plus important lors de mon alternance de 3 ans chez Julie Solutions est la création d'un outil de transfert. \
66127
Il permet de convertir différents formats de bases de données (exemple: les données clients du logiciel Julie, et le format ${asLink("TDIO", "https://lescdf.fr/tdio-type-dexportation")} de ${asLink("lesCDF", "https://lescdf.fr/")}.\
67128
<br\> Ce projet permet aujourd'hui la converssion de nombreux formats utiles au support et à la vente.`,
68-
period: "2020-2023",
129+
period: "2020 - 2023",
69130
team: "2",
70131
tools: ["Azure Devops", "DBeaver"],
71132
technologies: ["C#", "C++", "C", "Btrieve", "SQLite"],
72133
context: Context.Professionnel
73134
},
135+
{
136+
name: "RobotIndustry",
137+
img: "assets/images/screenRobot1.png",
138+
description:
139+
"Dans RobotIndustry, vous incarnez un petit robot, vous êtes arrivés sur une nouvelle planète semblable à la Terre. Votre but est de coloniser la planète, de vous reproduire et d'évoluer. \
140+
Se reproduire pour un robot, c'est simplement créer des semblables, et évoluer en créant de nouvelles pièces plus sophistiquées.",
141+
link: "https://pholith.itch.io/robotindustry",
142+
period: "début 2021",
143+
team: "2",
144+
technologies: ["C#", "Unity3D"],
145+
context: Context.Personnel,
146+
images: ["assets/images/screenRobot2.png", "assets/images/screenRobot3.png", "assets/images/screenRobot4.png"]
147+
},
74148
{
75149
name: "Geneden",
76150
img: "assets/images/menuBackground-small.jpg",
@@ -213,12 +287,12 @@ Cette capture d'écran montre un algorythme génétique avec des automates cellu
213287
context: Context.Personnel
214288
},
215289
{
216-
name: "Ce ePortfiolio",
290+
name: "Ce ePortfolio",
217291
description:
218-
"Ce portfiolio a pour but de mettre en avant mes projets et de m'entraîner sur de nouveaux frameworks comme Angular.",
219-
period: "2022 - maintenant",
292+
"Ce portfolio a pour but de mettre en avant mes projets et de m'entraîner sur de nouveaux frameworks comme Angular.",
293+
period: "2022 - aujourd'hui",
220294
team: "seul",
221-
technologies: ["Angular", "Typescript", "HTML", "SCSS", "Bootstrap" ],
295+
technologies: ["Angular", "Typescript", "HTML", "SCSS", "Bootstrap"],
222296
gitLink: "https://github.com/Pholith/Portfolio",
223297
context: Context.Personnel
224298
}
3.79 MB
Binary file not shown.
690 KB
Binary file not shown.
344 KB
Loading
1.75 MB
Loading
1.31 MB
Loading

0 commit comments

Comments
 (0)