summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/roster-editor')
-rw-r--r--src/roster-editor/src/ElmModule/Update.elm12
-rw-r--r--src/roster-editor/src/Struct/Character.elm6
-rw-r--r--src/roster-editor/src/Struct/Event.elm3
-rw-r--r--src/roster-editor/src/Struct/GlyphBoard.elm17
-rw-r--r--src/roster-editor/src/Struct/Omnimods.elm14
-rw-r--r--src/roster-editor/src/Struct/UI.elm18
-rw-r--r--src/roster-editor/src/Update/SetGlyph.elm15
-rw-r--r--src/roster-editor/src/View/CurrentTab.elm4
-rw-r--r--src/roster-editor/src/View/GlyphBoardSelection.elm5
-rw-r--r--src/roster-editor/src/View/GlyphManagement.elm74
-rw-r--r--src/roster-editor/src/View/GlyphSelection.elm84
11 files changed, 236 insertions, 16 deletions
diff --git a/src/roster-editor/src/ElmModule/Update.elm b/src/roster-editor/src/ElmModule/Update.elm
index 20a4c81..8d46fc6 100644
--- a/src/roster-editor/src/ElmModule/Update.elm
+++ b/src/roster-editor/src/ElmModule/Update.elm
@@ -89,8 +89,16 @@ update event model =
(Struct.Event.SelectedWeapon ref) ->
(Update.SetWeapon.apply_to new_model ref)
- (Struct.Event.SelectedGlyph (ref, index)) ->
- (Update.SetGlyph.apply_to new_model ref index)
+ (Struct.Event.SelectedGlyph ref) ->
+ (Update.SetGlyph.apply_to new_model ref)
+
+ (Struct.Event.ClickedOnGlyph index) ->
+ (Update.SelectTab.apply_to
+ {model |
+ ui = (Struct.UI.set_glyph_slot index model.ui)
+ }
+ Struct.UI.GlyphSelectionTab
+ )
(Struct.Event.SelectedGlyphBoard ref) ->
(Update.SetGlyphBoard.apply_to new_model ref)
diff --git a/src/roster-editor/src/Struct/Character.elm b/src/roster-editor/src/Struct/Character.elm
index 58d9967..2778b6d 100644
--- a/src/roster-editor/src/Struct/Character.elm
+++ b/src/roster-editor/src/Struct/Character.elm
@@ -203,7 +203,11 @@ set_glyph_board glyph_board char =
(refresh_omnimods
{char |
glyph_board = glyph_board,
- glyphs = (Array.empty)
+ glyphs =
+ (Array.repeat
+ (List.length (Struct.GlyphBoard.get_slots glyph_board))
+ (Struct.Glyph.none)
+ )
}
)
diff --git a/src/roster-editor/src/Struct/Event.elm b/src/roster-editor/src/Struct/Event.elm
index 570f84b..3ac3715 100644
--- a/src/roster-editor/src/Struct/Event.elm
+++ b/src/roster-editor/src/Struct/Event.elm
@@ -26,10 +26,11 @@ type Type =
| ServerReplied (Result Http.Error (List Struct.ServerReply.Type))
| TabSelected Struct.UI.Tab
| ClickedOnWeapon Bool
+ | ClickedOnGlyph Int
| SaveRequest
| SelectedArmor Struct.Armor.Ref
- | SelectedGlyph (Struct.Glyph.Ref, Int)
+ | SelectedGlyph Struct.Glyph.Ref
| SelectedGlyphBoard Struct.GlyphBoard.Ref
| SelectedPortrait Struct.Portrait.Ref
| SelectedWeapon Struct.Weapon.Ref
diff --git a/src/roster-editor/src/Struct/GlyphBoard.elm b/src/roster-editor/src/Struct/GlyphBoard.elm
index a7fa503..9329061 100644
--- a/src/roster-editor/src/Struct/GlyphBoard.elm
+++ b/src/roster-editor/src/Struct/GlyphBoard.elm
@@ -4,6 +4,7 @@ module Struct.GlyphBoard exposing
Ref,
get_name,
get_id,
+ get_slots,
get_omnimods,
get_omnimods_with_glyphs,
decoder,
@@ -14,6 +15,8 @@ module Struct.GlyphBoard exposing
-- Elm -------------------------------------------------------------------------
import Array
+import List
+
import Json.Decode
import Json.Decode.Pipeline
@@ -47,6 +50,9 @@ get_id g = g.id
get_name : Type -> String
get_name g = g.name
+get_slots : Type -> (List Int)
+get_slots g = g.slots
+
get_omnimods : Type -> Struct.Omnimods.Type
get_omnimods g = g.omnimods
@@ -55,7 +61,16 @@ get_omnimods_with_glyphs : (
Type ->
Struct.Omnimods.Type
)
-get_omnimods_with_glyphs glyphs board = board.omnimods
+get_omnimods_with_glyphs glyphs board =
+ (List.foldl
+ (Struct.Omnimods.merge)
+ board.omnimods
+ (List.map2
+ (Struct.Omnimods.scale)
+ (List.map (\e -> ((toFloat e) / 100.0)) board.slots)
+ (List.map (Struct.Glyph.get_omnimods) (Array.toList glyphs))
+ )
+ )
decoder : (Json.Decode.Decoder Type)
decoder =
diff --git a/src/roster-editor/src/Struct/Omnimods.elm b/src/roster-editor/src/Struct/Omnimods.elm
index 31ad1ed..68f5233 100644
--- a/src/roster-editor/src/Struct/Omnimods.elm
+++ b/src/roster-editor/src/Struct/Omnimods.elm
@@ -13,6 +13,7 @@ module Struct.Omnimods exposing
get_attack_mods,
get_defense_mods,
get_all_mods,
+ scale,
decoder
)
@@ -77,6 +78,9 @@ merge_mods a_mods b_mods =
(Dict.empty)
)
+scale_dict_value : Float -> String -> Int -> Int
+scale_dict_value modifier entry_name value =
+ (ceiling ((toFloat value) * modifier))
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
@@ -178,6 +182,16 @@ get_attack_damage dmg_modifier atk_omni def_omni =
atk_omni.attack
)
+scale : Float -> Type -> Type
+scale multiplier omnimods =
+ {omnimods |
+ attributes = (Dict.map (scale_dict_value multiplier) omnimods.attributes),
+ statistics = (Dict.map (scale_dict_value multiplier) omnimods.statistics),
+ attack = (Dict.map (scale_dict_value multiplier) omnimods.attack),
+ defense =
+ (Dict.map (scale_dict_value multiplier) omnimods.defense)
+ }
+
get_attributes_mods : Type -> (List (String, Int))
get_attributes_mods omnimods = (Dict.toList omnimods.attributes)
diff --git a/src/roster-editor/src/Struct/UI.elm b/src/roster-editor/src/Struct/UI.elm
index 10b04c6..c128347 100644
--- a/src/roster-editor/src/Struct/UI.elm
+++ b/src/roster-editor/src/Struct/UI.elm
@@ -9,7 +9,10 @@ module Struct.UI exposing
reset_displayed_tab,
-- Main or Secondary Weapon?
set_is_selecting_main_weapon,
- is_selecting_main_weapon
+ is_selecting_main_weapon,
+ -- Which glyph slot is being edited?
+ set_glyph_slot,
+ get_glyph_slot
)
-- Elm -------------------------------------------------------------------------
@@ -25,13 +28,15 @@ type Tab =
-- | AccessorySelectionTab
| WeaponSelectionTab
| ArmorSelectionTab
+ | GlyphSelectionTab
| GlyphBoardSelectionTab
| GlyphManagementTab
type alias Type =
{
displayed_tab : Tab,
- is_selecting_main_weapon : Bool
+ is_selecting_main_weapon : Bool,
+ glyph_slot : Int
}
--------------------------------------------------------------------------------
@@ -45,7 +50,8 @@ default : Type
default =
{
displayed_tab = CharacterSelectionTab,
- is_selecting_main_weapon = False
+ is_selecting_main_weapon = False,
+ glyph_slot = -1
}
-- Tab -------------------------------------------------------------------------
@@ -63,3 +69,9 @@ set_is_selecting_main_weapon val ui = {ui | is_selecting_main_weapon = val}
is_selecting_main_weapon : Type -> Bool
is_selecting_main_weapon ui = ui.is_selecting_main_weapon
+
+get_glyph_slot : Type -> Int
+get_glyph_slot ui = ui.glyph_slot
+
+set_glyph_slot : Int -> Type -> Type
+set_glyph_slot tab ui = {ui | glyph_slot = tab}
diff --git a/src/roster-editor/src/Update/SetGlyph.elm b/src/roster-editor/src/Update/SetGlyph.elm
index c8b979c..3288d18 100644
--- a/src/roster-editor/src/Update/SetGlyph.elm
+++ b/src/roster-editor/src/Update/SetGlyph.elm
@@ -8,6 +8,7 @@ import Struct.Character
import Struct.Event
import Struct.Glyph
import Struct.Model
+import Struct.UI
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
@@ -19,10 +20,9 @@ import Struct.Model
apply_to : (
Struct.Model.Type ->
Struct.Glyph.Ref ->
- Int ->
(Struct.Model.Type, (Cmd Struct.Event.Type))
)
-apply_to model ref index =
+apply_to model ref =
(
(
case (model.edited_char, (Dict.get ref model.glyphs)) of
@@ -30,7 +30,16 @@ apply_to model ref index =
{model |
edited_char =
(Just
- (Struct.Character.set_glyph index glyph char)
+ (Struct.Character.set_glyph
+ (Struct.UI.get_glyph_slot model.ui)
+ glyph
+ char
+ )
+ ),
+ ui =
+ (Struct.UI.set_displayed_tab
+ Struct.UI.GlyphManagementTab
+ model.ui
)
}
diff --git a/src/roster-editor/src/View/CurrentTab.elm b/src/roster-editor/src/View/CurrentTab.elm
index 995a5d2..7f0cc2f 100644
--- a/src/roster-editor/src/View/CurrentTab.elm
+++ b/src/roster-editor/src/View/CurrentTab.elm
@@ -12,6 +12,7 @@ import View.ArmorSelection
import View.CharacterSelection
import View.GlyphManagement
import View.GlyphBoardSelection
+import View.GlyphSelection
import View.PortraitSelection
import View.WeaponSelection
@@ -37,6 +38,9 @@ get_html model =
Struct.UI.ArmorSelectionTab ->
(View.ArmorSelection.get_html model)
+ Struct.UI.GlyphSelectionTab ->
+ (View.GlyphSelection.get_html model)
+
Struct.UI.GlyphBoardSelectionTab ->
(View.GlyphBoardSelection.get_html model)
diff --git a/src/roster-editor/src/View/GlyphBoardSelection.elm b/src/roster-editor/src/View/GlyphBoardSelection.elm
index 756edbf..525ab8d 100644
--- a/src/roster-editor/src/View/GlyphBoardSelection.elm
+++ b/src/roster-editor/src/View/GlyphBoardSelection.elm
@@ -32,10 +32,7 @@ get_mod_html mod =
]
)
-get_glyph_board_html : (
- Struct.GlyphBoard.Type ->
- (Html.Html Struct.Event.Type)
- )
+get_glyph_board_html : Struct.GlyphBoard.Type -> (Html.Html Struct.Event.Type)
get_glyph_board_html glyph_board =
(Html.div
[
diff --git a/src/roster-editor/src/View/GlyphManagement.elm b/src/roster-editor/src/View/GlyphManagement.elm
index bcb8873..c779c7a 100644
--- a/src/roster-editor/src/View/GlyphManagement.elm
+++ b/src/roster-editor/src/View/GlyphManagement.elm
@@ -1,16 +1,72 @@
module View.GlyphManagement exposing (get_html)
-- Elm -------------------------------------------------------------------------
+import Array
+
import Html
import Html.Attributes
+import Html.Events
-- Roster Editor ---------------------------------------------------------------
import Struct.Event
+import Struct.Glyph
+import Struct.GlyphBoard
+import Struct.Omnimods
+import Struct.Character
import Struct.Model
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
+get_mod_html : (String, Int) -> (Html.Html Struct.Event.Type)
+get_mod_html mod =
+ let
+ (category, value) = mod
+ in
+ (Html.div
+ [
+ (Html.Attributes.class "info-card-mod")
+ ]
+ [
+ (Html.text
+ (category ++ ": " ++ (toString value))
+ )
+ ]
+ )
+
+get_glyph_html : (
+ Int ->
+ (Int, Struct.Glyph.Type)
+ -> (Html.Html Struct.Event.Type)
+ )
+get_glyph_html modifier (index, glyph) =
+ (Html.div
+ [
+ (Html.Attributes.class "character-card-glyph"),
+ (Html.Attributes.class "clickable"),
+ (Html.Events.onClick (Struct.Event.ClickedOnGlyph index))
+ ]
+ [
+ (Html.text
+ (
+ (Struct.Glyph.get_name glyph)
+ ++ " ("
+ ++ (toString modifier)
+ ++ "%)"
+ )
+ ),
+ (Html.div
+ [
+ ]
+ (List.map
+ (get_mod_html)
+ (Struct.Omnimods.get_all_mods
+ (Struct.Glyph.get_omnimods glyph)
+ )
+ )
+ )
+ ]
+ )
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
@@ -23,6 +79,22 @@ get_html model =
(Html.Attributes.class "glyph-management")
]
[
- (Html.text "Glyph Management")
+ (Html.text "Glyph Management"),
+ (case model.edited_char of
+ Nothing -> (Html.div [] [(Html.text "No character selected")])
+ (Just char) ->
+ (Html.div
+ [
+ (Html.Attributes.class "selection-window-listing")
+ ]
+ (List.map2
+ (get_glyph_html)
+ (Struct.GlyphBoard.get_slots
+ (Struct.Character.get_glyph_board char)
+ )
+ (Array.toIndexedList (Struct.Character.get_glyphs char))
+ )
+ )
+ )
]
)
diff --git a/src/roster-editor/src/View/GlyphSelection.elm b/src/roster-editor/src/View/GlyphSelection.elm
new file mode 100644
index 0000000..8631a0d
--- /dev/null
+++ b/src/roster-editor/src/View/GlyphSelection.elm
@@ -0,0 +1,84 @@
+module View.GlyphSelection exposing (get_html)
+
+-- Elm -------------------------------------------------------------------------
+import Dict
+
+import Html
+import Html.Attributes
+import Html.Events
+
+-- Roster Editor ---------------------------------------------------------------
+import Struct.Event
+import Struct.Glyph
+import Struct.Omnimods
+import Struct.Model
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_mod_html : (String, Int) -> (Html.Html Struct.Event.Type)
+get_mod_html mod =
+ let
+ (category, value) = mod
+ in
+ (Html.div
+ [
+ (Html.Attributes.class "info-card-mod")
+ ]
+ [
+ (Html.text
+ (category ++ ": " ++ (toString value))
+ )
+ ]
+ )
+
+get_glyph_html : Struct.Glyph.Type -> (Html.Html Struct.Event.Type)
+get_glyph_html glyph =
+ (Html.div
+ [
+ (Html.Attributes.class "character-card-glyph"),
+ (Html.Attributes.class "clickable"),
+ (Html.Events.onClick
+ (Struct.Event.SelectedGlyph
+ (Struct.Glyph.get_id glyph)
+ )
+ )
+ ]
+ [
+ (Html.text (Struct.Glyph.get_name glyph)),
+ (Html.div
+ [
+ ]
+ (List.map
+ (get_mod_html)
+ (Struct.Omnimods.get_all_mods
+ (Struct.Glyph.get_omnimods glyph)
+ )
+ )
+ )
+ ]
+ )
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_html : Struct.Model.Type -> (Html.Html Struct.Event.Type)
+get_html model =
+ (Html.div
+ [
+ (Html.Attributes.class "selection-window"),
+ (Html.Attributes.class "glyph-management")
+ ]
+ [
+ (Html.text "Glyph Selection"),
+ (Html.div
+ [
+ (Html.Attributes.class "selection-window-listing")
+ ]
+ (List.map
+ (get_glyph_html)
+ (Dict.values model.glyphs)
+ )
+ )
+ ]
+ )