Feat: game setting fields
This commit is contained in:
		| @@ -5,7 +5,7 @@ | |||||||
|     or<br/> |     or<br/> | ||||||
|     <button button class="justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" hx-get="/room/hideform" hx-target=".create-room-div" >Hide Form</button> |     <button button class="justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" hx-get="/room/hideform" hx-target=".create-room-div" >Hide Form</button> | ||||||
|     <form hx-post="/room-create" hx-target="#ancestor"> |     <form hx-post="/room-create" hx-target="#ancestor"> | ||||||
| 	<label For="game_time">Game Time:</label><br/> | 	<label For="game_time">Turn Seconds:</label><br/> | ||||||
| 	<input type="number" id="game_time" name="game_time" class="text-center text-white" value="300"/><br/> | 	<input type="number" id="game_time" name="game_time" class="text-center text-white" value="300"/><br/> | ||||||
| 	<label For="language">Language:</label><br/> | 	<label For="language">Language:</label><br/> | ||||||
| 	<input type="text" id="language" name="language" class="text-center text-white" value="en"/><br/> | 	<input type="text" id="language" name="language" class="text-center text-white" value="en"/><br/> | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ | |||||||
|     </ul> |     </ul> | ||||||
|   </div> |   </div> | ||||||
|   <div sse-swap="journal_{{.Room.ID}}"> |   <div sse-swap="journal_{{.Room.ID}}"> | ||||||
|     sse div |     bot thoughts | ||||||
|   <div> |   <div> | ||||||
|   <div id="cardtable"> |   <div id="cardtable"> | ||||||
|     {{template "cardtable" .Room}} |     {{template "cardtable" .Room}} | ||||||
|   | |||||||
| @@ -12,10 +12,16 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| func HandleCreateRoom(w http.ResponseWriter, r *http.Request) { | func HandleCreateRoom(w http.ResponseWriter, r *http.Request) { | ||||||
|  | 	turnTimeStr := r.PostFormValue("game_time") | ||||||
|  | 	ttU64, err := strconv.ParseUint(turnTimeStr, 10, 64) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Warn("failed to parse turn time", "game_time", turnTimeStr) | ||||||
|  | 	} | ||||||
| 	// parse payload | 	// parse payload | ||||||
| 	payload := &models.RoomReq{ | 	payload := &models.RoomReq{ | ||||||
| 		RoomPass:  r.PostFormValue("room_pass"), | 		RoomPass:  r.PostFormValue("room_pass"), | ||||||
| 		RoomName: r.PostFormValue("room_name"), | 		Language:  r.PostFormValue("language"), | ||||||
|  | 		RoundTime: uint32(ttU64), | ||||||
| 	} | 	} | ||||||
| 	// create a room | 	// create a room | ||||||
| 	room, err := createRoom(r.Context(), payload) | 	room, err := createRoom(r.Context(), payload) | ||||||
|   | |||||||
| @@ -71,7 +71,6 @@ type CardMark struct { | |||||||
| type Room struct { | type Room struct { | ||||||
| 	ID             string    `json:"id" db:"id"` | 	ID             string    `json:"id" db:"id"` | ||||||
| 	CreatedAt      time.Time `json:"created_at" db:"created_at"` // limit? | 	CreatedAt      time.Time `json:"created_at" db:"created_at"` // limit? | ||||||
| 	RoomPass       string    `json:"room_pass"` |  | ||||||
| 	RoomLink       string | 	RoomLink       string | ||||||
| 	CreatorName    string `json:"creator_name"` | 	CreatorName    string `json:"creator_name"` | ||||||
| 	ActionHistory  []Action | 	ActionHistory  []Action | ||||||
| @@ -97,6 +96,7 @@ type Room struct { | |||||||
| 	Mark CardMark // card is marked | 	Mark CardMark // card is marked | ||||||
| 	// needed for debug | 	// needed for debug | ||||||
| 	LogJournal []string | 	LogJournal []string | ||||||
|  | 	Settings   GameSettings | ||||||
| } | } | ||||||
|  |  | ||||||
| func (r *Room) ClearMarks() { | func (r *Room) ClearMarks() { | ||||||
| @@ -325,11 +325,10 @@ type WordCard struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| type GameSettings struct { | type GameSettings struct { | ||||||
| 	IsRunning   bool   `json:"is_running"` |  | ||||||
| 	Language    string `json:"language" example:"en" form:"language"` | 	Language    string `json:"language" example:"en" form:"language"` | ||||||
| 	RoundTime   int32  `json:"round_time"` | 	RoomPass    string `json:"room_pass"` | ||||||
| 	ProgressPct uint32 `json:"progress_pct"` | 	TurnSeconds uint32 | ||||||
| 	IsOver      bool | 	RoundTime   uint32 | ||||||
| } | } | ||||||
|  |  | ||||||
| // ===== | // ===== | ||||||
| @@ -337,20 +336,26 @@ type GameSettings struct { | |||||||
| type RoomReq struct { | type RoomReq struct { | ||||||
| 	// is not user or not unique | 	// is not user or not unique | ||||||
| 	RoomPass string `json:"room_pass" form:"room_pass"` | 	RoomPass string `json:"room_pass" form:"room_pass"` | ||||||
| 	RoomName string `json:"room_name" form:"room_name"` |  | ||||||
| 	// GameSettings | 	// GameSettings | ||||||
|  | 	Language  string `json:"language" form:"language"` | ||||||
|  | 	RoundTime uint32 | ||||||
| } | } | ||||||
|  |  | ||||||
| func (rr *RoomReq) CreateRoom(creator string) *Room { | func (rr *RoomReq) CreateRoom(creator string) *Room { | ||||||
| 	roomID := xid.New().String() | 	roomID := xid.New().String() | ||||||
|  | 	settings := GameSettings{ | ||||||
|  | 		Language:  rr.Language, | ||||||
|  | 		RoomPass:  rr.RoomPass, | ||||||
|  | 		RoundTime: rr.RoundTime, | ||||||
|  | 	} | ||||||
| 	return &Room{ | 	return &Room{ | ||||||
| 		// RoomName: , | 		// RoomName: , | ||||||
| 		RoomPass:  rr.RoomPass, |  | ||||||
| 		ID:        roomID, | 		ID:        roomID, | ||||||
| 		CreatedAt: time.Now(), | 		CreatedAt: time.Now(), | ||||||
| 		// PlayerList:  []string{creator}, | 		// PlayerList:  []string{creator}, | ||||||
| 		CreatorName: creator, | 		CreatorName: creator, | ||||||
| 		BotMap:      make(map[string]BotPlayer), | 		BotMap:      make(map[string]BotPlayer), | ||||||
|  | 		Settings:    settings, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								todos.md
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								todos.md
									
									
									
									
									
								
							| @@ -13,6 +13,10 @@ | |||||||
| - ways to remove bots from teams; + | - ways to remove bots from teams; + | ||||||
| - mark cards (instead of opening them (right click?); + | - mark cards (instead of opening them (right click?); + | ||||||
| - on end of turn clear all the marks; + | - on end of turn clear all the marks; + | ||||||
|  | - different files for each supported lang; + | ||||||
|  | - sse div to bot thinking; + | ||||||
|  | - simplify mime prompt; + | ||||||
|  | - redo card .revealed use: it should mean that card is revealed for everybody, while mime should be able to see cards as is; + | ||||||
| - better styles and fluff; | - better styles and fluff; | ||||||
| - common auth system between sites; | - common auth system between sites; | ||||||
| === | === | ||||||
| @@ -22,11 +26,8 @@ | |||||||
| - ended turn action to backlog; | - ended turn action to backlog; | ||||||
| === | === | ||||||
| - clear indication that model (llm) is thinking / answered; | - clear indication that model (llm) is thinking / answered; | ||||||
| - different files for each supported lang; |  | ||||||
| - possibly turn markings into parts of names of users (first three letters?); | - possibly turn markings into parts of names of users (first three letters?); | ||||||
| - sse div to bot thinking; | - at game creation list languages and support them at backend; | ||||||
| - simplify mime prompt; |  | ||||||
| - redo card .revealed use: it should mean that card is revealed for everybody, while mime should be able to see cards as is; |  | ||||||
|  |  | ||||||
| #### sse points | #### sse points | ||||||
| - clue sse update; | - clue sse update; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder