summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-11-09 17:55:05 +0100
committernsensfel <SpamShield0@noot-noot.org>2018-11-09 17:55:05 +0100
commit25e3a440f35cecb2f235442acbe1667fcf19d6da (patch)
tree9eb8a895b13db47443d621aa4e897c025fc23872 /src
parent11ab56f19b8979c8f3d164277ad5b40555150f78 (diff)
[Broken] Working on the aforementioned issue...
Diffstat (limited to 'src')
-rw-r--r--src/roster-editor/src/Struct/Character.elm167
-rw-r--r--src/roster-editor/src/Struct/CharacterRecord.elm144
-rw-r--r--src/roster-editor/src/Struct/Model.elm57
-rw-r--r--src/roster-editor/src/Struct/ServerReply.elm4
4 files changed, 256 insertions, 116 deletions
diff --git a/src/roster-editor/src/Struct/Character.elm b/src/roster-editor/src/Struct/Character.elm
index 89e2a18..a589fcc 100644
--- a/src/roster-editor/src/Struct/Character.elm
+++ b/src/roster-editor/src/Struct/Character.elm
@@ -1,6 +1,7 @@
module Struct.Character exposing
(
Type,
+ new,
get_index,
get_name,
set_name,
@@ -18,9 +19,7 @@ module Struct.Character exposing
get_glyphs,
set_glyph,
set_was_edited,
- get_was_edited,
- decoder,
- encode
+ get_was_edited
)
-- Elm -------------------------------------------------------------------------
@@ -44,19 +43,6 @@ import Struct.WeaponSet
--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
--------------------------------------------------------------------------------
-type alias PartiallyDecoded =
- {
- ix : Int,
- nam : String,
- prt : String,
- awp : Int,
- swp : Int,
- ar : Int,
- gb : String,
- gls : (List Int),
- current_omnimods : Struct.Omnimods.Type
- }
-
type alias Type =
{
ix : Int,
@@ -75,31 +61,6 @@ type alias Type =
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
-finish_decoding : PartiallyDecoded -> (Type, String, Int, Int, Int)
-finish_decoding add_char =
- let
- weapon_set = (Struct.WeaponSet.new Struct.Weapon.none Struct.Weapon.none)
- armor = Struct.Armor.none
- glyph_board = Struct.GlyphBoard.none
- glyphs = (Array.empty)
- default_attributes = (Struct.Attributes.default)
- almost_char =
- {
- ix = add_char.ix,
- name = add_char.nam,
- portrait = (Struct.Portrait.default),
- attributes = default_attributes,
- statistics = (Struct.Statistics.new_raw default_attributes),
- weapons = weapon_set,
- armor = armor,
- glyph_board = glyph_board,
- glyphs = glyphs,
- current_omnimods = add_char.current_omnimods,
- was_edited = False
- }
- in
- (almost_char, add_char.prt, add_char.awp, add_char.swp, add_char.ar)
-
refresh_omnimods : Type -> Type
refresh_omnimods char =
let
@@ -137,6 +98,67 @@ refresh_omnimods char =
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
+new : (
+ Int ->
+ String ->
+ (Maybe Struct.Portrait.Type) ->
+ (Maybe Struct.Weapon.Type) ->
+ (Maybe Struct.Weapon.Type) ->
+ (Maybe Struct.Armor.Type) ->
+ (Maybe Struct.GlyphBoard.Type) ->
+ (List (Maybe Struct.Glyph.Type)) ->
+ Type
+ )
+new index name m_portrait m_main_wp m_sec_wp m_armor m_board m_glyphs =
+ {
+ ix = index,
+ name = name,
+ portrait =
+ (
+ case m_portrait of
+ (Just portrait) -> portrait
+ Nothing -> (Struct.Portrait.default)
+ ),
+ attributes = (Struct.Attributes.default),
+ statistics = (Struct.Statistics.default),
+ weapons =
+ (Struct.WeaponSet.new
+ (
+ case m_main_wp of
+ (Just w) -> w
+ Nothing -> (Struct.Weapon.default)
+ )
+ (
+ case m_sec_wp of
+ (Just w) -> w
+ Nothing -> (Struct.Weapon.default)
+ )
+ ),
+ armor =
+ (
+ case m_armor of
+ (Just armor) -> armor
+ Nothing -> (Struct.Armor.default)
+ ),
+ glyph_board =
+ (
+ case m_board of
+ (Just board) -> board
+ Nothing -> (Struct.GlyphBoard.default)
+ ),
+ glyphs =
+ (Array.fromList
+ (List.map
+ (\m_g ->
+ case m_g of
+ (Just g) -> g
+ Nothing -> (Struct.Glyph.default)
+ )
+ m_glyphs
+ )
+ current_omnimods = (Struct.Omnimods.none),
+ was_edited = False
+ }
get_index : Type -> Int
get_index c = c.ix
@@ -197,66 +219,3 @@ get_was_edited char = char.was_edited
set_was_edited : Bool -> Type -> Type
set_was_edited val char = {char | was_edited = val}
-
-decoder : (Json.Decode.Decoder (Type, String, Int, Int, Int))
-decoder =
- (Json.Decode.map
- (finish_decoding)
- (Json.Decode.Pipeline.decode
- PartiallyDecoded
- |> (Json.Decode.Pipeline.required "ix" Json.Decode.int)
- |> (Json.Decode.Pipeline.required "nam" Json.Decode.string)
- |> (Json.Decode.Pipeline.required "prt" Json.Decode.string)
- |> (Json.Decode.Pipeline.required "awp" Json.Decode.int)
- |> (Json.Decode.Pipeline.required "swp" Json.Decode.int)
- |> (Json.Decode.Pipeline.required "ar" Json.Decode.int)
- |> (Json.Decode.Pipeline.required "gb" Json.Decode.string)
- |> (Json.Decode.Pipeline.required
- "gls"
- (Json.Decode.list Json.Decode.int)
- )
- |> (Json.Decode.Pipeline.hardcoded (Struct.Omnimods.none))
- )
- )
-
-encode : Type -> Json.Encode.Value
-encode char =
- (Json.Encode.object
- [
- ("ix", (Json.Encode.int char.ix)),
- ("nam", (Json.Encode.string char.name)),
- ("prt", (Json.Encode.string (Struct.Portrait.get_id char.portrait))),
- (
- "awp",
- (Json.Encode.int
- (Struct.Weapon.get_id
- (Struct.WeaponSet.get_active_weapon char.weapons)
- )
- )
- ),
- (
- "swp",
- (Json.Encode.int
- (Struct.Weapon.get_id
- (Struct.WeaponSet.get_active_weapon char.weapons)
- )
- )
- ),
- ("ar", (Json.Encode.int (Struct.Armor.get_id char.armor))),
- (
- "gb",
- (Json.Encode.string (Struct.GlyphBoard.get_id char.glyph_board))
- ),
- (
- "gls",
- (Json.Encode.list
- (Array.toList
- (Array.map
- ((Struct.Glyph.get_id) >> Json.Encode.string)
- char.glyphs
- )
- )
- )
- )
- ]
- )
diff --git a/src/roster-editor/src/Struct/CharacterRecord.elm b/src/roster-editor/src/Struct/CharacterRecord.elm
new file mode 100644
index 0000000..c92014d
--- /dev/null
+++ b/src/roster-editor/src/Struct/CharacterRecord.elm
@@ -0,0 +1,144 @@
+module Struct.CharacterRecord exposing
+ (
+ Type,
+ get_index,
+ get_name,
+ get_portrait_id,
+ get_armor_id,
+ get_main_weapon_id,
+ get_secondary_weapon_id,
+ get_glyph_board_id,
+ get_glyph_ids,
+ from_character,
+ decoder,
+ encode
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Array
+
+import Json.Decode
+import Json.Decode.Pipeline
+import Json.Encode
+
+-- Roster Editor ---------------------------------------------------------------
+import Struct.Armor
+import Struct.Attributes
+import Struct.Glyph
+import Struct.GlyphBoard
+import Struct.Omnimods
+import Struct.Portrait
+import Struct.Statistics
+import Struct.Weapon
+import Struct.WeaponSet
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ index : Int,
+ name : String,
+ portrait_id : String,
+ main_weapon_id : Int,
+ secondary_weapon_id : Int,
+ armor_id : Int,
+ glyph_board_id : String,
+ glyph_ids : (List Int)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_index : Type -> Int
+get_index c = c.index
+
+get_name : Type -> String
+get_name c = c.name
+
+get_portrait_id : Type -> String
+get_portrait_id c = c.portrait_id
+
+get_main_weapon_id : Type -> Int
+get_main_weapon_id char = char.main_weapon_id
+
+get_secondary_weapon_id : Type -> Int
+get_secondary_weapon_id char = char.secondary_weapon_id
+
+get_armor_id : Type -> Int
+get_armor_id char = char.armor_id
+
+get_glyph_board_id : Type -> String
+get_glyph_board_id char = char.glyph_board_id
+
+get_glyph_ids : Type -> (List Int)
+get_glyph_ids char = char.glyph_ids
+
+from_character : Struct.Character.Type -> Type
+from_character char =
+ let
+ weapons = (Struct.Character.get_weapons char)
+ in
+ {
+ index = (Struct.Character.get_index char),
+ name = (Struct.Character.get_name char),
+ portrait_id =
+ (Struct.Portrait.get_id (Struct.Character.get_portrait char)),
+ armor_id = (Struct.Armor.get_id (Struct.Character.get_armor char)),
+ main_weapon_id =
+ (Struct.Weapon.get_id (Struct.WeaponSet.get_active_weapon weapons)),
+ secondary_weapon_id =
+ (Struct.Weapon.get_id (Struct.WeaponSet.get_secondary_weapon weapons)),
+ glyph_board_id =
+ (Struct.GlyphBoard.get_id (Struct.Character.get_glyph_board char)),
+ glyph_ids =
+ (Array.toList
+ (Array.map
+ (Struct.Glyph.get_id)
+ (Struct.Character.get_glyphs char)
+ )
+ )
+ }
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.Pipeline.decode
+ PartiallyDecoded
+ |> (Json.Decode.Pipeline.required "ix" Json.Decode.int)
+ |> (Json.Decode.Pipeline.required "nam" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "prt" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "awp" Json.Decode.int)
+ |> (Json.Decode.Pipeline.required "swp" Json.Decode.int)
+ |> (Json.Decode.Pipeline.required "ar" Json.Decode.int)
+ |> (Json.Decode.Pipeline.required "gb" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required
+ "gls"
+ (Json.Decode.list Json.Decode.int)
+ )
+ )
+
+encode : Type -> Json.Encode.Value
+encode char =
+ (Json.Encode.object
+ [
+ ("ix", (Json.Encode.int char.index)),
+ ("nam", (Json.Encode.string char.name)),
+ ("prt", (Json.Encode.string char.portrait_id)),
+ ("awp", (Json.Encode.int char.main_weapon_id)),
+ ("swp", (Json.Encode.int char.secondary_weapon_id)),
+ ("ar", (Json.Encode.int char.armor_id)),
+ ("gb", (Json.Encode.string char.glyph_board_id)),
+ (
+ "gls",
+ (Json.Encode.list
+ (List.map (Json.Encode.string)
+ char.glyph_ids
+ )
+ )
+ )
+ ]
+ )
diff --git a/src/roster-editor/src/Struct/Model.elm b/src/roster-editor/src/Struct/Model.elm
index ef5b21c..3dd5c3c 100644
--- a/src/roster-editor/src/Struct/Model.elm
+++ b/src/roster-editor/src/Struct/Model.elm
@@ -2,7 +2,7 @@ module Struct.Model exposing
(
Type,
new,
- add_character,
+ add_character_record,
update_character,
update_character_fun,
save_character,
@@ -26,6 +26,7 @@ import Struct.Flags
-- Roster Editor ---------------------------------------------------------------
import Struct.Armor
import Struct.Character
+import Struct.CharacterRecord
import Struct.Error
import Struct.Glyph
import Struct.GlyphBoard
@@ -45,6 +46,7 @@ type alias Type =
flags: Struct.Flags.Type,
help_request: Struct.HelpRequest.Type,
characters: (Array.Array Struct.Character.Type),
+ stalled_characters: (List Struct.CharacterRecord.Type),
weapons: (Dict.Dict Struct.Weapon.Ref Struct.Weapon.Type),
armors: (Dict.Dict Struct.Armor.Ref Struct.Armor.Type),
glyphs: (Dict.Dict Struct.Glyph.Ref Struct.Glyph.Type),
@@ -62,6 +64,44 @@ type alias Type =
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
+add_character : Struct.CharacterRecord.Type -> Type -> Type
+add_character char_rec model =
+ let index = (Struct.CharacterRecord.get_index char_rec) in
+ {model |
+ characters =
+ (Array.set
+ index
+ (Struct.Character.new
+ index
+ (Struct.CharacterRecord.get_name char_rec)
+ (Dict.get
+ (Struct.CharacterRecord.get_portrait_id char_rec)
+ model.portraits
+ )
+ (Dict.get
+ (Struct.CharacterRecord.get_main_weapon_id char_rec)
+ model.weapons
+ )
+ (Dict.get
+ (Struct.CharacterRecord.get_secondary_weapon_id char_rec)
+ model.weapons
+ )
+ (Dict.get
+ (Struct.CharacterRecord.get_armor_id char_rec)
+ model.armors
+ )
+ (Dict.get
+ (Struct.CharacterRecord.get_glyph_board_id char_rec)
+ model.glyph_boards
+ )
+ (List.map
+ (\e -> (Dict.get e model.glyphs))
+ (Struct.CharacterRecord.get_glyph_ids char_rec)
+ )
+ )
+ model.characters
+ )
+ }
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
@@ -72,6 +112,7 @@ new flags =
flags = flags,
help_request = Struct.HelpRequest.None,
characters = (Array.empty),
+ stalled_characters = [],
weapons = (Dict.empty),
armors = (Dict.empty),
glyphs = (Dict.empty),
@@ -91,15 +132,11 @@ new flags =
ui = (Struct.UI.default)
}
-add_character : Struct.Character.Type -> Type -> Type
-add_character char model =
- {model |
- characters =
- (Array.push
- char
- model.characters
- )
- }
+add_character_record : Struct.CharacterRecord.Type -> Type -> Type
+add_character_record char model =
+ if (condition)
+ then {model | stalled_characters = (char :: model.stalled_characters)}
+ else (add_character char model)
add_weapon : Struct.Weapon.Type -> Type -> Type
add_weapon wp model =
diff --git a/src/roster-editor/src/Struct/ServerReply.elm b/src/roster-editor/src/Struct/ServerReply.elm
index 4d592f5..1842ea4 100644
--- a/src/roster-editor/src/Struct/ServerReply.elm
+++ b/src/roster-editor/src/Struct/ServerReply.elm
@@ -4,7 +4,7 @@ module Struct.ServerReply exposing (Type(..))
-- Roster Editor ---------------------------------------------------------------
import Struct.Armor
-import Struct.Character
+import Struct.CharacterRecord
import Struct.Glyph
import Struct.GlyphBoard
import Struct.Inventory
@@ -24,7 +24,7 @@ type Type =
| AddGlyphBoard Struct.GlyphBoard.Type
| AddPortrait Struct.Portrait.Type
| AddWeapon Struct.Weapon.Type
- | AddCharacter (Struct.Character.Type, String, Int, Int, Int)
+ | AddCharacter Struct.CharacterRecord.Type
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------