public override void LoadData(GameInstance gameInstance) { // Use Resources Load Async ? BaseGameData[] gameDataList = Resources.LoadAll <BaseGameData>(""); BaseCharacterEntity[] characterEntityList = Resources.LoadAll <BaseCharacterEntity>(""); List <Attribute> attributes = new List <Attribute>(); List <DamageElement> damageElements = new List <DamageElement>(); List <Item> items = new List <Item>(); List <Skill> skills = new List <Skill>(); List <NpcDialog> npcDialogs = new List <NpcDialog>(); List <Quest> quests = new List <Quest>(); List <GuildSkill> guildSkills = new List <GuildSkill>(); List <PlayerCharacter> playerCharacters = new List <PlayerCharacter>(); List <MonsterCharacter> monsterCharacters = new List <MonsterCharacter>(); List <BasePlayerCharacterEntity> playerCharacterEntities = new List <BasePlayerCharacterEntity>(); List <BaseMonsterCharacterEntity> monsterCharacterEntities = new List <BaseMonsterCharacterEntity>(); List <MapInfo> mapInfos = new List <MapInfo>(); // Filtering game data foreach (BaseGameData gameData in gameDataList) { if (gameData is Attribute) { attributes.Add(gameData as Attribute); } if (gameData is DamageElement) { damageElements.Add(gameData as DamageElement); } if (gameData is Item) { items.Add(gameData as Item); } if (gameData is Skill) { skills.Add(gameData as Skill); } if (gameData is NpcDialog) { npcDialogs.Add(gameData as NpcDialog); } if (gameData is Quest) { quests.Add(gameData as Quest); } if (gameData is GuildSkill) { guildSkills.Add(gameData as GuildSkill); } if (gameData is PlayerCharacter) { playerCharacters.Add(gameData as PlayerCharacter); } if (gameData is MonsterCharacter) { monsterCharacters.Add(gameData as MonsterCharacter); } if (gameData is MapInfo) { mapInfos.Add(gameData as MapInfo); } } // Filtering character entity foreach (BaseCharacterEntity characterEntity in characterEntityList) { if (characterEntity is BasePlayerCharacterEntity) { playerCharacterEntities.Add(characterEntity as BasePlayerCharacterEntity); } if (characterEntity is BaseMonsterCharacterEntity) { monsterCharacterEntities.Add(characterEntity as BaseMonsterCharacterEntity); } } GameInstance.AddAttributes(attributes); GameInstance.AddItems(new Item[] { gameInstance.DefaultWeaponItem }); GameInstance.AddItems(items); GameInstance.AddWeaponTypes(new WeaponType[] { gameInstance.DefaultWeaponType }); GameInstance.AddSkills(skills); GameInstance.AddNpcDialogs(npcDialogs); GameInstance.AddQuests(quests); GameInstance.AddGuildSkills(guildSkills); GameInstance.AddCharacters(playerCharacters); GameInstance.AddCharacters(monsterCharacters); GameInstance.AddCharacterEntities(playerCharacterEntities); GameInstance.AddCharacterEntities(monsterCharacterEntities); GameInstance.AddMapInfos(mapInfos); // Add hit effects List <GameEffectCollection> weaponHitEffects = new List <GameEffectCollection>(); if (gameInstance.DefaultDamageElement.hitEffects != null) { weaponHitEffects.Add(gameInstance.DefaultDamageElement.hitEffects); } foreach (DamageElement damageElement in damageElements) { if (damageElement.hitEffects != null) { weaponHitEffects.Add(damageElement.hitEffects); } } GameInstance.AddGameEffectCollections(weaponHitEffects); // Tell game instance that data loaded gameInstance.LoadedGameData(); }
public abstract void LoadData(GameInstance gameInstance);
public static ItemDropEntity DropItem(BaseGameEntity dropper, CharacterItem dropData, IEnumerable <uint> looters) { GameInstance gameInstance = GameInstance.Singleton; if (gameInstance.itemDropEntityPrefab == null) { return(null); } Vector3 dropPosition = dropper.CacheTransform.position; Quaternion dropRotation = Quaternion.identity; if (gameInstance.DimensionType == DimensionType.Dimension2D) { // If 2d, just random position around character dropPosition = dropper.CacheTransform.position + new Vector3(Random.Range(-1f, 1f) * gameInstance.dropDistance, Random.Range(-1f, 1f) * gameInstance.dropDistance); } else { // Random drop position around character dropPosition = dropper.CacheTransform.position + new Vector3(Random.Range(-1f, 1f) * gameInstance.dropDistance, 0, Random.Range(-1f, 1f) * gameInstance.dropDistance); // Raycast to find hit floor Vector3? aboveHitPoint = null; Vector3? underHitPoint = null; int raycastLayerMask = gameInstance.GetItemDropGroundDetectionLayerMask(); RaycastHit tempHit; if (Physics.Raycast(dropPosition, Vector3.up, out tempHit, GROUND_DETECTION_DISTANCE, raycastLayerMask)) { aboveHitPoint = tempHit.point; } if (Physics.Raycast(dropPosition, Vector3.down, out tempHit, GROUND_DETECTION_DISTANCE, raycastLayerMask)) { underHitPoint = tempHit.point; } // Set drop position to nearest hit point if (aboveHitPoint.HasValue && underHitPoint.HasValue) { if (Vector3.Distance(dropPosition, aboveHitPoint.Value) < Vector3.Distance(dropPosition, underHitPoint.Value)) { dropPosition = aboveHitPoint.Value; } else { dropPosition = underHitPoint.Value; } } else if (aboveHitPoint.HasValue) { dropPosition = aboveHitPoint.Value; } else if (underHitPoint.HasValue) { dropPosition = underHitPoint.Value; } // Random rotation dropRotation = Quaternion.Euler(Vector3.up * Random.Range(0, 360)); } GameObject spawnObj = Instantiate(gameInstance.itemDropEntityPrefab.gameObject, dropPosition, dropRotation); ItemDropEntity itemDropEntity = spawnObj.GetComponent <ItemDropEntity>(); itemDropEntity.dropData = dropData; itemDropEntity.looters = new HashSet <uint>(looters); BaseGameNetworkManager.Singleton.Assets.NetworkSpawn(spawnObj); return(itemDropEntity); }