diff --git a/README.md b/README.md
index ce7872b..7d0d312 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
##
+
@@ -38,31 +39,32 @@
line mode는 자신이 갖고있는 펫중 하나를 지정해서, 지정한 width, height범위에서 움직이게 해요.
line mode를 사용할때, markdown 방식으로 이미지를 요청하면, width, height를 설정할 수 없어서 펫이 보이지 않을 수 있으니, HTMl방식을
-사용해주세요.
+사용해주세요.
> [!TIP]
> **Img의 width와 height를 조절해서 펫의 이동영역을 조절할 수 있어요.**
> width를 길게 height를 작게하면 (width = 1000, height = 60) 가로로 길게 움직이게 할 수 있어요.
> 반대로, width를 작게 height를 길게하면 (width = 60, height = 1000) 세로로 길게 움직이게 할 수 있어요.
> 만약, 펫이 보이지 않는다면, img의 height를 펫의 세로 길이보다 충분히 크게 적용해주세요.
-
+
-
+
```html
```
-_pet-id에 아무값도 입력하지 않으면, 첫번째 펫이 가져와져요._
-
-변경 가능한 pet-id는 `https://render.gitanimals.org/users/{username}` 의 {username}을 자신의 깃허브 아이디로 변경 후 API를 요청하면 확인할 수 있어요.
+_pet-id에 아무값도 입력하지 않으면, 첫번째 펫이 가져와져요._
+
+변경 가능한 pet-id는 `https://render.gitanimals.org/users/{username}` 의 {username}을 자신의 깃허브 아이디로 변경 후 API를
+요청하면 확인할 수 있어요.
API 응답의 `$.personas.[].id` 에 해당하는 값을 pet-id에 입력하면 돼요.
-lines모드에서는 펫 레벨 위에 총 contributions수를 보여줘요. 원하지 않을경우, 쿼리 파라미터로 `contribution-view=false`를 담아 요청하세요.
+lines모드에서는 펫 레벨 위에 총 contributions수를 보여줘요. 원하지 않을경우, 쿼리 파라미터로 `contribution-view=false`를 담아 요청하세요.
### farm mode
@@ -100,54 +102,56 @@ _새로운 contribtuion은 반영은 최대 1시간이 소요될 수 있어요.
### 등장 가능한 펫들
-| name | ratio |
-|---------------------------------------------------------------------------------------|-------|
-| goose | 1.0 |
-| goose_sunglasses | 0.05 |
-| goose_kotlin | 0.01 |
-| goose_java | 0.01 |
-| goose_js | 0.01 |
-| goose_node | 0.01 |
-| goose_swift | 0.01 |
-| goose_linux | 0.01 |
-| goose_spring | 0.01 |
-| little_chick | 0.9 |
-| little_chick_suglasses | 0.4 |
-| little_chick_kotlin | 0.01 |
-| little_chick_java | 0.01 |
-| little_chick_js | 0.01 |
-| little_chick_node | 0.01 |
-| little_chick_swift | 0.01 |
-| little_chick_linux | 0.01 |
-| little_chick_spring | 0.01 |
-| penguin | 0.5 |
-| penguin_sunglasses | 0.2 |
-| penguin_kotlin | 0.01 |
-| penguin_java | 0.01 |
-| penguin_js | 0.01 |
-| penguin_node | 0.01 |
-| penguin_swift | 0.01 |
-| penguin_linux | 0.01 |
-| penguin_spring | 0.01 |
-| pig | 0.2 |
-| pig_sunglasses | 0.08 |
-| pig_kotlin | 0.01 |
-| pig_java | 0.01 |
-| pig_js | 0.01 |
-| pig_node | 0.01 |
-| pig_swift | 0.01 |
-| pig_linux | 0.01 |
-| pig_spring | 0.01 |
-| slime_red | 0.1 |
-| slime_red_kotlin | 0.001 |
-| slime_red_java | 0.001 |
-| slime_red_js | 0.001 |
-| slime_red_node | 0.001 |
-| slime_red_swift | 0.001 |
-| slime_red_linux | 0.001 |
-| slime_green | 0.1 |
-| slime_blue | 0.1 |
-| flamingo
| 0.08 |
+| name | ratio | Description |
+|------------------------------------------------------------------------|-------|--------------------------------------------------------------------------------------------------------------------------------------|
+| goose | 1.0 | |
+| goose_sunglasses | 0.05 | |
+| | | |
+| goose_kotlin | 0.01 | |
+| goose_java | 0.01 | |
+| goose_js | 0.01 | |
+| goose_node | 0.01 | |
+| goose_swift | 0.01 | |
+| goose_linux | 0.01 | |
+| goose_spring | 0.01 | |
+| little_chick | 0.9 | |
+| little_chick_suglasses | 0.4 | |
+| little_chick_kotlin | 0.01 | |
+| little_chick_java | 0.01 | |
+| little_chick_js | 0.01 | |
+| little_chick_node | 0.01 | |
+| little_chick_swift | 0.01 | |
+| little_chick_linux | 0.01 | |
+| little_chick_spring | 0.01 | |
+| penguin | 0.5 | |
+| penguin_sunglasses | 0.2 | |
+| penguin_kotlin | 0.01 | |
+| penguin_java | 0.01 | |
+| penguin_js | 0.01 | |
+| penguin_node | 0.01 | |
+| penguin_swift | 0.01 | |
+| penguin_linux | 0.01 | |
+| penguin_spring | 0.01 | |
+| pig | 0.2 | |
+| pig_sunglasses | 0.08 | |
+| pig_kotlin | 0.01 | |
+| pig_java | 0.01 | |
+| pig_js | 0.01 | |
+| pig_node | 0.01 | |
+| pig_swift | 0.01 | |
+| pig_linux | 0.01 | |
+| pig_spring | 0.01 | |
+| slime_red | 0.1 | |
+| slime_red_kotlin | 0.001 | |
+| slime_red_java | 0.001 | |
+| slime_red_js | 0.001 | |
+| slime_red_node | 0.001 | |
+| slime_red_swift | 0.001 | |
+| slime_red_linux | 0.001 | |
+| slime_green | 0.1 | |
+| slime_blue | 0.1 | |
+| flamingo
| 0.08 | |
+| TEN_MM
| 0.00 | Character created with `10MM` donations
Only buy in shop
10MM |
##
diff --git a/docs/tenmm.svg b/docs/tenmm.svg
new file mode 100644
index 0000000..0fec26b
--- /dev/null
+++ b/docs/tenmm.svg
@@ -0,0 +1,208 @@
+
diff --git a/src/main/kotlin/org/gitanimals/render/domain/PersonaType.kt b/src/main/kotlin/org/gitanimals/render/domain/PersonaType.kt
index f88adb6..e7730d4 100644
--- a/src/main/kotlin/org/gitanimals/render/domain/PersonaType.kt
+++ b/src/main/kotlin/org/gitanimals/render/domain/PersonaType.kt
@@ -937,11 +937,29 @@ enum class PersonaType(private val weight: Double) {
}
return "translate(${x}%, ${y}%) scaleX($scale)"
}
- }
+ },
+
+ TEN_MM(0.000) {
+ override fun loadSvg(user: User, persona: Persona, mode: Mode): String {
+ check(persona.id != null) { "Save persona first before call load()" }
+
+ return tenmmSvg.replace("*{act}", act(persona.id))
+ .replace("*{id}", persona.id.toString())
+ .replace("*{level}", persona.level.value.toSvg(14.0, 2.0))
+ .replace(
+ "*{levelx}",
+ (-2 + (-1 * (persona.level.value.toString().length))).toString()
+ )
+ }
+
+ override fun act(id: Long): String =
+ StringBuilder().moveRandomly("tenmm", id, 15, "180s", 5)
+ .toString()
+ },
;
init {
- require(weight in 0.001..1.0) { "PersonaType's weight should be between 0.01 to 1.0" }
+ require(weight in 0.000..1.0) { "PersonaType's weight should be between 0.000 to 1.0" }
}
fun load(user: User, persona: Persona, mode: Mode): String =
diff --git a/src/main/kotlin/org/gitanimals/render/domain/Svgs.kt b/src/main/kotlin/org/gitanimals/render/domain/Svgs.kt
index 5c36ad6..4db4360 100644
--- a/src/main/kotlin/org/gitanimals/render/domain/Svgs.kt
+++ b/src/main/kotlin/org/gitanimals/render/domain/Svgs.kt
@@ -1,7 +1,6 @@
package org.gitanimals.render.domain
import org.springframework.core.io.ClassPathResource
-import org.springframework.util.ClassUtils
import java.nio.charset.Charset
val whiteFieldSvg: String = ClassPathResource("persona/field/white-field.svg")
@@ -148,6 +147,9 @@ val slimeGreenSvg: String = ClassPathResource("persona/animal/slime-green.svg")
val flamingoSvg: String = ClassPathResource("persona/animal/flamingo.svg")
.getContentAsString(Charset.defaultCharset())
+val tenmmSvg: String = ClassPathResource("persona/animal/tenmm.svg")
+ .getContentAsString(Charset.defaultCharset())
+
val largeTextSvgs = lazy {
val map = mutableMapOf
()
for (i in 'A'..'Z') {
diff --git a/src/main/resources/persona/animal/tenmm.svg b/src/main/resources/persona/animal/tenmm.svg
new file mode 100644
index 0000000..be86fdd
--- /dev/null
+++ b/src/main/resources/persona/animal/tenmm.svg
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+ *{contribution}
+
+
+
+
+
+
+
+
+
+
+ *{level}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/persona/goose/test.svg b/src/test/resources/persona/goose/test.svg
index 763d1db..98d6b28 100644
--- a/src/test/resources/persona/goose/test.svg
+++ b/src/test/resources/persona/goose/test.svg
@@ -1,382 +1,193 @@
-
-
+ #shadow-1 {
+ animation-name: tenmm-1-shadow-move;
+ animation-duration:1s;
+ animation-iteration-count:infinite;
+ animation-timing-function: ease-in-out;
+ }
+
-
-
-
- *{contribution}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -384,5 +195,4 @@
-
-
+