Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
dyingIsMainstream
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
2
Issues
2
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gamejam-gpn15
dyingIsMainstream
Commits
c70aa22f
Commit
c70aa22f
authored
Jun 05, 2015
by
Tim Reiter
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
ssh://git.breab.org:2222/gamejam-gpn15/dyingIsMainstream
parents
5ee91849
32aed244
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
273 additions
and
286 deletions
+273
-286
.gitignore
.gitignore
+4
-5
XmlItemsToExport.xml
Assets/Resources/XmlItemsToExport.xml
+0
-12
DeserializedLevels.cs
Assets/Scripts/LevelManagement/DeserializedLevels.cs
+45
-45
DeserializedLevelsCrossChecker.cs
...Scripts/LevelManagement/DeserializedLevelsCrossChecker.cs
+38
-38
DeserializedLevelsLoader.cs
Assets/Scripts/LevelManagement/DeserializedLevelsLoader.cs
+104
-104
DeserializedLevelsSaver.cs
Assets/Scripts/LevelManagement/DeserializedLevelsSaver.cs
+64
-64
XmlIO.cs
Assets/Scripts/LevelManagement/XmlIO.cs
+18
-18
No files found.
.gitignore
View file @
c70aa22f
*.csproj
*.sln
*.userprefs
/Assets/Resources/XmlItemsToExport.xml
/Library
/Temp
/Assembly-CSharp.csproj
/Assembly-CSharp-vs.csproj
/dyingIsMainstream.sln
/dyingIsMainstream.userprefs
/dyingIsMainstream-csharp.sln
Assets/Resources/XmlItemsToExport.xml
deleted
100644 → 0
View file @
5ee91849
<?xml version="1.0" encoding="Windows-1252"?>
<Levels
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
>
<Level>
<Item
prefab=
"Player Two"
x=
"-3.05"
y=
"2.06"
/>
<Item
prefab=
"Player One"
x=
"-0.23"
y=
"2.06"
/>
<Item
prefab=
"Trap"
x=
"-5.02"
y=
"-0.57"
rot=
"90"
/>
<Item
prefab=
"ground"
x=
"1.51"
y=
"-0.8"
scalex=
"58.39"
/>
<Item
prefab=
"Turret"
x=
"4.47"
y=
"0.71"
/>
<Item
prefab=
"PortableFire"
x=
"4.04"
y=
"-0.22"
scalex=
"0.2"
scaley=
"0.2"
/>
</Level>
</Levels>
\ No newline at end of file
Assets/Scripts/LevelManagement/DeserializedLevels.cs
View file @
c70aa22f
...
...
@@ -6,50 +6,50 @@ using System.IO;
[XmlRoot("Levels")]
public
class
DeserializedLevels
{
[
XmlElement
(
"Developer"
)]
public
Developer
developer
;
public
class
Developer
{
[
XmlAttribute
(
"StartLevel"
)]
public
string
startLevel
;
}
[
XmlElement
(
"Level"
)]
public
Level
[]
levels
;
public
class
Level
{
[
XmlElement
(
"Item"
)]
public
Item
[]
items
;
}
public
class
PlayerStartPosition
{
[
XmlAttribute
(
"x"
)]
public
string
x
;
[
XmlAttribute
(
"y"
)]
public
string
y
;
}
public
class
Item
{
[
XmlAttribute
(
"prefab"
)]
public
string
prefab
;
[
XmlAttribute
(
"x"
)]
public
string
x
;
[
XmlAttribute
(
"y"
)]
public
string
y
;
[
XmlAttribute
(
"rot"
)]
public
string
rot
;
[
XmlAttribute
(
"scalex"
)]
public
string
scalex
;
[
XmlAttribute
(
"scaley"
)]
public
string
scaley
;
}
[
XmlElement
(
"Developer"
)]
public
Developer
developer
;
public
class
Developer
{
[
XmlAttribute
(
"StartLevel"
)]
public
string
startLevel
;
}
[
XmlElement
(
"Level"
)]
public
Level
[]
levels
;
public
class
Level
{
[
XmlElement
(
"Item"
)]
public
Item
[]
items
;
}
public
class
PlayerStartPosition
{
[
XmlAttribute
(
"x"
)]
public
string
x
;
[
XmlAttribute
(
"y"
)]
public
string
y
;
}
public
class
Item
{
[
XmlAttribute
(
"prefab"
)]
public
string
prefab
;
[
XmlAttribute
(
"x"
)]
public
string
x
;
[
XmlAttribute
(
"y"
)]
public
string
y
;
[
XmlAttribute
(
"rot"
)]
public
string
rot
;
[
XmlAttribute
(
"scalex"
)]
public
string
scalex
;
[
XmlAttribute
(
"scaley"
)]
public
string
scaley
;
}
}
Assets/Scripts/LevelManagement/DeserializedLevelsCrossChecker.cs
View file @
c70aa22f
...
...
@@ -7,42 +7,42 @@ using System.Xml;
using
System.Linq
;
public
class
DeserializedLevelsCrossChecker
{
//Hallo Tim und Philipp. Die Datei kuckt nur ob irgendwas mit den Prefabs komisch ist.
// cross check /Resources/Prefabs and Levels.xml if there are any item prefabs that exist only in one but not the other
public
void
crossCheck
()
{
// create a list of /Resources/Prefabs for resources and Levels.Xml
List
<
string
>
resPrefabList
=
new
List
<
string
>();
List
<
string
>
xmlPrefabList
=
new
List
<
string
>();
// Get prefabs from Levels.xml
DeserializedLevels
deserializedLevels
=
XmlIO
.
LoadXml
<
DeserializedLevels
>(
"Levels"
);
foreach
(
DeserializedLevels
.
Level
level
in
deserializedLevels
.
levels
)
{
foreach
(
DeserializedLevels
.
Item
item
in
level
.
items
)
if
(!
xmlPrefabList
.
Contains
(
item
.
prefab
))
xmlPrefabList
.
Add
(
item
.
prefab
);
}
// Get prefabs from the /Resources/Prefabs folder
// get all child items in the /Resources/Prefabs folder
DirectoryInfo
dir
=
new
DirectoryInfo
(
"Assets/Resources/Prefabs"
);
FileInfo
[]
fileInfos
=
dir
.
GetFiles
(
"*.prefab"
);
fileInfos
.
Select
(
f
=>
f
.
FullName
).
ToArray
();
// Add each prefab's file name to prefabList and truncate the .prefab extension from the end
foreach
(
FileInfo
fileInfo
in
fileInfos
)
resPrefabList
.
Add
(
fileInfo
.
Name
.
Substring
(
0
,
fileInfo
.
Name
.
Length
-
".prefab"
.
Length
));
// Cross checks
foreach
(
string
prefab
in
xmlPrefabList
.
Except
(
resPrefabList
).
ToList
())
Debug
.
LogError
(
prefab
+
" is missing in the /Resorces/Prefabs folder but used in Levels.xml"
);
foreach
(
string
prefab
in
resPrefabList
.
Except
(
xmlPrefabList
).
ToList
())
Debug
.
Log
(
prefab
+
" exists in the /Resorces/Prefabs folder but not used in Levels.xml"
);
Debug
.
Log
(
"Cross Check Done"
);
}
//Hallo Tim und Philipp. Die Datei kuckt nur ob irgendwas mit den Prefabs komisch ist.
// cross check /Resources/Prefabs and Levels.xml if there are any item prefabs that exist only in one but not the other
public
void
crossCheck
()
{
// create a list of /Resources/Prefabs for resources and Levels.Xml
List
<
string
>
resPrefabList
=
new
List
<
string
>();
List
<
string
>
xmlPrefabList
=
new
List
<
string
>();
// Get prefabs from Levels.xml
DeserializedLevels
deserializedLevels
=
XmlIO
.
LoadXml
<
DeserializedLevels
>(
"Levels"
);
foreach
(
DeserializedLevels
.
Level
level
in
deserializedLevels
.
levels
)
{
foreach
(
DeserializedLevels
.
Item
item
in
level
.
items
)
if
(!
xmlPrefabList
.
Contains
(
item
.
prefab
))
xmlPrefabList
.
Add
(
item
.
prefab
);
}
// Get prefabs from the /Resources/Prefabs folder
// get all child items in the /Resources/Prefabs folder
DirectoryInfo
dir
=
new
DirectoryInfo
(
"Assets/Resources/Prefabs"
);
FileInfo
[]
fileInfos
=
dir
.
GetFiles
(
"*.prefab"
);
fileInfos
.
Select
(
f
=>
f
.
FullName
).
ToArray
();
// Add each prefab's file name to prefabList and truncate the .prefab extension from the end
foreach
(
FileInfo
fileInfo
in
fileInfos
)
resPrefabList
.
Add
(
fileInfo
.
Name
.
Substring
(
0
,
fileInfo
.
Name
.
Length
-
".prefab"
.
Length
));
// Cross checks
foreach
(
string
prefab
in
xmlPrefabList
.
Except
(
resPrefabList
).
ToList
())
Debug
.
LogError
(
prefab
+
" is missing in the /Resorces/Prefabs folder but used in Levels.xml"
);
foreach
(
string
prefab
in
resPrefabList
.
Except
(
xmlPrefabList
).
ToList
())
Debug
.
Log
(
prefab
+
" exists in the /Resorces/Prefabs folder but not used in Levels.xml"
);
Debug
.
Log
(
"Cross Check Done"
);
}
}
Assets/Scripts/LevelManagement/DeserializedLevelsLoader.cs
View file @
c70aa22f
...
...
@@ -6,135 +6,135 @@ using UnityEngine;
public
class
DeserializedLevelsLoader
{
// Levels deserialized
private
DeserializedLevels
deserializedLevels
;
// Levels deserialized
private
DeserializedLevels
deserializedLevels
;
private
int
currentLevelIndex
=
0
;
private
int
currentSegmentIndex
=
0
;
private
int
currentLevelIndex
=
0
;
private
int
currentSegmentIndex
=
0
;
private
const
string
prefabsFolder
=
"Prefabs/"
;
private
const
string
prefabsFolder
=
"Prefabs/"
;
struct
ItemStruct
{
public
GameObject
prefab
;
public
float
x
;
public
float
y
;
public
float
rot
;
public
float
scalex
;
public
float
scaley
;
}
// Cache prefabs in prefabDict
Dictionary
<
string
,
GameObject
>
prefabPool
;
struct
ItemStruct
{
public
GameObject
prefab
;
public
float
x
;
public
float
y
;
public
float
rot
;
public
float
scalex
;
public
float
scaley
;
}
// Cache all items with locations
List
<
ItemStruct
>
sceneItemsList
;
// Cache prefabs in prefabDict
Dictionary
<
string
,
GameObject
>
prefabPool
;
Transform
parentOfXmlItems
;
public
const
string
xmlItemsGOName
=
"XmlItems"
;
// Cache all items with locations
List
<
ItemStruct
>
sceneItemsList
;
public
void
loadLevel
(
int
levelIndex
=
0
)
{
prefabPool
=
new
Dictionary
<
string
,
GameObject
>();
sceneItemsList
=
new
List
<
ItemStruct
>();
Transform
parentOfXmlItems
;
// if the XmlItems gameobject folder remained in the Hierarcy, then delete it
while
(
GameObject
.
Find
(
xmlItemsGOName
)
!=
null
)
MonoBehaviour
.
DestroyImmediate
(
GameObject
.
Find
(
xmlItemsGOName
));
parentOfXmlItems
=
new
GameObject
(
xmlItemsGOName
).
transform
;
public
const
string
xmlItemsGOName
=
"XmlItems"
;
deserializedLevels
=
XmlIO
.
LoadXml
<
DeserializedLevels
>(
"Levels"
);
public
void
loadLevel
(
int
levelIndex
=
0
)
{
prefabPool
=
new
Dictionary
<
string
,
GameObject
>();
sceneItemsList
=
new
List
<
ItemStruct
>();
// if startlevel is in the XML i.e. <Developer StartLevel="3" /> then get level from there
// otherwise start with level 1
currentLevelIndex
=
(
levelIndex
>
deserializedLevels
.
levels
.
Length
-
1
)
?
0
:
levelIndex
;
// if the XmlItems gameobject folder remained in the Hierarcy, then delete it
while
(
GameObject
.
Find
(
xmlItemsGOName
)
!=
null
)
MonoBehaviour
.
DestroyImmediate
(
GameObject
.
Find
(
xmlItemsGOName
))
;
parentOfXmlItems
=
new
GameObject
(
xmlItemsGOName
).
transform
;
DeserializedLevels
.
Level
currentLevel
=
deserializedLevels
.
levels
[
currentLevelIndex
];
sceneItemsList
.
Clear
();
deserializedLevels
=
XmlIO
.
LoadXml
<
DeserializedLevels
>(
"Levels"
);
// <Item prefab="Chair" x="1" y="10" rot="90" />
foreach
(
DeserializedLevels
.
Item
deserializedItem
in
currentLevel
.
items
)
{
// caching prefabString i.e. "phone"
string
prefabString
=
deserializedItem
.
prefab
;
// if the prefab in the item XmlNode has not been loaded then add it to the prefabsDict dictionary,
if
(!
prefabPool
.
ContainsKey
(
prefabString
))
{
// load prefab
GameObject
prefabObject
=
Resources
.
Load
(
prefabsFolder
+
prefabString
,
typeof
(
GameObject
))
as
GameObject
;
// if unsuccesful, error message and jump to next in the foreach loop
if
(
prefabObject
==
null
)
{
Debug
.
LogError
(
"Prefab \""
+
prefabString
+
"\" does not exists."
);
continue
;
}
// otherwise add to dictionary
prefabPool
.
Add
(
prefabString
,
prefabObject
);
}
ItemStruct
item
;
item
.
prefab
=
prefabPool
[
prefabString
];
item
.
x
=
toFloatZeroIfNull
(
deserializedItem
.
x
);
item
.
y
=
toFloatZeroIfNull
(
deserializedItem
.
y
);
item
.
rot
=
toFloatZeroIfNull
(
deserializedItem
.
rot
);
item
.
scalex
=
toFloatOneIfNull
(
deserializedItem
.
scalex
);
item
.
scaley
=
toFloatOneIfNull
(
deserializedItem
.
scaley
);
sceneItemsList
.
Add
(
item
);
}
// if startlevel is in the XML i.e. <Developer StartLevel="3" /> then get level from there
// otherwise start with level 1
currentLevelIndex
=
(
levelIndex
>
deserializedLevels
.
levels
.
Length
-
1
)
?
0
:
levelIndex
;
// Finally instantiate all items
foreach
(
ItemStruct
item
in
sceneItemsList
)
{
// TODO load height coordinate from a directory
GameObject
newGameObject
=
MonoBehaviour
.
Instantiate
(
item
.
prefab
)
as
GameObject
;
DeserializedLevels
.
Level
currentLevel
=
deserializedLevels
.
levels
[
currentLevelIndex
];
sceneItemsList
.
Clear
()
;
// set position
setPos2D
(
newGameObject
,
new
Vector2
(
item
.
x
,
item
.
y
));
// set rotation
setRot2D
(
newGameObject
,
item
.
rot
);
// <Item prefab="Chair" x="1" y="10" rot="90" />
foreach
(
DeserializedLevels
.
Item
deserializedItem
in
currentLevel
.
items
)
{
// caching prefabString i.e. "phone"
string
prefabString
=
deserializedItem
.
prefab
;
setScale2D
(
newGameObject
,
item
.
scalex
,
item
.
scaley
);
// if the prefab in the item XmlNode has not been loaded then add it to the prefabsDict dictionary,
if
(!
prefabPool
.
ContainsKey
(
prefabString
))
{
// load prefab
GameObject
prefabObject
=
Resources
.
Load
(
prefabsFolder
+
prefabString
,
typeof
(
GameObject
))
as
GameObject
;
// set parent
newGameObject
.
transform
.
parent
=
parentOfXmlItems
;
// if unsuccesful, error message and jump to next in the foreach loop
if
(
prefabObject
==
null
)
{
Debug
.
LogError
(
"Prefab \""
+
prefabString
+
"\" does not exists."
);
continue
;
}
}
// DONE, these are only helper functions below
// otherwise add to dictionary
prefabPool
.
Add
(
prefabString
,
prefabObject
);
}
// if no value then return zero or one, otherwise convert to float
float
toFloatZeroIfNull
(
string
value
)
{
return
value
==
null
?
0
:
float
.
Parse
(
value
);
}
float
toFloatOneIfNull
(
string
value
)
{
return
value
==
null
?
1
:
float
.
Parse
(
value
);
}
ItemStruct
item
;
item
.
prefab
=
prefabPool
[
prefabString
];
item
.
x
=
toFloatZeroIfNull
(
deserializedItem
.
x
);
item
.
y
=
toFloatZeroIfNull
(
deserializedItem
.
y
);
item
.
rot
=
toFloatZeroIfNull
(
deserializedItem
.
rot
);
item
.
scalex
=
toFloatOneIfNull
(
deserializedItem
.
scalex
);
item
.
scaley
=
toFloatOneIfNull
(
deserializedItem
.
scaley
);
void
setPos2D
(
GameObject
g
,
Vector2
pos
)
{
g
.
transform
.
position
=
new
Vector2
(
pos
.
x
,
pos
.
y
);
sceneItemsList
.
Add
(
item
);
}
void
setRot2D
(
GameObject
g
,
float
rot
)
// Finally instantiate all items
foreach
(
ItemStruct
item
in
sceneItemsList
)
{
//Debug.Log("Set rotation of " + g.name + " to " + rot);
Quaternion
rotation
=
Quaternion
.
identity
;
rotation
.
eulerAngles
=
new
Vector3
(
0
,
0
,
rot
);
g
.
transform
.
localRotation
=
rotation
;
}
void
setScale2D
(
GameObject
g
,
float
scaleX
,
float
scaleY
)
{
g
.
transform
.
localScale
=
new
Vector2
(
scaleX
,
scaleY
);
// TODO load height coordinate from a directory
GameObject
newGameObject
=
MonoBehaviour
.
Instantiate
(
item
.
prefab
)
as
GameObject
;
// set position
setPos2D
(
newGameObject
,
new
Vector2
(
item
.
x
,
item
.
y
));
// set rotation
setRot2D
(
newGameObject
,
item
.
rot
);
setScale2D
(
newGameObject
,
item
.
scalex
,
item
.
scaley
);
// set parent
newGameObject
.
transform
.
parent
=
parentOfXmlItems
;
}
}
// DONE, these are only helper functions below
// if no value then return zero or one, otherwise convert to float
float
toFloatZeroIfNull
(
string
value
)
{
return
value
==
null
?
0
:
float
.
Parse
(
value
);
}
float
toFloatOneIfNull
(
string
value
)
{
return
value
==
null
?
1
:
float
.
Parse
(
value
);
}
void
setPos2D
(
GameObject
g
,
Vector2
pos
)
{
g
.
transform
.
position
=
new
Vector2
(
pos
.
x
,
pos
.
y
);
}
void
setRot2D
(
GameObject
g
,
float
rot
)
{
//Debug.Log("Set rotation of " + g.name + " to " + rot);
Quaternion
rotation
=
Quaternion
.
identity
;
rotation
.
eulerAngles
=
new
Vector3
(
0
,
0
,
rot
);
g
.
transform
.
localRotation
=
rotation
;
}
void
setScale2D
(
GameObject
g
,
float
scaleX
,
float
scaleY
)
{
g
.
transform
.
localScale
=
new
Vector2
(
scaleX
,
scaleY
);
}
}
Assets/Scripts/LevelManagement/DeserializedLevelsSaver.cs
View file @
c70aa22f
...
...
@@ -4,68 +4,68 @@ using System.Xml;
public
class
DeserializedLevelsSaver
{
public
const
string
xmlItemsToExportGOName
=
"XmlItemsToExport"
;
public
void
saveExportItems
()
{
// Create XmlItemsToExport if does not exist yet
if
(
GameObject
.
Find
(
xmlItemsToExportGOName
)
==
null
)
new
GameObject
(
xmlItemsToExportGOName
);
GameObject
xmlItemsToExportGO
=
GameObject
.
Find
(
xmlItemsToExportGOName
);
var
xmlItemsToExportGOchildren
=
xmlItemsToExportGO
.
GetComponentsInChildren
<
Transform
>();
// Check if any children exist
if
(
xmlItemsToExportGOchildren
.
Length
==
0
)
Debug
.
LogError
(
"Add the prefabs to "
+
xmlItemsToExportGOName
);
DeserializedLevels
.
Level
levelXml
=
new
DeserializedLevels
.
Level
();
int
n
=
0
;
// count number of children skipping sub-items
foreach
(
Transform
item
in
xmlItemsToExportGOchildren
)
if
(
item
.
parent
==
xmlItemsToExportGO
.
transform
)
n
++;
// the items array should have that many elements
levelXml
.
items
=
new
DeserializedLevels
.
Item
[
n
];
// use i for counting items, i would be equal (one more to be precise) to n at the end of the cycle
int
i
=
0
;
// cycle through the children again and add them to items
foreach
(
Transform
item
in
xmlItemsToExportGOchildren
)
{
// skip sub-items
if
(
item
.
parent
!=
xmlItemsToExportGO
.
transform
)
continue
;
levelXml
.
items
[
i
]
=
new
DeserializedLevels
.
Item
();
levelXml
.
items
[
i
].
prefab
=
item
.
name
;
levelXml
.
items
[
i
].
x
=
toStringNullIfZero
(
item
.
transform
.
position
.
x
);
levelXml
.
items
[
i
].
y
=
toStringNullIfZero
(
item
.
transform
.
position
.
y
);
levelXml
.
items
[
i
].
rot
=
toStringNullIfZero
(
item
.
localRotation
.
eulerAngles
.
z
);
levelXml
.
items
[
i
].
scalex
=
toStringNullIfOne
(
item
.
localScale
.
x
);
levelXml
.
items
[
i
].
scaley
=
toStringNullIfOne
(
item
.
localScale
.
y
);
// increase i for the next cycle
i
++;
}
// Export just one level
DeserializedLevels
levelsXmlToExport
=
new
DeserializedLevels
();
levelsXmlToExport
.
levels
=
new
DeserializedLevels
.
Level
[
1
];
levelsXmlToExport
.
levels
[
0
]
=
levelXml
;
XmlIO
.
SaveXml
<
DeserializedLevels
>(
levelsXmlToExport
,
"./Assets/Resources/"
+
xmlItemsToExportGOName
+
".xml"
);
}
string
toStringNullIfZero
(
float
num
)
{
return
num
==
0
?
null
:
mathRound
(
num
,
2
).
ToString
();
}
string
toStringNullIfOne
(
float
num
)
{
return
num
==
1
?
null
:
mathRound
(
num
,
2
).
ToString
();
}
float
mathRound
(
float
round
,
int
decimals
)
{
return
Mathf
.
Round
(
round
*
Mathf
.
Pow
(
10
,
decimals
))
/
Mathf
.
Pow
(
10
,
decimals
);
}
public
const
string
xmlItemsToExportGOName
=
"XmlItemsToExport"
;
public
void
saveExportItems
()
{
// Create XmlItemsToExport if does not exist yet
if
(
GameObject
.
Find
(
xmlItemsToExportGOName
)
==
null
)
new
GameObject
(
xmlItemsToExportGOName
);
GameObject
xmlItemsToExportGO
=
GameObject
.
Find
(
xmlItemsToExportGOName
);
var
xmlItemsToExportGOchildren
=
xmlItemsToExportGO
.
GetComponentsInChildren
<
Transform
>();
// Check if any children exist
if
(
xmlItemsToExportGOchildren
.
Length
==
0
)
Debug
.
LogError
(
"Add the prefabs to "
+
xmlItemsToExportGOName
);
DeserializedLevels
.
Level
levelXml
=
new
DeserializedLevels
.
Level
();
int
n
=
0
;
// count number of children skipping sub-items
foreach
(
Transform
item
in
xmlItemsToExportGOchildren
)
if
(
item
.
parent
==
xmlItemsToExportGO
.
transform
)
n
++;
// the items array should have that many elements
levelXml
.
items
=
new
DeserializedLevels
.
Item
[
n
];
// use i for counting items, i would be equal (one more to be precise) to n at the end of the cycle
int
i
=
0
;
// cycle through the children again and add them to items
foreach
(
Transform
item
in
xmlItemsToExportGOchildren
)
{
// skip sub-items
if
(
item
.
parent
!=
xmlItemsToExportGO
.
transform
)
continue
;
levelXml
.
items
[
i
]
=
new
DeserializedLevels
.
Item
();
levelXml
.
items
[
i
].
prefab
=
item
.
name
;
levelXml
.
items
[
i
].
x
=
toStringNullIfZero
(
item
.
transform
.
position
.
x
);
levelXml
.
items
[
i
].
y
=
toStringNullIfZero
(
item
.
transform
.
position
.
y
);
levelXml
.
items
[
i
].
rot
=
toStringNullIfZero
(
item
.
localRotation
.
eulerAngles
.
z
);
levelXml
.
items
[
i
].
scalex
=
toStringNullIfOne
(
item
.
localScale
.
x
);
levelXml
.
items
[
i
].
scaley
=
toStringNullIfOne
(
item
.
localScale
.
y
);
// increase i for the next cycle
i
++;
}
// Export just one level
DeserializedLevels
levelsXmlToExport
=
new
DeserializedLevels
();
levelsXmlToExport
.
levels
=
new
DeserializedLevels
.
Level
[
1
];
levelsXmlToExport
.
levels
[
0
]
=
levelXml
;
XmlIO
.
SaveXml
<
DeserializedLevels
>(
levelsXmlToExport
,
"./Assets/Resources/"
+
xmlItemsToExportGOName
+
".xml"
);
}
string
toStringNullIfZero
(
float
num
)
{
return
num
==
0
?
null
:
mathRound
(
num
,
2
).
ToString
();
}
string
toStringNullIfOne
(
float
num
)
{
return
num
==
1
?
null
:
mathRound
(
num
,
2
).
ToString
();
}
float
mathRound
(
float
round
,
int
decimals
)
{
return
Mathf
.
Round
(
round
*
Mathf
.
Pow
(
10
,
decimals
))
/
Mathf
.
Pow
(
10
,
decimals
);
}
}
Assets/Scripts/LevelManagement/XmlIO.cs
View file @
c70aa22f
...
...
@@ -5,25 +5,25 @@ using UnityEngine; // necessary for TextAsset
public
static
class
XmlIO
{
public
static
void
SaveXml
<
T
>
(
this
object
deserializedXml
,
string
path
)
where
T
:
class
{
using
(
var
stream
=
new
FileStream
(
path
,
FileMode
.
Create
))
{
var
s
=
new
XmlSerializer
(
typeof
(
T
));
s
.
Serialize
(
stream
,
deserializedXml
);
}
}
public
static
void
SaveXml
<
T
>
(
this
object
deserializedXml
,
string
path
)
where
T
:
class
{
using
(
var
stream
=
new
FileStream
(
path
,
FileMode
.
Create
))
{
var
s
=
new
XmlSerializer
(
typeof
(
T
));
s
.
Serialize
(
stream
,
deserializedXml
);
}
}
public
static
T
LoadXml
<
T
>(
string
textAssetName
)
where
T
:
class
{
TextAsset
xmlTextAsset
=
(
TextAsset
)
Resources
.
Load
(
textAssetName
,
typeof
(
TextAsset
));
public
static
T
LoadXml
<
T
>(
string
textAssetName
)
where
T
:
class
{
TextAsset
xmlTextAsset
=
(
TextAsset
)
Resources
.
Load
(
textAssetName
,
typeof
(
TextAsset
));
using
(
var
stream
=
new
StringReader
(
xmlTextAsset
.
text
))
{
var
s
=
new
XmlSerializer
(
typeof
(
T
));
T
deserializedXml
=
s
.
Deserialize
(
stream
)
as
T
;
return
deserializedXml
;
}
}
using
(
var
stream
=
new
StringReader
(
xmlTextAsset
.
text
))
{
var
s
=
new
XmlSerializer
(
typeof
(
T
));
T
deserializedXml
=
s
.
Deserialize
(
stream
)
as
T
;
return
deserializedXml
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment