Alexei #5
8
Assets/Prefab/Items.meta
Normal file
8
Assets/Prefab/Items.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 89412f229cb2738409fadd58645601f8
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
126
Assets/Prefab/Items/Tower.prefab
Normal file
126
Assets/Prefab/Items/Tower.prefab
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &4774919592469818776
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5262522953580885794}
|
||||||
|
- component: {fileID: 9126517344989362311}
|
||||||
|
- component: {fileID: 6432002706622696525}
|
||||||
|
- component: {fileID: 8015579614070857994}
|
||||||
|
- component: {fileID: 5879628246065515362}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Tower
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &5262522953580885794
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4774919592469818776}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 0.3, y: 0.3, z: 0.3}
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 0
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!33 &9126517344989362311
|
||||||
|
MeshFilter:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4774919592469818776}
|
||||||
|
m_Mesh: {fileID: 688505742851261164, guid: a6c1d0254e365a4489cf81b74d608b43, type: 3}
|
||||||
|
--- !u!23 &6432002706622696525
|
||||||
|
MeshRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4774919592469818776}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 1
|
||||||
|
m_ReceiveShadows: 1
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 2
|
||||||
|
m_RayTraceProcedural: 0
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 2100000, guid: 8720b7cac4364f14f961a3b6968c9beb, type: 2}
|
||||||
|
m_StaticBatchInfo:
|
||||||
|
firstSubMesh: 0
|
||||||
|
subMeshCount: 0
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_LightProbeVolumeOverride: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_ReceiveGI: 1
|
||||||
|
m_PreserveUVs: 0
|
||||||
|
m_IgnoreNormalsForChartDetection: 0
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_StitchLightmapSeams: 1
|
||||||
|
m_SelectedEditorRenderState: 3
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingLayer: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_AdditionalVertexStreams: {fileID: 0}
|
||||||
|
--- !u!114 &8015579614070857994
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4774919592469818776}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 5db196e1099b97246bde07a348189567, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_weapon:
|
||||||
|
name: Tower
|
||||||
|
icon: {fileID: 4774919592469818776}
|
||||||
|
objectToThrow: {fileID: 4746165193704193263, guid: 4e7523811a052fd46acf941fc69c8c98,
|
||||||
|
type: 3}
|
||||||
|
VFXGameObject: {fileID: 2957420090356197408, guid: 5d1244f7b80cadd428a70173a01ce889,
|
||||||
|
type: 3}
|
||||||
|
manaCost: 0
|
||||||
|
damage: 10
|
||||||
|
speed: 10
|
||||||
|
disnatce: 10
|
||||||
|
reloadTime: 3
|
||||||
|
shots: 3
|
||||||
|
shotSound: {fileID: 8300000, guid: 9ea918c6c23577f4e885a8490d2f2046, type: 3}
|
||||||
|
hitSound: {fileID: 8300000, guid: 6c42231c18643dc4d9d8f8d15bc4735b, type: 3}
|
||||||
|
--- !u!136 &5879628246065515362
|
||||||
|
CapsuleCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4774919592469818776}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IsTrigger: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
m_Radius: 31.906784
|
||||||
|
m_Height: 63.813572
|
||||||
|
m_Direction: 1
|
||||||
|
m_Center: {x: 0, y: 0, z: 0}
|
7
Assets/Prefab/Items/Tower.prefab.meta
Normal file
7
Assets/Prefab/Items/Tower.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0dbed8f974ba44a42af9d8fcae504ce0
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
3
Assets/Resources/1/Pillar 01.FBX
Normal file
3
Assets/Resources/1/Pillar 01.FBX
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:37ff580b2ac54350270f8fdd11d105d68b35b02b990899ad64863f566bed2e4d
|
||||||
|
size 182837
|
102
Assets/Resources/1/Pillar 01.FBX.meta
Normal file
102
Assets/Resources/1/Pillar 01.FBX.meta
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a6c1d0254e365a4489cf81b74d608b43
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 20200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
motionNodeName:
|
||||||
|
rigImportErrors:
|
||||||
|
rigImportWarnings:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -14,8 +14,6 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
width: 25
|
width: 25
|
||||||
height: 50
|
height: 50
|
||||||
defaultColor: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
touchedColor: {r: 1, g: 0, b: 1, a: 1}
|
|
||||||
hexCaptureManaCost: 10
|
hexCaptureManaCost: 10
|
||||||
cellPrefab: {fileID: 1661242500252451528, guid: bcea5b4a96735bd4b936f8f3fefcc688,
|
cellPrefab: {fileID: 1661242500252451528, guid: bcea5b4a96735bd4b936f8f3fefcc688,
|
||||||
type: 3}
|
type: 3}
|
||||||
@ -23,24 +21,28 @@ MonoBehaviour:
|
|||||||
type: 3}
|
type: 3}
|
||||||
CoordinatesCanvas: {fileID: 4726489279989878083, guid: f31e0880dd078104bb31dc0fd7ef9f19,
|
CoordinatesCanvas: {fileID: 4726489279989878083, guid: f31e0880dd078104bb31dc0fd7ef9f19,
|
||||||
type: 3}
|
type: 3}
|
||||||
DefaultTexture: {fileID: 2800000, guid: 983242f4b4db7a841af48234cf0021b8, type: 3}
|
|
||||||
colors:
|
colors:
|
||||||
- _unitColor: 2
|
- _unitColor: 2
|
||||||
_texture: {fileID: 2800000, guid: 983242f4b4db7a841af48234cf0021b8, type: 3}
|
_texture: {fileID: 2800000, guid: 983242f4b4db7a841af48234cf0021b8, type: 3}
|
||||||
_vfxPrefab: {fileID: 0}
|
_vfxPrefab: {fileID: 0}
|
||||||
|
_buildinTexture: {fileID: 0}
|
||||||
- _unitColor: 0
|
- _unitColor: 0
|
||||||
_texture: {fileID: 2800000, guid: 0298dfcb0756f534a9a125d510461c7a, type: 3}
|
_texture: {fileID: 2800000, guid: 0298dfcb0756f534a9a125d510461c7a, type: 3}
|
||||||
_vfxPrefab: {fileID: 8021195855904498788, guid: 2f6d0540c8fd7bb46b356ff86962379c,
|
_vfxPrefab: {fileID: 8021195855904498788, guid: 2f6d0540c8fd7bb46b356ff86962379c,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
_buildinTexture: {fileID: 2800000, guid: 0298dfcb0756f534a9a125d510461c7a, type: 3}
|
||||||
- _unitColor: 1
|
- _unitColor: 1
|
||||||
_texture: {fileID: 2800000, guid: 3b75368df991b164583e8cede390e24e, type: 3}
|
_texture: {fileID: 2800000, guid: 3b75368df991b164583e8cede390e24e, type: 3}
|
||||||
_vfxPrefab: {fileID: 442387583353148024, guid: 53959bc898e9a644daad0282881d596a,
|
_vfxPrefab: {fileID: 442387583353148024, guid: 53959bc898e9a644daad0282881d596a,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
_buildinTexture: {fileID: 2800000, guid: 3b75368df991b164583e8cede390e24e, type: 3}
|
||||||
- _unitColor: 3
|
- _unitColor: 3
|
||||||
_texture: {fileID: 2800000, guid: 1a76a79d5a83143479c76f4f37c4b896, type: 3}
|
_texture: {fileID: 2800000, guid: 1a76a79d5a83143479c76f4f37c4b896, type: 3}
|
||||||
_vfxPrefab: {fileID: 5732852186060375560, guid: 54d847a18c62f57479c53469d4398ceb,
|
_vfxPrefab: {fileID: 5732852186060375560, guid: 54d847a18c62f57479c53469d4398ceb,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
_buildinTexture: {fileID: 2800000, guid: 1a76a79d5a83143479c76f4f37c4b896, type: 3}
|
||||||
- _unitColor: 4
|
- _unitColor: 4
|
||||||
_texture: {fileID: 2800000, guid: 779719648deedb4478ddebb3b81751ef, type: 3}
|
_texture: {fileID: 2800000, guid: 779719648deedb4478ddebb3b81751ef, type: 3}
|
||||||
_vfxPrefab: {fileID: 1651852338557341938, guid: fa6c1fc3da7c8d24c85a88b00cf598d4,
|
_vfxPrefab: {fileID: 1651852338557341938, guid: fa6c1fc3da7c8d24c85a88b00cf598d4,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
_buildinTexture: {fileID: 2800000, guid: 779719648deedb4478ddebb3b81751ef, type: 3}
|
||||||
|
@ -13,12 +13,26 @@ MonoBehaviour:
|
|||||||
m_Name: ItemData
|
m_Name: ItemData
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
itemInfos:
|
itemInfos:
|
||||||
- prefab: {fileID: 3197816592181874056, guid: 2704c4f795b0d7748a3e3fa53be4d893,
|
- prefab: {fileID: 919132149155446097, guid: 4166c606d638610418dc9ead794d697b, type: 3}
|
||||||
type: 3}
|
|
||||||
isInstantUse: 0
|
isInstantUse: 0
|
||||||
type: Tower
|
type: Tower
|
||||||
icon: {fileID: 21300000, guid: 543c4732bd2d47a41bdbbf2156eb358c, type: 3}
|
icon: {fileID: 21300000, guid: 543c4732bd2d47a41bdbbf2156eb358c, type: 3}
|
||||||
spawnablePrefab: {fileID: 1175122412763585952, guid: ca39954219550f949aeeecf95f25f3d1,
|
spawnablePrefab: {fileID: 4774919592469818776, guid: 0dbed8f974ba44a42af9d8fcae504ce0,
|
||||||
type: 3}
|
type: 3}
|
||||||
|
values:
|
||||||
|
- prefab: {fileID: 3197816592181874056, guid: 2704c4f795b0d7748a3e3fa53be4d893,
|
||||||
|
type: 3}
|
||||||
|
isInstantUse: 1
|
||||||
|
type: AttackBonus
|
||||||
|
icon: {fileID: 21300000, guid: caf8bc0311dd2fc4ca1528a82a063754, type: 3}
|
||||||
|
spawnablePrefab: {fileID: 0}
|
||||||
|
values: 030000000f000000
|
||||||
|
- prefab: {fileID: 8639522512577941448, guid: 7b6a7f64e52da514d88aa97ad8f863df,
|
||||||
|
type: 3}
|
||||||
|
isInstantUse: 1
|
||||||
|
type: DefenceBonus
|
||||||
|
icon: {fileID: 21300000, guid: 35be128594dcdce48b5d8e5317b38ed9, type: 3}
|
||||||
|
spawnablePrefab: {fileID: 0}
|
||||||
|
values: 0a0000001e000000
|
||||||
fromTimeSpawn: 3
|
fromTimeSpawn: 3
|
||||||
toTimeSpawn: 10
|
toTimeSpawn: 10
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Timers;
|
||||||
using CamControl;
|
using CamControl;
|
||||||
using Chars;
|
using Chars;
|
||||||
|
using DefaultNamespace;
|
||||||
using GameUI;
|
using GameUI;
|
||||||
using HexFiled;
|
using HexFiled;
|
||||||
using Items;
|
using Items;
|
||||||
using Units;
|
using Units;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Weapons;
|
using Weapons;
|
||||||
|
using Object = UnityEngine.Object;
|
||||||
using Random = UnityEngine.Random;
|
using Random = UnityEngine.Random;
|
||||||
|
|
||||||
namespace Controller
|
namespace Controller
|
||||||
@ -16,14 +19,16 @@ namespace Controller
|
|||||||
{
|
{
|
||||||
public GameInit(Controllers controllers, Data.Data data)
|
public GameInit(Controllers controllers, Data.Data data)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
new GameObject("Timer").AddComponent<TimerHelper>();
|
||||||
|
|
||||||
var hexGrid = new HexGrid(data.FieldData);
|
var hexGrid = new HexGrid(data.FieldData);
|
||||||
new MusicController();
|
new MusicController();
|
||||||
MusicController.Instance.SetMusicData(data.MusicData);
|
MusicController.Instance.SetMusicData(data.MusicData);
|
||||||
controllers.Add(hexGrid);
|
controllers.Add(hexGrid);
|
||||||
|
|
||||||
List<Type> types =
|
|
||||||
new List<Type>() { typeof(Tower) };
|
ItemFabric itemFabric = new ItemFabric(data.ItemsData, SetUpItems());
|
||||||
ItemFabric itemFabric = new ItemFabric(data.ItemsData, types);
|
|
||||||
controllers.Add(itemFabric);
|
controllers.Add(itemFabric);
|
||||||
|
|
||||||
UIController uiController = new UIController(data.UIData);
|
UIController uiController = new UIController(data.UIData);
|
||||||
@ -35,7 +40,8 @@ namespace Controller
|
|||||||
if (unit.isPlayer)
|
if (unit.isPlayer)
|
||||||
{
|
{
|
||||||
player = new Unit(unit, JsonUtility.FromJson<Weapon>(data.ChosenWeapon), hexGrid);
|
player = new Unit(unit, JsonUtility.FromJson<Weapon>(data.ChosenWeapon), hexGrid);
|
||||||
PlayerControl playerControl = new PlayerControl(player, uiController.PlayerControlView, uiController.PlayerInventoryView);
|
PlayerControl playerControl = new PlayerControl(player, uiController.PlayerControlView,
|
||||||
|
uiController.PlayerInventoryView);
|
||||||
controllers.Add(playerControl);
|
controllers.Add(playerControl);
|
||||||
CameraControl cameraControl =
|
CameraControl cameraControl =
|
||||||
new CameraControl(Camera.main, data.CameraData);
|
new CameraControl(Camera.main, data.CameraData);
|
||||||
@ -46,7 +52,8 @@ namespace Controller
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var enemy = new Unit(unit, data.WeaponsData.WeaponsList[Random.Range(0,data.WeaponsData.WeaponsList.Count - 1)], hexGrid);
|
var enemy = new Unit(unit,
|
||||||
|
data.WeaponsData.WeaponsList[Random.Range(0, data.WeaponsData.WeaponsList.Count - 1)], hexGrid);
|
||||||
var enemyController = new EnemyController(unit, enemy);
|
var enemyController = new EnemyController(unit, enemy);
|
||||||
controllers.Add(enemyController);
|
controllers.Add(enemyController);
|
||||||
units.Add(enemy);
|
units.Add(enemy);
|
||||||
@ -62,9 +69,11 @@ namespace Controller
|
|||||||
hexGrid.OnHexPainted += paintedController.SetHexColors;
|
hexGrid.OnHexPainted += paintedController.SetHexColors;
|
||||||
|
|
||||||
hexGrid.OnHexPainted += itemFabric.UpdateCellToOpenList;
|
hexGrid.OnHexPainted += itemFabric.UpdateCellToOpenList;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Type> SetUpItems()
|
||||||
|
{
|
||||||
|
return new List<Type>() { typeof(Tower), typeof(AttackBonus), typeof(DefenceBonus) };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -27,6 +27,8 @@ namespace Data
|
|||||||
[SerializeField] private string type;
|
[SerializeField] private string type;
|
||||||
[SerializeField] private Sprite icon;
|
[SerializeField] private Sprite icon;
|
||||||
[SerializeField] private GameObject spawnablePrefab;
|
[SerializeField] private GameObject spawnablePrefab;
|
||||||
|
[SerializeField] private int[] values;
|
||||||
|
[SerializeField][Range(0,1)] private float spawnChance;
|
||||||
public GameObject Prefab => prefab;
|
public GameObject Prefab => prefab;
|
||||||
public string Type => type;
|
public string Type => type;
|
||||||
|
|
||||||
@ -35,5 +37,7 @@ namespace Data
|
|||||||
public GameObject SpawnablePrefab => spawnablePrefab;
|
public GameObject SpawnablePrefab => spawnablePrefab;
|
||||||
|
|
||||||
public bool IsInstanceUse => isInstantUse;
|
public bool IsInstanceUse => isInstantUse;
|
||||||
|
public int[] Values => values;
|
||||||
|
public float SpawnChance => spawnChance;
|
||||||
}
|
}
|
||||||
}
|
}
|
50
Assets/Scripts/DirectionHelper.cs
Normal file
50
Assets/Scripts/DirectionHelper.cs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
using System;
|
||||||
|
using HexFiled;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DefaultNamespace
|
||||||
|
{
|
||||||
|
public static class DirectionHelper
|
||||||
|
{
|
||||||
|
public static Vector3 DirectionTo(Vector3 a, Vector3 b)
|
||||||
|
{
|
||||||
|
return (b - a).normalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HexDirection VectorToDirection(Vector2 dir)
|
||||||
|
{
|
||||||
|
if (dir.x >= 0 && dir.y <= 1 && dir.x <= 1 && dir.y >= 0.5)
|
||||||
|
{
|
||||||
|
return HexDirection.NE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Math.Abs(dir.x - 1f) < 0.2 && dir.y <= 0.5 && dir.y >= -0.5)
|
||||||
|
{
|
||||||
|
return HexDirection.E;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir.x <= 1 && dir.y <= -0.5 && dir.x >= 0 && dir.y >= -1)
|
||||||
|
{
|
||||||
|
return HexDirection.SE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir.x <= 0 && dir.y >= -1 && dir.x >= -1 && dir.y <= -0.5)
|
||||||
|
{
|
||||||
|
return HexDirection.SW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Math.Abs(dir.x - (-1f)) < 0.2 && dir.y >= -0.5 && dir.y <= 0.5)
|
||||||
|
{
|
||||||
|
return HexDirection.W;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir.x >= -1 && dir.y >= 0.5 && dir.x <= 0 && dir.y <= 1)
|
||||||
|
{
|
||||||
|
return HexDirection.NW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return HexDirection.W;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
3
Assets/Scripts/DirectionHelper.cs.meta
Normal file
3
Assets/Scripts/DirectionHelper.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fc19bb5576de42c89aa7aae62e2c3552
|
||||||
|
timeCreated: 1641323470
|
@ -32,12 +32,14 @@ public class GameMenuView : MonoBehaviour
|
|||||||
|
|
||||||
private void ShowMenu()
|
private void ShowMenu()
|
||||||
{
|
{
|
||||||
|
DOTween.PauseAll();
|
||||||
menu.SetActive(true);
|
menu.SetActive(true);
|
||||||
Time.timeScale = 0f;
|
Time.timeScale = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HideMenu()
|
private void HideMenu()
|
||||||
{
|
{
|
||||||
|
DOTween.PlayAll();
|
||||||
Time.timeScale = 1f;
|
Time.timeScale = 1f;
|
||||||
menu.SetActive(false);
|
menu.SetActive(false);
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ public class PlayerInventoryView : MonoBehaviour
|
|||||||
var button = _freeButtons.Dequeue();
|
var button = _freeButtons.Dequeue();
|
||||||
_dictionary.Add(item, button);
|
_dictionary.Add(item, button);
|
||||||
button.gameObject.SetActive(true);
|
button.gameObject.SetActive(true);
|
||||||
|
button.image.sprite = item.Icon;
|
||||||
button.onClick.AddListener(() =>
|
button.onClick.AddListener(() =>
|
||||||
{
|
{
|
||||||
if (item.IsInstantUse)
|
if (item.IsInstantUse)
|
||||||
@ -59,6 +60,7 @@ public class PlayerInventoryView : MonoBehaviour
|
|||||||
item.Invoke(SwitchButton);
|
item.Invoke(SwitchButton);
|
||||||
OnItemInvoked?.Invoke(item);
|
OnItemInvoked?.Invoke(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,11 +9,15 @@ namespace HexFiled
|
|||||||
[SerializeField] private UnitColor _unitColor;
|
[SerializeField] private UnitColor _unitColor;
|
||||||
[SerializeField] private Texture _texture;
|
[SerializeField] private Texture _texture;
|
||||||
[SerializeField] private GameObject _vfxPrefab;
|
[SerializeField] private GameObject _vfxPrefab;
|
||||||
|
[SerializeField] private Texture _buildinTexture;
|
||||||
|
|
||||||
public UnitColor UnitColor => _unitColor;
|
public UnitColor UnitColor => _unitColor;
|
||||||
public Texture Texture => _texture;
|
public Texture Texture => _texture;
|
||||||
|
public Texture BuildingTexture => _buildinTexture;
|
||||||
public GameObject VFXPrefab => _vfxPrefab;
|
public GameObject VFXPrefab => _vfxPrefab;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public bool Equals(CellColor obj)
|
public bool Equals(CellColor obj)
|
||||||
{
|
{
|
||||||
return obj._unitColor == _unitColor;
|
return obj._unitColor == _unitColor;
|
||||||
|
@ -16,7 +16,6 @@ namespace HexFiled
|
|||||||
private Item _item;
|
private Item _item;
|
||||||
private UnitColor _color;
|
private UnitColor _color;
|
||||||
private MeshRenderer _renderer;
|
private MeshRenderer _renderer;
|
||||||
private Dictionary<UnitColor, CellColor> _cellColor;
|
|
||||||
|
|
||||||
public UnitColor Color => _color;
|
public UnitColor Color => _color;
|
||||||
|
|
||||||
@ -40,10 +39,6 @@ namespace HexFiled
|
|||||||
return neighbors.ToList();
|
return neighbors.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDictionary(Dictionary<UnitColor, CellColor> colors)
|
|
||||||
{
|
|
||||||
_cellColor = colors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HexCell GetNeighbor(HexDirection direction)
|
public HexCell GetNeighbor(HexDirection direction)
|
||||||
{
|
{
|
||||||
@ -61,15 +56,15 @@ namespace HexFiled
|
|||||||
if (color == _color) return;
|
if (color == _color) return;
|
||||||
if (color == UnitColor.GREY)
|
if (color == UnitColor.GREY)
|
||||||
{
|
{
|
||||||
_renderer.material.mainTexture = _cellColor[color].Texture;
|
_renderer.material.mainTexture = HexGrid.Colors[color].Texture;
|
||||||
_color = color;
|
_color = color;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_renderer.material.mainTexture = _cellColor[color].Texture;
|
_renderer.material.mainTexture = HexGrid.Colors[color].Texture;
|
||||||
|
|
||||||
_color = color;
|
_color = color;
|
||||||
Instantiate(_cellColor[color].VFXPrefab, transform);
|
Instantiate(HexGrid.Colors[color].VFXPrefab, transform);
|
||||||
onHexPainted?.Invoke(this);
|
onHexPainted?.Invoke(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,15 +17,17 @@ namespace HexFiled
|
|||||||
private HexCell[] _cells;
|
private HexCell[] _cells;
|
||||||
private Canvas _gridCanvas;
|
private Canvas _gridCanvas;
|
||||||
private GameObject _baseGameObject;
|
private GameObject _baseGameObject;
|
||||||
private Dictionary<UnitColor, CellColor> _colors;
|
private static Dictionary<UnitColor, CellColor> _colors;
|
||||||
private float _hexDistance;
|
private static float _hexDistance;
|
||||||
private int _hexCaptureCost;
|
private int _hexCaptureCost;
|
||||||
|
|
||||||
public float HexDistance => _hexDistance;
|
public static float HexDistance => _hexDistance;
|
||||||
public Action<HexCell> OnHexPainted;
|
public Action<HexCell> OnHexPainted;
|
||||||
public Action OnGridLoaded;
|
public Action OnGridLoaded;
|
||||||
public int HexCaptureCost => _hexCaptureCost;
|
public int HexCaptureCost => _hexCaptureCost;
|
||||||
|
|
||||||
|
public static Dictionary<UnitColor, CellColor> Colors => _colors;
|
||||||
|
|
||||||
public HexGrid(FieldData fieldData)
|
public HexGrid(FieldData fieldData)
|
||||||
{
|
{
|
||||||
_hexCaptureCost = fieldData.hexCaptureManaCost;
|
_hexCaptureCost = fieldData.hexCaptureManaCost;
|
||||||
@ -63,7 +65,6 @@ namespace HexFiled
|
|||||||
position.z = z * (HexMetrics.outerRadius * 1.5f);
|
position.z = z * (HexMetrics.outerRadius * 1.5f);
|
||||||
var cellGO = Object.Instantiate(_cellPrefab);
|
var cellGO = Object.Instantiate(_cellPrefab);
|
||||||
HexCell cell = _cells[i] = cellGO.GetComponent<HexCell>();
|
HexCell cell = _cells[i] = cellGO.GetComponent<HexCell>();
|
||||||
cell.SetDictionary(_colors);
|
|
||||||
cell.PaintHex(UnitColor.GREY);
|
cell.PaintHex(UnitColor.GREY);
|
||||||
cell.transform.SetParent(_baseGameObject.transform, false);
|
cell.transform.SetParent(_baseGameObject.transform, false);
|
||||||
cell.transform.localPosition = position;
|
cell.transform.localPosition = position;
|
||||||
|
28
Assets/Scripts/Items/AttackBonus.cs
Normal file
28
Assets/Scripts/Items/AttackBonus.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using Data;
|
||||||
|
using HexFiled;
|
||||||
|
|
||||||
|
namespace Items
|
||||||
|
{
|
||||||
|
public class AttackBonus : Item
|
||||||
|
{
|
||||||
|
public AttackBonus(ItemInfo data) : base(data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Invoke(Action<Item> item)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void InstanceInvoke()
|
||||||
|
{
|
||||||
|
Unit.SetAttackBonus(Data.Values[0], Data.Values[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PlaceItem(HexCell cell)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
Assets/Scripts/Items/AttackBonus.cs.meta
Normal file
3
Assets/Scripts/Items/AttackBonus.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2b016eba27de41629261b965b3e2be0c
|
||||||
|
timeCreated: 1641382290
|
28
Assets/Scripts/Items/DefenceBonus.cs
Normal file
28
Assets/Scripts/Items/DefenceBonus.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using Data;
|
||||||
|
using HexFiled;
|
||||||
|
|
||||||
|
namespace Items
|
||||||
|
{
|
||||||
|
public class DefenceBonus : Item
|
||||||
|
{
|
||||||
|
public DefenceBonus(ItemInfo data) : base(data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Invoke(Action<Item> item)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void InstanceInvoke()
|
||||||
|
{
|
||||||
|
Unit.SetDefenceBonus(Data.Values[0], Data.Values[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PlaceItem(HexCell cell)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
Assets/Scripts/Items/DefenceBonus.cs.meta
Normal file
3
Assets/Scripts/Items/DefenceBonus.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c518da097b3645c491c6a4cc61b3d493
|
||||||
|
timeCreated: 1641382317
|
@ -15,6 +15,7 @@ namespace Items
|
|||||||
protected Action<Item> OnItemUsed;
|
protected Action<Item> OnItemUsed;
|
||||||
|
|
||||||
public bool IsInstantUse => Data.IsInstanceUse;
|
public bool IsInstantUse => Data.IsInstanceUse;
|
||||||
|
public Sprite Icon => Data.Icon;
|
||||||
protected Item(ItemInfo data)
|
protected Item(ItemInfo data)
|
||||||
{
|
{
|
||||||
Data = data;
|
Data = data;
|
||||||
|
@ -55,7 +55,11 @@ namespace Items
|
|||||||
cell = _openList[Random.Range(0, _openList.Count - 1)];
|
cell = _openList[Random.Range(0, _openList.Count - 1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
var type = _itemTypes[Random.Range(0, _itemTypes.Count - 1)];
|
var type = GetWeightedType();
|
||||||
|
while (type == null)
|
||||||
|
{
|
||||||
|
type = GetWeightedType();
|
||||||
|
}
|
||||||
var info = _itemInfos[type.ToString().Replace("Items.", "")];
|
var info = _itemInfos[type.ToString().Replace("Items.", "")];
|
||||||
var obj = (Item)Activator.CreateInstance(type, info);
|
var obj = (Item)Activator.CreateInstance(type, info);
|
||||||
|
|
||||||
@ -67,5 +71,20 @@ namespace Items
|
|||||||
_spawnTime = Random.Range(_data.SpawnTime.from, _data.SpawnTime.to);
|
_spawnTime = Random.Range(_data.SpawnTime.from, _data.SpawnTime.to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Type GetWeightedType()
|
||||||
|
{
|
||||||
|
float randomNum = Random.Range(1, 101)/100f;
|
||||||
|
List<Type> possibleTypes = new List<Type>();
|
||||||
|
|
||||||
|
_itemTypes.ForEach(type =>
|
||||||
|
{
|
||||||
|
if (_itemInfos[type.ToString().Replace("Items.", "")].SpawnChance >= randomNum)
|
||||||
|
{
|
||||||
|
possibleTypes.Add(type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return possibleTypes.Count > 0 ? possibleTypes[Random.Range(0, possibleTypes.Count - 1)] : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -22,12 +22,14 @@ namespace Items
|
|||||||
|
|
||||||
public override void InstanceInvoke()
|
public override void InstanceInvoke()
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
Unit.UseItem(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PlaceItem(HexCell cell)
|
public override void PlaceItem(HexCell cell)
|
||||||
{
|
{
|
||||||
Object.Instantiate(Data.SpawnablePrefab, cell.transform.position, Quaternion.identity);
|
Unit.UseItem(this);
|
||||||
|
var obj = Object.Instantiate(Data.SpawnablePrefab, cell.transform.position, Quaternion.identity);
|
||||||
|
obj.AddComponent<TowerView>().SetUp(Unit.Color);
|
||||||
OnItemUsed?.Invoke(this);
|
OnItemUsed?.Invoke(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
34
Assets/Scripts/TimerHelper.cs
Normal file
34
Assets/Scripts/TimerHelper.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DefaultNamespace
|
||||||
|
{
|
||||||
|
public class TimerHelper : MonoBehaviour
|
||||||
|
{
|
||||||
|
private static TimerHelper _instance;
|
||||||
|
|
||||||
|
public static TimerHelper Instance => _instance;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
if (_instance == null)
|
||||||
|
_instance = this;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Destroy(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartTimer(Action action, int time)
|
||||||
|
{
|
||||||
|
StartCoroutine(Timer(action, time));
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator Timer(Action action, int time)
|
||||||
|
{
|
||||||
|
yield return new WaitForSeconds(time);
|
||||||
|
action.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
Assets/Scripts/TimerHelper.cs.meta
Normal file
3
Assets/Scripts/TimerHelper.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 031d061e6f684c0d992624e679d1a311
|
||||||
|
timeCreated: 1641383305
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Controller;
|
using Controller;
|
||||||
using Data;
|
using Data;
|
||||||
|
using DefaultNamespace;
|
||||||
using DG.Tweening;
|
using DG.Tweening;
|
||||||
using HexFiled;
|
using HexFiled;
|
||||||
using Items;
|
using Items;
|
||||||
@ -85,8 +86,8 @@ namespace Chars
|
|||||||
|
|
||||||
if (!_unit.IsBusy && _moveJoystick.Direction != Vector2.zero)
|
if (!_unit.IsBusy && _moveJoystick.Direction != Vector2.zero)
|
||||||
{
|
{
|
||||||
|
_placeJoystick.gameObject.SetActive(false);
|
||||||
_unit.Move(VectorToDirection(_moveJoystick.Direction.normalized));
|
_unit.Move(DirectionHelper.VectorToDirection(_moveJoystick.Direction.normalized));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_unit.IsBusy && _attackJoystick.isPressed)
|
if (!_unit.IsBusy && _attackJoystick.isPressed)
|
||||||
@ -97,45 +98,11 @@ namespace Chars
|
|||||||
|
|
||||||
if (!_unit.IsBusy && _placeJoystick.isPressed)
|
if (!_unit.IsBusy && _placeJoystick.isPressed)
|
||||||
{
|
{
|
||||||
_placeDirection = VectorToDirection(_placeJoystick.Direction.normalized);
|
_placeDirection = DirectionHelper.VectorToDirection(_placeJoystick.Direction.normalized);
|
||||||
_cellToPlace = _unit.PlaceItemAim(_placeDirection);
|
_cellToPlace = _unit.PlaceItemAim(_placeDirection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HexDirection VectorToDirection(Vector2 dir)
|
|
||||||
{
|
|
||||||
if (dir.x >= 0 && dir.y <= 1 && dir.x <= 1 && dir.y >= 0.5)
|
|
||||||
{
|
|
||||||
return HexDirection.NE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Math.Abs(dir.x - 1f) < 0.2 && dir.y <= 0.5 && dir.y >= -0.5)
|
|
||||||
{
|
|
||||||
return HexDirection.E;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dir.x <= 1 && dir.y <= -0.5 && dir.x >= 0 && dir.y >= -1)
|
|
||||||
{
|
|
||||||
return HexDirection.SE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dir.x <= 0 && dir.y >= -1 && dir.x >= -1 && dir.y <= -0.5)
|
|
||||||
{
|
|
||||||
return HexDirection.SW;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Math.Abs(dir.x - (-1f)) < 0.2 && dir.y >= -0.5 && dir.y <= 0.5)
|
|
||||||
{
|
|
||||||
return HexDirection.W;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dir.x >= -1 && dir.y >= 0.5 && dir.x <= 0 && dir.y <= 1)
|
|
||||||
{
|
|
||||||
return HexDirection.NW;
|
|
||||||
}
|
|
||||||
|
|
||||||
return HexDirection.W;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void Execute()
|
public void Execute()
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Chars;
|
using Chars;
|
||||||
using Data;
|
using Data;
|
||||||
|
using DefaultNamespace;
|
||||||
using DG.Tweening;
|
using DG.Tweening;
|
||||||
using HexFiled;
|
using HexFiled;
|
||||||
using Items;
|
using Items;
|
||||||
@ -33,12 +34,14 @@ namespace Units
|
|||||||
private BarCanvas _barCanvas;
|
private BarCanvas _barCanvas;
|
||||||
private bool _isHardToCapture;
|
private bool _isHardToCapture;
|
||||||
private bool _isCapturing;
|
private bool _isCapturing;
|
||||||
|
private int _attackBonus;
|
||||||
|
private int _defenceBonus;
|
||||||
|
|
||||||
|
|
||||||
public bool IsBusy => _isBusy;
|
public bool IsBusy => _isBusy;
|
||||||
public GameObject PlayerInstance => _instance;
|
|
||||||
public UnitView UnitView => _unitView;
|
public UnitView UnitView => _unitView;
|
||||||
public bool IsAlive => _isAlive;
|
public bool IsAlive => _isAlive;
|
||||||
|
public UnitColor Color => _data.color;
|
||||||
public int InventoryCapacity => _data.inventoryCapacity;
|
public int InventoryCapacity => _data.inventoryCapacity;
|
||||||
public Action<Item> OnItemPickUp;
|
public Action<Item> OnItemPickUp;
|
||||||
|
|
||||||
@ -53,6 +56,28 @@ namespace Units
|
|||||||
_isCapturing = false;
|
_isCapturing = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetAttackBonus(int duration, int value)
|
||||||
|
{
|
||||||
|
TimerHelper.Instance.StartTimer(StopAttackBonus, duration);
|
||||||
|
_weapon.SetModifiedDamage(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopAttackBonus()
|
||||||
|
{
|
||||||
|
_weapon.SetModifiedDamage(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetDefenceBonus(int duration, int value)
|
||||||
|
{
|
||||||
|
TimerHelper.Instance.StartTimer(StopDefenceBonus, duration);
|
||||||
|
_defenceBonus = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopDefenceBonus()
|
||||||
|
{
|
||||||
|
_defenceBonus = 0;
|
||||||
|
}
|
||||||
|
|
||||||
public void Move(HexDirection direction)
|
public void Move(HexDirection direction)
|
||||||
{
|
{
|
||||||
if (!_cell.GetNeighbor(direction) || _isBusy) return;
|
if (!_cell.GetNeighbor(direction) || _isBusy) return;
|
||||||
@ -159,13 +184,22 @@ namespace Units
|
|||||||
UpdateBarCanvas();
|
UpdateBarCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PickUpItem(Item item)
|
public bool PickUpItem(ItemView itemView)
|
||||||
{
|
{
|
||||||
if (_inventory.Count < _data.inventoryCapacity)
|
if (_inventory.Count < _data.inventoryCapacity)
|
||||||
{
|
{
|
||||||
|
var item = itemView.PickUp(this);
|
||||||
_inventory.Add(item);
|
_inventory.Add(item);
|
||||||
OnItemPickUp.Invoke(item);
|
OnItemPickUp.Invoke(item);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UseItem(Item item)
|
||||||
|
{
|
||||||
|
_inventory.Remove(item);
|
||||||
}
|
}
|
||||||
private void MoveEnd()
|
private void MoveEnd()
|
||||||
{
|
{
|
||||||
@ -213,7 +247,7 @@ namespace Units
|
|||||||
ball.AddComponent<WeaponView>().SetWeapon(_weapon);
|
ball.AddComponent<WeaponView>().SetWeapon(_weapon);
|
||||||
ball.transform.DOMove(
|
ball.transform.DOMove(
|
||||||
new Vector3(_direction.normalized.x,
|
new Vector3(_direction.normalized.x,
|
||||||
0, _direction.normalized.y) * _weapon.disnatce * _hexGrid.HexDistance +
|
0, _direction.normalized.y) * _weapon.disnatce * HexGrid.HexDistance +
|
||||||
_instance.transform.position + new Vector3(0, 2, 0),
|
_instance.transform.position + new Vector3(0, 2, 0),
|
||||||
_weapon.speed)
|
_weapon.speed)
|
||||||
.SetEase(Ease.Linear)
|
.SetEase(Ease.Linear)
|
||||||
@ -290,12 +324,21 @@ namespace Units
|
|||||||
|
|
||||||
private void Damage(int dmg)
|
private void Damage(int dmg)
|
||||||
{
|
{
|
||||||
if (_hp - dmg <= 0f)
|
|
||||||
|
if (_defenceBonus == 0 && _hp - dmg <= 0f)
|
||||||
{
|
{
|
||||||
Death();
|
Death();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_defenceBonus > 0)
|
||||||
|
{
|
||||||
|
_defenceBonus -= dmg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
_hp -= dmg;
|
_hp -= dmg;
|
||||||
|
}
|
||||||
|
|
||||||
UpdateBarCanvas();
|
UpdateBarCanvas();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ public class UnitView : MonoBehaviour
|
|||||||
|
|
||||||
public GameObject BarCanvas => barCanvas;
|
public GameObject BarCanvas => barCanvas;
|
||||||
public GameObject AimCanvas => aimCanvas;
|
public GameObject AimCanvas => aimCanvas;
|
||||||
|
public UnitColor Color => _unit.Color;
|
||||||
|
|
||||||
public void SetUp(Stack<ShotUIView> shots, Weapon weapon, Action regenMana, int manaRegen, Action captureHex,
|
public void SetUp(Stack<ShotUIView> shots, Weapon weapon, Action regenMana, int manaRegen, Action captureHex,
|
||||||
Unit unit)
|
Unit unit)
|
||||||
@ -126,16 +127,15 @@ public class UnitView : MonoBehaviour
|
|||||||
WeaponView weaponView = other.GetComponent<WeaponView>();
|
WeaponView weaponView = other.GetComponent<WeaponView>();
|
||||||
if (weaponView != null)
|
if (weaponView != null)
|
||||||
{
|
{
|
||||||
OnHit?.Invoke(weaponView.Weapon.damage);
|
OnHit?.Invoke(weaponView.Weapon.modifiedDamage);
|
||||||
other.transform.DOKill();
|
other.transform.DOKill();
|
||||||
Destroy(other.gameObject);
|
Destroy(other.gameObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemView itemView = other.GetComponent<ItemView>();
|
ItemView itemView = other.GetComponent<ItemView>();
|
||||||
|
|
||||||
if (itemView != null)
|
if (itemView != null && _unit.PickUpItem(itemView))
|
||||||
{
|
{
|
||||||
_unit.PickUpItem(itemView.PickUp(_unit));
|
|
||||||
Destroy(itemView.gameObject);
|
Destroy(itemView.gameObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ namespace Weapons
|
|||||||
public GameObject icon;
|
public GameObject icon;
|
||||||
public GameObject objectToThrow;
|
public GameObject objectToThrow;
|
||||||
public GameObject VFXGameObject;
|
public GameObject VFXGameObject;
|
||||||
public int manaCost;
|
public int modifiedDamage;
|
||||||
public int damage;
|
public int damage;
|
||||||
public float speed;
|
public float speed;
|
||||||
public int disnatce;
|
public int disnatce;
|
||||||
@ -18,5 +18,10 @@ namespace Weapons
|
|||||||
public int shots;
|
public int shots;
|
||||||
public AudioClip shotSound;
|
public AudioClip shotSound;
|
||||||
public AudioClip hitSound;
|
public AudioClip hitSound;
|
||||||
|
|
||||||
|
public void SetModifiedDamage(int bonus)
|
||||||
|
{
|
||||||
|
modifiedDamage = damage + bonus;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
66
Assets/TowerView.cs
Normal file
66
Assets/TowerView.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using DefaultNamespace;
|
||||||
|
using DG.Tweening;
|
||||||
|
using HexFiled;
|
||||||
|
using Units;
|
||||||
|
using UnityEngine;
|
||||||
|
using Weapons;
|
||||||
|
|
||||||
|
public class TowerView : MonoBehaviour
|
||||||
|
{
|
||||||
|
private UnitColor _color;
|
||||||
|
private GameObject _target;
|
||||||
|
[SerializeField] private Weapon weapon;
|
||||||
|
|
||||||
|
|
||||||
|
public void SetUp(UnitColor unitColor)
|
||||||
|
{
|
||||||
|
_color = unitColor;
|
||||||
|
GetComponent<MeshRenderer>().material.mainTexture = HexGrid.Colors[unitColor].BuildingTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCollisionEnter(Collision collision)
|
||||||
|
{
|
||||||
|
var unit = collision.gameObject.GetComponent<UnitView>();
|
||||||
|
if (unit != null && unit.Color != _color)
|
||||||
|
{
|
||||||
|
_target = unit.gameObject;
|
||||||
|
StartCoroutine(Shot());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCollisionExit(Collision other)
|
||||||
|
{
|
||||||
|
if (_target == other.gameObject)
|
||||||
|
{
|
||||||
|
_target = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator Shot()
|
||||||
|
{
|
||||||
|
while (_target != null)
|
||||||
|
{
|
||||||
|
yield return new WaitForSecondsRealtime(weapon.reloadTime);
|
||||||
|
|
||||||
|
var direction = DirectionHelper.DirectionTo(transform.position, _target.transform.position);
|
||||||
|
var ball = Instantiate(weapon.objectToThrow,
|
||||||
|
transform.forward + transform.position + new Vector3(0, 2),
|
||||||
|
Quaternion.FromToRotation(transform.position, _target.transform.position));
|
||||||
|
|
||||||
|
MusicController.Instance.AddAudioSource(ball);
|
||||||
|
MusicController.Instance.PlayAudioClip(weapon.shotSound, ball);
|
||||||
|
|
||||||
|
ball.AddComponent<WeaponView>().SetWeapon(weapon);
|
||||||
|
ball.transform.DOMove(
|
||||||
|
new Vector3(direction.x,
|
||||||
|
0, direction.z) * weapon.disnatce * HexGrid.HexDistance +
|
||||||
|
transform.position + new Vector3(0, 2, 0),
|
||||||
|
weapon.speed)
|
||||||
|
.SetEase(Ease.Linear)
|
||||||
|
.OnComplete(() => Destroy(ball));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/TowerView.cs.meta
Normal file
11
Assets/TowerView.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5db196e1099b97246bde07a348189567
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
x
Reference in New Issue
Block a user