From cc3b79dfa0db412acc43f404920a5f0f50fc609f Mon Sep 17 00:00:00 2001 From: nsensfel Date: Fri, 1 Jun 2018 13:35:52 +0200 Subject: Shows armor on CharacterCard. --- src/asset/www/armors.css | 2 + src/asset/www/svg/armor/0.svg | 210 +-- src/asset/www/svg/armor/1.svg | 337 ++--- src/asset/www/svg/armor/2.svg | 1516 +++----------------- src/asset/www/svg/armor/3.svg | 1369 ++++++++++++++++++ src/battlemap/src/Comm/AddChar.elm | 10 +- src/battlemap/src/Data/Armors.elm | 28 +- src/battlemap/src/Struct/Armor.elm | 30 +- src/battlemap/src/Struct/Character.elm | 10 +- src/battlemap/src/Struct/Model.elm | 4 + src/battlemap/src/View/Character.elm | 4 +- .../src/View/Controlled/CharacterCard.elm | 45 + src/battlemap/www/style.css | 16 + 13 files changed, 1858 insertions(+), 1723 deletions(-) create mode 100644 src/asset/www/svg/armor/3.svg diff --git a/src/asset/www/armors.css b/src/asset/www/armors.css index 5dca54b..cddde5b 100644 --- a/src/asset/www/armors.css +++ b/src/asset/www/armors.css @@ -1,5 +1,7 @@ .asset-armor-placeholder{background-image: url(/asset/svg/armor/cat_hermine.svg);} .asset-armor-0 {background-image: url(/asset/svg/armor/0.svg);} .asset-armor-1 {background-image: url(/asset/svg/armor/1.svg);} +.asset-armor-2 {background-image: url(/asset/svg/armor/2.svg);} +.asset-armor-3 {background-image: url(/asset/svg/armor/3.svg);} .asset-armor-variation-0 {background-position: 0 0;} .asset-armor-variation-1 {background-position: 100% 0;} diff --git a/src/asset/www/svg/armor/0.svg b/src/asset/www/svg/armor/0.svg index 0266f4c..29a51cb 100644 --- a/src/asset/www/svg/armor/0.svg +++ b/src/asset/www/svg/armor/0.svg @@ -7,7 +7,6 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128mm" @@ -16,7 +15,7 @@ version="1.1" id="svg8" inkscape:version="0.92.2 5c3e80d, 2017-08-06" - sodipodi:docname="0.svg"> + sodipodi:docname="none.svg"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/asset/www/svg/armor/1.svg b/src/asset/www/svg/armor/1.svg index 9157efb..0266f4c 100644 --- a/src/asset/www/svg/armor/1.svg +++ b/src/asset/www/svg/armor/1.svg @@ -7,6 +7,7 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128mm" @@ -15,7 +16,7 @@ version="1.1" id="svg8" inkscape:version="0.92.2 5c3e80d, 2017-08-06" - sodipodi:docname="1.svg"> + sodipodi:docname="0.svg"> + spacingy="63.999998" + units="mm" /> @@ -62,194 +63,196 @@ + inkscape:label="armor" + sodipodi:insensitive="true"> - + + - - + + + + + + + + + + - + id="path906-3-6-2" + d="m 90.165349,55.598341 c -3.750256,4.863068 -16.468415,4.661617 -17.420598,0.564557 -0.06921,-7.666589 4.276745,-14.098101 7.658129,-14.45128 14.145804,1.859414 9.998021,11.782001 9.762469,13.886723 z" + style="display:inline;fill:#ac9d93;fill-opacity:1;stroke:#000000;stroke-width:0.23028131;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="path906-3-6-7-0" + d="m 119.09521,56.507777 c -1.58622,1.613246 -4.25006,1.768199 -5.46676,-0.585726 -1.5087,-4.643627 0.11982,-6.945581 3.22373,-8.957375 3.01519,0.924692 2.85005,8.381584 2.24303,9.543101 z" + style="display:inline;fill:#ac9d93;fill-opacity:1;stroke:#000000;stroke-width:0.23028131;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="rect1108-2" + d="m 92.835935,53.590124 a 0.43453653,0.43453653 0 0 0 -0.42077,0.403706 l -0.21061,2.981317 a 0.43453653,0.43453653 0 0 0 0.402359,0.464329 l 4.129564,0.291889 a 0.43453653,0.43453653 0 0 0 0.463881,-0.402809 l 0.211059,-2.981314 a 0.43453653,0.43453653 0 0 0 -0.402807,-0.464329 l -4.129567,-0.29189 a 0.43453653,0.43453653 0 0 0 -0.04311,-9.52e-4 z m 0.415381,0.898571 3.262428,0.230818 -0.149537,2.114178 -3.262428,-0.230367 0.06826,-0.963235 0.945721,0.197137 0.09385,-0.450409 -1.006795,-0.209712 z" + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.17379722;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> - - - - + ry="0.50861675" + rx="0.48977911" + cy="55.886475" + cx="88.173485" + id="path1118-3" + style="opacity:1;fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.11391592;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> + style="opacity:1;fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.06306161;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" + id="use1124-7" + cx="114.37915" + cy="55.371307" + rx="0.27113211" + ry="0.2815603" /> + + + + + + - - - - - - - - - + style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75590551;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 86.923828,206.88086 a 1.8899528,1.8899528 0 0 0 -1.830078,1.75586 l -0.916016,12.9668 a 1.8899528,1.8899528 0 0 0 1.75,2.01953 l 17.960936,1.26953 a 1.8899528,1.8899528 0 0 0 2.01758,-1.75196 l 0.91797,-12.96679 a 1.8899528,1.8899528 0 0 0 -1.75195,-2.01953 l -17.960942,-1.26953 a 1.8899528,1.8899528 0 0 0 -0.1875,-0.004 z m 1.806641,3.9082 14.189451,1.00391 -0.65039,9.19531 -14.189452,-1.00195 0.296875,-4.18945 4.113281,0.85742 0.408204,-1.95899 -4.378907,-0.91211 z" + transform="scale(0.26458333)" + id="rect1108" + inkscape:connector-curvature="0" /> + + + style="opacity:1;fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" + id="path1118" + cx="19.51302" + cy="55.83099" + rx="0.85989583" + ry="0.89296871" /> + + + + diff --git a/src/asset/www/svg/armor/2.svg b/src/asset/www/svg/armor/2.svg index cee29bd..9157efb 100644 --- a/src/asset/www/svg/armor/2.svg +++ b/src/asset/www/svg/armor/2.svg @@ -7,7 +7,6 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128mm" @@ -16,7 +15,7 @@ version="1.1" id="svg8" inkscape:version="0.92.2 5c3e80d, 2017-08-06" - sodipodi:docname="2.svg"> + sodipodi:docname="1.svg"> + spacingy="63.999998" /> @@ -56,1314 +55,201 @@ image/svg+xml - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + inkscape:groupmode="layer" + id="layer7" + inkscape:label="armor"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/asset/www/svg/armor/3.svg b/src/asset/www/svg/armor/3.svg new file mode 100644 index 0000000..cee29bd --- /dev/null +++ b/src/asset/www/svg/armor/3.svg @@ -0,0 +1,1369 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/battlemap/src/Comm/AddChar.elm b/src/battlemap/src/Comm/AddChar.elm index 1270b0d..5a0303f 100644 --- a/src/battlemap/src/Comm/AddChar.elm +++ b/src/battlemap/src/Comm/AddChar.elm @@ -6,8 +6,10 @@ import Dict import Json.Decode -- Battlemap ------------------------------------------------------------------- +import Data.Armors import Data.Weapons +import Struct.Armor import Struct.Character import Struct.Model import Struct.ServerReply @@ -26,6 +28,12 @@ weapon_getter model ref = (Just w) -> w Nothing -> Data.Weapons.none +armor_getter : Struct.Model.Type -> Struct.Armor.Ref -> Struct.Armor.Type +armor_getter model ref = + case (Dict.get ref model.armors) of + (Just w) -> w + Nothing -> Data.Armors.none + internal_decoder : Struct.Character.Type -> Struct.ServerReply.Type internal_decoder char = (Struct.ServerReply.AddCharacter char) @@ -36,5 +44,5 @@ decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) decode model = (Json.Decode.map (internal_decoder) - (Struct.Character.decoder (weapon_getter model)) + (Struct.Character.decoder (weapon_getter model) (armor_getter model)) ) diff --git a/src/battlemap/src/Data/Armors.elm b/src/battlemap/src/Data/Armors.elm index ca95fa8..1033945 100644 --- a/src/battlemap/src/Data/Armors.elm +++ b/src/battlemap/src/Data/Armors.elm @@ -26,36 +26,36 @@ dataset = 1, (Struct.Armor.new 1 - "Morrigan's Pity" - Struct.Armor.Kinetic - 5.0 + "Last Meal's Pelts" + Struct.Armor.Leather + 0.5 ) ), ( 2, (Struct.Armor.new - 1 - "Last Night's Hunt" - Struct.Armor.Leather - 5.0 + 2 + "Bits from a Wall" + Struct.Armor.Plate + 0.5 ) ), ( 3, (Struct.Armor.new - 1 - "Garden Fence" + 3 + "Some Garden Fence" Struct.Armor.Chain - 5.0 + 0.5 ) ), ( 4, (Struct.Armor.new - 1 - "Bits of Wall" - Struct.Armor.Plate - 5.0 + 4 + "Morrigan's Pity" + Struct.Armor.Kinetic + 0.5 ) ) ] diff --git a/src/battlemap/src/Struct/Armor.elm b/src/battlemap/src/Struct/Armor.elm index 1ec4671..141204c 100644 --- a/src/battlemap/src/Struct/Armor.elm +++ b/src/battlemap/src/Struct/Armor.elm @@ -69,22 +69,20 @@ get_resistance_to dmg_type ar = ( ar.coef * - (toFloat - ( - case (dmg_type, ar.category) of - (Struct.Weapon.Slash, Kinetic) -> 0 - (Struct.Weapon.Slash, Leather) -> 5 - (Struct.Weapon.Slash, Chain) -> 10 - (Struct.Weapon.Slash, Plate) -> 10 - (Struct.Weapon.Blunt, Kinetic) -> 10 - (Struct.Weapon.Blunt, Leather) -> 5 - (Struct.Weapon.Blunt, Chain) -> 5 - (Struct.Weapon.Blunt, Plate) -> 5 - (Struct.Weapon.Pierce, Kinetic) -> 5 - (Struct.Weapon.Pierce, Leather) -> 5 - (Struct.Weapon.Pierce, Chain) -> 5 - (Struct.Weapon.Pierce, Plate) -> 10 - ) + ( + case (dmg_type, ar.category) of + (Struct.Weapon.Slash, Kinetic) -> 0.0 + (Struct.Weapon.Slash, Leather) -> 5.0 + (Struct.Weapon.Slash, Chain) -> 10.0 + (Struct.Weapon.Slash, Plate) -> 10.0 + (Struct.Weapon.Blunt, Kinetic) -> 10.0 + (Struct.Weapon.Blunt, Leather) -> 5.0 + (Struct.Weapon.Blunt, Chain) -> 5.0 + (Struct.Weapon.Blunt, Plate) -> 5.0 + (Struct.Weapon.Pierce, Kinetic) -> 5.0 + (Struct.Weapon.Pierce, Leather) -> 5.0 + (Struct.Weapon.Pierce, Chain) -> 5.0 + (Struct.Weapon.Pierce, Plate) -> 10.0 ) ) ) diff --git a/src/battlemap/src/Struct/Character.elm b/src/battlemap/src/Struct/Character.elm index 7406af7..3973eff 100644 --- a/src/battlemap/src/Struct/Character.elm +++ b/src/battlemap/src/Struct/Character.elm @@ -78,10 +78,11 @@ type alias Ref = String -------------------------------------------------------------------------------- finish_decoding : ( (Struct.Weapon.Ref -> Struct.Weapon.Type) -> + (Struct.Armor.Ref -> Struct.Armor.Type) -> PartiallyDecoded -> Type ) -finish_decoding get_weapon add_char = +finish_decoding get_weapon get_armor add_char = let active_weapon = (get_weapon add_char.awp) secondary_weapon = (get_weapon add_char.swp) @@ -99,7 +100,7 @@ finish_decoding get_weapon add_char = player_id = add_char.pla, enabled = add_char.ena, weapons = weapon_set, - armor = (Data.Armors.none) + armor = (get_armor (add_char.ix % 4)) } -------------------------------------------------------------------------------- @@ -170,11 +171,12 @@ set_weapons weapons char = decoder : ( (Struct.Weapon.Ref -> Struct.Weapon.Type) -> + (Struct.Armor.Ref -> Struct.Armor.Type) -> (Json.Decode.Decoder Type) ) -decoder get_weapon = +decoder get_weapon get_armor = (Json.Decode.map - (finish_decoding get_weapon) + (finish_decoding get_weapon get_armor) (Json.Decode.Pipeline.decode PartiallyDecoded |> (Json.Decode.Pipeline.required "ix" Json.Decode.int) diff --git a/src/battlemap/src/Struct/Model.elm b/src/battlemap/src/Struct/Model.elm index 545fd0f..d75958e 100644 --- a/src/battlemap/src/Struct/Model.elm +++ b/src/battlemap/src/Struct/Model.elm @@ -13,8 +13,10 @@ import Dict import Array -- Battlemap ------------------------------------------------------------------- +import Data.Armors import Data.Weapons +import Struct.Armor import Struct.Battlemap import Struct.Character import Struct.CharacterTurn @@ -31,6 +33,7 @@ type alias Type = battlemap: Struct.Battlemap.Type, characters: (Dict.Dict Struct.Character.Ref Struct.Character.Type), weapons: (Dict.Dict Struct.Weapon.Ref Struct.Weapon.Type), + armors: (Dict.Dict Struct.Armor.Ref Struct.Armor.Type), error: (Maybe Struct.Error.Type), player_id: String, ui: Struct.UI.Type, @@ -51,6 +54,7 @@ new = battlemap = (Struct.Battlemap.empty), characters = (Dict.empty), weapons = (Data.Weapons.generate_dict), + armors = (Data.Armors.generate_dict), error = Nothing, player_id = "0", ui = (Struct.UI.default), diff --git a/src/battlemap/src/View/Character.elm b/src/battlemap/src/View/Character.elm index c34d4d2..0edb5e0 100644 --- a/src/battlemap/src/View/Character.elm +++ b/src/battlemap/src/View/Character.elm @@ -165,9 +165,7 @@ get_portrait_armor_html char = ( "asset-armor-" ++ - (toString - (Struct.Armor.get_id (Struct.Character.get_armor char)) - ) + (Struct.Armor.get_image_id (Struct.Character.get_armor char)) ) ), (Html.Attributes.class diff --git a/src/battlemap/src/View/Controlled/CharacterCard.elm b/src/battlemap/src/View/Controlled/CharacterCard.elm index 9f00aa3..913aaa0 100644 --- a/src/battlemap/src/View/Controlled/CharacterCard.elm +++ b/src/battlemap/src/View/Controlled/CharacterCard.elm @@ -5,6 +5,7 @@ import Html import Html.Attributes -- Battlemap ------------------------------------------------------------------- +import Struct.Armor import Struct.Character import Struct.CharacterTurn import Struct.Event @@ -182,6 +183,49 @@ get_weapon_details model stats weapon = ] ) +get_armor_details : ( + Struct.Armor.Type -> + (Html.Html Struct.Event.Type) + ) +get_armor_details armor = + (Html.div + [ + (Html.Attributes.class "battlemap-character-card-armor") + ] + [ + (Html.div + [ + (Html.Attributes.class "battlemap-character-card-armor-name") + ] + [ + (Html.text (Struct.Armor.get_name armor)) + ] + ), + (Html.div + [ + (Html.Attributes.class "battlemap-character-card-armor-stats") + ] + [ + (stat_name "Slash"), + (stat_val + (Struct.Armor.get_resistance_to Struct.Weapon.Slash armor) + False + ), + (stat_name "Pierc."), + (stat_val + (Struct.Armor.get_resistance_to Struct.Weapon.Pierce armor) + False + ), + (stat_name "Blund."), + (stat_val + (Struct.Armor.get_resistance_to Struct.Weapon.Blunt armor) + False + ) + ] + ) + ] + ) + stat_name : String -> (Html.Html Struct.Event.Type) stat_name name = (Html.div @@ -281,6 +325,7 @@ get_html model char weapon = (Struct.Character.get_statistics char) weapon ), + (get_armor_details (Struct.Character.get_armor char)), (get_relevant_stats model char weapon) ] ) diff --git a/src/battlemap/www/style.css b/src/battlemap/www/style.css index ede1559..a736fb6 100644 --- a/src/battlemap/www/style.css +++ b/src/battlemap/www/style.css @@ -276,6 +276,22 @@ padding: 0.3em; } +.battlemap-character-card-armor +{ + display: grid; + border-radius: 5px; + background-color: #6C5D53; + + padding: 0.3em; + margin-top: 0.3em; +} + +.battlemap-character-card-armor-stats +{ + display: grid; + grid-template-columns: [col] 25% [col] 25% [col] 25% [col] 25%; +} + .battlemap-character-card-stats { display: grid; -- cgit v1.2.3-70-g09d2