summaryrefslogtreecommitdiff
path: root/3dc/win95/TXIOCTRL.CPP
diff options
context:
space:
mode:
authorRebellion Developments <rebellion@nomail>2000-03-16 11:25:00 +0100
committerPatryk Obara <dreamer.tan@gmail.com>2019-08-19 05:45:17 +0200
commit218ca90543758a20ac326e444ca0643174ca7384 (patch)
tree16bfe3e5307f9f515489000f28728224291a0e3b /3dc/win95/TXIOCTRL.CPP
Import Aliens vs Predator - Gold (Build 116)
Source code release, imported from: https://www.gamefront.com/games/aliens-vs-predator-3/file/avp-gold-complete-source-code All text files were converted to Unix format.
Diffstat (limited to '3dc/win95/TXIOCTRL.CPP')
-rw-r--r--3dc/win95/TXIOCTRL.CPP110
1 files changed, 110 insertions, 0 deletions
diff --git a/3dc/win95/TXIOCTRL.CPP b/3dc/win95/TXIOCTRL.CPP
new file mode 100644
index 0000000..53aded5
--- /dev/null
+++ b/3dc/win95/TXIOCTRL.CPP
@@ -0,0 +1,110 @@
+#include "txioctrl.h"
+
+#ifdef MaxImageGroups
+
+#include "list_tem.hpp"
+
+struct ImageNumber
+{
+ int group;
+ int offset;
+
+ ImageNumber(){}
+ ImageNumber(int g,int o) : group(g), offset(o) {}
+
+ inline int operator == (ImageNumber const & in2) const
+ { return group==in2.group && offset==in2.offset; }
+ inline int operator != (ImageNumber const & in2) const
+ { return ! operator == (in2); }
+};
+
+static List<ImageNumber> imgs_used_by_group[MaxImageGroups];
+
+static List<int> * grps_used_by_image[MaxImageGroups][MaxImages];
+
+void MarkImageInUseByGroup(int img_group, int img_num_offset, int group_using)
+{
+ if (imgs_used_by_group[group_using].contains(ImageNumber(img_group,img_num_offset))) return;
+
+ imgs_used_by_group[group_using].add_entry(ImageNumber(img_group,img_num_offset));
+
+ List<int> * & grps_used_by_imageR = grps_used_by_image[img_group][img_num_offset];
+
+ if (!grps_used_by_imageR)
+ grps_used_by_imageR = new List<int>(img_group); // includes itself
+
+ if (!grps_used_by_imageR->contains(group_using))
+ grps_used_by_imageR->add_entry(group_using);
+}
+
+int IsImageInUse(int img_group, int img_num_offset)
+{
+ if (grps_used_by_image[img_group][img_num_offset])
+ return 1;
+ else
+ return 0;
+}
+
+int CanDeleteImage(int img_group, int img_num_offset)
+{
+ if (grps_used_by_image[img_group][img_num_offset])
+ {
+ if (grps_used_by_image[img_group][img_num_offset]->contains(img_group))
+ {
+ grps_used_by_image[img_group][img_num_offset]->delete_entry(img_group); // remove itself
+ if (!grps_used_by_image[img_group][img_num_offset]->size())
+ {
+ delete grps_used_by_image[img_group][img_num_offset];
+ grps_used_by_image[img_group][img_num_offset] = 0;
+ return 1;
+ }
+ else
+ return 0;
+ }
+ else
+ return 0;
+ }
+ else
+ return 1;
+}
+
+void ImageGroupFreed(int img_group)
+{
+ while (imgs_used_by_group[img_group].size())
+ {
+ ImageNumber used = imgs_used_by_group[img_group].first_entry();
+
+ List<int> * & grps_used_by_imageR = grps_used_by_image[used.group][used.offset];
+
+ grps_used_by_imageR->delete_entry(img_group);
+
+ if (!grps_used_by_imageR->size())
+ {
+ NowDeleteImage(used.group,used.offset);
+ delete grps_used_by_imageR;
+ grps_used_by_imageR = 0;
+ }
+
+ imgs_used_by_group[img_group].delete_first_entry();
+ }
+}
+
+void EnumSharedImages(int group_num, int numimages, ImageNumberCallbackFunction callback_fn, void * user)
+{
+ for (int i=0; i<numimages; ++i)
+ {
+ if (grps_used_by_image[group_num][i])
+ callback_fn(i,user);
+ }
+}
+
+void EnumLeftoverImages(int group_num, int numimages, ImageNumberCallbackFunction callback_fn, void * user)
+{
+ for (int i=numimages; i<MaxImages; ++i)
+ {
+ if (grps_used_by_image[group_num][i])
+ callback_fn(i,user);
+ }
+}
+
+#endif // MaxImageGroups