예제 #1
0
    GameObject[] parseObjectsAtPosition(string[] keys, int x, int y)
    {
        GameObject[] objectsAtPosition = new GameObject[keys.Length];
        for (int i = 0; i < objectsAtPosition.Length; i++)
        {
            string   key;
            bool     hasDelegates     = false;
            string[] keyPlusDelegates = null;

            if (keys[i].Contains(delegateKey))
            {
                hasDelegates     = true;
                keyPlusDelegates = keys[i].Split(delegateKey.ToCharArray());
                key = keyPlusDelegates[0];
            }
            else
            {
                key = keys[i];
            }
            objectsAtPosition[i] = getPrefabFromKey(key);
            MapObjectBehaviour behaviour = objectsAtPosition[i].GetComponent <MapObjectBehaviour>();
            MapData            descriptor;
            if (behaviour && template.TryGetData(key, out descriptor))
            {
                behaviour.AssignDescriptor(descriptor);
                if (hasDelegates && keyPlusDelegates != null)
                {
                    string[] delegateVals = keyPlusDelegates[1].Split(delegateSeparatorKey.ToCharArray());
                    descriptor.SetDelegates(descriptor.Delegates, delegateVals);
                }
            }
        }
        return(objectsAtPosition);
    }
예제 #2
0
    public void CreateWorld(MapDescriptor descriptor, MapController map, PortalController portals, CameraController camera, Transform parent)
    {
        GameObject[, ][] worldTemplate = descriptor.Map;
        for (int x = 0; x < worldTemplate.GetLength(0); x++)
        {
            for (int y = 0; y < worldTemplate.GetLength(1); y++)
            {
                foreach (GameObject mapObj in worldTemplate[x, y])
                {
                    MapObjectBehaviour behaviour = Object.Instantiate(mapObj, new Vector3(x, y), Quaternion.identity).GetComponent <MapObjectBehaviour>();
                    behaviour.gameObject.SetActive(true);
                    behaviour.transform.SetParent(parent);
                    behaviour.AssignDescriptor(mapObj.GetComponent <MapObjectBehaviour>().CopyDescriptor());
                    behaviour.Initialize();
                    if (isPlayer(behaviour))
                    {
                        handleSetupPlayer(behaviour, map);
                    }
                    if (isPortal(behaviour))
                    {
                        handleSetupPortal(behaviour, portals);
                    }
                }
            }
        }
        Sprite background = new SpriteLoader().Load(descriptor.BackgroundSprite);

        camera.SetBackground(background);
    }
예제 #3
0
 bool checkForMapObjCollideEvent(Collider2D collider, out MapObjectBehaviour obj)
 {
     if (obj = collider.GetComponent <MapObjectBehaviour>())
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #4
0
 // TODO: Solve the portal loop (two portals that are gatways to each other)
 public void HandlePortalEnter(MapObjectBehaviour target, MapObjectBehaviour portal)
 {
     if (hasDestination(portal))
     {
         MapObjectBehaviour destination = GetDestination(portal);
         Transform          targetTrans = target.transform;
         float   preserveZPos           = targetTrans.position.z;
         Vector3 destPos = destination.transform.position;
         destPos.z            = preserveZPos;
         targetTrans.position = destPos;
     }
 }
예제 #5
0
    void handleSetupPlayer(MapObjectBehaviour obj, MapController map)
    {
        PlayerController player = obj.GetComponent <PlayerController>();

        if (player)
        {
            player.Setup(map);
        }
        else
        {
            Debug.LogErrorFormat("{0} does not contain a [PlayerController] instance");
        }
    }
예제 #6
0
    public MapObjectBehaviour GetDestination(MapObjectBehaviour gateway)
    {
        string             destinationId = getDelegateStr(gateway, tuning.DestinationDelegate);
        MapObjectBehaviour destination;

        if (tryGetPortal(destinationId, out destination))
        {
            return(destination);
        }
        else
        {
            Debug.LogErrorFormat("Destination with id {0} was not found", destinationId);
            return(null);
        }
    }
예제 #7
0
    public void TrackPortal(MapObjectBehaviour mapObject)
    {
        string id = getDelegateStr(mapObject, tuning.IdDelegate);

        if (id != null)
        {
            if (activePortals.ContainsKey(id))
            {
                activePortals[id] = mapObject;
            }
            else
            {
                activePortals.Add(id, mapObject);
            }
        }
    }
예제 #8
0
 public void HandlePortalEnter(MapObjectBehaviour target, MapObjectBehaviour portal)
 {
     portals.HandlePortalEnter(target, portal);
 }
예제 #9
0
 void handleSetupPortal(MapObjectBehaviour obj, PortalController portals)
 {
     portals.TrackPortal(obj);
 }
예제 #10
0
 bool checkForPortalCollideEvent(MapObjectBehaviour obj)
 {
     return(obj.Descriptor.IsPortal);
 }
예제 #11
0
 bool isPlayer(MapObjectBehaviour obj)
 {
     return(obj.GetComponent <PlayerController>());
 }
예제 #12
0
 protected string getDelegateStr(MapObjectBehaviour obj, string delegateId)
 {
     return(obj.Descriptor.DelegateStr(delegateId));
 }
예제 #13
0
 protected object getDelegate(MapObjectBehaviour obj, string delegateId)
 {
     return(obj.Descriptor.DelegateValue(delegateId));
 }
예제 #14
0
 void handlePortalCollider(MapObjectBehaviour obj)
 {
     map.HandlePortalEnter(player, obj);
 }
예제 #15
0
 bool tryGetPortal(string portalId, out MapObjectBehaviour obj)
 {
     return(activePortals.TryGetValue(portalId, out obj));
 }
예제 #16
0
 bool hasDestination(MapObjectBehaviour obj)
 {
     return(obj.Descriptor.HasDelegate(tuning.DestinationDelegate));
 }
예제 #17
0
 bool isPortal(MapObjectBehaviour obj)
 {
     return(obj.Descriptor.IsPortal);
 }