/* * private List<GameObject> GOs; * void OnTriggerEnter(Collider Other) * { * GOs.Add(Other.gameObject); * }*/ public void AttackAct() { // invoke on button CollisionObjects ColObj = this.gameObject.transform.GetChild(1).GetComponent <CollisionObjects>(); List <CharStats> targetStats = new List <CharStats>(); if (ColObj != null) { foreach (GameObject item in ColObj.items) { if (item == null) { ColObj.items.Remove(item); continue; } targetStats.Add(item.GetComponent <CharStats>()); //if (targetStats != null) } Debug.Log("Number of CharStats: " + targetStats.Count); combat.MultiAttack(targetStats); } }
/// <summary> /// Loads MapObjects for the Active Map, iterates through them, and instantiates objects /// based on the information found in the Map ObjectLayers /// </summary> private void LoadMapObjectLayers() { TiledMapObjectLayer _mapEntityObjectLayer = MapCurrent.GetLayer <TiledMapObjectLayer>("Entity Layer"); TiledMapObjectLayer _mapCollisionLayer = MapCurrent.GetLayer <TiledMapObjectLayer>("Collision Layer"); TiledMapObjectLayer _mapAreaDefinitionLayer = MapCurrent.GetLayer <TiledMapObjectLayer>("Area Definitions"); foreach (TiledMapObject _entityObject in _mapEntityObjectLayer.Objects) { switch (_entityObject.Name) { case "mapPlayerSpawn": { // Run Player Spawn Code Here PlayerSpawnX = Convert.ToInt32(_entityObject.Position.X); PlayerSpawnY = Convert.ToInt32(_entityObject.Position.Y); IsPlayerSpawn = true; break; } case "mapTransition": { // Create Transition Objects float destinationX, destinationY; destinationX = Convert.ToInt32(_entityObject.Properties["mapDestinationX"]); destinationY = Convert.ToInt32(_entityObject.Properties["mapDestinationY"]); MapTransitionHandler mapTransition = new MapTransitionHandler(contentManager, _entityObject.Properties["mapDestination"], new Vector2((float)destinationX, (float)destinationY), new Rectangle((int)_entityObject.Position.X, (int)_entityObject.Position.Y, (int)_entityObject.Size.Width, (int)_entityObject.Size.Height), _entityObject.Properties["mapDestinationArea"], _entityObject.Properties["mapDestinationFacing"]); MapObjects.Add(mapTransition); break; } case "mapEntitySpawn": { // Get AssetManager Data AnimationLibrary _animationLibrary = AssetManager.GetAnimationLibrary(_entityObject.Properties["AnimationLibraryName"]); // Spawn the Entity bool isSolid = Convert.ToBoolean(_entityObject.Properties["IsSolid"]); MapEntityStatic _mapEntity = new MapEntityStatic(isSolid, new Vector2(_entityObject.Position.X, _entityObject.Position.Y), (int)_entityObject.Size.Width, (int)_entityObject.Size.Height, _entityObject.Properties["AnimationLibraryName"]); _mapEntity.ConstructAnimationLibrary(_animationLibrary.Name, _entityObject.Properties["CurrentAnimation"]); Entities.Add(_mapEntity); break; } } } foreach (TiledMapObject _collisionObject in _mapCollisionLayer.Objects) { switch (_collisionObject.Name) { case "solidStatic": { MapCollisionSolidStatic solid = new MapCollisionSolidStatic(_collisionObject.Position, (int)_collisionObject.Size.Width, (int)_collisionObject.Size.Height); CollisionObjects.Add(solid); break; } } } foreach (TiledMapObject _areaDefintion in _mapAreaDefinitionLayer.Objects) { MapAreaDefinition area = new MapAreaDefinition(_areaDefintion.Name, new Vector2((int)_areaDefintion.Position.X, (int)_areaDefintion.Position.Y), new Rectangle((int)_areaDefintion.Position.X, (int)_areaDefintion.Position.Y, (int)_areaDefintion.Size.Width, (int)_areaDefintion.Size.Height)); Areas.Add(area); } }
/// <summary> /// Saves the file to the specified stream. /// </summary> /// <param name="stream">The stream to save to.</param> public override void Save(Stream stream) { BinaryWriter writer = new BinaryWriter(stream, Encoding.GetEncoding("EUC-KR")); writer.Write(BLOCK_COUNT); for (int i = 0; i < BLOCK_COUNT; i++) { writer.Write(0); writer.Write(0); } long[] offsets = new long[BLOCK_COUNT]; offsets[0] = stream.Position; writer.Write(MapPosition.X); writer.Write(MapPosition.Y); writer.Write(ZonePosition.X); writer.Write(ZonePosition.Y); writer.Write(World); writer.Write(Name); offsets[1] = stream.Position; writer.Write(Objects.Count); Objects.ForEach(@object => { @object.Write(writer); }); offsets[2] = stream.Position; writer.Write(NPCs.Count); NPCs.ForEach(npc => { npc.Write(writer); }); offsets[3] = stream.Position; writer.Write(Buildings.Count); Buildings.ForEach(building => { building.Write(writer); }); offsets[4] = stream.Position; writer.Write(Sounds.Count); Sounds.ForEach(sound => { sound.Write(writer); }); offsets[5] = stream.Position; writer.Write(Effects.Count); Effects.ForEach(effect => { effect.Write(writer); }); offsets[6] = stream.Position; writer.Write(Animations.Count); Animations.ForEach(animation => { animation.Write(writer); }); offsets[7] = stream.Position; WaterPatches.Write(writer); offsets[8] = stream.Position; writer.Write(MonsterSpawns.Count); MonsterSpawns.ForEach(monsterSpawn => { monsterSpawn.Write(writer); }); offsets[9] = stream.Position; writer.Write(WaterSize); writer.Write(WaterPlanes.Count); WaterPlanes.ForEach(waterPlane => { waterPlane.Write(writer); }); offsets[10] = stream.Position; writer.Write(WarpPoints.Count); WarpPoints.ForEach(warpPoint => { warpPoint.Write(writer); }); offsets[11] = stream.Position; writer.Write(CollisionObjects.Count); CollisionObjects.ForEach(collisionObject => { collisionObject.Write(writer); }); offsets[12] = stream.Position; writer.Write(EventObjects.Count); EventObjects.ForEach(eventObject => { eventObject.Write(writer); }); stream.Seek(4, SeekOrigin.Begin); for (int i = 0; i < BLOCK_COUNT; i++) { writer.Write(i); writer.Write((int)offsets[i]); } }
/// <summary> /// Loads the file from the specified stream. /// </summary> /// <param name="stream">The stream to read from.</param> public override void Load(Stream stream) { BinaryReader reader = new BinaryReader(stream, Encoding.GetEncoding("EUC-KR")); int blockCount = reader.ReadInt32(); for (int i = 0; i < blockCount; i++) { MapBlockType type = (MapBlockType)reader.ReadInt32(); if (!Enum.IsDefined(typeof(MapBlockType), type)) { throw new InvalidMapBlockTypeException((int)type); } int offset = reader.ReadInt32(); long nextBlock = stream.Position; stream.Seek(offset, SeekOrigin.Begin); if (type == MapBlockType.MapInformation) { MapPosition = new IntVector2(reader.ReadInt32(), reader.ReadInt32()); ZonePosition = new IntVector2(reader.ReadInt32(), reader.ReadInt32()); World = reader.ReadMatrix(); Name = reader.ReadString(); } else if (type == MapBlockType.WaterPatch) { WaterPatches = new MapWaterPatches(); WaterPatches.Read(reader); } else { if (type == MapBlockType.WaterPlane) { WaterSize = reader.ReadSingle(); } int entryCount = reader.ReadInt32(); Type classType = type.GetAttributeValue <MapBlockTypeAttribute, Type>(x => x.Type); for (int j = 0; j < entryCount; j++) { IMapBlock block = (IMapBlock)Activator.CreateInstance(classType); block.Read(reader); switch (type) { case MapBlockType.Object: Objects.Add((MapObject)block); break; case MapBlockType.NPC: NPCs.Add((MapNPC)block); break; case MapBlockType.Building: Buildings.Add((MapBuilding)block); break; case MapBlockType.Sound: Sounds.Add((MapSound)block); break; case MapBlockType.Effect: Effects.Add((MapEffect)block); break; case MapBlockType.Animation: Animations.Add((MapAnimation)block); break; case MapBlockType.MonsterSpawn: MonsterSpawns.Add((MapMonsterSpawn)block); break; case MapBlockType.WaterPlane: WaterPlanes.Add((MapWaterPlane)block); break; case MapBlockType.WarpPoint: WarpPoints.Add((MapWarpPoint)block); break; case MapBlockType.CollisionObject: CollisionObjects.Add((MapCollisionObject)block); break; case MapBlockType.EventObject: EventObjects.Add((MapEventObject)block); break; } } } if (i < blockCount - 1) { stream.Seek(nextBlock, SeekOrigin.Begin); } } }